Intelligenz für das Intelligente Wohnen

So ein Smart-Home ist schon etwas feines: Lichter gehen von alleine aus, wenn die werten Familienmitglieder es mal wieder vergessen, der freundliche Hausgeist erinnert einen daran rechtzeitig die Mülltonnen an die Strasse zu stellen und wenn mal niemand zu Hause ist kann das Haus von ganz allein so tun als ob es doch so wäre. Um das zu bewerkstelligen muss man zum einen selbstredend die entsprechende Hardware haben. Zum anderen braucht man auch noch eine Zentrale, die alles miteinander verbindet – und letztendlich steuert.

Soweit, so einfach. Doch es bringt auch eine Reihe neuer Herausforderungen mit sich. Zum Beispiel die neuartige Frage warum eine Lampe sich morgens partout nicht einschalten lassen will. Oder weshalb das Wohnzimmer auf einmal rot leuchtet. Oder warum morgens das Radio läuft. Oder warum allabendlich die Beleuchtung im Garten angeht. Oder, oder, oder…

Was dafür bislang fehlte war ein Schaltplan für das Smarthome; denn zumindest meine Schaltzentrale bietet keine adäquate Lösung um derlei Zusammenhänge klar darzustellen. Aber dafür gibt es eine API samt XML Export der Konfiguration. Was fehlt ist lediglich ein Konverter in eine anschaulichere Darstellungsweise, zum Beispiel ein UML Diagramm (mein persönlicher Favorit für derlei ist yUML). Und das sieht dann in etwa so aus:

Schaltbild eines Smarthome

Das Bild muss sich in seiner Komplexität nicht unbedingt hinter klassischen Schaltplänen verstecken, hilft aber ebenso gut um die Fehlerursache einzugrenzen.

Das Script zum konvertieren der XML Datei in ein PHP-Array gibt es in meinem github Repository. Viel Spaß beim visualisieren!

04/06/15

Zertifizierungen 2012 - eine Zusammenfassung

Als ich Anfang des Jahres zu meinem Buch Configuring Windows Server 2008 – Active Directory gegriffen habe, wusste ich noch nicht wo mich diese Entscheidung bis Jahresende hinführen würde. Vermutlich hätte ich das Buch auch einfach im Regal stehen gelassen, hätte ich es geahnt. So jedoch hat es mich auf eine sehr interessant (und auch durchaus lehrreiche) Reise geschickt, an deren Ende ich seit letzter Woche angelangt bin.

Als Ziel gesetzt hatte ich mir die Zertifizierung zum Enterprise-Administrator eigentlich bereits 2009. Doch erst der Griff zum Buch hat mich wieder auf den Weg gebracht. Ein Weg, der durch ein paar Umwege (Hyper-V, Server 2012, MCSE) noch länger war als zunächst geplant. Aber am Ende dann doch erfolgreich. Und sobald man erst einmal in der Materie drin ist, fallen einem die Prüfungen auch wesentlich leichter. So hat die Vorbereitung auf das erste Examen noch einige Monate gedauert, zuletzt hatte ich jedoch Prüfungen im zwei-Wochen Tag.

Exam Description Date Completed
647 Pro: Windows Server 2008, Enterprise Administrator December 13, 2012
414 Implementing an Advanced Server Infrastructure November 30, 2012
413 Designing and Implementing a Server Infrastructure November 16, 2012
417 Upgrading Your Skills to MCSA Windows Server 2012 November 02, 2012
643 TS: Windows Server 2008 Applications Infrastructure, Configuring October 19, 2012
680 TS: Windows 7, Configuring October 03, 2012
646 Pro: Windows Server 2008, Server Administrator July 11, 2012
659 TS: Windows Server 2008 R2, Server Virtualization May 31, 2012
640 Windows Server 2008 Active Directory, Configuring April 02, 2012
642 Windows Server 2008 Network Infrastructure, Configuring November 09, 2009

Und als nächstes? Sofern die Zeit es zulässt, werde ich mich im kommenden Jahr mehr auf Prozessen konzentrieren. Projektmanagement und ITIL stehen auf meinem Plan. Mal sehen wie ich mich dabei schlage!

12/18/12

ActiveDirectory via PowerShell

PowerShell ist eine tolle Sache. Und das liegt nicht zwingend an dem sich irgendwie einstellenden Linux-Feeling. Vielmehr an der Flexibilität und dem Gefühl furchtbar effizient eigentlich einfache Aufgaben erledigen zu können, die mit einem GUI oder einer MMC-Konsole schrecklich lange dauern würden. Aber das erwähnte ich ja bereits.

Und auch in Sachen ActiveDirectory hat Microsoft mittlerweile so viele CmdLets zur Verfügung gestellt, das man so ziemlich alles aus der PowerShell heraus steuern kann. Hier und heute meine Top 3:

  1. get-adgroup –f { name –like "*internet*access*" }
  2. get-acl \\server01\share01
  3. add-adgroupmembers somegroup –members user1, user2, laptop3

Natürlich macht das alles erst so richtig Spaß wenn man sie kombiniert. Hier zum Beispiel die von mir am häufigsten genutzte Kombination um einen User in diverse Gruppen einzufügen (ich kann mir zwar kryptische Passwörter merken, aber logisch benannte Gruppennamen wollen sich mir nicht eintrichtern):

get-adgroup –f { name –like “vpn” } | add-adgroupmembers –members User02

Etwas komplexere Aktivitäten schreibt man jedoch besser in ein PowerShell Skript. So lassen sie sich nicht nur einfach an Kollegen weitergeben sondern auch als Job einplanen. Hier ein Skript das ich nutze im deaktivierte Computer-Accounts nach einer gewissen Zeitspanne zu löschen:

import-module activedirectory
$ou = read-host "Which OU is to be searched?"
$computers = get-adcomputer -filter 'enabled -eq $false' -searchbase $ou -properties Name, LastLogonDate | where {$_.LastLogonDate -le ((get-date).addmonths(-6))}
foreach($c in $computers){ remove-adcomputer $c  -whatif }

08/02/12

Drucker-Monitoring mit Munin

Munin ist ein tolles Tool. Aber das sagte ich ja bereits. Vor allem die leichte Erweiterbarkeit mit neuen Plugins macht es mir immer wieder aufs neue sympatisch. Wer es noch nicht kennt (und eine nennenswerte Anzahl an Hosts im Netzwerk hat), sollt es sich definitiv näher anschauen! Ich nutze es auch beruflich um einige Legacy Systeme und Drucker zu überwachen.

Nachdem wir vor einiger Zeit einen neuen Drucker für das Heimnetz angeschafft haben, lag es nahe das entsprechende Plugin auch in meiner privaten Munin-Installation einzusetzen. Hauptsächlich um rechtzeitig neuen Toner kaufen zu können.

Und weil ich den Code so schön aufgearbeitet habe, gibt es das Plugin jetzt auch in meinem Google-Code Repository zum Download (und erweitern).

07/16/12

Einmal mehr: Zertifikate

Am Mittwoch war der erfolgreiche Ziel-Einlauf meines diesjährigen ZertifizierungsMarathon. Mit bestandener Prüfung zum Microsoft Certified IT Professional: Server Administrator on Windows Server 2008 bin ich zugleich auch ein Microsoft Certified Solutions Associate geworden.

MCSA Server 2008

Zugegeben, letzteres Zertifikat wird mit Veröffentlichung des neuen Windows Server 2012 hinfällig. Dennoch eine durchaus befriedigende Leistung für ein halbes Jahr Weiterbildung. Und sobald der Kurs für Server 2012 fertig gestellt ist, kann man seine Zertifizierung auch mit einem einzigen Test aktualisieren.

07/13/12

Noch ein Zertifikat

Mit freundlicher Unterstützung des Microsoft Partner Network, die mir nicht nur einen Crash-Kurs in der Materie sondern auch einen Gutschein für eine Gratis-Prüfung haben zukommen lassen, durfte ich mich am letzten Donnerstag an einer neuerlichen Zertifizierung versuchen. Diesmal Server Virtualisierung. Sehr interessant, wenn auch – was die Details betrifft – weniger umfangreich als jene für Active Directory.

Um ganz ehrlich zu sein bin ich mehr oder weniger davon ausgangen durch zu fallen – schließlich war die Vorbereitung wenig intensiv. Unterlagen zum lernen quasi nicht existent. Und vor allem habe ich es nicht vollbracht meine Test-Umgebung aufzusetzen. Trotzdem habe ich es irgendwie geschafft die Prüfung erfolgreich zu bestehen:

Ich frage mich jedoch ob das nun gegen die Prüfung oder für das White Paper zur Virtualisierung spricht. Vermutlich beides…

06/04/12

Code schreiben, Code lesen

Denkt man an Programmieren fällt einem zunächst nur die Logik ein: Der Ablauf, den ein Programm erledigen muss um ein gewünschtes Resultat zu liefern. Hat man das erreicht stellt sich meist als nächste Frage die Effizienz: Wie kann ich das Resultat möglichst schnell oder mit möglichst wenig Ressourcen erreichen? Ein eher Grundsätzlicheres Problem stellt sich schließlich bei der Implementation: Welche Namenskonventionen verwende ich für meine Funktionieren, Variablen und Klassenbezeichnungen? Allerdings gibt es auch noch eine weitere, eher unauffällige Fragestellung: Wie kann ich mein Programm verständlich schreiben? Meistens wird hier auf eine ausgiebige Dokumentation oder sinnvolle Kommentare im Quellcode verwiesen – doch in der Realität werden diese eher spärlich umgesetzt.

Auf dieser Situation aufbauend haben Robert Green und Henry Ledgard ein paar Grundsätze über Namenskonventionen und Layout von Quellcode erstellt und in der ACM Queue veröffentlicht. Ihr Ziel war es Code so zu schreiben, dass er auch ohne Dokumentation einfach und verständlich nachzuvollziehen ist – nicht nur für andere, sondern auch für einen selbst. Wer sich jemals Jahre später durch den eigenen Spaghetticode wühlen musste um Modifikationen an einem Programm vorzunehmen, kann das sicherlich nur zu gut nachempfinden. Doch wie funktioniert dieser Ansatz? Ein Beispiel aus ihrer Veröffentlichung

char c1;
c1 = getChoice();
Switch(c1){
  case 'q': case 'Q':  quit();                break;
  case 'e': case 'E':  enterPerson(content);  break;
  case 'd': case 'D':  delPerson(content);    break;
  case 's': case 'S':  sortByName();          break;
  case 'l': case 'L':  showAll();             break;
  case 'f': case 'F':  searchByName(content); break;
  case default:        System.out.println("--Invalid Command!!\n"):
}

Wie zu sehen ist legen sie auf die Gestaltung des Codes wert – Anweisungen werden in logische Blöcke strukturiert so dargestellt, dass man durch einfaches betrachten erkennen unter welcher Bedingung welche Aktion ausgeführt wird. In ihren Grundsätzen gehen sie allerdings auch auf die Benennung (und Lesbarkeit) von Variablen, Funktionen und Klassen ein. Stets mit dem Ziel den Code für sich selbst sprechen zu lassen. Ein Artikel den sich, wie ich finde, zu lesen lohnt!

Ich persönlich gerate speziell bei den Namenskonventionen regelmäßig ins Straucheln – was zu einem guten Teil auch von meiner Trial-and-Error Programmierung herrührt: Variablen ändern durchaus öfters im Laufe der Versionen ihre Nutzung, Funktionen ihren Umfang und Klassen ihre Bestimmung (was dank Refactoring kein großes Problem mehr darstellt). Und eine wirkliche Dokumentation hat bislang noch keines meiner ohnehin eher kleineren Projekte verpasst bekommen. Daher werde ich mich bemühen bei meinen zukünftigen Projekten diese Grundsätze zu beherzigen.

05/16/12

Algorithmen und anderes Allerlei

Er hat zwar nur fünf Wochen gedauert, aber anstrengend war es dennoch. Vor allem der Teil, der die längst vergessenen Mathematik-Grundlagen erforderte. Dennoch habe ich ihn geschafft, den gratis Online-Kurs Design and Analysis of Algorithms I der Stanford University. Und heute gab es das auch schriftlich:

Dabei habe ich nicht nur viel dazugelernt (vor allem was Methodik und Laufzeitoptimierung von Programmen betrifft), sondern auch eine Menge Spaß gehabt! Und den Denkapparat ein wenig zu belasten kann auch nicht schaden – zumal es durchaus bemerkenswerte Nebeneffekt (z.B. bei der Konzentrationsfähigkeit) mit sich bringt.

05/08/12

Mal wieder ein Zertifikat

Zugegeben, die Zertifizierungswelle ist bei mir eigentlich schon wieder ein wenig länger her. Dennoch konnte ich heute meiner Sammlung ein weiteres Zertifikat hinzufügen:

Certified!

Und das zu bekommen war diesmal richtig anspruchsvoll! Nicht nur da es eine wirklich atemberaubend breites Spektrum abzudecken galt (im Laufe der Vorbereitung mussten bis zu 15 virtuelle Maschinen parallel herhalten) – gegen Ende meiner ohnehin gut drei Monate dauernden Vorbereitung habe ich in der letzten Woche dann auch noch herausgefunden das ich mit komplett (!) veralteten Unterlagen gelernt hatte. Letztes Wochenende war daher Power-Lernen angesagt. Erfolgreich!

Mal sehen wie lange Microsoft es mir gönnt. Denn immerhin steht ja der Nachfolger bereits in den Startlöchern…

Windows 8 Server Beta

04/04/12

Zweigleisiger Firefox

Ab und an, vornehmlich wenn man Web-Anwendungen entwickelt, kommt man in die Bredouille verschiedene Versionen eines Browsers nutzen zu müssen. Zumal es mittlerweile allein von Mozillas Firefox für Windows vier verschiedene Versionen gibt – von anderen Herstellen oder Betriebssystemen mal ganz abgesehen. Aber als fürsorglicher Entwickler möchte man dennoch gerne wissen ob sich auch mit anderen Browsern als dem eigenen alles korrekt verhält. Oder aber man möchte gerne eine andere Version nutzen als jene, die einem der Arbeitgeber vor-installiert. Nicht, dass ich das damit sagen oder unterstützen wollen würde…

Wie dem auch sei, zwei Versionen von Firefox lassen sich in der Tat problemlos unter Windows installieren. Zumindest wenn man dabei zwei Dinge beachtet:

Ist der erste Punkt noch offensichtlich und kann schon bei der Installation hinreichend ausgeräumt werden, muss man beim zweiten manuell nachhelfen und optimieren.

Hier klicken für die Schritt-für-Schritt Anleitung.

12/07/11