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.

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!

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

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:     });

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/.

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.

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.

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.

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.

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.

Training, Schulung, JavaScript, HTML, CSS, Dot Net, Asp Net

Month List