20 Tage zuvor: 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!

130 Tage zuvor: Update mit noch mehr Updates

Scheinbar schreibe ich dieses Blog nur noch, um es mit Updates zu bestücken. Jedenfalls ist das in der Tat (schon wieder) der Grund aus dem ich einen Artikel schreibe. Aber man weiß ja nie wie es weiter geht…

Dem geneigten Leser mag es vielleicht aufgefallen sein, dass dieses Blog eine Weile lang nicht erreichbar war. Grund ist, dass es in der Zwischenzeit von einem Professionellen Webhoster auf eine Self-Hosting Plattform umgezogen ist. Die netten Menschen bei edis.at bieten nämlich ein tolles Gratis-Hosting für Raspberry-PI Module an. Nachdem ich mir dort vor etliche Monaten einen Slot sichern konnte, wurden nach und nach Webseiten umgezogen.

Leider hat sich dabei heraus gestellt, dass dieses Blog nicht so ohne weiteres auf der neuen Plattform (lighttpd und MySQL unter Debian) lauffähig ist. Und mit der Zeit war es auch nicht so üppig bestellt, als das ich mich direkt dahinter hängen konnte. Im Endeffekt lag es dann an ein paar fehlenden PHP-Modulen. Kleiner Tip fuer alle, die Textpattern unter lighttpd laufen lassen wollen: Mit einem 404-Handler kann man saubere URL’s realisieren!

server.error-handler-404 = "/textpattern/index.php"

Wie dem auch sei, mittlerweile scheint wieder alles zu funktionieren – wenngleich auch weniger performant als zuvor. Und wo ich schonmal dabei war, wurde auch gleich eine aktuelle Version eingespielt.

Jetzt fehlen nur noch neue Artikel…

579 Tage zuvor: Update mit Updates

Scheinbar habe ich mir weit über ein halbes Jahr Zeit gelassen um das Update auf Textpattern 4.5.4 (dem CMS für dieses Blog) durchzuführen. Nicht, weil es so viel Arbeit ist; um genau zu sein hat es keine zehn Minuten gedauert. Eher weil es immer andere Dinge zu tun gab. Zeit raubend sind eher die Arbeiten an der Seite selbst, die im Laufe der Zeit liegen geblieben sind – aber auch die sind nunmehr abgearbeitet. Eine kleine Übersicht der Änderungen:

  • Kommentare erfordern keine Email-Adresse mehr
  • Die Suchfunktion liefert nun Ergebnisse
  • Tag-Suchen zeigen jetzt die gesamten Artikel an, nicht nur eine Ergebnisliste
  • Die Artikelnavigation am Ende der Seite wird wieder angezeigt
  • Sowohl Anderswo als auch Andere wurden repariert und aktualisiert (soweit möglich)

Außerdem wurden diverse Anpassungen am Design durchgeführt.

Wie immer gilt: Wer Fehler findet bitte melden! Ich werde dazu die kommenden Wochen die Anzeige von Fehlermeldungen aktiviert lassen. Als kleinen Ansporn habe ich insgesamt fünf Artikel freigeschaltet, die seit einiger Zeit auf Veröffentlichung gewartet haben.

Weiterlesen?

579 Tage zuvor: Sticky-Navigation in Prototype

Sticky-Navigationen sind ja irgendwie ein Trend: Die Navigationsleiste einer Webseite bleibt dabei am oberen Fensterrand kleben, wenn man nach unten scrollt. Ist ja auch eine praktische Sache, manchmal jedenfalls.

Die gängigen Implementierungen greifen jedoch auf jQuery zurück. Soweit nichts verwerfliches, ist es doch eine weit verbreitete Standard-Bibliothek. Für die Implementierung auf diesem Blog wollte ich jedoch die ohnehin bereits verwendete Bibliothek Prototype nutzen. Doch leider gab es dazu keine Lösung. Oder zumindest konnte ich keine finden. Für die nachfolgenden Leidensgenossen hier ein passende Lösung:

HTML:
<style>
#navigation.relative{
position:relative;
top:100px;
}
#navigation.fixed{
position:fixed;
top:0px;
}
</style>
<script type="text/javascript">
Event.observe(window, 'scroll', function() {
        if (document.viewport.getScrollOffsets()[1] > 100) {
                $('navigation').removeClassName('relative');
                $('navigation').addClassName('fixed');
        } else {
                $('navigation').removeClassName('fixed');
                $('navigation').addClassName('relative');
        }
});
</script>

589 Tage zuvor: Zigeuner-Soße

Dem geneigten Leser mag bekannt sein, dass mich hauptsächlich der Heißhunger auf geliebte, heimische Gerichte zum Kochen gebracht hat. Kochen soll in diesem Zusammenhang, so traurig es auch sein mag darauf hinzuweisen, auf das Zubereiten von Gerichten von Grund auf heißen. Keine Tüten-Soßen, keine Dosen-Ravioli und ganz sicher auch keine Mikrowellen-Currywurst.

Eine letzte Bastion, die es zu erklimmen galt, war die Zigeuner-Soße. Einige erste Versuche sind leider nicht sehr erfolgreich geendet (zumindest was meine geschmackliche Erinnerung betraf), daher hatte ich mich zuletzt nicht mehr sehr häufig daran versucht. Heute jedoch wurden die Bemühungen von Erfolg gekrönt. Damit es beim nächsten Mal nicht wieder im Desaster endet, hier das (ziemlich einfache) Rezept:

  • Zwei Zwiebeln, in Halbkreise geschnitten
  • Eine Knoblauch-Zehe
  • Zwei Paprika (rot & grün), in kleine Streifen geschnitten
  • Circa fünf pürierte Tomaten

Die Zwiebeln scharf anbraten. Sobald die Kanten der Zwiebeln braun werden Knoblauch und Paprika dazugeben und ebenfalls mit scharf anbraten. Mit dem Tomaten-Püree ablöschen und alles kurz aufkochen. Mit Salz, Pfeffer, Paprika, ein wenig Chilli und süßem Curry nach Belieben abschmecken. Anschließend circa 30 Minuten köcheln lassen.

Dazu passt natürlich nur eines: Schnitzel mit Pommes! Obwohl es auf einem Hotdog bestimmt auch ganz vorzüglich schmecken dürfte. Zigeuner-Hotdog?

592 Tage zuvor: Bubble-Sort in PHP

Da bin ich die Tage doch glatt dazu gekommen einige (Er-)Kenntnisse meines Algorithmus-Kurses vom letzten Jahr anzuwenden. Grund war die fehlende Funktion zur Sortierung eines Mehrdimensionalen Arrays basierend auf einem Sub-Key. Aber gut, so konnte ich mir wenigstens beweisen das ich das Konzept noch verstanden habe:

PHP:
// (Bubble)Sort
do{
        $swapped = false;
        for($i=0; $i<(count($calendar)-1); $i++){
                if($calendar[$i]["stamp"] &gt; $calendar[$i+1]["stamp"]){
                        $swap = $calendar[$i];
                        $calendar[$i] = $calendar[$i+1];
                        $calendar[$i+1] = $swap;
                        $swapped = true;
                }
        }
}while($swapped != false);

Mal schauen wann mir dann eine Anwendung für die Algorithmen zu Graphen in den Schoss fällt.

PS: Wieso gibt es in PHP eigentlich kein array_swap()?

594 Tage zuvor: The Gathering

Ich bin jetzt schon seit zwei Tagen auf der Suche nach einem ganz bestimmtes Lied. Gothic war es wohl. Circa im Jahre 2001 – gehört wohlgemerkt. Trotz mannigfaltigen Anfragen konnte ich es bis dato nicht entdecken.

Aber immerhin habe ich dabei viel Musik zu hören bekommen. Ein wirklicher Fund, wie ich finde, ist The Gathering’s if_then_else:

706 Tage zuvor: Stadt des Winds

Nun also Chicago. Ganze fünf Jahre hat es gedauert. Zumindest wurde eine Geschäftsreise mit freiem Wochenende daraus. Und das Frühstücksbuffet im Hotel erinnerte doch arg an alte Zeiten. Nicht des Essens wegen (grausam). Vielmehr kennt man fast jeden, der im Esssaal sitzt – alles Kollegen. Zuletzt passierte mir dies in einem ähnlich günstig (was das berufliche betrifft) gelegenen Hotel im Stuttgarter Raum.

Aber zurück zu Chicago, den sub-urbanen Teil in dem mein Hotel gelegen ist. Es erinnert einen doch arg Wohnsiedlungen die aussehen wie im Film: Lang-gezogene, grüne Vorgärten mit Auffahrten für die diversen Autos. Weiße Briefkästen am Straßenrand soweit die Strasse reicht. Chicago selbst hingegen ist anders. Anders als so vieles in diesem Land: Eine spürbar alte Stadt. Das wird einem nicht nur durch die tatsächlich nennenswert alte Geschichte auf, sondern man spürt es auch. Die überall vorhandenen Industriegebäude erinnern an die Zeiten der Industrialisierung, allerdings weniger dreckig als der Ruhrpott.

CHicago

Doch auch die klassischen Touristen-Attraktionen sind durchaus sehenswert: The Art Institute of Chicago (Zeit mitbringen! Auch wenn Google einem hier die Gemälde erklären kann), Grant Park , eine Boots-Tour über den Chicago-River oder auch einfach nur durch die Stadt zu spazieren. Chicago ist definitiv eine Reise wert! Und es gibt immer noch so viel zu sehen… Einzig mit der typischen Chicago-style Pizza konnte ich mich nicht so recht anfreunden. Sei’s drum.

770 Tage zuvor: DNSmasq und Active Directory

Eines meiner liebsten Tools für den Heimeinsatz ist DNSmasq. Es handelt sich dabei um einen kleinen, leicht einzurichtenden DNS und DHCP-Server – perfekt für das Heim-Netzwerk. Der grösste Vorteil allerdings ist seine enorme Flexibilität, denn dank zahlreicher Funktionen und Optionen kann man nahezu alle Netzwerk-Szenarien mit ihm realisieren. Vermutlich sind das auch die Gründe aus denen er bei Tomato, einer wirklich tollen Router-Software, zum Einsatz kommt.

Leicht einzurichten oder nicht, wenn man ausgefallene Netzwerk-Konfigurationen hat, wird es auch mit dem übersichtlichsten Programm kompliziert. Zum Beispiel wenn man das Netzwerk für Dual-Stack mit einer Active-Directory Domain im IPv6 Netzwerk konfigurieren möchte. Kompliziert, vielleicht. Aber mit folgenden Parametern durchaus machbar:

srv-host=_ldap._tcp.<Domain-Name>,<DC-Hostname>,389
server=/<Domain-Name>/<DC-IPv6>

Mit diesen Parametern sagt man DNSmasq welche Anfragen an einen Domain-Controller weiterzuleiten sind (und wo sich dieser befindet). Der DNS-Server der Domäne muss allerdings auch umgekehrt konfiguriert werden, zum Beispiel mit einem Forwarder zum DNSmasq-Host um allgemeine (oder nicht AD-integrierte) Anfragen auflösen zu können. Die Namensauflösung sollte damit einwandfrei funktionieren – sowohl für IPv4 als auch für IPv6 Endgeräte.

Ein hier nicht angesprochenes, da nicht mit der Namensauflösung zusammenhängendes, Problem ist die IPv6 Adress-Vergabe. Denn leider funktioniert die vermeintliche Selbstkonfiguration nicht ganz so Aufwands-arm wie angepriesen. Dazu vielleicht später mehr.

776 Tage zuvor: Wanted!

Wer kennt diesen Mann?

WANTED

Hinweise bitte an die Polizei Miami Beach oder hier in den Kommentaren.