Code-Inside Blog: WinJS for Windows Store Apps: Free eBook, Videos and how you could use it with Angular.js

With the “new” Universal Apps and the outlook of a single platform with Windows 10 I’m still not happy with the combination of XAML and C#. The problem is not C# - just let me say that I’m not a huge fan of XAML. So lets see how WinJS might work. Microsoft published a free eBook recently about WinJS and I found some other interesting videos.

Free ebook: Programming Windows Store Apps with HTML, CSS, and JavaScript, Second Edition

The eBook is available on the Microsoft Virtual Academy as a simple PDF - no signup required.

Channel 9 Serie

There are 2 episodes about WinJS development on Channel 9

Build 2014: WinJS and Windows Phone

This session “What’s new in WinJS: The Road ahead” was in the Build 2014 lineup and shows how you can use WinJS in Windows Phone Apps (as Univeral App I guess) and the current roadmap.

Using WinJS with Angular.js?

You can’t talk about Javascript Apps without mentioning Angular.js. The Javascript Engine running your JS App on Windows 8 and Windows Phone 8.1 has some limitations based on security reasons. As far as I know you can’t use the pure Angular.js in Windows Store Apps, but there is a project on GitHub to smooth the experience.

Also Iris Classon blogged about a demo app with WinRT components, Angular.js and WinJS on Windows Phone 8.1.

If you are still interested in WinJS you might want to check out these sites:

Manfred Steyer: Klassenbasierte Middleware für Web-Apps und Web-APIs in ASP.NET MVC 6 mit vNext

Neben der im letzten Beitrag gezeigten funktionalen Möglichkeit zur Umsetzung einer Middleware-Komponente kann der Entwickler hierzu auch auf das objektorientierte Paradigma zurückgreifen. Auch diese Komponenten können in sämtlichen vNext-Projekten, darunter MVC-6-Projekten, welche auch die Möglichkeiten der Web API beinhalten, genutzt werden. Hierzu definiert er eine Klasse, wie jene im nächsten Listing. Per Definition nimmt der Konstruktor eine Instanz von RequestDelegate entgegen. Dieses Delegate zeigt auf eine Funktion, die die nächste registrierte Middleware zur Ausführung bringt. Der Konstruktor kann darüber hinaus auch noch weitere Objekte erwarten. Beispielsweise erwartet die betrachtete Middleware auch eine Instanz des im nächsten Abschnitt genauer betrachteten Interfaces IConfiguration, mit der sie auf Konfigurationseinträge zugreifen kann.

Neben dem Konstruktor hat eine klassenbasierte Middleware auch eine asynchrone Methode Invoke, welche einen HttpContext erwartet und einen Task retourniert, aufzuweisen. ASP.NET vNext ruft diese Methode auf, um die Middleware zu aktivieren.

Wie schon die im letzten Abschnitt betrachtete Middleware, prüft auch diese, ob der Aufrufer einen gültigen Zugriffs-Code übergeben hat. Diese Prüfung findet jedoch nur statt, wenn über die Konfiguration ein anonymer Zugriff verboten wurde. Wurde ein anonymer Zugriff erlaubt oder war der Zugriffs-Code korrekt, bringt die Middleware über den Delegate next die nächste registrierte Middleware in der Aufrufkette zur Ausführung. Ansonsten wird die Anfrage mit dem Statuscode 401 (Unauthorized) beendet.

public class VerySimpleAccessCodeMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IConfiguration _configuration;

    public VerySimpleAccessCodeMiddleware(RequestDelegate next, 
                                            IConfiguration configuration)
    {
        _next = next;
        _configuration = configuration;
    }

    public async Task Invoke(HttpContext context)
    {

        string allowAnonymous = _configuration.Get("access:anonymous:allow");
        if (allowAnonymous == null) allowAnonymous = "false";
        bool bAllowAnonymous = Convert.ToBoolean(allowAnonymous);

        if (!bAllowAnonymous) {

            string accessCode = context.Request.Query["accessCode"];

            if (accessCode != "geheim") {
                context.Response.StatusCode = 401; // Unauthorized
                context.Response.Headers.Append("WWW-Authenticate", "AccessCode");
                return;
            }
        }

        await _next(context);
    }
}

Um eine klassenbasierte Middleware zu registrieren, verwendet der Entwickler die Erweiterungsmethode UseMiddleware, welche innerhalb des NuGet-Pakets Microsoft.AspNet.RequestContainer im Namespace Microsoft.AspNet.Builder zu finden ist. An den ersten Parameter übergibt er den Typ der Middleware; an alle anderen Parameter jene Objekte, die ASP.NET vNext an den Konstruktor dieser Middleware übergeben soll. Demnach wird die Middlware wie folgt registriert, wenn man davon ausgeht, dass config eine Instanz von IConfiguration ist.

app.UseMiddleware(typeof(VerySimpleAccessCodeMiddleware), config);

Manfred Steyer: Unterlagen zu meinem Vortrag über die Zukunft von ASP.NET und MVC 6 inkl. Web API am Microsoft Pizza-Abend in Graz

Nachfolgend findet man die Unterlagen (Programmbeispiele und Folien) meines Vortrags zu ASP.NET vNext und MVC 6, welches auch ASP.NET Web API beinhalten wird, beim Microsoft Pizza-Abend an der FH CAMPUS 02 im Oktober 2014 gehalten habe.

Darüber hinaus platziere ich nachfolgend noch mal den besprochenen Rabatt-Code, mit dem man noch bis DI, 28. 10. 2014 unseren Infotag zur Zukunft von .NET vergünstigt buchen kann:

     MSPIZZA14

Informationen zu diesem Infotag findet man hier.

Informationen zu unserem berufsbegleitenden Master-Studiengang für Führungskräfte in der Software-Entwicklung findet man hier.


Download

Link zum Infotag

ppedv Team Blog: Windows 10 – Das Startmenü - eine der wichtigsten Neuerungen und die neue Suche

Laut Windows-Chef Terry Myerson nutzen weltweit 1,5 Milliarden Menschen Windows. Für viele Nutzer war die Optik von Windows 8 eine gravierende Umstellung. Mit der Kacheloptik waren viele Nutzer überfordert, das moderne Aussehen ist nicht sonderlich gut angekommen, jetzt schraubt Microsoft zurück und fügt wieder ein Startmenü ein, welches kaum anders aussieht wie das vorige in Windows 7.

Nun hat Microsoft den Nachfolger vorgestellt. Er heißt nicht wie erwartet Windows 9,
sondern Windows 10.

Menü ist wandelbar

Das aus alten Windows-Versionen bekannte Startmenü ist nun nicht nur zurück, sondern es scheint wieder vollständig zu sein und es lässt sich individuell anpassen. Wem die „Kachel-Optik“ von Windows 8 nicht gefallen hat, der soll vom neuen (alten) Design angesprochen werden. Nach der Installation von Windows 10 ist das zunächst der Standard.

clip_image001

Auf Wunsch sind aber die Kacheln nach wie vor da. Zum einen in der rechten Menüspalte neben der Programmliste integriert, zum anderen nach einer entsprechenden Umstellung der Optionseinstellungen. Im Startmenü sind die Kacheln in verschiedenen Größen verfügbar. Per Rechtsklick lassen sich diese von der Größe her verändern. Leider sind nicht für alle Apps alle Größen verfügbar. Weiterhin kann der Benutzer festlegen, welche Programme angezeigt werden, d.h. jedes Programm und jede installierte App kann per Rechtsklick ins Startmenü integriert werden.

clip_image003

Umstellung des Start-Menüs auf Kachel-Optik

Die Umstellung des Start-Menüs lässt sich über einen Rechtsklick auf die Taskleiste und über den Register „Start Menu“ vornehmen, indem das Häkchen vor „Use the Start menu instead of the Start screen“ entfernt wird.

clip_image004

Um die Einstellung einzurichten muss sich der Benutzer jedoch abmelden, denn dieses Fenster erscheint dann, wenn ein Wechsel vorgenommen wird.

clip_image005

Danach sieht der Benutzer nach Betätigen der Windows-Taste wieder die aus Windows 8 bekannte Kachel-Optik.

clip_image007

Neue Suche

Eine verbesserte Suchfunktion gibt es jetzt in Windows 10 und ein neues Lupen-Symbol in der Taskleiste. Neben der klassischen Dokumentensuche kann auch direkt über das Windows-Menü in Interneteinträgen (mit der Suchmaschine Bing) gesucht werden. Außerdem blenden in Windows 10 Kacheln Live-Informationen ein, wie das aktuelle Wetter oder etwa neue E-Mail-Nachrichten.

clip_image008

Sobald der Benutzer auf die Schaltfläche mit der Lupe klickt und ein Stichwort eingibt, werden in dem Suchfenster Ergebnisse sowohl systemseitig, wie auch Fundstellen aus dem Internet gefunden und angeboten. Ein Klick auf das jeweilige Suchergebnis öffnet dann wie im Beispiel darunter die Search-App mit dem Suchergebnissen von Bing.

clip_image010

ppedv Team Blog: Windows 10 Technical Preview: Neue Version

Am 21. Oktober veröffentlichte Microsoft eine neue Version der Windows 10 Technical Preview: Build-Nummer 9860. Die neue Version wird über Windows Update verteilt, kann aber auch vom User direkt über die PC-Settings installiert werden. Hierfür im Startmenü (bzw. auf dem Startbildschirm) nach “PC Settings” suchen. Dort findet man unter “Update und recovery” den Eintrag “Preview builds”. Neue ISO-Images gibt es nicht – man muss also immer die “alte” Preview-Version installieren und dann über den beschriebenen Weg updaten.

Windows 10 - 2 -1

Laut Microsoft wurden in der neuen Build über 7000 Änderungen vorgenommen – die wenigsten davon sind jedoch sichtbar:

1. Neue Animationseffekte beim öffnen und schließen von Fenstern und beim wechseln zwischen verschiedenen Desktops.

2. Mit der Tastenkombination [Windows] + [Shift] + [Pfeiltasten] lassen sich nun Apps zwischen mehreren Monitoren hin- und herverschieben.

3. Es wurde das aus Windows Phone bekannte Benachrichtigungscenter “Notifications” implementiert. Die entsprechenden Benachrichtigungen lassen sich über ein Taskleisten-Symbol öffnen.

Windows 10 - 2 -3

Die Einstellungen zu diesem Feature und welche Apps Benachrichtigungen anzeigen sollen, kann man in den “PC settings” unter “Search and apps” –> “Notification” finden.

Windows 10 - 2 -2

4. In den “PC settings” befindet sich nun ein Eintrag “DataSense”. Dieses Feature ist bereits aus Windows Phone 8.1 bekannt und zeigt an, wie viele Daten über die Unterschiedlichen Verbindungen übertragen wurden.

Windows 10 - 2 -4

5. Ebenfalls in den “PC settings” stehen nun auch unter “Battery Saver” neue Energiesparfunktionen zur Verfügung.

Windows 10 - 2 -5

Microsoft möchte nun ca. alle 3 Wochen einen neuen Preview-Build zur Verfügung stellen.

codefest.at [MS]: Videos der Vorträge und Workshops vom Modern Meets Retro Hackathon

Wie versprochen, haben wir die Vorträge und Workshops an unserem Gaming Hackathon aufgenommen. Diejenigen, die nicht dabei waren, haben daher die Möglichkeit, sich in aller Ruhe die Sessions anzusehen. Und natürlich habt ihr noch weiterhin die Möglichkeit, an unserem Gewinnspiel teilzunehmen und Preise zu gewinnen.

Speaker: Klaus Hartinger
Firma: Root9 Medialab
Titel: Tipps & Tricks aus der Spieleindustrie
Abstract: Klaus Hartinger gibt wertvolle Tipps & Tricks aus seiner langjährigen Erfahrung in der Casual Games Branche und den Einsichten, die er aus 200+ produzierten Spielen gewonnen hat.

Speaker: Bernadette Thalhammer
Firma: Sproing Interactive Media
Titel: Slide Shooter Game mit Unity
Abstract: Bernadette Thalhammer entwickelt gemeinsam mit den Teilnehmern ein Slide Shooter Game in Unity

Speaker: Bernhard Raml
Firma: Sproing Interactive Media
Titel: Problemlösungskompetenz in Unity
Abstract: Bernhard Raml zeigt, wie man verschiedene Situation, auf die man in der Entwicklung mit Unity stoßen kann, lost.

Speaker: Christian Feldbacher
Firma: V-Play
Titel: Wie macht man ein Flappy Bird Spiel mit V-Play
Abstract: Christian stellt die 2D Spiele-Engine V-Play vor und zeigt wie man ein einfaches Flappy Bird Spiel damit entwickeln kann.

Speaker: Helmut Krämer
Firma: Tieto
Speaker: Andreas Jakl
Firma: Mopius
Titel: Entwickeln mit Kinect v2
Abstract: Helmut Krämer und Andreas Jakl stellen die neue Kinect v2 vor und erklären anhand eines Tic Tac Toe Spieles, wie man am besten mit ihr entwickeln kann.

ppedv Team Blog: Angular Controller as

Wenn ich so darüber nachdenke, gibt es in Angular.js mindestens immer zwei Möglichkeiten eine Aufgabe zu lösen. Eine Direktive kann eine Funktion oder ein JSON Objekt zurück liefern. Ein Service kann eine Factory oder ein Service sein. Alles leicht verwirrend. In die Kategorie, muss das auch noch sein, fällt die Scope Freiheit eines Controllers.

Üblicherweise wird jedem Controller der Scope per Dependency Injection üergeben und damit eine Singleton Instand erstellt. Es gib auch eine Alternative Variante ohne $Scope.

Dabei wird eine “Controller as” Syntax eingesetzt, die sozusagen einen Alias erzeugt, der dann als Objektträger herhalten muss.

   1:    <div ng-controller="mycontroller as hannes">
   2:          {{hannes.count}}
   3:          <button ng-click="hannes.click()">plus</button>
   4:    </div>
   5:    

 

Der zugehörige Controller wird aber gänzlich anders codiert. Zunächst wird wie üblich die App als Modul erzeugt und darin ein Controller definiert, der auf eine Controller Methode verweist. Dieser ist allerdings Parameterlos. Die Propertys des Scopes werden per this erzeugt. Das fühlt sich aus C# Entwicklersicht fast natürlich an.

JavaScript typisch, wird per Prototype das bestehende Objekt um eine Funktion, hier click, erweitert.

   1:    var App = angular.module('App', []);
   2:    App.controller('mycontroller', myfunction)
   3:    function myfunction() {
   4:        this.count = 0;
   5:      };
   6:   myfunction.prototype.click= function () {
   7:       this.count++;
   8:     };

 

Auch wenn ich die Variante mit $scope optisch weniger gelungen finde, werde ich wegen der Konsistenz innerhalb von Angular diesen Weg nicht verwenden.

Marco Scheel: Links for 2014-10-22 [del.icio.us]

codefest.at [MS]: AngularJS und Xamarin Workshops im Rahmen der ADCX in Wien (6.11.2014)

Im Rahmen der diesjährigen Advanced Developer Conference (http://adc.ms/wien) in Wien, gibt es am 6.11. zwei sehr aktuelle Workshops.

AngularJS und ASP.NET
Hier lernen Sie von Hannes Preishuber wie man mit Visual Studio 2013 und ASP.NET in die Welt der Single Page Applikationen einsteigt. Es kommt das aktuell führende JavaScript Framework Angular.JS in Kombination mit ASP.NET Web API zum Einsatz.
Wer seinen Notebook mitbringt kann direkt mit programmieren.
Hannes hat mehrere Bücher zu ASP.NET verfasst, war MVP und ist CEO der ppedv.

Xamarin Forms
Ganztages Workshops zu Cross Plattform Entwicklung mit C#. Xamarin Forms ist heute die einfachste Möglichkeit native für IOS, Android und die Microsoft Plattform Anwendungen zu entwickeln. Das alles auf Basis von .NET und C#. Trainer ist Timur Zanagar, langjähriger Experte für XAMARIN.

Alle Infos und Buchung…

clip_image002

Manfred Steyer: Unterlagen meiner Session zu OAuth 2.0 und OpenId Connect auf der Jazoon 2014 in Zürich

Nachfolgend findet man meine Unterlagen, die ich bei meiner Session zu OAuth 2.0 und OpenId Connect auf der Jazoon 2014 in Zürich verwendet habe.

Download

Holger Schwichtenberg: "Microsoft loves Linux" bekennt Satya Nadella

Wer hätte vor 10 Jahren gedacht, dass ein Microsoft-Chef dies sagen würde?

Manfred Steyer: Unterlagen zur Session über OAuth 2.0 und OpenId Connect mit ASP.NET Web API und MVC #adcx

Nachfolgend findet man die Unterlagen zu meiner Session über den Einsatz von OAuth 2.0 und OpenId Connect in ASP.NET Web-API- und MVC-Projekten, welche ich heute auf der ADC X in Mannheim gehalten habe. Die Folien veranschaulichen die einzelnen Flows mit Fokus auf Authorization Code Flow und Implicit Flow. Daneben veranschaulichen sie die Funktionsweise von OAuth 2.0 für SSO und wie OpenId Connect dabei unterstützt.

Die Beispiele demonstrieren, wie man die auf den Folien gezeigten Möglichkeiten mit ASP.NET Web API und ASP.NET MVC nutzen kann. Das erste Beispiel ist ein ASP.NET-MVC-Projekt, das im via OAuth 2.0 das Recht bekommt, im Namen des Benutzers auf Facebook zu posten. Das zweite Projekt zeigt die Entwicklung eines eigenen OAuth-Servers für ASP.NET Web API. Als Front-End kommt ein AngularJS-basierter Client  zum Einsatz. Das letzte Beispiel zeigt, wie man mit ASP.NET Web API und MVC einen eigenen OpenId-Connect-Server implementieren kann. Dazu kommt ein Fork der OAuth-Middleware-Komponenten von Microsoft zum Einsatz.


Downloads

Manfred Steyer: Unterlagen zur Session zu ASP.NET vNext: Web API, MVC 6 & Co. #adcx

Nachfolgend die Unterlagen von meiner Session zu ASP.NET vNext von der ADC X in Mannheim. Die Folien motivieren, warum die aktuellen Breaking Changes notwendig sind. Das Beispiel zeigt die Projekt-Struktur von vNext-Projekten, sowie wie ASP.NET Web API im neuen ASP.NET MVC 6 aufgeht.


Downloads

codefest.at [MS]: Windows Store App Steuern mit Kinect V2 for Windows

Im Zuge der Codeweek gab es einige Veranstaltungen rund um das Thema Software / Softwareerstellung. Unter anderen gab es 2 Sessions mit mir zum Thema “Kinect for Windows V2 3D Tracking & mehr”.

Am 11. Oktober war es soweit, Andreas Jakl von Mopiusund ich durften am Gaming Hackathon eine Stunde lang ein wenig den Kinect Sensor vorstellen und anhand ein paar Beispielen demonstrieren, was man alles so anstellen kann. Unser Track wurde aufgezeichnet und steht auf Channel 9 bereits zur Verfügung!

In diesen Post möchte ich auf unser doch recht simpel gestaltendes Beispiel ein wenig näher eingehen und auch zeigen, wie einfach es ist eine Windows Store App durch den Kinect V2 Sensor steuerbar zu machen.

TickTackToe

So sieht (bzw. sollte) unser fertiges “Tic Tac Toe” Sample aus. Als Basis haben wir eine einfache “Blank” Universal App genommen:

Template

Als erstes wurde das Phone Projekt gelöscht, da wir ja nur eine Windows Store App mit unseren Sensor steuern wollen.

Step 1: 3x3 Grid anlegen, worauf wir Buttons für unsere Interaktion platzieren.

<Grid x:Name="BoardGrid"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button x:Name="b00" Content="" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b01" Content="" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b02" Content="" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b10" Content="" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b11" Content="" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b12" Content="" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b20" Content="" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b21" Content="" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> <Button x:Name="b22" Content="" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="FieldClick"/> </Grid>

Die Buttons wurden nach ihrer Position am Grid benannt um später besser den Status des geklickten Feldes auswerten zu können.

Im Code-Behind (ja wir verwenden für dieses der Einfachheit halber keinen MVVM-Pattern, Code Binding etc um es einfacher zu gestalten) legen wir uns einmal ein paar notwendige Felder/Variablen an:

public sealed partial class MainPage : Page { private FieldValues _playerTurn; private FieldValues[,] _board; private enum FieldValues { Empty, X, O, }

Wobei _playerTurn den jeweiligen Spieler (X / O) beinhaltet und im _board wir die jeweilige Farbe gesetzt.

Um auch das Spielbrett zu initialisieren definieren wir ResetGame():

private void ResetGame() { _playerTurn = FieldValues.X; _board = new FieldValues[3, 3]; var boardGrid = BoardGrid; foreach (var fieldObj in boardGrid.Children) { var fieldBtn = fieldObj as Button; if (fieldBtn != null) { fieldBtn.Background = new SolidColorBrush(Colors.Black); } } }

Hier setzen wir, dass der Spieler “X” beginnt, initialisieren wir das Spielbrett und setzen uns die Farbe Schwarz in die jeweiligen Felder.

Jetzt brauchen wir noch die Aktion, die beim Drücken auf das jeweilige Feld das Feld in der Spielerfarbe einfärbt und auch den Spieler “wechselt” (von Spieler “X” auf Spieler “O”):

private async void FieldClick(object sender, RoutedEventArgs e) { var btn = (Button) sender; var btnName = btn.Name; var row = int.Parse(btnName.Substring(1, 1)); var col = int.Parse(btnName.Substring(2, 1)); SetField(row, col); SetFieldColor(row, col, btn); await CheckWinner(); }
Aus dem Button-Namen ermitteln wir uns die Row und Column und setzen auch die Farbe und den jeweiligen Spieler:
private void SetFieldColor(int row, int col, Button btn) { var fieldValue = _board[row, col]; Color fieldColor; switch (fieldValue) { case FieldValues.Empty: fieldColor = Colors.Black; break; case FieldValues.X: fieldColor = Colors.Red; break; case FieldValues.O: fieldColor = Colors.Blue; break; } btn.Background = new SolidColorBrush(fieldColor); }

Hat der Spieler “X” gedrückt wir das Feld Rot, war der Spieler “O” dran wird es blau. Um den Gewinner feststellen zu können müssen wir noch am jeweiligen Feld festlegen, wer nun gedrückt hat:

private void SetField(int row, int col) { if (_board[row, col] == FieldValues.Empty) { _board[row, col] = _playerTurn; if (_playerTurn == FieldValues.X) { _playerTurn = FieldValues.O; } else { _playerTurn = FieldValues.X; } } }

Gleichzeitig wechseln wir den Spieler.

Nun noch den Gewinner ermitteln und fertig ist das “Tic Tac Toe” Spiel:

private async Task CheckWinner() { var winner = FieldValues.Empty; // Check rows for (int row = 0; row < 3; row++) { if (_board[row, 0] == _board[row, 1] && _board[row, 1] == _board[row, 2]) { winner = _board[row, 0]; break; } } // Check columns for (int col = 0; col < 3; col++) { if (_board[0, col] == _board[1, col] && _board[1, col] == _board[2, col]) { winner = _board[0, col]; break; } } // Check diagonals if (_board[0, 0] == _board[1, 1] && _board[1, 1] == _board[2, 2]) { winner = _board[1, 1]; } if (_board[0, 2] == _board[1, 1] && _board[1, 1] == _board[2, 0]) { winner = _board[1, 1]; } // Check winner if (winner != FieldValues.Empty) { var winnerDlg = new MessageDialog("Winner: " + winner); await winnerDlg.ShowAsync(); ResetGame(); } // Check for tie - all field taken var isTie = true; foreach (var curField in _board) { if (curField == FieldValues.Empty) { isTie = false; break; } } if (isTie) { var winnerDlg = new MessageDialog("Tie! Play again."); await winnerDlg.ShowAsync(); ResetGame(); } } }

Hier werden einfach die Rows, Columns und die Diagonale ausgewertet.

Nun wird es spannend, wir wollen nun unser simples “Tic Tac Toe” mit Gesten steuerbar machen.

Wir brauchen dazu:

  1. Einen Kinect for Windows V2 Sensor
  2. Kinect for Windows SDK 2.0 derzeit noch in Public Preview
  3. Einen halbwegs leistungsstarken Rechner (i7, USB 3.0, 4GB Ram)

Nach installation des SDK’s den Sensor einfach anstecken und testen ob alles geklappt hat.

Jetzt müssen wir einfach die Referenzen hinzufügen:

Referenzes

Im Manifest müssen wir Zugriff auf die Webcam und Micro erlauben, sonst kann der Sensor aus der App heraus nicht angesprochen werden:Manifest

 

Jetzt fehlen nur noch ein paar Zeilen Code in der App.Xaml.Cs und unser Projekt kann nun auch per Geste gesteuert werden:

// Initialize Kinect KinectRegion = new KinectRegion {Content = rootFrame}; Window.Current.Content = KinectRegion; // Ensure the current window is active Window.Current.Activate();

Fertig !  -  die komplette Lösung könnt ihr hierherunterladen!

Wie Ihr seht ist für reine Gestensteuerung die eigentliche App der viel größere Aufwand als die Implementierung der Kinect. Um Bodypoints auslesen zu können, 3D tracken etc. ist natürlich etwas mehr Implementierungsaufwand notwendig, mehr dazu in einen der folgenden Posts Zwinkerndes Smiley

Bei Fragen tweet me.


Ich bin seit 1992 in der IT Branche als Developer tätig, und habe im laufe der Jahre neben Technologie Wissen auch jede Menge Prozesswissen aus dem Bankenbereich und Industriebereich ansammeln können. Dies ermöglicht es mir neue Technologien auf konkrete Anwendungsbeispiele zu übertragen. Im Tieto’s Future Office Team– dass sich hauptsächlich mit dem „Neuen Arbeiten“ beschäftigt, bin ich als Mobility Evangelist tätig, und habe die Aufgabe neueste Technologien zu evaluieren und für unsere Kunden einsetzbar zu machen. Unter anderem testen wir auch den Einsatz von Kinect und Google Glass für unsere Kunden.

Das ist ein Gastbeitrag. Die Meinung des Autors muss sich nicht mit jener von Microsoft decken. Durch den Artikel ergeben sich keinerlei Handlungsempfehlungen. Microsoft übernimmt keine Gewähr für die Richtigkeit oder Vollständigkeit der Angaben.

Sven Hubert: Aller Anfang ist schwer – Projektbegleitende Grundlagenschulung für Entwicklungsteams

Der Titel sagt es bereits: “Aller Anfang ist schwer“ – dies gilt besonders für den Umstieg auf eine neue Technologie im Bereich der Software-Entwicklung. Ändern sich dann auch noch die Entwicklungswerkzeuge, ist das Chaos perfekt. Dennoch ist irgendwann die Zeit gekommen, da Technologien wie Borland C++ oder die Microsoft Foundation Classes nicht mehr dem Stand der Technik entsprechen und somit ein Umstieg nötig ist.

Mit unserem Schulungskonzept ist dieser Umstieg parallel zum Tagesgeschäft möglich. Durch einen kurzen Fragebogen wird zunächst der Wissensstand aller Entwickler erfasst, um diesen möglichst schnell auf einen homogenen Stand zu bringen. Um arbeitsfähig zu bleiben, werden mindestens zwei Schulungsgruppen zu je 4 bis 8 Personen gebildet. Die Gruppen werden an unterschiedlichen Tagen geschult. Dies erhöht die Flexibilität, da die Teilnehmer bei Terminkonflikten zwischen den einzelnen Gruppen tauschen können.

Der Gesamt-Umfang der Schulung umfasst in der Regel 12 Tage pro Gruppe. Um das vermittelte Wissen verarbeiten zu können, sollte maximal ein Schulungstag pro Woche stattfinden. Um das erlernte Wissen direkt anzuwenden, wird parallel zu den Schulungsterminen eine Aufgabe bearbeitet. Diese steigert sich in ihrer Komplexität von Schulung zu Schulung und wird, wie alle Schulungsbeispiele, speziell auf die Fachdomäne zugeschnitten. Während der Bearbeitung der Übungsaufgabe steht den Teilnehmern selbstverständlich ein Trainer vor Ort oder virtuell zur Seite.

Jeder Schulungstermin beinhaltet Elemente aus den drei Kategorien Handwerkliche Umsetzung, Entwicklungsgrundlagen und Framework, Technologie und Sprache. Im Verlauf der Schulungen variieren die Schwerpunkte.

Themen

Die Inhalte sind in drei Schulungsblöcke Beginner, Einsteiger und Fortgeschritten untergliedert. Dies ermöglicht es auch erfahrenen Teammitgliedern zu einem späteren Zeitpunkt einzusteigen.

Schulungsblöcke

Die gesamte Durchführung wird individuell an die Bedürfnisse der Teilnehmer angepasst. Den typischen Taschenrechner als erste Übung wird es also nicht geben! Die Erarbeitung von Coding-Guidelines mit den Teilnehmern ist dabei ebenso denkbar, wie die Vermittlung von Wissen über unternehmensinternen Frameworks oder andere Bibliotheken.

Wie eingangs schon gesagt, der Anfang ist schwer – die Aufgabe jedoch nicht unmöglich. In keiner anderen Branche ist der Wechsel auf eine neue Technologie so spannend wie in der Software-Entwicklung. Sie müssen keine neuen Maschinen kaufen, ihr bisheriges Wissen nicht komplett über den Haufen werfen, sondern nur dazu lernen. Also trauen Sie sich! Wir helfen Ihnen dabei!

Aller Anfang ist schwer – Projektbegleitende Grundlagenschulung für Entwicklungsteams is a post from: AIT Blog

Jürgen Gutsch: Drop-Zone per AngularJS-Direktive definieren

Das ziel ist eine Drop-Zone per AngularJS-Direktive zu definieren, in das Dateien für den Datei-Upload, oder was auch immer gedroppt werden können. Es muss also möglich sein, ein Callback zu übergeben, welches ausgeführt werden soll, wenn der Drop-Vorgang abgeschlossen wird. Der Callback soll dabei eine Methode des aktuellen AngularJS-Controllers sein:

ng-dropzone="handleDrop()"

Wir benötigen hierfür eine neue JavaScript Datei mit folgendem Inhalt:
(Dieser Code setzt voraus, dass, dass ein AngularJS Module mit dem Namen “myNgApp” existiert, andernfalls muss einfach der Name angepasst werden.)

(function () {
    'use strict';

    angular
        .module('myNgApp')
        .directive('ngDropzone', dropTarget);

    dropTarget.$inject = ['$window', '$parse'];

    function dropTarget($window, $parse) {

        var directive = {
            link: link,
            restrict: 'A'
        };
        return directive;

        function link(scope, element, attrs) {
           
            element.on('drop', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
                $parse(attrs.ngDropzone)(scope);
            });
            element.on('dragover', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
            element.on('dragenter', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
            element.on('dragleave', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
            element.on('dragend', function () {
                if (event.preventDefault) {
                    event.preventDefault();
                }
            });
        }
    }
})();

Mit element.on() kann ich beliebige Events auf das Event registrieren. In diesem Fall sind es alle Events die eine DropZone abfangen sollte. Wichtig ist nur das erste Event, alle anderen können allerdings genutzt werden, um ein visuelles Feedback zu geben, wenn man mit der Maus ein Element über diese Zone draged, die Zone mit Drag-Zustand verlässt, oder das dragen beendet, indem die CSS-Klassen der DragZone geändert werden. (Ich verzichte hier auf die Beispiele für den visuellen Effekt)

Hinweis für Visual Studio Nutzer:
Das Visual Studio Add-In “SideWaffle” ist übrigens eine enorme Hilfe beim erstellen von Modulen, Controller, Services, etc. für AngularJS, da es unter anderem vorgefertigte Datei-Templates für AngularJS liefert.

Diese Direktive kann ich nun auf alle HTML-Elemente anwenden die als Drop-Zone genutzt werden können. Am besten ein DIV-Element dass so formatiert ist, dass es für den USer eindeutig als Dro-Zone erkannt wird. Das Element darf auch Unterelemente beinhalten.

Folgende Zeile Code im ersten Event parst den Wert unseres Attributes und führt ihn im aktuellen Scope aus. Auf die Art wird unsere Callback-Methode im AngularJS-Controller gefunden.

$parse(attrs.ngDropzone)(scope);

Die Callback-Methode kann beliebig viele Parameter haben die über unser Attribut gesetzt werden können. In diesem Beispiel werden keine Argumente übergeben und die Methode ruft intern eine Methode uploadDocuments in einem AngularJS-Service auf und übergibt sowohl die Datei-Liste aus dem event objekt, als auch einen CallBack der im Erfolgsfall ausgeführt wird.

$scope.handleDrop = function () {
    $upload.uploadDocuments(event.dataTransfer.files, function () {
        reloadDocuments();
        alert('success');
    });
};

Die Eigenschaft dataTransfer im event Objekt ist Teil der HTML5 Drag & Drop API und enthält in unserem Fall Dateien die per Drag & Drop auf die DropZone gezogen wurden.

Die Methode im Upload-Service tut dann die eigentliche Arbeit. Da auch mehrere Dokumente in die Drop-Zone geschoben werden können, müssen wir die File-Collection in einer Schleife durchgehen und verarbeiten. In folgendem werden zusätzlich die Dateieigenschaften file.name, file.size und file.type ausgelesen und an den Server gesendet:

this.uploadDocuments = function (files, callback) {

    if (files.length > 0) {
        for (var i = 0; i < files.length; i++) {

            var file = files[i];

            var data = new FormData();
            data.append('file', file);
            data.append('fileName', file.name);
            data.append('fileSize', file.size);
            data.append('fileType', file.type);

            $http
                .post('/api/Document/', data, {
                    transformRequest: angular.identity,
                    headers: { 'Content-Type': undefined }
                })
                .success(function () {
                    alert('TODO: handle success');
                    callback();
                })
                .error(function () {
                    alert('TODO: handle error');
                });
        }
    }
};

Auf die Stolperfalle beim Upload von Dokumenten habe ich in meinem letzten Beitrag schon hingewiesen. Die Lösung ist im obigen Beispiel bereits implementiert.

Christian Binder [MS]: Seid Ihr dabei? – Tech Summit 2014

Ich werde mit Neno Loje eine Session zu “Planning and Managing the modern Application LifeCycle” auf dem Tech Summit 2014 halten. Ich plane auch den TFS Support für das Scaled Agile Framework (SAFe) kurz anzusprechen, auch wenn es nicht im Abstract erwähnt ist.  Zudem bin ich beide Konferenztage vor Ort. Wer Lust auf einen kurzen Austausch vor hat einfach melden, hab noch etwas Luft Smile

Holger Sirtl: Azure-in-a-box: Microsoft macht mit dem Cloud Platform System Azure im eigenen Rechenzentrum möglich

Nach einer urlaubs- und diensreisenbedingten schöpferischen Pause möchte ich meine Blogging-Aktivitäten gleich mal mit einem Knaller wieder aufnehmen: Gestern Abend hat Satya Nadella, Microsoft CEO, zusammen mit Scott Guthrie, Executive Vice President, Cloud and Enterprise Group, Microsoft das

Microsoft Cloud Platform System

bekanntgegeben. Damit gibt es nun (endlich) die extrem häufig nachgefragte Möglichkeit, Azure-in-a-Box zu beziehen. Mit dem Cloud Platform System (CPS) gibt es also eine Hardware (in diesem Fall von Dell entwickelt), auf der Microsofts Azure Technologien vorinstalliert sind, d.h. das CPS ist in Summe

  • Dell Cloud Server
  • Dell Storage
  • Dell Netzwerk Hardware
  • Microsoft Windows Server 2012 R2
  • Microsoft System Center 2012 R2
  • Microsoft Windows Azure Pack

Alles zusammen, vorkonfiguriert und bereit zum Einsatz im eigenen Rechenzentrum. Auf der CPS-Produktseite finden sich weitere Informationen wie ein Produktvideo und ein Whitepaper.

Mit dem Windows Azure Pack stehen somit auf CPS folgende Azure Services zur Verfügung:

Weitere Informationen

Holger Schwichtenberg: Azure VMs mit viel mehr Kraft und Speicher

Bei dem heutigen Microsoft Cloud Briefing in San Franciso kündigte Microsoft einige Neuerungen für ihre Cloud an.

Johnny Graber: Kurz-Tipp: Responsive Design einfach testen mit Window Resizer

Wer heutzutage Webapplikationen erstellt wird kaum um das Thema Responsive Design herum kommen. Dabei geht es um die Anpassungsfähigkeit einer Webseite an verschiedene Bildschirmgrössen. Schliesslich soll die Anwendung nicht nur auf dem Laptop bedienbar sein sondern auch auf dem Smartphone zum Verweilen einladen.

Die technische Seite wird durch Frameworks wie Bootstrap gut abgedeckt und dürfte den meisten Entwicklern bekannt sein. Wenn es allerdings ums Testen der einzelnen Auflösungen geht stutzt man das Browserfenster meist von Hand zurecht. Dies mag zwar ein gangbarer Weg sein, doch ist dies mühsam und ungenau.

Viel einfacher und schneller ist es eine entsprechende Erweiterung für den Browser zu installieren. Davon gibt es für jeden Browser mehr als genug, doch kaum eine kommt an Window Resizer von Ionut Botizan für Chrome heran. Diese Erweiterung ist auf genau einen Zweck optimiert und lässt einem die voreingestellten Fenstergrössen um beliebige eigene Formate erweitern.

Window Resizer

Für mich gibt aber eine Tastenkombination den Ausschlag Window Resizer zu verwenden: Mittels [Strg] + [Umschalt] + [Abwärtspfeil] lässt sich sehr schnell durch die einzelnen Fenstergrössen durchschalten. Dies ist sehr praktisch wenn man nicht nur wissen will ob eine bestimmte Grösse funktioniert sondern ob alles noch wie gewünscht aussieht.

Hat man sich einmal an die damit gewonnene Flexibilität gewöhnt will man so eine Erweiterung nicht mehr missen.


Einsortiert unter:.Net, dnugBern, webDotNet Tagged: .Net, Beschleuniger, Web

Hendrik Lösch: Developer Openspace 2014

Einmal im Jahr zieht es eine Vielzahl von Softwareentwicklern nach Leipzig zum Developer Openspace. Wie jedes Jahr seit 2011, war auch ich wieder mit dabei und bin mit einem Kopf voller Ideen, sowie neuer Sichtweisen nachhause gefahren. Die Besonderheit des Openspaces ist dabei, dass die Agenda zu Beginn der eigentlichen Veranstaltung auf Basis der Wünsche […]

codefest.at [MS]: Zeige deine Innovation Power mit Pioneers Discover!

Pioneers ist das führende internationale Startup Netzwerk, das globale Investoren, Startups und Corporations miteinander zusammenbringt.

Wenn ihr Developer oder ein Startup mit tollen technologischen Innovationen oder Lösungen seid, so habt ihr jetzt eine super Gelegenheit euch zu präsentieren und euch bzw euer Unternehmen mit den richtigen Leuten zu vernetzen.

Pioneers Discover veranstaltet vom 9. – 11. Dezember 2014 einen Hackathon gemeinsam mit einer namhaften österreichischen Bank, bei dem alle teilnehmenden Startups die Möglichkeit haben, ihren technologischen Vorsprung und ihre Innovationspower zu zeigen und in Folge vielleicht wertvolle Kunden und Partner zu bekommen. Weiters gibt es lukrative Preise für die Teilnehmer, die von Devices bis hin zu Freikarten für das angesehene Pioneers Festival reichen.

Dieser Hackathon ist dem Thema “FinTech” gewidmet, das heißt, wenn ihr Lösungen entwickelt, von denen ihr glaubt, dass man diese im Finance Bereich anwenden kann, dann könnt ihr euch für den Hackathon bewerben.

Hier sind einige Beispielkategorien in denen eure Lösungen beheimatet sein könnten:

  • Kaufmännische Services: Web Shop Integration, Buchhaltung, etc.
  • Kontosicherheit und Datenschutz: Hier geht es technische Lösungen, wie Sicherheit, Kontozugang, biometrischer Zugang, Encryption.
  • Kontoschutz: Möglichkeiten betrügerische Aktionen am Konto zu entdecken oder Community-gesteuerte Infos über Händler einbauen.
  • Shopping Assistent/Erinnerung: Über die GPS Position, Erinnerungen und relevante Informationen an den Benutzer über Push schicken.
  • Intelligente Ausgabenanalyse: Vergangene Ausgaben verwenden, um ein vorausschauendes Ausgabenprofil zu erstellen.
  • Inspirationen zu Investitionen: Verschiedene externe APIs und Services einbauen, um Investionsmöglichkeiten aufzuzeigen (social integration über crowdinvesting, social trading).
  • Kontaktmanager/Card Scanner: Möglichkeiten über Bankomatkarten neue Benutzer zu erstellen und Kontoinformationen hinzuzufügen.

Wenn ihr euch bewerben wollt oder weitere Fragen dazu habt, dann schreibt an discover@pioneers.io , oder ruft an: +43676 347 8608.

Martin Hey: Ein Wochenende beim Developer Open Space

An diesem Wochenende war ich beim Developer Open Space in Leipzig, der nun schon einige Male dort stattgefunden hat. Leider konnte ich auch dieses Jahr aus Zeitgründen nicht an den wirklich interessanten Workshops am Freitag teilnehmen, aber Samstag und Sonntag war ich vor Ort. 


Das Konzept ist recht einfach: Versammle eine Menge Entwickler und gib ihnen den Freiraum, selbst Themen zu bestimmen über die sie reden wollen. Was initial mal als .NET Open Space gestartet ist, hat sich in den letzten Jahren von der Technologie entfernt. Und so kommt es, dass inzwischen auch Entwickler mit dabei sind, die in anderen Technologien zu Hause sind, wie Java, Ruby, JavaScript und so weiter.

Welche Themen waren für mich interessant? Nun ja, dadurch, dass ich mich auch beruflich mit IoT beschäftige, fand ich die Wearables und Smarthome-Sessions sehr spannend. Als Freelancer/Geschäftsführer auch sehr interessant war die anschließende Session bei der es darum ging, gescheiterte Projekte zu analysieren und die Meinungen anderer zu hören, wie sie und auch ihre Auftraggeber damit umgehen. Leider war die Event Storming Session parallel, so dass ich bei dieser nicht dabei sein konnte. Weil auch wir oftmals vor Technologieentscheidungen stehen, besuchte ich anschließend die Session zum Thema NoSql vs. RDBMS in der diskutiert wurde, wann man welche Technologie sinnvollerweise einsetzt. Die für mich letzte Session des Tages hielt ich mit einigen Usergroup-Leads gemeinsam, in der wir zeigten, wie wir die Seite der .NET Usergroup Dresden aufgebaut haben (Jekyll auf Github). Es folgten noch zwei weitere Slots, aber die Zeit habe ich eher für entspannte Gespräche auf dem Hof genutzt. Der Abend endete dann in entspannter Atmosphäre und durchaus auch lustigen Gesprächen im Pub.

Der Sonntag lief recht ähnlich ab: interessante Sessions, spannende Gespräche in den Pausen oder nebenher. 


Es war für mich wieder ein Erlebnis, mit den ganzen Leuten quer aus dem DACH-Raum fachsimpeln und Gedanken austauschen zu können. Und auch wenn ich eher Technologie oder Management-Sessions besucht habe, so gab es auch dieses Jahr wieder Sessions zu Softskill und Psychologie - es ist also für jeden etwas dabei. Und mit 200 Anmeldungen zählt dieser Event nun schon zu den größeren Konferenzen.

Karsten Kempe: Scrum mit Visual Studio Online

channel-9-logoLetzte Woche war ich zu Gast bei Microsoft in Unterschleißheim und habe zusammen mit Daniel Meixner, einem Technical Evangelist, ein Video zum Thema “Scrum mit Visual Studio Online” aufgenommen. Dieses Video ist nun in der TechTalk Videothek auf Channel9 veröffentlicht worden, in der aktuelle Themen rund um die Microsoft Developer Plattform vorgestellt werden. Viel Spaß beim Anschauen.

Natürlich ist SCRUM kein brandneues Thema in der Software-Entwicklung, viele Teams arbeiten bereits sehr erfolgreich mit diesem Framework. Aber gerade weil man mit SCRUM sehr erfolgreich Software entwickeln kann, lohnt sich immer ein Blick auf diese agile Arbeitsweise.

Der TechTalk zeigt wie der Team Foundation Server, Teams in Ihrer täglichen Arbeit unterstützen kann. Angefangen bei der Aufnahme von Anforderungen, über deren Planung, während des Daily Stand-Ups, bis hin zur Kapazitätsplanung einzelner Team-Mitglieder. Aber seht selbst.

TechTalk mit Daniel Meixner von Microsoft zum Thema “Scrum mit TFS/VSO”

[1] http://channel9.msdn.com/Blogs/TechTalk/Episode-15-Scrum-mit-Team-Foundation-Server-und-Visual-Studio-Online

Fabian Deitelhoff: Blogparade digitalLEBEN: zehn Fragen und meine Antworten dazu

Mit diesem Beitrag möchte ich zum ersten Mal bei einer Blogparade mitmachen. Das Thema ist #digitalLEBEN, was auch gleichzeitig der Hashtag auf Twitter ist. Initiiert hat die Blogparade die SPD mit diesem Blogpost zum Thema.

Mir geht es hier absolut nicht um eine Unterstützung der Partei, da ich diesen Blog gerne frei von Politik jeglicher Art halten möchte. Egal um welche Partei es sich handelt. Aufmerksam geworden bin ich durch den unten stehenden Tweet von Nico Lumma.

Bei der Blogparade geht es darum, zehn Fragen zum digitalen Leben zu beantworten. Die Fragen sind im Blog der SPD im Beitrag “Blogparade zu #digitalLEBEN” zu finden. Ebenso wie ein paar Informationen zum Ablauf. Die Blogparade geht noch bis zum 31. Oktober. Jetzt aber zu den Fragen und meinen Antworten, die sich hinter dem Weiter-Button verstecken :)

Die zehn Fragen und meine Antworten

  1. In einer digitalen Welt zu leben, bedeutet für mich…
    Vernetztes Leben. Mit all seinen Vorteilen wie schnelle und weitestgehend günstige Kommunikation, sowie immer verfügbare Informationen. Aber auch mit all seinen Nachteilen wie andauernde Ablenkung und Erreichbarkeit.
  2. Mein Computer ist für mich…
    Arbeitsgerät und ziemlicher Lebensmittelpunkt. Zumindest wenn es um meinen Arbeitsrechner (Desktop) zu Hause geht. Mein Smartphone wird Stück für Stück reduziert. Da mache ich nur noch das nötigste mit, was zurzeit die ein oder andere Kurznachricht, Sport und (dabei) Musik hören ist.
  3. Wirklich gut! Die größte Chance durch die Digitalisierung ist…
    Ständiger Zugriff auf Informationen und Wissen. Arbeiten unabhängig vom Ort. Neue Tätigkeitsfelder und Möglichkeiten, wie beispielsweise das Self-Publishing beziehungsweise alle Berufe im Allgemeinen, die mit der Digitalisierung zu tun haben.
  4. Bedrohlich! Wir müssen aufpassen, dass…
    Unsere Daten auch unser Eigentum bleiben und Konzerne damit nicht machen können was sie wollen. Und das der Staat nicht immer weiter in unsere Privatsphäre eingreift, als das eh schon der Fall ist. Wir sind nicht alle generell verdächtig!
  5. Die Digitalisierung verändert mein Leben durch…
    Das ortsunabhängige Arbeiten, die Softwareentwicklung und durch die ständig verfügbaren Informationen. Ohne die Digitalisierung müsste ich mir einen anderen Job in einer ganz anderen Branche suchen. Allerdings verändert es mein Leben auch durch die ständige Erreichbarkeit, die schnell zu Dauerstress führen kann.
  6. Chatten mit den Enkeln, Einkaufen per Mausklick, Arbeiten ohne feste Bürozeiten. Was bringt die Digitalisierung für Familien und Ältere?
    Die Digitalisierung bringt die kostengünstige Kommunikation, die obendrein immer verfügbar ist. Beispielsweise der kostenfreie Skype-Anruf von Deutschland nach Kanada. Ganz grundsätzlich bringt die Digitalisierung mehr Flexibilität in den Alltag von Familien und Älteren.
  7. Programmieren in der Grundschule, das gesamte Faktenwissen der Welt in der Suchmaschine. Wie sollte Bildung der Zukunft aussehen?
    Bildung muss sich komplett wandeln. Weg vom Faktenwissen und reinen Auswendiglernen von Informationen, hin zu dem strukturierten Methodenwissen, wie neue Situationen gemeistert werden können. Inklusive der Einbeziehung von Multimedia und Medienkompetenz
  8. An jedem Ort arbeiten können und ständig erreichbar sein. Was bedeutet das für Arbeit im Digitalen Zeitalter?
    Auf der einen Seite bedeutet das für mich ganz klar mehr Flexibilität. Ich kann arbeiten von wo aus ich möchte und im besten Fall auch für wen ich möchte, wenn das meine Tätigkeit erlaubt. Auf der anderen Seite bedeuten diese Möglichkeiten aber auch deutlich mehr Stress. Überall arbeiten und erreichbar zu sein heißt oft auch an jedem Ort Zeitdruck ausgesetzt zu sein. Deswegen muss es so sein, dass überall arbeiten zu können nicht gleichbedeutend ist mit auch tatsächlich überall zu arbeiten.
  9. Was müssen wir im digitalen Zeitalter tun, damit unsere Wirtschaft erfolgreich bleibt?
    Digitales darf nicht mehr außen vor stehen sondern muss überall integriert werden. Ängste bei der Bevölkerung abbauen indem beispielsweise Medienkompetenz schon in der Schule ein Thema ist. Es darf zudem keine Trennung mehr zwischen sogenanntem realem und digitalem Leben mehr geben. Bei Personen, die nicht mit dem Internet aufgewachsen sind, gibt es diese Trennung noch. Bei jungen Menschen absolut nicht. Dort verschmelzen die beiden Welten.
  10. Die Digitalisierung schafft Chancen und birgt Risiken. Von der SPD erwarte ich, dass…
    Sie sich mit dem Thema Netzpolitik auseinandersetzt und neue Technologien nicht von vornherein verteufelt. Das Internet bietet eine Menge Chancen und Deutschland muss digitaler werden. Interdisziplinär und unabhängig von der konkreten Partei.

Das waren meine Antworten zu den zehn Fragen auch schon. In diesem Sinne wünsche ich mir ein Deutschland mit mehr Lust auf digitales, Technologie und Innovation. Einen deutlich stärkeren Breitbandausbau und mehr Mitmenschen, die beim Thema Internet nicht gleich an Kriminalität, Gefahren und Jobverlust denken.

Sven Hubert: Agilität ohne Product Backlog Items oder User Stories? – Agile Entwicklung mit dem TFS und dem CMMI-Template

Wie haben wir uns in der Softwareentwicklung an die agilen Methoden gewöhnt. So schön leichtgewichtig, transparent und in Sprints ungestört arbeiten. Product Backlog Items oder User Stories machen den Projektalltag um einiges angenehmer.

Doch was, wenn es nicht ausreicht, nur noch den verbleibenden Aufwand zu betrachten? Was, wenn man Ursprungsschätzung und die bereits investierte Zeit betrachten möchte? Wo führt es hin, wenn ein Entwicklungsprozess in einer Branche mehr Informationen erfordert, als sie die leichtgewichtigen Vorgehensweisen bereitstellen? Müssen wir uns in diesen Szenarien etwa von der liebgewonnenen Agilität verabschieden?

Häufig führt die Diskussion zur Frage, welches Prozessmodell man in seiner ALM-Toollandschaft wählt. Der Artikel im OBJEKTspektrum Online Themenspecial Agility zeigt am Beispiel des Team Foundation Servers, wie man zugunsten der Informationsvielfalt das CMMI-Process-Template des TFS verwenden und dabei trotzdem einen agilen Entwicklungsprozess leben kann.

>> Lesen Sie den Artikel von Stefan Mieth und Thomas Rümmler hier.

Agilität ohne Product Backlog Items oder User Stories? – Agile Entwicklung mit dem TFS und dem CMMI-Template is a post from: AIT Blog

codefest.at [MS]: Windows 10–Was ändert sich für Entwickler?

 

Das ist ein Gastbeitrag von Christian Nagel. Offizielle Informationen von Microsoft zu Development für Windows 10 werden in den kommenden Monaten veröffentlicht.

 

Windows 10 wurde announced und steht in einer ersten Version zum Testen zur Verfügung. Der Desktop steht wieder mehr im Vordergrund. Das Start Menü ist zurück. Diese neuartigen Apps laufen jetzt auch in einem Fenster. Was ändert sich damit für Entwickler? Können wir das Neuartige Zeugs jetzt vergessen und uns wieder auf Windows Forms konzentrieren?

dreamstime_s_38877532_universalstudios

Image © Ciolca | Dreamstime.com - Universal Studios, Florida Photo

Nein, nein, nein. In Wirklichkeit ändert sich für Entwickler mit Windows 10 gar nichts. Naürlich kommt eine neue Version der API. Natürlich wird es neue Features in der API geben. Aber den großen Wechsel für Entwickler hat es am Client schon mit Windows 8 gegeben. Auch Windows 10 setzt auf die Windows Runtime. Nach Version 1 bei Windows 8, Version 2 bei Windows 8.1 kommt jetzt wahrscheinlich Version 3 mit Windows 10.

Die gleiche Runtime wird es beim Windows Phone und der Xbox geben. Mit dem Konzept der Universal Apps können wir Applikationen für die gesamte Windows Plattform schreiben. Bei Universal Apps steht zwar nur ein Subset von .NET zur Verfügung, mit XAML nicht alle Features die es bei WPF gibt, es gibt aber auch die Windows Runtime die für Deskop Applikationen so nicht zur Verfügung steht.

Nicht das gesamte .NET Framework? Ja, es ist ein eingeschränktes Subset. Mittlerweile ist das aber so vielfältig dass kaum etwas abgehen wird. Mit Entity Framework 7 ist sogar diese API für Windows Store Apps verfügbar. Ein reduziertes .NET Set wird es auch in der nächsten Version der Server-Plattform geben, wie hier schon erwähnt wurde.

Nicht alle Features von WPF bei XAML in Windows Store Apps? Ja, es fehlt doch einiges. Bestimmte Brushes gehen ab wenn man vorher WPF programmiert hat, es fehlen Features beim Binding, und einiges mehr. Mit der Zeit wird aber mehr und mehr im XAML von Windows Store Apps angeboten. Es geht sogar so weit dass auch bei WPF Features abgehen die es bei Windows Store Apps gibt, wie z.B. die Header Property in TextBox Controls.

Mit Universal Apps sind wir nicht auf den Desktop gebunden. Diese Apps können auch auf dem kleineren Bruder vom Surface Pro 3 (das Surface 2) laufen, und auch auf dem Windows Phone. Mit Hilfe von Xamarin.Forms kann man die Liste der mobilen Devices auch noch um iPhone, iPad und Android erweitern.

Mit Windows 10 gibt es sogar noch mehr Gründe auf Universal Apps zu setzten. Wenn “Full-Screen” bisher störte, diese Apps laufen bei Windows 10 jetzt auch in einem Window.

Die Unterstützung von Windows 7 mit eigenen Apps kann langsam auslaufen – dann gibt es keinen Grund mehr nicht auf Universal Apps zu setzen. Und wenn die Unterstützung von Windows 7 noch lange erforderlich ist gibt es auch Möglichkeiten (z.B. Portable Libraries) jetzt schon für Universal Apps vorauszuplanen.

Informationen zu Windows 10 für IT Pros und Entwickler gibt es beim Tech Forum am 13. November

Christian Nagel

CN innovation

 

Das ist ein Gastbeitrag. Die Meinung des Autors muss sich nicht mit jener von Microsoft decken. Durch den Artikel ergeben sich keinerlei Handlungsempfehlungen. Microsoft übernimmt keine Gewähr für die Richtigkeit oder Vollständigkeit der Angaben.

Thomas Bandt: Review: Developer Open Space 2014 in Leipzig

Während ich diese Zeilen schreibe, sitze ich gerade auf der Rückfahrt vom diesjährigen #devspace, dem insgesamten 7. von Torsten Weber, Alexander Groß und Marcel Hoyer (und Helfern) organisierten Open Space in Leipzig.

Trotz Verkehrschaos durch einen Bahnstreik hatten sich an diesem Wochenende tatsächlich rund 200 Leute zusammengefunden, um sich in ihrer Freizeit mit anderen um überwiegend technologische Themen auszutauschen. Oder wie man es auch formulieren kann: Mit den Homies abzunerden ;-).

Spannend zu sehen war schon am zweiten Tag bei der Session-Planung, dass der größte Raum beinahe aus allen Nähten platzte. Dabei waren dieses Mal viele neue Gesichter, die teilweise auch keinen Hintergrund im Microsoft-Stack haben, aus dessen Umfeld die ganze Veranstaltung ja ursprünglich mal entsprungen ist.

So war dann auch der Themenmix recht bunt und für meinen Geschmack auch wieder deutlich spannender als noch in den letzten 2-3 Jahren.

Nachfolgend mal ein kleiner Abriss aus meiner Warte.

F# Workshop von Max

F# = The not so new but cool kid on the block. Nachdem ich mir im Büro immer häufiger erzählen lassen muss ;-), wie toll funktionale Programmiersprachen sind, wollte ich da mal reinhören. Für jemanden, der aus der objektorientierten Denkweise kommt und mit seiner primären Sprache C# ganz happy ist, ist das vollkommen abweichende Mindset hinter F# schon eine schwer zu knackende Nuss.

Leider konnte ich dem Workshop nur am Anfang beiwohnen, aber immerhin so lange, um zu sehen wie bei ein wenig Spielen mit der String Calculator-Kata allmählich Licht ins Dunkel gebracht wurde, wobei mir insbesondere das Refactoring beim Verständnis half.

Das Zeug kompilierte zwar nicht in Xamarin Studio mit Mono, wohl aber in Visual Studio. Weiß der Geier … Fazit: weiter beobachten ;-).

Smart Home

Ein Thema, mit dem ich (als Mieter einer Wohnung naturgemäß) noch nicht so besonders in Berührung gekommen bin, sieht man von einem gescheiterten Versuch, Tado im Büro zu installieren, einmal ab.

Ziemlich überraschend war für mich, wie viele schon damit experimentieren bzw. es tatsächlich in ihren Häusern und teilweise auch Wohnungen einsetzen. Von Push-Notifications beim Klingeln an der Haustür, über intelligentes Ein- und Ausschalten von Geräten ist alles dabei.

Diskutiert wurden auch verschiedene geschlossene und offene Systeme, (potentielle) Auswirkungen auf die Sicherheit etc.Sehr spannend.

Universal Apps Best Practices

Zwei der gegenwärtig drei Entwickler für die Microsoft-Versionen von Wunderlist zeigten, wie sie in ziemlich kurzer Zeit eine “Universal App” für Windows (Desktop/Tablet) und Windows Phone bauen konnten, welche Teile sich wie teilen lassen etc. Interessant, was Microsoft da entwickelt – ein Teil, mit dem ich bislang überhaupt nicht in Berührung gekommen bin (fragt einfach keiner nach ;-)).

NoSQL sucks vs. NoSQL for Devs

Der etwas provozierende erste Teil des Session-Titels stammt von mir, war natürlich nicht so verallgemeinernd gemeint ;-).

Dennoch wollte ich die Gelegenheit nutzen, und meine negative Praxis-Erfahrung mit MongoDB und RavenDB einmal vorzustellen und mir ggf. zeigen zu lassen, was wir hätten besser machen können.

Kurzum kann man sagen, dass man mit NoSQL-Lösungen immer mit Eventual Consistency leben und dann auch anwendungsseitig dafür Sorge tragen muss, diese zu erreichen – weil klassische ACID-Transaktionen eben gar nicht funktionieren (z.B. mit MongoDB), oder nur eingeschränkt (z.B. mit RavenDB). Kalkuliert man diesen Aufwand mit ein, fährt man mit klassischen RDBMS zumindest zu Projektstart wohl meist besser. Ob man dann nun gewohnt normalisiert oder seine eigene, pragmatische Lösung, z.B. über Key/Value, darauf aufbaut, steht noch mal auf einem anderen Blatt.

Letztendlich gibt es aber auch Anwendungsfälle, wo NoSQL, vielleicht auch nicht als einziges System, die ideale Besetzung für eine Problemstellung darstellt. Aber auch hier wurde kontrovers diskutiert …

Fazit, na klar: it depends …

Xamarin

Interessanterweise ist Xamarin in diesem Umfeld noch immer kein Mainstream-Thema. Wenige haben konkret damit entwickelt und Erfahrungen gesammelt, nur ein paar mehr sind interessiert und tasten sich gerade vor.

Speziell Xamarin.Forms weckt aber Interesse, wobei wir uns da einig waren: noch relativ buggy, noch etwas abwarten.

Zukunft des Microsoft-Stacks

Noch eine von mir vorgeschlagene Session. Ich wollte einmal ein Stimmungsbild einfangen, was die Arbeit und die Zukunftsperspektiven von ASP.NET etc. anbelangt.

Nicht erstaunlich: so ziemlich alle sind mit den Tools (sehr) zufrieden und sehen in absehbarer Zukunft auch keine Probleme darin, damit Geld zu verdienen. Insbesondere .NET ist nicht hip und ganz klar ein (Enterprise-)Nischenthema, wenn man die gesamte Entwicklungswelt betrachtet und hier gerade auf den Webbereich schaut, dafür scheint aber die Nachfrage nach guten Entwicklern und damit auch das Niveau der Tagessätze weiterhin hoch zu sein. Auch wenn der ein oder andere eben noch WebForms klopfen muss.

TypeScript

Nachdem JavaScript zur alles dominierenden Sprache in der Webentwicklung geworden ist und sich erst in ferner Zukunft mit ECMAScript 6 einige wirklich heftige Schmerzen auflösen werden, kommt man immer wieder an den Punkt, über Alternativen nachzudenken.

Eine davon ist TypeScript, von Microsoft vor ziemlich genau zwei Jahren aus der Taufe gehoben.

Marius ging es in dieser Session darum, ebenso ein Stimmungsbild bei anderen Entwicklern abzuklopfen, was den Einsatz und die Praxiserfahrungen mit TypeScript angeht.

Wenn ich es richtig mitbekommen habe, wird es von niemandem [der Anwesenden] ernsthaft eingesetzt. Trotz der offensichtlichen Vorteile des TypeScript-Compilers und des gesamten Konzeptes dahinter sehe ich selbst zwei eher psychologische Hürden. Zum einen ist es ein Produkt von Microsoft, was für viele die Freiheit liebende Webentwickler ein Show-Stopper ist, zum anderen begibt man sich in eine Abhängigkeit zum Tooling, die man mit purem JavaScript schlicht und ergreifend nicht hat.

Klar wurde aber auch, dass es eine Schwelle bei sehr, sehr großen JS-Projekten gibt, an denen die Nachteile der Sprache dafür sorgen, dass sie kaum mehr wartbar sind.

Mein Gefühl: Besser auf Plain JS setzen. Zumindest so lange, bis der Druck wirklich groß wird.

Fazit

Schienen sich die .NET|Developer Open Spaces zuletzt eher zu Klassentreffen zu entwickeln, die ich gerne besuchte um abends 1-n Bierchen zu trinken, war es dieses Mal auch inhaltlich wieder interessant. Es gab zu den von mir besuchten und hier aufgeführten Sessions noch unzählige weitere, auf denen ich gerne gewesen wäre.

Es ist ganz spannend zu beobachten, dass sich die Schwerpunkte über die Jahre doch verschoben haben. Waren vor ein paar Jahren noch Themen wie “SharePoint” oder sogar “Lightswitch” auf der Agenda, gab es beim Session-Vorschlag “Entity Framework und WCF” dieses Mal schallendes Gelächter … etwas böse, aber irgendwie sehr vielsagend.

In diesem Sinne – bis zum nächsten Event.


| Kommentieren | © 2014 Thomas Bandt

codefest.at [MS]: Save the date for Build 2015

Microsoft hat vor kurzem Details über die die nächsten großen Konferenzen bekanntgegeben (siehe auch TechNet Blog:  Ein neuer Name für eine neue Konferenz: Microsoft Ignite Conference 2015). Seit kurzem stehen auch der Ort und der Termin für die nächste BUILD Conference fest, siehe buildwindows.com.

Die Build 2015 Conference wird von 29. April – 1. Mai 2015 (wieder) in San Francisco stattfinden. Veranstaltungsort (das Moscone Center) und Zeitraum (die erste Maiwoche) sind wieder gleich gewählt wie letztes Jahr.

image

Derzeit kann man sich in die Mailinglist der BUILD Conference eintragen um per E-mail über Neuigkeiten informiert zu werden – eine gute Idee…

image

Dieses Jahr gibt es zum Glück keine terminlichen Überschneidungen zu anderen Microsoft-Konferenzen. Hier ein Überblick über die nächsten großen Microsoft Konferenzen in USA:

  • Convergence 2015 in Atlanta, 16. – 19. März 2015, die Konferenz für Microsoft Dynamics Produkte.
  • //Build in San Francisco, 29. April – 1. Mai 2015, Technologien und Plattform-Neuigkeiten für Developer
  • Microsoft Ignite in Chicago, 4. – 8. Mai 2015, die neue Microsoft “Enterprise Tech Conference”
  • Worldwide Partner Conference in Orlando,12. – 16. Juli 2015, die Microsoft Partner Konferenz

Save the Date(s)!

Roberto Bez: Emmet in Sublime Text

Egal, welcher Texteditor gerade verwendet wird – die Chance, dass es für diesen ein Emmet Plugin gibt, ist ziemlich groß. Wenn das der Fall sein sollte, dann wird dieses Werkzeug für das eine oder andere “Yeah, geil!” sorgen.

Emmet in SublimeText installieren

Um Emmet in SublimeText zu installieren muss als aller erstes Package Control für SublimeText installiert werden. Der auf der Webseite gefundene Code muss dafür einfach in die Console von SublimeText (ctrl+`oder View > ShowConsole) eingefügt werden.

Nach einem Neustart von SublimeText kann Emmet über das Package Control – ctrl+shift+p (Windows, Linux) oder cmd+shift+p (OS X) – mit dem Befehl install package installiert werden.

Einführung in Emmet

Jeder Entwickler weiß, dass das Tippen von HTML Code viel unnötige Zeit in Anspruch nimmt. Das muss aber eigentlich gar nicht sein, denn Emmet hilft mit Snippets und Abbreviations (Abkürzungen) das Schreiben von HTML und CSS Code deutlich zu beschleunigen:

div.container

Einmal auf die Tab-Taste:

<div class="container"></div>

Diese Abkürzung geht mit .container noch etwas kürzer – da Emmet implizit von einem div-Element ausgeht.

Damit lassen sich alle möglichen Konstrukte bilden: Von children bis siblings, von Nummerierungen bis zu eigenen Attributen. Beispielsweise kann mittels einer html:5 oder ! Abkürzung ein komplettes HTML5 Dokument erzeugt werden:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>

Es gibt noch viele weitere Abkürzungen. Um ein paar Beispiele zu nennen:

Abkürzung Ergebnis
            script:src
        
            <script src=""></script>
        
            link:rss
        
            <link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml">
        
            input:hidden
        
            <input type="hidden" name="">
        
            table+
        
<table>
    <tr>
        <td></td>
    </tr>
</table>
        
            select+
        
<select name="" id="">
    <option value=""></option>
</select>
        


Child/Parent/Sibling-Elemente mit Emmet

Mit Emmet ist es ein Kinderspiel, beispielsweise Unterelemente für eine Liste zu erzeugen:

ul>li*3

Wird zu:

<ul>
    <li></li>
    <li></li>
    <li></li>
</ul>

Während das &gt-Zeichen angibt, dass es sich um Kind-Elemente handelt, kann mit einer *3 Abkürzung das Ergebnis um ein vielfaches dupliziert werden. Der aktuelle Counter kann über $ abgefragt werden, wenn dieser denn benötigt wird:

ul>li.itemClass$*3

Wird zu:

<ul>
    <li class="itemClass1"></li>
    <li class="itemClass2"></li>
    <li class="itemClass3"></li>
</ul>

Auf das Parent-Element zu erreichen, wird ein ^ verwendet:

div>ul>li*3^div.container

Wird zu

<div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <div class="container"></div>
</div>

Mit einem + können Elemente auf der Selben Ebene hinzugefügt werden:

div>label+button

Wird zu:

<div>
    <label for=""></label>
    <button></button>
</div>

Custom Text / Attributes in Emmet

Mittels {} kann ein beliebiger Text angegeben werden:

div>label{Name:}+input+button{Absenden}

Wird zu:

<div>
    <label for="">Name:</label>
    <input type="text">
    <button></button>
</div>

Und ebenfalls eigene Attribute sind problemlos mit [for="name"] möglich:

form>label[for="name"]{Name:}+input#name+button{Absenden}

Wird zu:

<form action="">
    <label for="name">Name:</label>
    <input type="text" id="name">
    <button>Absenden</button>
</form>

Gruppierungen

Wenn Konstrukte – beispielsweise mit vielen Child/Parent Angaben – zu komplex werden, können diese mit Klammern gruppiert werden:

div>(ul>li*3)+h2+(ul>li*4)

Wird zu:

<div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <h2></h2>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</div>

Enter Abbreviation

Wenn mehrere Zeilen im Editor markiert sind, können diese mittels ctrl+alt+enter (Enter Abbreviation) innerhalb von anderen Elementen gewrapped werden. Dies macht beispielsweise bei einer Navigation Sinn:

Home
About
Contact

ctrl+alt+enter

div>ul>li*>a[title=$#]{$#}

Ergibt:

<div>
    <ul>
        <li><a href="" title="Home">Home</a></li>
        <li><a href="" title="About">About</a></li>
        <li><a href="" title="Contact">Contact</a></li>
    </ul>
</div>

Wie bereits zuvor erwähnt werden mit * die Elemente wiederholt, mit $# hingegen das aktuelle der markierten Elemente eingefügt.

Alles in allem

Selbst eine komplette HTML5 Seite, wie das folgende Beispiel zeigt, kann über die gezeigten Abkürzungen und Snippets erzeugt werden:

Sublime Text - Emmet Plugin

html:5>(header>nav>ul>li*4>a)+(.content>article*2>h1+p>lorem15^aside.sidebar)+(footer>p{Copyright 2014})+script:src

Wird zu:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <header>
        <nav>
            <ul>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
            </ul>
        </nav>
    </header>
    <div class="content">
        <article>
            <h1></h1>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eaque assumenda id adipisci amet earum, tenetur?</p>
            <aside class="sidebar"></aside>
        </article>
        <article>
            <h1></h1>
            <p>Dolorem odio ab dicta minus, qui molestias! Asperiores delectus sint debitis illum numquam tempore veritatis.</p>
            <aside class="sidebar"></aside>
        </article>
    </div>
    <footer>
        <p>Copyright 2014</p>
    </footer>
    <script src=""></script>
</body>
</html>

Wie das Cheat-Sheet zeigt, bietet Emmet noch viele weitere Abkürzungen.

Was hast Du mit Emmet so für Tricks auf Lager? Zeig es in den Kommentaren :)

ppedv Team Blog: Windows 10: Virtuelle Desktops

Seit 30. September 2014 stellt Microsoft allen Usern eine kostenlose Vorab-Version (Technical Preview) von Windows 10 zur Verfügung. Ein neues Feature, das die nächste Windows-Version mit sich bringt, sind die sogenannten “Virtuellen Desktops”.

Mit den virtuellen Desktops ist es nun möglich geöffnete Programme auf mehrere Desktops zu verteilen – das kann sehr hilfreich sein, wenn man nur einen Monitor hat, man jedoch z.B. mit mehreren Programmen gleichzeitig arbeiten und zwischen diesen hin und her springen muss.

Einen neuen Desktop kann man über das Fenster-Icon, das sich in der Taskleiste rechts neben dem Lupen-Icon befindet, erzeugen.

Windows 10-3

 

 

Danach einfach auf das kleine schwarze Fenster mit dem +-Zeichen klicken.

Um zu einem anderen Desktop zu wechseln bzw. einen Überblick über alle existierenden Desktops zu erhalten, ebenfalls auf das Fenster-Icon in der Taskleiste klicken.

Windows 10-4

Fährt man mit der Maus über ein Vorschau-Fenster eines Desktops, dann wird dieser in der Mitte des Bildschirms etwas vergrößert dargestellt.

Allerdings besitzt nicht jeder Desktop eine eigene Taskleiste. Damit hat man in der Taskleiste die Icons aller geöffneten Programme, die sich auf den unterschiedlichen Desktops befinden. Befindet sich ein Programm allerdings auf einem anderen Desktop als auf dem aktuell Aktiven, dann wird dies durch eine kleine Leiste unter dem Icon symbolisiert.

Windows 10-5

 

Durch die Tastenkombination “ALT + Tabulator” erhält man eine Übersicht über alle geöffneten Programme – auch die, die sich auf einem anderen Desktop befinden. Drückt man mehrmals die Tabulator-Taste (bei gedrückter ALT-Taste), wird das nächste Programm markiert (erkennbar am weißen Rahmen). Erst wenn man die ALT-Taste loslässt, wechselt man zu dem entsprechenden Desktop und dem ausgewählten Programm.

Windows 10-6

 

 

Ein geöffnetes Programm auf einen anderen Desktop zu verschieben, ist (bislang) leider nicht möglich.

ppedv Team Blog: Microsoft bietet 4 kostenlose Zertifizierungsprüfungen für Azure und Office365

Microsoft bietet einem Blog-Beitrag von Andrew Parson zufolge aktuell Prüfungen über Prometric kostenlos an. Damit lassen sich 2 Zertifizierungen erreichen:

Für den Microsoft Certified Specialist in Azure muss mindestens eine dieser beiden Prüfungen abgelegt werden:

  • 70-532: Developing Microsoft Azure Solutions

  • 70-533: Implementing Azure Infrastructure Solutions

 

 Um den Microsoft Certified Solutions Associate in Office 365 zu erreichen, müssen die beiden folgenden Prüfungen abgelegt werden:

  • 70-346: Managing Office 365 Identities and Requirements

  • 70-347: Enabling Office 365 Services

 

Die Voucher zum kostenlosen Ablegen der Prüfungen können von hier bezogen werden: http://borntolearn.mslearn.net/goodstuff/p/mcp.aspx

Das Angebot ist nur begrenzt gültig und maximal bis zum 31. Dezember 2014 verfügbar – schnell sein ist also die Devise!

PS: 70-532 ist ein Beta-Examen!

Holger Schwichtenberg: Rabattcode für Software Quality Days 2015

Die Software Quality Days 2015 finden vom 20. bis 23. Januar 2015 in Wien statt.

Golo Roden: Nachgelegt: Docker-Container im laufenden Betrieb untersuchen, Teil 2

Die neue Version 1.3 von Docker ist verfügbar und enthält interessante Neuerungen. Unter anderem kennt Docker nun ein neues Kommando, um Containern im laufenden Betrieb neue Prozesse hinzuzufügen. Das ersetzt das im vorherigen Blog-Eintrag beschriebene Werkzeug nsenter.

ppedv Team Blog: Windows 10 – Apps im Fenstermodus

Schon unter Windows 8.1 Update 1 gab es die Möglichkeit, Apps über die Titelleiste direkt zu beenden. Zusätzlich konnte man Apps an die Taskbar anheften und über Alt + Tab zwischen Programmen und Apps wechseln. Diese Funktionen werden mit Windows 10 jetzt noch erweitert, sodass Sie nun Apps parallel zu normalen Programmen im Fenstermodus betreiben, und diese genauso minimieren und maximieren können.

fenster

Sie können außerdem die sogenannte Snap-Funktion nutzen, um Anwendungen an bestimmten Stellen des Desktops anzupinnen. Dazu müssen Sie die Anwendung oder App einfach nur in die gewünschte Ecke oder Rand des Desktops ziehen. Windows 10 macht Ihnen hierbei Vorschläge für eine möglichst effiziente Anordnung. Möglich sind hierbei bis zu vier Anwendungen, was gerade bei größeren Bildschirmen im Vergleich zum Vorgänger ziemlich praktisch ist.

veteilt

Durch dieses neue Feature sollen auch die Grenzen zwischen Apps und den klassischen Anwendungen immer weiter verschwimmen. Microsoft will auf lange Sicht diese Grenzen komplett auflösen, sodass es nur noch so genannte “Universal Apps” gibt.

full

ppedv Team Blog: Fileupload mit Angular.JS

Eigentlich müsste es heißen: Der Kampf des Dateiuploads gegen Angular.JS. Das Framework unterstützt uns dabei in keiner Weise. Wir müssen es an mehreren Stellen sogar austricksen.

Die Programmieraufgabe umfasst folgende Bauteile

  • Webservice, der die Datei entgegennimmt und speichert
  • HTML User Interface mit Input Type File
  • JavaScript Code für Ajax und Scope

Um volle Kontrolle über die hochgeladenen Dateien zu haben, bezüglich Typ, Größe oder Speicherort, bleibt nur ein Service am Web Server. In diesem Fall ist dieser per ASP.NET Web API und VB.NET erstellt.

   1:  Public Class fileuploadController
   2:      Inherits ApiController
   3:      <HttpPost>
   4:      Public Sub UploadFile()
   5:          If HttpContext.Current.Request.Files.AllKeys.Any() Then
   6:              Dim f = HttpContext.Current.
Request.Files("UploadedImage")
   7:              If f IsNot Nothing Then
   8:                  Dim fp = Path.Combine(
HttpContext.Current.Server.MapPath("~/upload"),
Path.GetFileName(f.FileName))
   9:                  f.SaveAs(fp)
  10:              End If
  11:          End If
  12:      End Sub
  13:  End Class

 

Das UX wird aus optischen Gründen auf einen Button reduziert, der den Betriebssystem-File-Open-Dialog öffnet und beim Schließen den Upload anstößt. Dadurch können wir das UI per Bootstrap schöner stylen, da die leere Textbox des Type File nicht angezeigt wird. Allerdings muss ein zweiter Button das Click Event des Fileupload-Buttons auslösen.

Das geschieht in Zeile 6 und zeigt bereits eine Reihe von Problemen mit Angular. Eigentlich sollte der Onclick-Handler nicht im HTML-Code auftauchen. Die Alternative ist eine Angular-Direktive mit rund 15 Zeilen Code, mit der dann auch noch ein zusätzliches Attribut in das Input-Element gelegt werden muss. Das ist mehr Aufwand und der Code ist dadurch leider auch nicht besser lesbar.

Außerdem kann man leider die DOM-Selector-Eigenschaften nicht verwenden, auch wenn ein angular.element(‘#id’) uns dies glauben lässt. Damit dieser Code funktioniert, muss erst noch jQuery eingebunden werden, da JQLite diese Selektoren nicht beinhaltet. Dann könnte man aber gleich $(‘#id’) nutzen. Es drängt sich die Frage auf, warum das komplette jQuery Framework überhaupt Overhead erzeugen soll, wenn es die benötigte JavaScript-Funktion bereits gibt. Also wird hier document.querySelector verwendet, um das Click Event durchzureichen.

Noch schlimmer wird es, wenn man aus normalem JavaScript auf das Angular Framework zugreifen muss. Dies ist hier nötig, da die Value Eigenschaft, die die ausgewählte Datei beinhaltet, nicht per ng-model bindbar ist. Auch für dieses Problem lässt sich eine umfangreiche Direktive schreiben oder einfach das OnChange-Event auf ein Event des $Scope durchreichen (Zeile 4)

   1:  <body  ng-controller="uploadController">
   2:      <label for="fileUpload"></label>
   3:      Select <input id="fileUpload" type="file" 
style="visibility:hidden;position:absolute;top:0;left:0"
   4:         onchange="angular.element(this).scope().onChange(this)" />
   5:   
   6:      <input id="btnUploadFile" type="button" value="Upload File"
onclick="document.querySelector( '#fileUpload').click()" />
   7:  <img id="progress" src="img/upload-indicator.gif"  ng-show="warten"/>

 

image

Zusätzlich wird noch ein animiertes GIF verwendet, das die Uploadaktivität visualisiert und hier durchaus elegant per ng-show an die Eigenschaft Warten des $scope gebunden wird.

Zuletzt muss noch die eigentliche Upload-Logik geschrieben werden. Dazu wird ein Formdata-Objekt erstellt und mit den Datei-Meta-Informationen und dem Stream gefüllt. Dann wird per $http der Post auf den Upload-Service angestoßen. Um ein Problem mit Angular und dem benötigten Multipart-Formdata-Header zu umgehen, fügen wir in Zeile 17-19 Workaround-Code ein.

   1:  var app=angular.module("App",[])
   2:    .controller("uploadController", function ($scope,$http) {
   3:     $scope.warten = false;
   4:     $scope.onChange = function (dateien)
   5:      {
   6:        $scope.warten = true;
   7:        var file = dateien.files[0];
   8:        var data = new FormData();
   9:        data.append('UploadedImage', file);
  10:        data.append('FileName', file.name);
  11:        data.append('fileSize', file.size);
  12:        data.append('fileType', file.type);
  13:   
  14:        $http
  15:          .post('/api/fileupload/uploadfile' , data,
  16:                 {
  17:                   transformRequest: angular.identity,
  18:                    headers: { 'Content-Type': undefined }
  19:                  })
  20:                 .success(function () {
  21:                       $scope.warten = false;
  22:                  })
  23:                 .error(function () {
  24:                       $scope.warten = false;
  25:                          alert('error');
  26:                      });
  27:              };
  28:     });

Code-Inside Blog: OpenRA: Open Source Command & Conquer written in C#

If you are familiar with Dune 2 or the Command & Conquer Serie you will definitely love OpenRA.

Project Description

x

From the project site:

OpenRA is a Libre/Free Real Time Strategy project that recreates the classic Command & Conquer titles.

We include recreations of C&C (Tiberian Dawn), C&C: Red Alert, and Dune 2000. These are not intended to be perfect copies, but instead combine the classic gameplay of the originals with modern improvements such as unit veterancy and the fog of war.

OpenRA’s primary focus is cross-platform multiplayer between Windows, OS X, and Linux; however, we include a number of single-player missions, and also support skirmish games against AI bots.

Completely written in C# and on GitHub

I always wanted to take a deeper look at Games, but most Games are written in C/C++ or other crazy languages. OpenRA on the other hand is written in C# and is on GitHub - so Yeah!

x

Game Features

The Game consists of the whole Engine, including AI, Multiplayer, Scripting (interesting for Maps) and so on and the three different Mods:

  • Tiberum Dawn (Command & Conquer 1)
  • Red Alert (Command & Conquer 2)
  • Dune 2000

A Tiberum Sun Mod (the 3rd C&C) is currently under development. All games have been updated with “modern” RTS game elements - I definitely had great fun playing some rounds.

Coding Experience

The GitHub repo has a bunch of batch files and the Visual Studio Solution in it. Sometimes it can be a bit challenging to start and debug the game within Visual Studio, but make sure all dependencies are copied (via make dependencies) or try to switch branches. The best part is that the team is very active and is available via GitHub or in IRC. All you need to do is:

make all
OpenRA.Game.exe

Or run it in Visual Studio.

More information can be found here

This should build the solution and will start the game.

Platform neutral

You can also compile the Game with Xamarin or Mono Develop under OS X or Linux and you don’t need any expensive Visual Studio licence - the “Express”-Version should work, too.

The “Game-loop”

For me the biggest difference between a real Game and a “normal” business application is the Game loop - which is kinda crazy, because it’s a big while-loop. This loop is in charge for rendering and the logic. You can found the OpenRA Game loop in the Game.cs.

Interesting Stuff

If you look deeper at the code you will see some very cool stuff:

  • OpenGL Rendering
  • LUA Scripting
  • Modding via YAML
  • AI Stuff (also configured via YAML)
  • Working with the different assets from C&C & co.

Take a look

As I already said - if you are interested in Game Development, this could be a good start. There is also a special GitHub label for easy tasks if you want to contribute. You can also just enjoy this great game. I’m always open for a quick OpenRA match.

x

Happy Coding… or playing.

ppedv Team Blog: Preisänderungen und neue Features in Microsoft Azure

 

Microsoft stellt eine neue Serie von Standardinstanzen für virtuelle Maschinen und Clouddienste zur allgemeinen Verfügung. Die neue sogenannte D-Serie verfügt über lokale SSD-Platten und schnellere Prozessoren im Vergleich zur bisherigen A-Serie.

 

Die Instanzen sind für den normalen Gebrauch in den Versionen D1 mit 3,5 GB Speicher und 50 GB SSD-Platte bis hin zu D4 mit 8 Prozessoren, 28 GB Speicher und 400 GB SSD Platte verfügbar. Für speicherintensiven Gebrauch stehen vier unterschiedliche Instanzen beginnend bei D11 mit 14 GB Speicher und 100 GB SSD-Platte bis D14 mit 16 Prozessoren, 112 GB Speicher und 800 GB SSD zur Auswahl.

 

Eine detaillierte Preisinformation finden Sie unter: http://azure.microsoft.com/en-us/pricing/details/virtual-machines/.

 

Der Azure Redis Cache steht nun auch zur allgemeinen Verfügung. Dieser verteilte und verwaltete In-Memory Cachespeicher, basierend auf dem Open Source Projekt Redis Cache, gibt Ihnen Zugriff auf einen von Microsoft verwalteten sicheren und hochperformanten Speicher.

 

Der Cache wird in einer Basis- und Standardinstanz angeboten. Die Basisinstanz ist ein einziger Knoten, der sich sehr gut für die Entwicklung und für nichtkritische Arbeitsaufgaben eignet. Die Standardinstanz ist ein replizierter Cache bestehend aus zwei Knoten, für den auch ein Service Level Agreement besteht.

Detaillierte Preisinformationen finden Sie unter http://azure.microsoft.com/de-de/pricing/details/cache/.

 

Ansonsten hat Microsoft Ende September auch noch bei vielen weiteren Diensten in der Cloud die Preise gesenkt.  Eine komplette Übersicht dazu finden Sie unter http://azure.microsoft.com/en-us/updates/azure-pricing-updates/.

ppedv Team Blog: Einige Neuerungen im Windows Server 2015 (Technical Preview) bezüglich Hyper-V

In der aktuell verfügbaren Technical Preview auf den künftigen Windows Server (aktuell unter verschiedenen Namen bekannt, Windows Server 10, Windows Server 2015, Threshold, …) sind bereits einige Neuerungen in Hyper-V erkennbar. Einige davon möchte ich hier kurz ansprechen:

Production Checkpoints vs. Standard Checkpoints

Neben den bisherigen “regulären” Snapshots/Checkpoints (Im Windows Server 2015 als “Standard Checkpoints” bezeichnet) gibt es nun “Production Checkpoints”, die explizit für Maschinen im Produktiv-Betrieb gedacht sind.

Checkpoints1

Hierbei wird mit Hilfe der Datensicherungstechniken des Gastbetriebssystems (bei Windows via VSS, bei Linux über den Systempuffer) ein Snapshot erzeugt, der auf Konsistenz ausgelegt ist. Sollte ein solcher Snapshot nicht möglich sein, wird auf einen regulären Snapshot ausgewichen (bei dem eben keine Konsistenz aller Daten gegeben ist). Wurde der Production Snapshot erfolgreich erzeugt, wird eine entsprechende Meldung ausgegeben:

Checkpoints2

Für den Production Snapshot muss die Windows Server-Sicherung im Gast-System NICHT installiert sein:

Checkpoints3

Laufende Anwendungen werden bei dieser Snapshot-Technik nicht berücksichtigt. Nach einem Revert (Zurücksetzen auf einen Snapshot) muss die VM neu gestartet werden, Anwendungen, die zum Zeitpunkt des Snapshots liefen, gehen dadurch verloren. Allerdings verhält sich das Gast-Betriebssystem so wie nach einem regulären, sauberen Shutdown:

Checkpoints4

Hyper-V Manager Remote Management

Bereits frühere Versionen des Hyper-V Managers haben es ermöglicht, von einem System aus mehrere Hosts unter einer GUI zu verwalten. Dabei fand das Login auf den Remote-Servern immer mit den Credentials des interaktiv angemeldeten Benutzers statt. Der neue Hyper-V-Manager macht es jetzt möglich, alternative Login-Daten anzugeben:

HyperV1

Damit wird es möglich, Maschinen in fremden Domänen, in Workgroups oder in der DMZ anzusprechen.

ppedv Team Blog: Angular 1.3 .. is not a function

Die seit wenigen Tagen verfügbare Angular.JS 1.3 Version bringt eine Reihe von Änderungen mit sich, die auch in fertigen Anwendungen negative Auswirkungen haben können. In diesem Fall war es ein Code-Beispiel für meinen Angular.JS Workshop auf der ADC X in Mannheim und Wien. Das JavaScript Code Beispiel für eine globale Controller-Funktion liefert eine Fehlermeldung im F12 Browser Developer Tools Command Window.

image

Nicht, dass man damit schönen Code schreibt. Aber vorher funktionierte

   1:   <div ng-app="" ng-controller="personController">
   2:      ...
   3:  </div>
   4:   
   5:  <script>
   6:          function personController($scope) {
   7:              $scope.firstName = "John",
   8:              $scope.lastName = "Doe"
   9:          }
  10:  </script>

 

Jetzt muss ein Angular Modul und ein expliziter Controller darin definiert werden.

Wer unbedingt das alte Verhalten benötigt, kann dies erzwingen per

   1:   angular.module('myModule').config(['$controllerProvider',
function ($controllerProvider) {
   2:                        $controllerProvider.allowGlobals();
   3:          }]);

 

Das ist allerdings nicht besonders sinnvoll. Wenn man schon ein Modul anlegt, ist der Controller auch gleich gecoded.

Das Problem entsteht für Anfänger, da viele Blogs diesen kurzen Weg für Angular Sample Code verwenden.

codefest.at [MS]: Eindrücke vom Modern meets Retro - Gaming Hackathon

Dieses Wochenende haben wir mit 40 Teilnehmern einen tollen Gaming Hackathon hinter uns gebracht. Alle Teilnehmer haben einzeln oder in Teams tolle Spielprojekte ausgearbeitet, die sich wirklich sehen lassen können. Einige Impressionen gibt es bereits auf Twitter.

Bei der Preisverleihung hat sich herausgestellt, dass es zwei dritte Plätze mit gleich vielen Stimmen herausgebildet haben, also haben wir beiden drittplazierten Teams ein Windows Phone gegeben.

Die Aufnahmen zu den Vorträgen und Workshops werden in Kürze hier auf Codefest gestellt.

Alle, die noch nicht an unserer Game Development Challenge teilnehmen könnten, haben jetzt noch die Chance weitere tolle Preise zu gewinnen. Einfach bis zum 31. Oktober 2014 euer Spiel in den Windows Store oder Windows Phone Store stellen und gebt uns Bescheid. Wir werden dann am 9. Dezember 2014 die Gewinner ermitteln.

Mehr Infos zur Challenge findet ihr hier. Wir sind schon gespannt auf Eure Einreichungen.

ppedv Team Blog: Angular.JS heilt Krebs

Das könnte man meinen, wenn man Tweets verfolgt. Kaum ein kritisches Wort. Und wenn doch wird der Urheber einmal durch Twitter rauf und runter gebasht. So passiert einem Daniel Steigerwald. Man könnte durchaus Parallelen zu Religionsgemeinschaften ziehen. Kritiker werden darauf verwiesen, eben nicht richtig verstanden zu haben. Der einzige wahre Weg führt durch dieses Framework (und noch 42 andere, die man braucht).

Für die Schmerzen, die man jetzt gerade erleidet, wird eine wundersame Zukunft, oder Jungfrauen, in einem späteren Leben versprochen.

Lebensrealitäten werden ausgeblendet und Absurdes zu State of the Art erhoben. Gestandene Mittfünfziger erscheinen plötzlich im Superman-Kostüm an ihrem Arbeitsplatz in der Bank, um auch mal ein Superheld zu sein.

image

Natürlich nicht zu vergessen, dieser sagenhafte neue Sprit, der 20 Cent mehr kostet an der Tankstelle und bis zu 10% mehr Leistung verspricht. Super Power eben- darunter machen wir's nicht mehr.

image

Derartig ausgestattet flutscht das Leben quasi von selbst. Und den letzten Zweiflern wird der Open Source-getränkte Lappen in den Mund gestopft, um sie zum verstummen zu bringen.

Um meinen Sohn zu zitieren:

“Hallo! gehts noch?”

Angular ist eines von hunderten JavaScript Frameworks. JavaScript ist per Definition immer quelloffen. Es stammt von einer Firma, die ihr Geld mit dem Ausspähen Deiner Daten verdient. Angular ist bei weitem nicht perfekt und fehlerfrei. Es ist schwer zu erlernen. Die meisten Entwickler schreiben nach wie vor keinen Testcode. Es existiert schlicht, weil JavaScript eine geliebte Missgeburt aus dem letzten Jahrtausend ist.

Trotzdem kommt man bei Web-Applikationen nicht daran vorbei. Es wird breit verwendet und hat wirklich nette Funktionen. Aber Angular.js ist keine Silberkugel und heilt keine Programmiererkrankheit. Persönlich finde ich auch, dass man mit Angular und JavaScript im allgemeinen besonders scheusslichen unlesbaren Code schreiben kann.

Wer sich für das Thema aus einer weniger glorifizierenden Perspektive interessiert, kann an meinen beiden ganztägigen #ADCX Hands On Angular Workshops teilnehmen. Am 20.Oktober in Frankenthal http://adc.ms und am 6. November in Wien http://adc.ms/wien.

Golo Roden: Hereinspaziert: Docker-Container im laufenden Betrieb untersuchen

Einen Docker-Container zu starten fällt leicht. Doch was, wenn die darin ausgeführte Anwendung nicht wie gewünscht funktioniert? Einen Container im laufenden Betrieb zu untersuchen, scheint auf den ersten Blick nahezu unmöglich. Ein kleines Werkzeug schafft Abhilfe.

Marco Scheel: Links for 2014-10-13 [del.icio.us]

Jürgen Gutsch: AngularJS, File Upload und “Multipart/Form-Data”

Hin und wieder macht es Sinn, Dateien asynchron im Hintergrund auf den Server zu laden. Rein mit AngularJS ist das allerdings nicht ganz trivial und funktioniert vor allem nicht so wie erwartet.

Angenommen wir haben die Datei per JavaScript schon ermittelt (entweder aus einem Input-Element vom Type “file” oder per Drag&Drop) können wir die Eigenschaften auslesen und zusammen mit der Datei, in ein FormData Objekt packen:

var data = new FormData();
data.append('file', file);
data.append('fileName', file.name);
data.append('fileSize', file.size);
data.append('fileType', file.type);
               
$http
    .post('/api/DocumentApi/Upload/' + id, data)
    .success(function () {
        alert('success');
    })
    .error(function () {
        alert('error');
    });

Dieser Code läuft zwar fehlerfrei durch, allerdings kommt die Datei auf dem Server nicht an. Logisch der Content ist nicht als “Multipart/Form-Data” deklariert. Man sollte also meinen es müsse reichen den Content-Type entsprechend zu setzen:

$http
    .post('/api/DocumentApi/Upload/' + id, data, {
        headers: { 'Content-Type': ‘multipart/form-data’ }
    });

Leider gefehlt. Angular ignoriert diesen Content-Type komplett. Damit die Daten als “Multipart/Form-Data” versendet werden und die Datei auf dem Server ankommt, muss der Content-Type auf ‘undefined’ gesetzt werden. Ist das entsprechend gesetzt, versendet AngularJS die Daten als “Multipart/Form-Data”. (Nachzulesen auch hier bei Jenny Louthan)

Folgende Konfiguration funktioniert dagegen Problemlos:

$http
    .post('/api/DocumentApi/Upload/' + id, data, {
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined }
    });

Da muss man dann erst mal drauf kommen. ;)

Gregor Biswanger: Roadshow: Einstieg in die Hybrid App Entwicklung

Seit 2009 halte ich regelmäßig Entwickler-Roadshows. Auch dieses Jahr und Anfang 2015 möchte ich die Community in Deutschland, Österreich und in der Schweiz mit einer kostenfreien Roadshow zum Thema „Cross Plattform Entwicklung“ unterstützen.

Doch diesmal wird das keine gewöhnliche Roadshow, sondern eine Cross Community Roadshow. Damit ist gemeint, dass die Roadshow nicht nur wie bisher für Microsoft User Groups stattfindet, sondern ebenfalls für Google Developer Groups und JavaScript User Groups.

Beschreibung

Die Entwicklung von Apps ist nicht einfach und jede "Systemwelt" hat ihre eigenen Tools und Anforderungen. Ob mit Java und Eclipse für Android, mit Objective-C und Xcode für iOS, oder mit den Microsoft-Tools für die Windows-Welt. Bei diesem Vortrag lernen Sie die vielfältigen Möglichkeiten der App-Entwicklung für alle gängigen Plattformen mit nur einer Programmiersprache kennen: HTML5 und JavaScript. Sie steigen mit den Grundlagen des kostenlosen Intel XDK ein und werden dann mit den wichtigsten Frameworks und Vorgehensweisen vertraut gemacht. Mit diesen Infos steigen Sie rasch auf zum versierten Cross-Plattform Entwickler.

Termine

.NET User Group Ingolstadt

03.02.2014

Dotnet Cologne 2014

09.05.2014

.NET User Group Dortmund

06.08.2014

.NET User Group Regensburg

18.09.2014

BASTA! 2014

25.09.2014

.NET User Group Berlin Brandenburg

02.10.2014

Google Developer Group Bremen

15.10.2014

.NET User Group Hamburg

16.10.2014

DevFest Wien

18.10.2014

Advanced Developers Conference Mannheim

21.10.2014 – 22.10.2014

DevFest Karlsruhe

25.10.2014

.NET User Group Stuttgart

29.10.2014

DevFest Zürich

22.11.2014

.NET User Group Bonn

20.01.2015

*

*

*Weitere Termine folgen.

 

Für User Groups

Weitere User Groups die an diesem Vortrag Interesse haben, schreiben mir bitte eine E-Mail an: gregor.biswanger@cleversocial.de

Ich freue mich auf euer zahlreiches Erscheinen!

ppedv Team Blog: Erste offensichtliche Änderungen am neuen Windows Server (Technical Preview)

Der neue Windows Server, der aktuell noch als “Technical Preview” bezeichnet wird, bringt zumindest optisch nicht viele Neuerungen mit. Wenn man aber einfach mal via Servermanager neue Rollen und Features hinzufügt, fällt einem schnell auf, dass es hier doch viel Neues gibt:

Rollen

Hier ist der “MultiPoint Server” als neue Rolle zu finden. Bisher war dies ein eigenständiges Produkt, welches separat heruntergeladen und installiert werden musste.

Features1

Features2

Features3

Bei den Features gefällt mir vor allem die Möglichkeit, Windows selbst neu zu starten (“Soft Restart”), ohne die Hardware (incl. POST und allem was dazugehört) neu starten zu müssen. Dies bringt vor allem bei Updates deutlich kürzere Downtimes.

Die Funktionen werde ich demnächst im Detail testen und darüber berichten.

ppedv Team Blog: Hybrid Apps: Visual Studio 2013 und Apache Cordova für Android

Hybride Applikationen, oder einfach Hybrid Apps, sind Anwendungen, die auf mobilen Geräten, wie Smartphones oder Tablets, installiert werden können. Der Vorteil dieser Anwendungen liegt darin, dass Hybrid Apps mit den Technologien HTML, CSS und Javascript umgesetzt werden können. Somit kann zumindest die gleiche Präsentationsschicht auf unterschiedlichen Plattformen – also Cross-Plattform – verwendet werden. Hybrid-Apps bauen oft auf das Open-Source Framework Apache Cordova auf, das die Plattformen Windows Phone, iOS, Android und Blackberry unterstützt. Näheres zum Thema mobiles Internet und Hybrid Apps, finden Sie in diesem Blogbeitrag.

Aktuell bietet Microsoft die Möglichkeit, Apache Cordova in Visual Studio relativ einfach zu integrieren. Wenn Sie Apps erstellen, müssen Sie jedoch einige plattformspezifische Eigenheiten beachten. In diesem Blogbeitrag betrachten wir kurz, wie Sie Visual Studio 2013 konfigurieren müssen, um eine hybride Applikation speziell für Android-Geräte erstellen zu können.

Cordova Visual Studio


Als ersten Schritt müssen Sie das Apache Cordova Plugin in Visual Studio 2013 installiern. Das Plugin können Sie bequem als Add-On Installer hier herunter laden.

Android Applikationen bauen auf der Dalvik Virtual Machine auf. Diese Ausführungsumgebung übersetzt JAVA Code in Bytecode-Format. Aus diesem Grund muss eine Java Runtime Environment (JRE) installiert werden. Am besten beziehen Sie die JRE direkt von Oracle.

Zusätzlich zur JAVA JRE muss die Android-spezifische SDK (Software Development Kit) installiert werden. Hierzu genügt es, die stand-alone Version der Android SDK zu installieren. Diese finden Sie unter diesem Link. Sobald das SDK installiert wurde, müssen Sie dieses starten und aktualisieren. Navigieren Sie dazu in das Installationsverzeichnis und starten Sie den SDK Manager. In diesem Verzeichnis befindet sich zusätzlich der AVD Manager (Android Virtual Device Manager), mit dem Android-Gerät-Emulatoren erstellt werden können.

Nachdem die Entwicklungsumgebung auf dem Computer eingerichtet wurde, müssen zusätzliche Einstellungen für und auf dem Android-Mobilgerät durchgeführt werden.

Zunächst kann das Smartphone oder Tablet an den Computer mittels USB Kabel verbunden werden. Es ist wichtig, dass die aktuellen USB-Treiber Ihres Mobilgeräts installiert sind. Ist dies nicht der Fall, suchen Sie die aktuellen USB-Treiber in einer Suchmaschine und installieren Sie diese.

Außerdem muss auf dem Android Smartphone USB Debugging aktiviert sein. Diese Entwicklereinstellung ist leider nicht auf jedem Android Mobilgerät ident und sehr oft in einem Untermenü versteckt. Am einfachsten kann diese Einstellung im Internet über eine Suchmaschine gefunden werden. Einfach nach der Gerätbezeichnung und USB Debugging suchen.

Sobald Sie Visual Studio 2013 starten, können Sie eine neue Hybrid App anlegen:

Hybrid App Visual Studio

Alle notwendigen Schritte, um Android Hybrid Applikationen mit Visual Studio 2013 erstellen zu können, haben wir uns nun angesehen. Die App können Sie als mobile Webseite, als Hybrid-App auf dem Gerät oder in einem erstellten Emulator ausführen.

Marco Scheel: Links for 2014-10-12 [del.icio.us]

Johannes Renatus: AngularJS Directive TemplateURLs mit ASP.NET MVC (virtuelle Verzeichnisse)

Wie und wo legt man am besten die HTML Templates für die eigenen AngularJS Direktiven ab? AngularJS bietet hier mehrere Möglichkeiten, zum einen über eine Template URL oder das direkte Definieren von Templates im JavaScript über einen String. Auch beim Angeben der Template URLs gibt es zwei Möglichkeiten wo das Template abgelegt werden kann, entweder […]

friends header

bloggers headline

links header

 
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.