Skype und Windows 8/8.1: Fehlermeldung beim Herunterfahren

Auf manchen Windows 8/8.1-Systemen kommt es beim Herunterfahren des Betriebssystems zu einer Fehlermeldung, wenn Skype installiert ist. Dadurch fährt Windows nicht mehr von alleine komplett herunter – es bleibt bei der Fehlermeldung stehen.

Die Fehlermeldung: Die Anweisung in 0x01ac7a0e verweist auf Speicher 0x04d40d18. Der Vorgang read konnte nicht im Speicher durchgeführt werden.

win8_skype1

win8_skype2

Diese Fehlermeldung tritt meist auf Systemen auf, in denen eine ASUS-Soundkarte verbaut ist. Auslöser ist der standardmäßig aktivierte Klang, der beim Abmelden von Skype abgespielt wird.

Damit Windows 8 bzw. Windows 8.1 wieder sauber herunterfährt und somit die Fehlermeldung nicht mehr angezeigt wird, muss der Abmelde-Klang in Skype deaktiviert werden:

  1. In Skype auf Menü “Aktionen” –> “Optionen”
  2. Unter “Allgemein” auf “Klänge”
  3. Bei “Klang abspielen, wenn” die Checkbox “ich mich abmelde” deaktivieren.

win8_skype3

Windows 8 Tipp – Windows in den Ruhezustand versetzen

Neulich wurde ich gefragt, ob es denn die Möglichkeit gäbe, den Rechner, wie in früheren Windows-Versionen, in den Ruhezustand zu versetzen. Ja. Dieser ist zwar in Windows 8 nicht mehr standardmäßig verfügbar, dennoch lässt er sich wieder hervorzaubern.

Rufen Sie die Energieoptionen auf, indem Sie nach Betätigen der Windows-Taste auf dem Kachelbildschirm Energieoptionen eingeben, im Suchfeld wählen Sie diese Option aus.

clip_image002

Danach rufen Sie auf der linken Seite den Befehl: Auswählen, was beim Drücken des Netzschalters geschehen soll auf.

clip_image004

Um die Einstellung zu vervollständigen, klicken Sie jetzt im oberen Bereich des Fensters auf: Einige Einstellungen sind momentan nicht verfügbar.

clip_image006

Nun muss nur noch im unteren Bereich des Fensters die Option Ruhezustand aktiviert werden.

clip_image008

clip_image010

Nun können Sie wieder auf Wunsch den Ruhezustand aktivieren. Dies lässt sich wahlweise per Tastenkombination Windows-Taste + F4 oder per Windows-Taste und Klick auf das Ausschalten-Symbol vornehmen.

Beste Sprecher

Ich bin aktuell am Reflektieren. Der Auslöser ist meine erstmalige Teilnahme bei der #NRWConf im September. Seit mindestens 15 Jahren spreche ich auf Entwicklerkonferenzen.

TechEd, Basta, Synopsis, Microsoft Days, TechDays, Winsummit, TechTalk, VSone, ADC, GUI&DESIGN, ICE Lingen, Developer Conference Hamburg, SDN Netherlands ...

image

Dazu veranstalten wir auch eigene Formate mit teilweise über 500 Teilnehmer wie SharePoint Conference, ADC++, ADC X, VSOne, SQL Days und GUI&DESIGN.

Ich habe also hunderte Auftritte verfolgt. Viele waren gut, einige bodenlos, manche aber auch sensationell.

Es ist relativ einfach für die “Geht gar nicht”-Sprecher und Vorträge Ursachen zu nennen:

  • Samples gehen nicht
  • Vortrag endet viel zu früh
  • Spricht undeutlich
  • monoton
  • Inhaltlich völlig daneben
  • wirkt unvorbereitet

 

Die üblichen Rhetorik-Tipps tauchen da nicht auf, wie

  • schaut zur Wand
  • Körperhaltung
  • Füllwörter wie Äh..

Das mag in mittelmäßigen Sessions nicht stören.

Schwierig wird es herauszufinden, was einen Top-Vortrag ausmacht. In unserem Team haben wir zwei Kollegen, Martin und Andreas, die in den Teilnehmerfeedbacks über mir liegen können. Martin hatte auf dem letzen Microsoft Server Summit den Top-Vortrag im Teilnehmerranking. Ich war leider nicht dabei, um zu analysieren warum. Aber andere #1 Sprecher und das passende Thema kenne ich.

  • Clemens Vasters zu .Net-Zeiten
  • Christian Weyer über WCF
  • Neno Loje speziell zu ALM
  • Ingo Rammer: Debugging
  • Michael Willlers mit dem Finger in der Wunde
  • Rainer Stropek: Live Coding
  • Don Box über SOAP
  • Scott Hanselman zu allem
  • Anders Hejlsberg zu C#

Dies nur als Auszug. Ich hoffe, damit niemanden vor den Kopf zu stoßen, weil er in dieser subjektiven Hannes-Hit-List nicht auftaucht.  Ich frage mich jedes Mal: was haben diese Sprecher gemein? Es sind alles Männer. Sonst eint sie jedoch wenig. Einzig die Begeisterung für ihr Thema. Wobei bei Mr C# sich diese durchaus verbergen kann, das ist eher ein religiöser Akt.

Ein durchaus häufiger Diskussionspunkt ist PowerPoint. Ich halte wenig von Zero Slides - Just Code Vorträgen. Manches muss einfach skizziert werden. Didaktisch ist das natürlich super, wenn man das live per Pen-Eingabe tun kann, weil dann der Teilnehmer die Entstehung lernt. Das kostet aber viel Zeit. Meine Regeln dazu:

  • Gut lesbar bis zum letzten Platz
  • nichts wichtiges im unteren Bereich
  • weniger Text ist mehr
  • mindestens 2 Minuten pro Slide einkalkulieren

Konferenzslides haben das Ziel, den Vortrag zu stützen und nicht als Lernunterlage zu dienen!

Softwareentwickler machen interessanterweise bessere Vorträge als IT Pros, wobei letztere durchaus aufgeholt haben. Es muss wohl am Code liegen. Da gibt es einige Fraktionen: die, die runterkodiert als wär's ein Maschinenschreibwettbewerb, diejenigen, die aus der Toolbar dragen und droppen, die mit Code in PowerPoint und die mit einem fertigen Sample.

Demo-Code sollte nie wesentlich länger als eine Bildschirmseite sein. Wenn möglich sollte man diesen tippen, um dem Zuseher mehr Einblick in die Entstehung zu gewähren. Variablen nenne ich immer möglichst sinnfrei. Ich bin als Teilnehmer oft verwirrt, ob das nun eine Framework-Funktion ist oder per Nuget-Wunder erschienen ist. Das stört das Lernen.

Und Code muss funktionieren. Also vorher ausprobieren. Live-Bugfixing kommt nur selten gut an. Man merkt das sofort am steigenden Geräuschpegel im Auditorium. Plötzlich verspürt jeder Hustenreiz.

Vorträge müssen eine Geschichte erzählen. Sie sollen einen Anfang und ein Ende haben, mit Höhepunkten in der Mitte. Wie prüfe ich vorher, ob die Geschichte wirkt? Bei sehr großen Events wie der TechEd gibt es sogenannte Rehearsals. Also eine Probe vor kleinem Fachpublikum. Ich hasse das. Ich brauche das echte Publikum, um mich entfalten zu können. Persönlich bin ich dazu übergegangen, die Session per Camtasia einmal oder auch mehrmals aufzuzeichnen. Mein persönlicher Review. Ich lade auch gerne Kollegen ein, sich die Videos anzusehen. Dabei lernt man natürlich auch die Samples fehlerfrei runterzutippen bzw. die Stolpersteine kennen.

Hab ich das schon erwähnt? Die Samples müssen laufen!

Dazu bedarf es natürlich einwandfreier Technik. Immer die Adapter dabei haben, einen Presenter und eine externe Maus. Seit vielen Jahren nutze ich einen zweiten Monitor, der per USB angeschlossen wird. Ich verwende ein älteres Modell von MiMo. Die Kollegen setzen auf was größeres von Lenovo. Beide per USB ohne zusätzliche Stromversorgung nutzbar. PowerPoint 2013 zeigt dann die Notizen im zweiten Monitor an. In die Notes schreibe ich mir dann Zahlen oder Namen rein, die nicht unmittelbar geläufig sind und auf den Slides aus didaktischen Gründen keinen Sinn machen.

Früher hatte ich auch die Code-Samples auf dem zweiten Screen per Notepad geöffnet. Heute nutze ich dafür wieder Papier. Für jede Demo ein Blatt in großer Schrift mit Textmarker-Highlight auf Stellen, in denen ich gerne Fehler mache, z.B. typische Buchstabendreher oder fehlende Imports.

All das macht mich zu einem guten Sprecher. Wenn die Tagesform stimmt, es mein Thema ist und das Publikum mitzieht, werde ich sehr gut. Aber noch nicht der Beste.

Auf meiner TechEd-Teilnahme hatte ich eine lange Diskussion zum Thema. Spannend ist, dass Sessions am ersten Tag schlechter bewertet werden. Am besten läuft's ab Tag 3, ab dem späten Vormittag. Themen, in denen neue Produkte und Features gezeigt werden haben #1 Potential. Oder Themen, die so in die Tiefe gehen, dass kaum mehr wer im Saal mitkommt.

Entertainment kommt immer gut an, will aber geübt sein. Ich hatte drei Mal in meinem Leben die Chance ein Thema in einer Tour zu präsentieren. Bis zu 20 Mal dasselbe. Da kannst du an jedem Wort feilen. Ist echt eine super Erfahrung. Witz und Ironie sind aber auch ein gefährliche Sache. Ich hatte in einem User Group-Vortrag eine sehr dicke Frau in Leggings in meinen Slides. So etwas geht in Österreich und vielleicht in Bayern. Woanders hatte ich im Anschluß eine Beschwerde im Postfach. Für die ich übrigens sehr dankbar bin. Fettnäpfchen müssen raus. Eine 6 im Feedback reicht, um dich von deinem #1 Ziel zu entfernen.

Und nicht vergessen: die Beispiele müssen 100 % funktionieren.

Windows 8 direkt im Desktop starten

Nach dem Anmelden startet Windows 8 standardmäßig auf der Metro-Oberfläche. In Windows 8.1 lässt sich einfach über die Taskleiste konfigurieren, ob der Benutzer nach der Anmeldung auf dem Windows-Desktop oder auf der Startseite landen möchte. Dies lässt sich unter Windows 8.0 über eine Gruppenrichtlinie erzwingen:

  1. Gehen Sie im Gruppenrichtlinien-Editor auf Benutzerkonfiguration –> Administrative Vorlagen –> System –> Anmelden (Hintergrund oben).

  2. Gehen Sie nun in der rechten Spalte auf die Richtlinie Diese Programme bei der Benutzeranmeldung ausführen.

  3. Im Optionsfeld Aktiviert (Vordergrund rechts) können Sie auf die Schaltfläche Anzeigen klicken.

  4. Tragen Sie nun bei Inhalt anzeigen im Feld Wert den Text »explorer.exe« ein. (Vordergrund links) Anschließend können alle offenen Fenster über die OK-Schaltfläche geschlossen werden.

httpatomoreillycomsourcemspgermanyimages1818902.png

 

Bei erneuter Anmeldung erscheint als erstes wieder die Startseite der Metro-Oberfläche. Nach kurzer Zeit schaltet Windows 8.0 aber zum Desktop um.

Hinweis

Sollte eine Gruppenrichtlinie nicht sofort wirksam werden, öffnen Sie eine Eingabeaufforderung als Administrator und führen Gpupdate /force aus.

Windows 7/8 - Fenstervorschau anpassen

Die Vorschau der geöffneten Fenster lässt sich von ihrem Verhalten her anpassen, wenn sich der Mauszeiger auf einem Programmsymbol befindet. Sowohl die kurze Verzögerung der Anzeige als auch die Größe der eingeblendeten Fenster können angepasst werden.

clip_image002

Hierzu rufen Sie den Registrierungs-Editor auf, drücken Sie auf die Windows-Taste + R und geben den Befehl regedit ein.

clip_image003

Öffnen Sie hierfür links den Ordner:

HKEY_CURRENT_USER\Control Panel\Mouse -> MouseHoverTime

 

clip_image005

Ändern Sie die Angabe im Feld Wert (0 statt der Voreinstellung 400 ms)

Ändern Sie auf Wunsch ggf. auch noch die Größe der Fenster.

Öffnen Sie dazu links den Ordner:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband

Klicken Sie mit der rechten Maustaste in den rechten Bereich des Fensters -> Neu ->
DWORD-Wert (32-Bit) -> Name: MinThumbSizePx

Doppelklicken Sie auf den neuen Eintrag -> Wert z.B. 400 Basis: Dezimal -> OK

clip_image007

Schließen Sie die Registrierdatenbank, starten Sie den Computer neu, danach sind die Einstellungen gültig und funktionieren.

clip_image009

Im Vergleich zu den Fenstern im Screenshot oben ist deutlich zu sehen, dass die sog. Sprungfenster deutlich größer dargestellt werden.

Windows 8 - Schaltfläche Desktop anzeigen in der Taskleiste

Jahrelang hat uns Benutzer eine kleine Schaltfläche auf der Taskleiste begleitet, mit der wir per Klick den Desktop angezeigt bekamen, d.h. alle Programme wurden minimiert. Wer diese Funktionalität vermisst, liest hier wie man sie zurückbekommt.

Rechtsklick auf den Desktop -> Neu -> Verknüpfung

clip_image002

In das geöffnete Feld für den Speicherort folgenden Inhalt eingeben:
explorer shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}

clip_image004

Klicken Sie auf Weiter

Jetzt einen Namen eingeben, z.B. Desktop anzeigen. Klicken Sie dann auf Fertig stellen.

clip_image006

Rechtsklick, Eigenschaften aufrufen -> Schaltfläche Anderes Symbol -> Durchsuchen -> Ordner System32 -> imageres.dll auswählen. Hier ein Icon nach Wahl auswählen, OK.

clip_image008 clip_image010

Danach Rechtsklick auf die Verknüpfung -> An Taskleiste anheften

clip_image012

Abschließend gegebenenfalls die Position mit gedrückter linker Maustaste verändern.

Tipp: die angehefteten Programme in der Taskleiste lassen sich per Tastenkombination
Windows + Shift + 1-10 bequem starten.

clip_image013

Hierbei muss man wissen, dass die Position der Icons von links aus entscheidend ist. Die Start-Schaltfläche zählt nicht, also wird ab der zweiten Position gezählt.

In meiner Konfiguration wird Desktop anzeigen mit Windows + Shift + 1 ausgeführt.

Fertig!

Entity Framework-Datenmodell per Code erstellen

Was kam zuerst? Die relationale Datenbank, das objektorientierte Klassenmodell oder der ORM Mapper?

Die ältere Fraktion, zu der ich zumindest in Zeiteinheiten gehöre, findet sich in RDMBS, Normalisierung und Indizes wieder. Newcomer sehen alles dynamisch, freuen sich über JSON und stecken alles in NoSQL.

Die folgende Schritt-für-Schritt-Anleitung zeigt den sogenannten Code First-Ansatz. Damit legt man die Verantwortung für das Datenbank-Modell in die Hände von Programmierern. Mit Entity Framework und Migrations erstellt sich dann die Datenbank quasi automatisch.

Eigentlich ist es völlig egal, welcher Projekttyp oder Sprache in Visual Studio 2013 gewählt wird. Hier setzen wir ein Webforms VB.NET Projekt ein.

Wer Code First betreibt, sollte sich zuerst mit den Konventionen vertraut machen. Identity-Felder werden mit ID benannt. Am besten nutzen wir den Typ Integer. Foreign Keys erhalten den Tabellennamen und den Zusatz ID als Feldnamen. Mit Attributen nimmt man auf die späteren Feld-Definitionen im SQL Server Einfluss.

Am besten legt man die Klassen in das Model Verzeichnis. Die 1:1 Relation wird über die Eigenschaft in Zeile 22 erstellt. Für 1:n benötigen wir eine List of Property.

   1:  Imports System.ComponentModel.DataAnnotations
   2:   
   3:  Public Class room
   4:      <Key>
   5:      Public Property roomId As Integer
   6:      <MaxLength(50)>
   7:      Public Property roomname As String
   8:      Public Property datum As DateTime
   9:      Public Property isclosed As Boolean
  10:  End Class
  11:   
  12:   
  13:  Public Class chatmessage
  14:      <Key>
  15:      Public Property Id As Integer
  16:      <MaxLength(128)>
  17:      Public Property userId As String
  18:      Public Property roomId As Integer
  19:      Public Property Message As String
  20:      Public Property datum As DateTime
  21:   
  22:      Public Overridable Property room As room
  23:  End Class

 

Zusätzlich benötigen wir mit EF 6 eine vom DBContext abgeleitete Klasse, die wiederum auf die Klassen room und Chatmessage verweist.

   1:  Imports System.Data.Entity
   2:   
   3:  Public Class modellContext
   4:      Inherits DbContext
   5:   
   6:      Public Sub New()
   7:          MyBase.New("name=modellContext")
   8:      End Sub
   9:   
  10:      Public Property chatmessage As System.Data.Entity.DbSet(Of chatmessage)
  11:      Public Property room As System.Data.Entity.DbSet(Of room)
  12:   
  13:  End Class

Als nächstes führen wir in der Visual Studio Nuget Paket Manager Console enable-Migrations mit dem Context aus.

image 

Eine weitere Convention behandelt die Namensgebung des Connection String. Wir müssen diesen in der Web.config ident zur Klasse benennen.

   1:   <connectionStrings>
   2:       <add name="modellContext" 
   3:           connectionString="Data Source=(LocalDb)\v11.0;
   4:  AttachDbFilename=|DataDirectory|\modell1.mdf;Initial Catalog=modell1;
   5:  Integrated Security=True"
   6:        providerName="System.Data.SqlClient" />
   7:    </connectionStrings>

 

Jede Modellklasse fügen wir per add-Migration-Befehl dem Modell hinzu. Die Änderungen in der Datenbank lösen wir per update-Database aus.

image

Ist die Datenbank nicht vorhanden, legen wir sie an.

image

In LINQ Statements selektieren wir deshalb über Relationen hinweg aus den Daten.

   1:  Dim db As New modellContext
   2:  Dim r = db.chatmessage.Where(Function(c) c.room.roomname = "raum1")

Änderungen in der Klasse verteilen wir per add-migration und update Database in der Datenbank. So verlieren wir die Daten nicht. Dazu werden automatisch Migrationsklassen erzeugt, die eine Up und Down-Methode enthalten.

image

Damit gleichen wir auf jedem beliebigen Server jederzeit den Status des SQL Servers ab.

Auf diese Art können Sie Optimierungen der Datenbank ignorieren. Ob Sie einen Datenbank-Admin, der die entsprechende SQL Performance-Optimierung beherrscht, beauftragen oder einen EF-Spezialisten, hängt von vielen Faktoren ab. In jedem Fall bieten wir die passenden Schulungen dafür:

http://www.ppedv.de/schulung/kurse/AdoNetEF_Entity%20Framework_EntityDataModels_EDM_Framework_%204.0_WPF_WCF.aspx

http://www.ppedv.de/schulung/kurse/SQL-Performance-Optimierung-Sicherheit-Indizes-Verwaltung-Komprimierung-Verbesserung.aspx

Angular-Listen mit Hash filtern

Beim Stöbern in SPA-Anwendungsfällen bin ich der Idee verfallen, Listen anhand der URL bzw. den enthaltenen Hash-Werten zu filtern. Eine URL setzt sich laut RFC 3986 wie folgt zusammen.

foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose

Der letzte Teil, das Fragment, wird beim HTTP Request vom Browser nicht zum Server übermittelt. Dies macht sich unter anderem Angular.js zu Nutze, um ein clientseitiges Routing der Views durchzuführen. Das ähnelt ASP.NET MVC, ist aber nach dem # Zeichen, das wir hier als Hash Key bezeichnen. So ist es möglich, die Ergebnismenge direkt per Link anzuspringen.

Im folgenden Beispiel filtern wir mit einer Art Navigationsleiste eine Liste. Damit wir den Browser nicht überfordern, geben wir den Hashkey als Parameter an und führen somit AJAX Call Backs zum ASP.NET Web API basierten Service durch.

Der Service liefert Chatnachrichten anhand eines Chatrooms. Das VB.NET Web API Sample decodiert die URL um z.B. Sonderzeichen korrekt zu behandeln.

   1:   Function Getchatmessage(room As String) As IQueryable(Of chatmessage)
   2:       Dim r = HttpUtility.UrlDecode(room)
   3:       Return db.chatmessage.Where(Function(c) c.room.roomname = r)
   4:   End Function

 

Folgende UI bietet dem Benutzer drei Optionen:

image

Die Links werden in der Form ASPX-Seite in der FriendlyUrl Notation ohne Erweiterung, gefolgt vom Hashkey und dem Wert erzeugt.

image

Erste Lektion: Angular fügt nach dem Hashkey einen Slash (Schrägstrich) in die URL im Browser ein, obwohl im HTML Source keiner steht.

image

Ich habe dazu recherchiert und herausgefunden, dass es einen Hashbang Mode, oder HMTL5 Mode, gibt. Der genaue Grund ist mir noch unklar. Später wird ein JavaScript Replace das wieder gerade biegen.

Um die HTML-Inhalte zu erstellen, habe ich eine Server Rendering-Methode gewählt. Hier habe ich auf Webforms gesetzt. Dies ist einfacher und erlaubt auch besseres Caching, also schnellere Ausführung.

Vorbereitend definieren wir eine Angular-App samt dazu gehörigem Controller. Die Anzeige des Hash per Databinding {{}} dient Kontrollzwecken. Das Listview Web Server-Steuerelement binden wir per Model Binding an die Room Liste. Der VB.NET Codebehind Source Code findet sich im nächsten Listing.

Der Name des Rooms wird passend zur URL encodiert. Wenn der Benutzer diesen Link klickt, passiert faktisch nichts, außer dass die URL im Browser um den Hashwert ergänzt wird.

   1:  <body ng-app="App">
   2:      <form id="form1" runat="server">
   3:          <div ng-controller="chatController">
   4:              <div>Hash:{{target}}</div>
   5:              <div>
   6:                  <asp:ListView ID="roomlist" runat="server" 
ItemType="Concorde.room"
   7:                      SelectMethod="roomlist_GetData">
   8:                      <ItemTemplate>
   9:                          <a href='/chat#<%#HttpUtility.UrlEncode(Item.roomname)%>'>
  10:                              <%#Item.roomname%>
  11:                          </a>| 
  12:                  
  13:                      </ItemTemplate>
  14:                  </asp:ListView>

Dies ist der Inhalt der dazu gehörigen aspx.vb Datei. Es kommt ein Entity Framework Code First Model zum Einsatz.

   1:   Public Function roomlist_GetData() As IQueryable(Of room)
   2:          Dim db As New ConcordeContext
   3:          Return db.room
   4:   End Function

 

Nun kommt der spannende Teil, der Angular.js Controller. Dieser führt einen Callback per $http aus und übergibt dabei den Hashwert aus der URL als Parameter. Dabei hilft $location, das per Path (eigentlich sollte es hash() sein) den passenden Wert aus der URL liefert. Nach Aufruf des REST-Services stehen die JSON-Daten in der Variable data (Zeile 20) und werden direkt der Chatmessages-Eigenschaft im $Scope zugewiesen.

Das Besondere an diesem Angular-Beispiel ist, dass ein Watcher (Zeile 5) auf dem Viewmodell gesetzt wird, der die Änderung der URL als Event-Geber nutzt und den Service Call initiiert. Ohne diesen läuft der Controller nur einmal durch.

   1:  angular.module('App', [])
   2:    .controller('chatController',
function ($scope, $http,$location,$window) {
   3:      $scope.chatMessages = [];
   4:      $scope.location = $location;
   5:      $scope.$watch('location.absUrl()', function () {
   6:          $scope.target = $location.path(); 
   7:          $scope.ladeMessages();
   8:      }, true);
   9:      $scope.ladeMessages = function () {
  10:          if ($scope.target != null) { 
var para = $scope.target.replace('/', ''); };
  11:       
  12:          $http(
  13:       {
  14:           method: 'GET',
  15:           url: 'api/chatmessages',
  16:           params: {
  17:               room: para
  18:           }
  19:       })
  20:      .success(function (data, status) {
  21:          $scope.chatMessages =  data;
  22:      })
  23:      };
  24:   
  25:  });
  26:   

Nun fehlt noch der deklarative HTML5 Teil, der entweder eine Meldung für leere Daten oder die Liste anzeigt. Dies ist der einfachste Teil. Der Scope enthält die Liste der ChatMessages, die mit der ng-repeat-Direktive durchlaufen wird. Dies ähnelt einem ASP.NET Repeater Control, nur eben clientseitig.

   1:   <div ng-show="chatMessages.length==0">
   2:                keine Daten...
   3:   </div>
   4:    <div ng-repeat="msg in chatMessages">
   5:                      {{msg.Message}}
   6:   </div>

Windows Tipp - Wochentag in der Startleiste anzeigen

So mancher mag sich zuweilen die Frage stellen: Kann Windows auch den Wochentag in der Startleiste darstellen? Selbst wenn man sich diese Frage noch nie gestellt hat: wer diese Einstellung bei jemandem sieht, ist oft sehr angetan. Die meisten Benutzer möchten dann wissen, wie sie dies auch auf ihrem Computer einstellen können.

So wird's gemacht:

Die Einstellung vornehmen

Drücken Sie die Windows-Taste + R und geben "intl.cpl" ein, gefolgt von OK, danach wählen Sie Weitere Einstellungen… und den Reiter Datum.

clip_image001

Anpassung der Datumsdarstellung

Sie möchten, dass der Wochentag ausgeschrieben sein soll, dann geben Sie in das Feld Datum (kurz) statt "TT.MM.JJJ" "TTTT, TT.MM.JJJJ" ein.

clip_image002

Unterhalb der Felder stehen Erläuterungen zur Bedeutung der Buchstaben und deren Auswirkungen auf die Anzeige.

clip_image003

Bestätigen Sie die Einstellungen mit OK und der Wochentag erscheint, wie gewünscht, unten in der Startleiste.

clip_image005

Fertig

Windows 8.1 ohne Microsoft-Konto installieren

Manche Benutzer verwenden ein lokales Benutzerkonto, damit keine Daten bei Microsoft gespeichert werden. Beim Update auf Windows 8.1 müssen diese während der Installation ein Microsoft-Konto anlegen. Es gibt dennoch eine Möglichkeit, die Registrierung zu umgehen. Sie müssen nicht, wie suggeriert, ein neues Konto anlegen.

Wie Sie dabei vorgehen, lesen Sie hier.

Update starten:

Das Update auf Windows 8.1 ist im Windows Store zu finden. Mit der „Windows-Taste“ gelangen Sie auf die Kacheloberfläche. Klicken Sie hier auf Store, dann erscheint die Kachel Kostenloses Update auf Windows 8.1.

image

Unter Umständen erscheint die Meldung, dass Sie Updates installieren müssen.

Die verborgene Einstellung auswählen:

Jetzt wird das Update heruntergeladen, der Computer startet neu, danach bestätigen Sie wie üblich die Lizenzbedingungen und klicken dann auf Express-Einstellungen verwenden.

Wenn „Melden Sie sich bei Ihrem Microsoft-Konto an“ erscheint, klicken Sie unterhalb auf die nahe unsichtbare Zeile Neues Konto erstellen und auf Mit einem vorhandenen Konto fortfahren.

image

Sie lassen alles Weitere durchlaufen und installieren.

Das ist alles, so klappt es!

Jump Start Training: JavaScript, HTML und CSS

Month List