Windows 10 kommt!

Nun ist es also bekannt – das nächste Client-Betriebssystem aus dem Hause Microsoft wird nicht “Windows 9” sondern “Windows 10” heissen. Das hat Microsoft heute Nacht in einer Pressekonferenz und –Erklärung bekannt gegeben (http://www.microsoft.com/en-us/news/press/2014/sep14/09-30futureofwindowspr.aspx)

Das Betriebssystem ist im Gegensatz zu Windows 8 wieder mehr auf Business-Kunden zugeschnitten. Dies ist auch an der gravierenden Änderung bzgl. der “Metro-Oberfläche” zu sehen: Das Startmenü wird wie erwartet eine Mischung aus Metro und Windows-7-Startmenü sein.

Im Laufe des heutigen 01. Oktobers soll eine erste Preview-Version auf folgender Webseite erhältlich sein:

http://windows.microsoft.com/de-de/windows/preview-coming-soon

Sobald diese Verfügbar ist und ich Gelegenheit hatte, diese zu testen, werde ich wieder berichten.

Windows 8 Tipp: Mit der Foto-App Bilder aus dem Heimnetzwerk anschauen

Wer gerne die Foto-Kachel in Windows 8 nutzt, um sich die eigene Bildersammlung anzuschauen, muss zunächst feststellen, dass sich die Bilder anderer im Haushalt befindlichen Benutzer, nicht dort anzeigen lassen, da die die Foto-App nur Bilder aus der Windows-Bildbibliothek und aus OneDrive anzeigt. Das ist auch dann der Fall, wenn sich diese Benutzer in der Heimnetzwerkgruppe befinden.

So bekommen Sie die Aufnahmen in die Foto-App

Schritt 1: Überprüfen, ob die Bibliotheken angezeigt werden

Mit der Windows-Taste + E, dann mit einem Klick auf Ansicht und das Symbol "Optionen", setzen Sie ggf. einen Haken und aktivieren "Bibliotheken anzeigen", bestätigen dies mit OK.

clip_image002

clip_image004

Schritt 2: Hinzufügen der Bilderordner

Im geöffneten Dialogfenster des Windows-Explorers auf der linken Seite sehen Sie den Ordner "Bibliotheken". Klicken Sie diesen mit der rechten Maustaste an, wählen Sie Eigenschaften aus und klicken Sie auf die Schaltfläche Hinzufügen... und anschließend Heimnetzgruppe.

clip_image006 clip_image008

clip_image010

Nun klicken Sie doppelt auf den Namen des gewünschten Computers, dann auf Bilder und auf Ordner aufnehmen, abschließend auf OK.

Damit sind Sie nun fertig.

Um die Bilder betrachten zu können, drücken Sie nun die Windows-Taste und dann die Foto-Kachel. Jetzt sehen Sie auch die Bilder der anderen Bildersammlung.

globale Variable mit Angular

Ein Set von global gültigen Variablen legt man gerne in eine static oder shared Klasse. Wer mit ASP.NET gearbeitet hat, weis das dies nicht so einfach ist. Noch schwieriger wird es, wenn mit Masterpage (Webforms) oder Layout Pages (MVC). In beiden Fällen wird aus mindestens zwei Dateien Vorlage und Inhalt vereint.

Es erscheint wenig sinnvoll einen einzigen Controller in die Masterpage zu legen und darin die Logik aller Content Pages einzubauen. Folglich wird man einen  Controller für die Masterpage definieren und einen für jede Content Page. Bleibt die Frage, wie sprechen die miteinander, wie tauscht man Daten aus im Sinne einer globalen Variable. Der Connection Status einer Websockets Verbindung muss an vielen Stellen geprüft werden können.

Um gemeinsam nutzbaren Code und damit auch eine Variable anlegen zu können, sieht Angular einen Service, Factory oder Provider vor.  Die Factory erhält den Namen global und liefert den Connection Status mit false zurück.

   1:  App.factory('global', function () {
   2:      var global = {
   3:          isConnected: false
   4:      };
   5:      return global;
   6:  });

Per Depedency Injection wird die Factory im Controller verfügbar. Konkret werden alle Objekte in den Funktonsaufruf des Controllers gepackt, hier der $scope für das Viewmodel und die Factory global.

Die Direktive enthält noch eine Command Funktion, um den Status ändern zu können.

   1:  app.controller('contentController', function($scope,global) {
   2:    $scope.isConnected = global.isConnected;
   3:    $scope.connect=function()
   4:    {
   5:   
   6:      $scope.isConnected=global.isConnected=true;;
   7:    }
   8:  });

Gebunden wird das Angular Typisch im HTML Code. In der Praxis in der Content Page.

   1:  <div  ng-controller="contentController">
   2:    Content Page Dingens
   3:      
   4:       <p>Status {{isConnected}}!</p>
   5:       <button ng-click="connect()">connect</button>
   6:    </div>

 

In der Masterpage wird ein eigner Controller definiert, der z.B. Element im Menübereich bindbar hält. Der JavaScript Code unterscheidet sich auf den ersten Blick nicht vom vorigen Code Beispiel. Allerdings muss der Main Controller die Änderung in  global.isConnected auch mitgeteilt bekommen. Dazu kann man einen Watcher einrichten, der die Änderung des Wertes zum Anlass nimmt, den loklaen Scope neu zu schreiben.

   1:  app.controller('mainController', function($scope,global) {
   2:   
   3:    $scope.isConnected = global.isConnected;
   4:    
   5:     $scope.$watch(
   6:          function(){ return global.isConnected},
   7:   
   8:          function(newVal) {
   9:            $scope.isConnected = newVal;
  10:          }
  11:        )
  12:   
  13:  });

 

Das lauffähige Sample.

Sehr oft sieht man für diese Aufgabenstellung auch einen Ansatz mit Broadcast auf den $rootscope. Dieser erfordert deutlich mehr Code. Alternativ kann man auch im $Rootscope eine Variable nutzen, davor wird allerseits gewarnt.

C# Antiviren Abfrage

Ob nun aus purem Interesse oder aus Sicherheitsbedenken, es sind viele Gründe annehmbar ein System auf installierte Antivirenprogramme zu prüfen und hier wird gezeigt wie:

namespace diagConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagementObjectSearcher diagObject =
                new ManagementObjectSearcher("root\\SecurityCenter2", "SELECT * FROM " + "AntiVirusProduct");

            string Result = "";

            foreach (ManagementObject queryObj in diagObject.Get())
            {
                Result += "next Antivirus:" + Environment.NewLine;
                foreach (PropertyData propertyData in queryObj.Properties)
                {
                    Result += propertyData.Name.ToString() + ":" + propertyData.Value.ToString() + Environment.NewLine;
                }
            }
            Console.WriteLine(Result);
            Console.ReadLine();
        }
    }
}

Für jedes installierte Antivirenprogramm liefert dieser Code ein Objekt zurück.

image


Um den Eintrag productState deuten zu können muss man ihn in die entsprechende Hexadezimalzahl umwandeln. Das bedeutet für den productState 266240 lautet die entsprechende Umwandlung 041000.

Der erste Byte lässt sich wie folgt deuten:

  WSC_SECURITY_PROVIDER_FIREWALL               = 1,
  WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS    = 2,
  WSC_SECURITY_PROVIDER_ANTIVIRUS              = 4,
  WSC_SECURITY_PROVIDER_ANTISPYWARE            = 8,
  WSC_SECURITY_PROVIDER_INTERNET_SETTINGS      = 16,
  WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL   = 32,
  WSC_SECURITY_PROVIDER_SERVICE                = 64,
  WSC_SECURITY_PROVIDER_NONE                   = 0,

Der zweite Byte lässt sich so interpretieren:


  SCANNER_UNKNOWN = 1,
  SCANNER_RUNNING = 16,

Und schließlich der dritte Byte:

00: up-to-date
10: not up-to-date

Daraus geht für das obere Beispiel hervor: Antivirus + Running + up-to-date.
Bei Interesse ist oben auch noch ein zweiter productState zum Üben.

Windows METRO Apps Cross Plattform mit WinJS 3

Cross-Plattform-Development ist in aller Munde. Nun steigt Microsoft mit der neuen WinJS-Bibliothek in den JavaScript Framework Markt ein. Konkurrenz sind JQuery Mobile, AngularJS oder auch Kendo UI. Das sind alles Themen auf der ADCX Konferenz.

Der erste Blick auf die JavaScript für Windows Bibliothek per Nuget Download in Visual Studio 2013 eröffnet ernüchternde Download Zahlen: nur 167 in der ersten Woche.

winjs

In meinem Fall hat zwar die Installation scheinbar geklappt, es waren aber keine neuen CSS oder JS Dateien im Projekt angelegt. Erst der Manuelle Download des Zip mit anschließendem Entpacken in das Web-Projekt, hat den Start ermöglicht. Nebenbei bemerkt: der Download kommt von Amazon Web Services.

winjs2:

Die Zeiten haben sich geändert, gut finde ich das nur bedingt.

Als nächstes wird WinJS in eine ASPX Seite eingebunden. Es gibt zwei Design-Varianten: dark und light.

   1:   <link href="Content/ui-dark.css" rel="stylesheet" />
   2:   <script src="Scripts/WinJS.js"></script>

Die Controls sind in einzelne JavaScript-Dateien aufgeteilt und sozusagen modularisiert. Für den Einstieg packe ich die komplette Bibliothek, immerhin unkomprimiert 3,7 MB groß, in die HTML-Seite.

Ans Ende des HTML-Blockes wird der Script Block gecoded. Die Daten kommen per Json aus einem REST ASP.NET Web Api Service und beinhalten die Northwind Customer Daten. Nachdem die Daten geladen sind, wird die Bindung aktualisiert (Zeile 11)

   1:<script>
   2: WinJS.Application.onready = function () {
   3:              var options = {
   4:                  url: '/api/kunden',
   5:                  type: 'GET'
   6:              };
   7: WinJS.xhr(options).done(
   8:      function (result) {
   9:     callback(result.responseText, result.status);
  10:                      //Binding aktivieren
  11:     WinJS.UI.processAll();
  12:                  },
  13:                  function (result) {
  14:                      callback(null, result.status);
  15:                  }
  16:              );
  17:          };
  18:   
  19: WinJS.Application.start();
  20:   
  21: function callback(responseText, status) {
  22:     if (status === 200) {
  23:       var customers = JSON.parse(responseText);
  24:       WinJS.Namespace.define("DataExample", {
  25:          data: new WinJS.Binding.List(customers)
  26:                  });
  27:   
  28:              } else {
  29:   
  30:              }
  31:          }
  32:   </script>

Etwas ungewohnt werden die empfangenen JSON Array Daten in eine bindbare WinJS Liste umgewandelt. Der Namensraum kombiniert mit dem Eigenschaftsnamen, ergänzt um das Schlüsselwort dataSource, wird im HTML Code per win-Options an das Listview Control gebunden.

Das eigentliche Itemtemplate wird extern, das heißt außerhalb des Listview DIV extra deklariert. Die Feldbindung erfolgt per win-bind Attribut.

   1:  <h1>Demo METRO Liste</h1>
   2:  <div class="customerTemplate" 
data-win-control="WinJS.Binding.Template" style="display: none;">
   3:      <div style="height:80px">
   4:          <h4 data-win-bind="textContent: CompanyName"></h4>
   5:     </div>
   6:  </div>
   7:  <div id="basicListView"
   8:     data-win-control="WinJS.UI.ListView"
   9:     data-win-options="{ itemDataSource : DataExample.data.dataSource, 
  10:     itemTemplate: select('.customerTemplate') }">
  11:  </div>

Richtig erstaunlich wird es im Browser. Die Website sieht aus wie Windows 8.1 und ist genauso bedienbar. In dem Fall mit einem horizontalen Scrolling.

image

Nun hat Microsoft also mit WinJs 3.0 Yet Another JavaScript Library für mobile Clients. Stellt sich die Frage: wer braucht das, wer wird das nutzen? Konzeptionell ist die Architektur gut gelungen und einfach nutzbar. Die für JavaScript typischen Probleme mit Asynchronität finden sich auch hier. Hervorzuheben ist, dass der HTML Code und vermutlich weitestgehend der JS Code aus einer nativen Windows 8.1 Anwendung übernommen werden können. Die HTML5 Designer aus Blend sind das Beste, was der Markt aktuell an WYSIWYG zum Thema zu bieten hat. In der Gesamtbetrachtung bin ich vorsichtig optimistisch, würde aber aktuell kein Projekt damit starten.

Mehr zum Thema Cross Plattform auf der ADCX in Mannheim und Wien.

Windows 8 Tipp – Dateiversionsverlauf nutzen

Ein Feature in Windows 8 sorgt für die Sicherung und Wiederherstellung Ihrer Dateien und Ordner. Der sogenannte Dateiversionsverlauf sichert nämlich regelmäßig Versionen Ihrer Dateien aus den Ordnern für Dokumente, Musik, Bilder, Videos und dem Desktop sowie die OneDrive-Dateien, die sich offline auf Ihrem PC befinden. Je länger Sie mit Windows arbeiten, desto größer ist der Verlauf an Dateien, über den Sie verfügen. Angenommen, Ihre Originaldateien gehen verloren, sind beschädigt oder werden gelöscht, können Sie diese einfach wiederherstellen.

Ebenso können Sie auch verschiedene Versionen der Dateien suchen und wiederherstellen, sogar dann, wenn diese nicht gelöscht wurden oder verloren gingen. Sie können die gewünschte Version auswählen und wiederherstellen. Persönliche Daten lassen sich somit bequem automatisch speichern. Dazu kann der Dateiversionsverlauf genutzt werden.

Mit der Tastenkombination Windows + S aktivieren Sie die Suche. Geben Sie in das Suchfeld „Dateiversionsverlauf“ ein und wählen Sie den unterhalb angezeigten Dateiversionsverlauf aus.

clip_image002

Wenn zum Zeitpunkt des Aufrufs des Dateiversionsverlaufs keine Festplatte angeschlossen ist, erscheint die angezeigte Meldung, dass kein verwendbares Laufwerk gefunden wurde.

clip_image004

Um diese Funktion nutzen zu können, ist es beispielsweise nützlich eine externe USB-Festplatte anzuschließen. Daraufhin zeigt Windows an, dass der Dateiversionsverlauf ausgeschaltet ist. Ihnen wird nun angeboten, Dateien auf Ihre USB-Festplatte zu speichern, indem Sie auf Einschalten klicken.

clip_image006

Links in der Übersichtsleiste können Sie optional die Einstellung wählen, welche Ordner Sie ggf. aus dem Dateiversionsverlauf ausschließen möchten.

clip_image008

Des Weiteren können Sie ebenso mit Klick auf den Punkt „Erweiterte Einstellungen“ bestimmen, wie oft Kopien der Dateien gespeichert werden sollen, sowie wie lange diese gespeicherten Versionen im Verlauf aufbewahrt werden.

clip_image010

Nach vorgenommenen Einstellungen und durchgeführtem Dateiversionsverlauf können Sie per Klick auf der linken Seite „Persönliche Dateien wiederherstellen“ im geöffneten Dialogfenster per Ordner auswählen, was Sie wiederherstellen möchten.

clip_image012

Nachdem Sie einen Ordner ausgewählt haben, erscheinen die darin befindlichen Dateien. Mit Rechtsklick auf das jeweilige Symbol erscheint die Möglichkeit Wiederherstellen sowie Wiederherstellen in, je nach dem was Sie benötigen.

clip_image014

Abschließend ist die Datei wiederhergestellt.

Mein Fazit: Die Funktionalität ist sehr nützlich, jedoch sollte man wissen, dass der vom System erstellte Ordner FileHistory je nach Menge des Inhalts sehr groß werden kann. Auf meinem Rechner weist dieser eine Größe von 26 GB auf.

image

Neue Serviceankündigungen und Preisänderungen bei Azure

SQL Database

Der SQL Datenbankdienst ist jetzt mit einem Service Level Agreement von 99,99 % für die Versionen Basic, Standard und Premium generell verfügbar. Die Abrechnung erfolgt jetzt auch stundenweise und die Preise wurden um bis zu 50 % gesenkt. Alle Änderungen sind zum 1. November 2014 gültig.  Die genaue Preisstruktur finden Sie unter http://azure.microsoft.com/en-us/pricing/details/sql-database/#basic-standard-and-premium. Eine Übersicht der verschiedenen Versionen finden Sie unter http://msdn.microsoft.com/library/azure/dn741340.aspx.

Die Webeditionen von SQL Database bleiben bei einer garantierten Verfügbarkeit von 99,9 %, werden aber bald nicht mehr angeboten. Ursprünglich war geplant diese Dienste im April 2015 einzustellen. Sie werden nun bis zum 10. September 2015 angeboten.

Azure API Management

Der im Mai 2014 als Vorschau angebotene Dienst Azure API Management ist jetzt allgemein verfügbar. Dieser REST-basierte Dienst ermöglicht es, API Verwaltungsoperationen zu automatisieren und mit anderen Systemen und Prozessen zu verbinden. Der Dienst bietet auch OAuth 2.0 Unterstützung. Das Entwicklerportal für die API steht mittlerweile in zehn verschiedenen Sprachen, darunter auch deutsch, zur Verfügung. Mehr Informationen erhalten Sie unter http://azure.microsoft.com/en-us/documentation/services/api-management/.

Azure Media Services

Ab dem 1. Oktober 2014 ist der Media Encoder allgemein verfügbar. Die Kosten berechnen sich nach der Größe des Datenvolumens der durch die Encoding Pipeline zurückgegeben wird (es wird in GB abgerechnet). Das sollte zu einer Reduzierung der Kosten gegenüber den heutigen Preisen führen. Sie können dabei zwischen einer Basic, Standard und Premium Encoding-Version wählen, die die Geschwindigkeit des Encodings beeinflusst. Der aktuelle Windows Azure Media Data Encoder wird zum 15. September 2015 eingestellt.

Live Streaming und der Schutz von Content ist momentan in der öffentlichen Vorschau. Diese Live Streams wurden bereits für die Winterolympiade 2014 und die FIFA Fussballweltmeisterschaft in Brasilien verwendet. Der Dienst bietet dabei die gleiche Skalierbarkeit und Verfügbarkeit wie bei den beiden Großereignissen. Für den Schutz des Contents steht eine statische und dynamische Verschlüsselung zur Verfügung. Mehr Informationen erhalten Sie unter http://azure.microsoft.com/en-us/services/media-services/.

Rollenbasierte Sicherheit

Azures rollenbasierte Sicherheit (RBAC) ermöglicht eine feingranulare Zugriffssteuerung auf Azuredienste. Diese rollenbasierte Sicherheit befindet sich ab sofort in der öffentlichen Vorschau und erzeugt keine zusätzlichen Kosten. Der Dienst steht über das Azure Preview Portal zur Verfügung.

Windows Phone 8/8.1 Kinderecke

Das Smartphone wird immer mehr zum beliebten Gameboy-Ersatz. Um zu verhindern, dass die Weitergabe an Kinder und Jugendliche zu immensen In-App-Käufen und enormen Telefonrechnungen führt, verfügt bereits Windows 8 über eine Kinderecke. Diese abgesicherte Umgebung konfiguriert man bei der Initialisierung über Einstellungen –> Kinderecke. Es ist sinnvoll für spätere Konfiguration eine Kachel auf dem Startbildschirm anzulegen.

Kindereckenkonfig



Dieser Modus wird dann aktiviert, indem Sie auf dem Sperrbildschirm nach links wischen. Es bietet folgende Vorteile:

-In-App Käufe werden geblockt, sofern keine Brieftaschen-Pin hinterlegt ist.

nichtmoeglich

- In der Kinderecke ist weder ein Browser noch der Zugriff auf die Daten des Handys oder der SD Karte verfügbar.
Spiele, Musik, Videos und Apps können jedoch einzeln frei gegeben werden.

KCmixedwip

 

 

Zusatztipp:

Sollten Sie das Smartphone einmal verlieren, bietet Windows Phone den Service es zu orten bzw. die letzte Position, die bestimmt werden konnte, anzuzeigen.

Unter www.windowsphone.com in der Rubrik Mein Handy –> Mein Handy finden, lässt sich, nach Login im Microsoft-Konto, die letzte Position des Smartphones anzeigen bzw. das Smartphone anklingeln, selbst wenn es eigentlich auf Stumm geschaltet ist.

 

aktuellerStandort

Deklarativ Variablen in HTML mit Angular zuweisen

Ein Angular Controller enthält eine Liste, die per Ajax Call aus einem Json REST Service gefüllt werden. Dies ist eine Eigenschaft des Scope.

   1:  App.controller('chatController', function ($scope, $http) {
   2:      $scope.chatUsers = [];

In diesem Array sollen bestimmte Werte vorbelegt werden. Als Anwendungsfall kann man eine Dropdownliste nennen. In dieser sollen drei Länder vorbelegt werden, wie z.B. DE, AT und CH. Der Rest soll aus der Datenbank bzw. aus einem Service zusätzlich angezeigt werden. Wie kann man also Werte vorbelegen? Natürlich geht das im JavaScript Code des Controllers. Auch ein Modul lässt sich dafür einsetzen. Wenn man allerdings mit ng-init arbeitet, kann man mit einem deklarativen Ansatz dem UI Designer die Entscheidung überlassen. Das Array wird im HTML Code befüllt.

   1:   <div ng-controller="chatController">
   2:          <div ng-init="chatUsers = [ {name:'Franz',  userId:700000},
   3:                                   {name:'Laura',  userId:1300000}
   4:      ]"></div>

Diesen Ansatz könnte man durchaus auch für Offline-Daten nehmen, um etwas anzuzeigen, solange der Service nicht bereit ist.

Windows 8.1: Was wurde aus dem Leistungsindex?

Vor langer Zeit führte Microsoft den Leistungsindex mit Windows Vista ein. Dabei handelte es sich um eine Art Benchmark, über die der Nutzer seinen PC von Windows bewerten konnte. Nach einen Leistungstest ergab sich am Ende für die verschiedenen Komponenten wie beispielsweise CPU, Arbeitsspeicher, Festplatte und Grafikkarte eine Bewertung.

Der Leistungsindex konnte über Systemsteuerung > System und Sicherheit > System eingesehen und aktualisiert werden.

clip_image002

Da Microsoft den Leistungsindex in Windows 8.1. entfernt hat, kann er nicht wieder aktiviert werden, jedoch lässt sich dieser über einem kleinen Umweg aufrufen.

Hierzu rufen Sie in Windows 8.1 die Suche mit Windows + S auf. Danach geben Sie winsat ein und klicken auf das gefundene Feature winsat.

Nach Abschluss des Durchlaufs rufen Sie PowerShell auf, indem Sie erneut die Suche öffnen und PowerShell eingeben. Im PowerShell Fenster geben Sie in den Befehl „gwmi win32_winsat“ ein und drücken Enter.

clip_image004

Die Anzeige ist zwar nicht so hübsch grafisch dargestellt wie in Vorgängerversionen, allerdings ist die Ausgabe der Leistungswerte dennoch informativ.

Es gibt zusätzlich die Möglichkeit im Ordnerverzeichnis: „C:\Windows\Perfomance\WinSAT\DataStore“, indem sich die Datei „Formal.Assessment(Initial).WinSAT.xml“ befindet, diese im entsprechenden Editor oder im Browser aufzurufen.

clip_image006

 

Der Wert für den Leistungsindex findet sich im Knoten <WINSPR><SystemScore> inklusive weiterer Detailwerte für die anderen Komponenten.

 

clip_image008

 

 

 

Jump Start Training: JavaScript, HTML und CSS

Month List