2. September 2016: Restore erfolgreich

Heute ist es 303 Tage her, dass diese Webseite offline ging. Eine ziemlich lange Zeit, selbst für mich. Allerdings habe ich nur bedingt zu dieser beachtlichen Wiederherstellungszeit beigetragen. Gut einen Tag habe ich für die eigentliche Wiederherstellung auf einem anderen Webserver gebraucht. Allerdings hat es gut zehn Monate gedauert, bis ich wieder auf meine Daten zugreifen konnte.

Am 5. November waren meine Webseiten nicht mehr erreichbar. Ein Zugriff auf den Server war nicht mehr möglich, und auch ein Fern-Reboot brachte leider keine Abhilfe. Ein freundliches Nachfragen beim Hoster hat allerdings auch keine Lösung gebracht – bis zur Antwort waren bereits einige Wochen verstrichen. Da es sich bei dem Server um einen RaspberryPi in einem gratis-Hosting Programm handelte, kann man sich auch nur bedingt ueber Antwortzeiten beschweren. Jedenfalls wurden mir zwei Optionen angeboten:

  1. Die SD-Karte zum booten neu aufsetzen lassen, was eine Neukonfiguration erfordert.
  2. Den RasPi zurück schicken lassen, womit der Platz im Rechenzentrum wegfallen würde.

Das Hosting-Programm wurde in der Zwischenzeit eingestellt. Option 2 hieß daher auch, dass ein Umzug auf einen neuen Server anstehen würde. Da ich jedoch zu diesem Zeitpunkt (Dezember) bereits einige Zeit mit warten verbracht hatte, entschloss ich mich für Option 2. In Vorbereitung auf den Umzug der Webseiten erstellte ich schon einmal einen neuen Server, diesmal in der Amazon-Cloud.

Nach einigen Tagen lieft der Server in der Cloud, samt verteilter Ressourcen und Nutzung von etlichen AWS Diensten. Die Performance-Unterschiede sind gewaltig – und nebenbei habe ich noch das Know-How für Cloud-basierte Webseiten aufgebaut. Alles in allem eine sehr positive Erfahrung! Jedenfalls bis die erste Rechnung kam und das Aufräumen und das Zusammenstreichen der Dienste auf das wirklich Notwendige anfing. Am Ende kostete mich der Server samt aller Ressourcen knapp $5.50 pro Monat. Ein akzeptabler Preis.

Was nun noch fehlte, waren meine Daten. Einige Webseiten konnte ich von Backups wiederherstellen. Das Blog jedoch basiert auf einer Datenbank – und für die hatte ich kein Offsite-Backup eingerichtet. Es hieß also warten bis der RasPi eintrifft. Und das war, nach etlichen Tickets, Emails und Tweets, gestern dann endlich der Fall. 303 Tage nachdem die Webseite offline ging.

Nun also ist das Blog wieder verfügbar. Wenn ich mir anschaue wie viele Artikel ich in den letzten Jahren über diesen Zeitraum geschrieben habe, hat das Internet sie sicherlich nicht vermisst. Allerdings hatte ich durchaus ab und an das Bedürfnis einige Tricks nieder zu schreiben. Wollen wir hoffen, dass derlei auch in nächster Zukunft weiterhin der Fall sein wird.

18. March 2013: 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.

22. January 2013: Tomatenmus

Es gibt Tage, an denen will einfach nichts gelingen. Gestern fiel eindeutig in ebendiese Kategorie. Da überrascht es, rückblickend, nicht wirklich das auch mein Router den Geist aufgegeben hat. Leider kann ich lediglich mir selbst die Schuld dafür geben. Denn ich habe ihn, ganz klassisch, kaputt gespielt. Mit Firmware-Upgrades.

Mein geliebter, kleiner Router hatte naemlich Tomato installiert, eine offene Firmware-Alternative für zahlreiche Router. Nun wollte ich meinem Router IPv6 beibringen und musste dazu eine neue Version, zumal eine erweiterte, einspielen. Soweit so gut. Leider habe ich offenbar die falsche Datei heruntergeladen. Und damit meinen Router in einen Haufen Elektronikschrott verwandelt.
Nun gibt es Mittel und Wege diesen Fehler wieder zu beheben. In meinem Fall hätte ich jedoch ein JTAG-Kabel basteln und einen entsprechenden Pfostenstecker auf der Platine meines Routers einlöten müssen – mangels entsprechender Bauteile hätte dies vermutlich wesentlich länger gedauert. Und so musste ich wohl oder übel den Geldbeutel öffnen und meine Unachtsamkeit mit barer Münze zahlen.

Groß ist die Weisheit des Webs und so erkannte ich sehr schnell das die einzig Tomato-kompatible Alternative ein Router von Netgear ist – alle anderen waren lediglich im Versand zu bestellen. Nun sei dazu gesagt, dass ich mit Routern aus eben diesem Hause bislang alles andere als gute Erfahrungen gesammelt habe. Aber, was blieb mir anderes übrig? Und so wurde ein WNL3500L-100NAS kurzfristig gekauft. Immerhin kommt dieser mit vier Gigabit-Ports – da mein 8-Port Gigabit-Switch ebenfalls vor einigen Tagen das zeitliche gesegnet hat, ein angenehmer Begleiteffekt. Dennoch sollte wirklich mal jemand ein Tomato-kompatibles (oder zumindest ein konfigurierbares) Kabelmodem auf den Markt bringen.

Wie dem auch sei, ich dachte an dieser Stelle bereits das gröbste hinter mich gebracht zu haben. Doch wie ich anschließend noch lernen musste, ist das einspielen einer fremden Firmware nicht ganz so einfach wie bei anderen Geräten. Um die Sache abzukürzen: Berichte, die besagen man müsse den Umweg über DD-WRT machen, sind falsch. Im Gegenteil. Hat man DD-WRT erst einmal eingespielt, bekommt man Tomato nur mehr mit Umweg über die Original-Firmware installiert. Eine Lektion, die ich nach gut anderthalb Stunden gelernt hatten.
Anschließend durfte ich dann noch lernen, dass eine exportierte Tomato-Konfigurationsdatei Hardware-gebunden ist. Man sie also nicht dazu nutzen kann dieselbe Konfiguration auf anderer Hardware wieder her zu stellen. Immerhin handelt es sich dabei um eine gz-gepackte Textdatei. Man kann also zumindest weite Teile per copy&paste manuell rekonstruieren. Immerhin.

Was also ist die Lehre des gestrigen Tages? Zum einen mal das man nicht mal eben eine Firmware einspielen und sich die notwendige Zeit für die angebrachte Sorgfalt nehmen sollte. Zum anderen aber auch, dass man keine zusätzlichen Baustellen braucht wenn einem ohnehin gerade anderweitige Sorgen ins Haus stehen (ein Rohrbruch zum Beispiel).
Ein gutes allerdings hat der gestrige Tag auch gebracht: Techniker von meinem ISP haben mir eindeutig vor Augen geführt das unser miserabler Upload (0.2 statt 1mbps) in der Tat auf meinen Router zurueck zu führen war – es lag an einem Konfigurationsfehler in den QoS(Quality of Service)-Einstellungen. Ups…

13. May 2012: Arduino-Senso

Als ich im letzten Jahr endlich den Open Camera Controller fertiggestellt hatte, stellte sich die Frage: Was mache ich jetzt mit meinem Arduino Eine Antwort war schnell gefunden: Einen Senso-Klon) bauen! Leider sich das Projekt dann doch wesentlich länger hingezogen als gedacht. Einen nicht unwesentlichen Teil haben meine eher rostigen Elektronik-Kenntnisse dazu beigetragen. Aber nichts desto trotz ist es nun endlich vollbracht! Auch wenn es sicherlich nicht schönsten Lösung ist, hier eine simplifizierte Version meines Schaltplans.

Zum 1:1 Nachbau möchte ich so allerdings nicht raten – Pin 13 des Arduino eignet sich nicht sonderlich gut als Input (wegen der Standard Notification-LED). Und auch sollte man für blaue LEDs einen höheren Widerstand als für die anderen LEDs (rot, gelb und grün in meinem Fall) benutzen – sie sind schlichtweg viel zu hell!

Die Software zur Hardware war wiederum erstaunlich schnell geschrieben – lediglich wenige Stunden (intensives Testen inklusive) hat es gedauert. Ganz in Anlehnung an das Hardware-Layout ist auch der Code nicht sonderlich ansehnlich. Dennoch sei er hier vorgestellt:

/* Arduino-Senso; v1.1
   (c)2012 by Kai Boenke
   Published under CC BY-NC-SA 3.0
 */

// Define Pins
#define ledGrn 6
#define ledRed 7
#define ledBlu 8
#define ledYel 9
#define btnGrn 10
#define btnRed 11
#define btnBlu 12
#define btnYel 13

// Customizations
#define maxWait 100000
#define maxMoves 30
#define inputDelay 500

// Declare Program-internal Vars
boolean waiting; //Defines Status for loop()
int waitCounter; //Used to determine Timeouts in loop()
int moveCounter; //Defines current Move in Sequence (Sequence-Replay)
int nextCounter; //Defines curent move to be made (next move to be made)
int rndSequence[maxMoves]; //Holds complete Sequence
int ledPinMin; //Define lowest Pin
int ledPinMax; //Define highest Pin


// Intial Setup
void setup() {
  // Pinmodes
  pinMode(ledGrn, OUTPUT);
  pinMode(ledRed, OUTPUT);
  pinMode(ledBlu, INPUT); //Exploits reduced voltage to dim LED
  pinMode(ledYel, OUTPUT);
  pinMode(btnGrn, INPUT);
  pinMode(btnRed, INPUT);
  pinMode(btnBlu, INPUT);
  pinMode(btnYel, INPUT);
  
  // Determine lowest/highest LED-Pins
  ledPinMin = min(min(min(ledGrn, ledRed), ledYel), ledBlu);
  ledPinMax = max(max(max(ledGrn, ledRed), ledYel), ledBlu);
  
  // Randomness
  Serial.begin(9600);
  randomSeed(analogRead(0));
  
  // Start first Game
  initGame();
}

// Main Loop
void loop() {
  // Check for Timeout
  if(waitCounter > maxWait){
    initGame();
  }else{
    waitCounter++;
  }
  
  // Show Sequence for new Move?
  if((!waiting) && (moveCounter == 0)){
    showSequence();
  }
  
  // Read Input
  int valGrn = digitalRead(btnGrn);
  int valRed = digitalRead(btnRed);
  int valBlu = digitalRead(btnBlu);
  int valYel = digitalRead(btnYel);
  
  // Evaluate Input
  if((valGrn == HIGH) || (valRed == HIGH) || (valBlu == HIGH) || (valYel == HIGH)){
    switch(rndSequence[moveCounter]){
      case ledGrn:
        if(valGrn == HIGH){
          blink(ledGrn);
          nextTry();
        }else{
          youLoose();
        }
        break;
      case ledRed:
        if(valRed == HIGH){
          blink(ledRed);
          nextTry();
        }else{
          youLoose();
        }
        break;
      case ledBlu:
        if(valBlu == HIGH){
          blink(ledBlu);
          nextTry();
        }else{
          youLoose();
        }
        break;
      case ledYel:
        if(digitalRead(btnYel) == HIGH){
          blink(ledYel);
          nextTry();
        }else{
          youLoose();
        }
        break;
    }
  }
}


/*
   Game-Logic
 */

// Setup a new Game
void initGame(){
  // Re-Initialize
  nextCounter = 0;
  moveCounter = 0;
  waiting = false;
  waitCounter = 0;
  
  // Visualize beginning of new Game
  roundBlink(5);
  
  // Generate new Sequence
  for(int i = 0; i < maxMoves; i++){
    rndSequence[i] = random(ledPinMin, ledPinMax+1);
    delay(20); //Try to increase Randomness even more
  }
}

// Visualize Sequence
void showSequence() {
  // Customize
  int blinkDelay = 500;
  int waitDelay = 100;
  
  // Show Sequence
  resetLeds();
  for(int i=0; i<=nextCounter; i++){
    blink(rndSequence[i], blinkDelay);
    delay(waitDelay);
  }
  
  // Reset Status
  waiting = true;
}

// Advance Try after successful Move
void nextTry(){
  // Next Move in Sequence or Replay?
  if(moveCounter >= nextCounter){
    delay(inputDelay);
    blinkAll(1, 10);
    nextCounter++;
    moveCounter = 0;
  }else{
    moveCounter++;
  }
  
  // Base-Case
  if(nextCounter >= maxMoves){
    // We have a Winner!
    blinkAll(10, 10);
    initGame();
  }else{
    // Move on!
    delay(inputDelay);
    waiting = false;
  }
}

// Wrong Move
void youLoose(){
  // Visualize
  blinkAll(1, 500);
  
  // New Game
  initGame();
}


/*
   LED-Controls
 */

// Single Blink
void blink(int led){
  blink(led, 100);
}
void blink(int led, int blinkDelay){
  resetLeds();
  digitalWrite(led, HIGH);
  delay(blinkDelay);
  digitalWrite(led, LOW);
}

// Random Blink
void blinkRandom(){
  blinkRandom(1, 100, 0);
}
void blinkRandom(int loops){
  blinkRandom(loops, 100, 0);
}
void blinkRandom(int loops, int blinkDelay){
  blinkRandom(loops, blinkDelay, 0);
}
void blinkRandom(int loops, int blinkDelay, int wait) {
  resetLeds();
  for(int i = 0; i

Insgesamt hat mich dieses Projekt wesentlich mehr Nerven als Geld gekostet. Wenn man bereits ein Arduino zur Hand hat, benötigt man lediglich eine Platine, ein paar LEDs, Widerstände sowie vier Schalter – den Rest kann man wiederverwenden. Stellt sich nur die Frage was ich jetzt mit dem Arduino anfange…

1. May 2012: Neue Gadgets

Der Frühling macht ja angeblich alles neu. Und zumindest auf meine Gadget-Ausstattung bezogen hat er dieses mal richtig zugeschlagen. So durfte ich mich in den vergangenen zwei Wochen gleich über zwei neue Smartphone von HTC freuen: Das One V sowie das One X. Letzteres wurde mir von den freundlichen Leuten bei HTC in der AT&T-Version für den US-Markt überlassen.

Von der Software-Sicht aus betrachtet (dank Android 4 samt passendem Sense) sind die beiden sich noch recht ähnlich. Auf der Hardware-Seite könnten die Unterschiede jedoch grösser kaum sein – was durchaus wörtlich zu verstehen ist. Denn die Abmessungen des One X grenzen schon an jene eines Tablets. Jedenfalls für mein Empfinden. Daher hatte ich mich auch ganz bewusst (und dennoch Zähne-knirschend) für das One V als Ersatz für mein angeschlagenes HTC Aria entschieden – es ist schlichtweg das einzig auf dem Markt verbliebene Smartphone das noch in eine Hosentasche passt dabei ohne unangenehme Nebenwirkungen zu entfalten. Wobei man dennoch ganz Zweifelsfrei feststellen muss, dass das One X ein umwerfend tolles Gerät ist – es fühlt sich genauso leicht und handlich an wie das One V (beide wiegen quasi nichts mehr) und ist ebenso flach. Und es liegt auch toll in der Hand – nur zum telefonieren ist es mir dann doch irgendwie zu groß.

Das tollste Feature an beiden Telefonen ist jedoch das neue Sense. Nach wie vor ist die UI der für mich ausschlaggebende Grund ein HTC Smartphone zu kaufen (seit nunmehr rund sechs Jahren und Plattform-übergreifend). Die Integration verschiedenster Quellen wie zum Beispiel flickr und Twitter in eine Oberfläche such selbst auf dem Desktop noch seinesgleichen. Ein Feature, das ich nicht mehr missen möchte! Und Sense 4 geht hier noch einen Schritt weiter und erlaubt es Quellen Modular hinzuzufügen (neuerdings z.B. auch LinkedIn). Doch das Beste, an beiden Telefon übrigens, ist für mich noch die Kamera. Nicht Hardware-seitig (obwohl sie wirklich unglaublich tolle Bilder macht!), sondern eher das Best-Shot Feature, bei dem man den Auslöser einfach gedrückt hält und so mehrere Bilder macht. Anschließend wählt man das Beste aus – und der Rest wird automatisch gelöscht. Auf diese Weise bekommt man auf wirklich einfachste Weise umwerfend gute Fotos – selbst von zappelnden Kindern.

Als Fazit bleibt mir nur noch zu sagen, dass ich bei meinem One V bleiben werde – es ist kleiner, handlicher und in allen fuer mich relevanten Punkten dem One X ebenbürtig. Fragt sich nur noch was ich mit dem One X anstellen werde. Vielleicht ein Kamera-Ersatz mit automatischem Dropbox-Upload?

12. December 2011: Nook-Eis selbstgemacht

Letzte Wochenende habe ich ein wenig mit dem Port der neuen Android-Version, Ice Cream Sandwich, auf den Nook Color gespielt. Die vorherige Version, “Honeycomb”, war zwar auch schon ein Fortschritt auf dem Nook – auch wenn es zugegeben spürbar keine richtige Unterstützung für die Hardware gab. Umso erstaunlicher das selbst ohne richtige Ausnutzung der Ressourcen (es handelt sich um eine frühe Alpha-Version) ICS die wesentlich bessere Erfahrung bietet: Menüs sowie Applikationen laufen sehr flüssig und trotz fehlender Sound- und 3D-Unterstützung finde ich es schon jetzt wesentlich angenehmer.

Da es trotz hervorragender Beschreibung im XDA-Developers Forum einiger Tüftelei bedarf die richtigen Dateien korrekt zu kombinieren um eine lauffähige Version (in meinem Fall von einer SD-Karte laufend) zu bekommen, folgen nach der Pause meine Notizen.

Weiterlesen?

7. December 2011: 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:

  • Das Installationsverzeichnis der beiden Versionen muss unterschiedlich sein.
  • Beide Installationen müssen unterschiedliche Profile verwenden.

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.

21. November 2011: Was ist eigentlich...

proprietäre Software? Und warum wird das Wort meistens in einem negativen Zusammenhang genannt? Ein Beispiel.

Als ich mir Anno 2009 den HP Dreamscreen näher angeschaut habe, dachte ich noch es wäre ein ganz wunderbares Gerät:

Dieser digitale Bilderrahmen, der dank seiner WiFi-Anbindung nicht auf mühselig manuell zu beladener USB-Sticks angewiesen ist, besitzt das Potential zum zentralen Familien-Kalender zu avancieren.

Im Prinzip ist es auch genau das – WiFi Anbindung ist vorhanden, man kann Radio und Bilder aus dem Internet herunterladen, den lokalen Wetterbericht einsehen und seine Facebook-Updates lesen. Leider kann es aber auch nur genau das: Alles, wofür HP eine Applikation spendiert hat. Selber Applikationen schreiben darf man nicht (es ist halt proprietäre Software). Somit ist der Funktionsumfang dieser – auf dem Papier – tollen Hardware leider arg beschränkt.

Anfang letzten Jahres hatte ich dann zumindest eine Lösung für mein Dilemma mit dem automatisch generierten Familienkalender gefunden: Snapfish. Für HP’s Foto-bestell-Website gibt es eine Applikation im Dreamscreen. Zwar muss man selbst das anzuzeigende Foto aufrufen (anstatt es automatisch aktualisieren zu lassen), aber immerhin hat der Bilderrahmen damit endlich das getan, wofür er von vornherein gedacht war.
Zumindest vorerst. Denn (und hier kommt der zweite Nachteil proprietärer Software zum tragen) vor gut dreieinhalb Monaten hat die Applikation plötzlich ihren Dienst eingestellt:

Dreamscreen cannot access the Snapfish Servers at this time. Please try again later or check your Internet Connection.

Geduldig wie man ist wartet man. Darauf, dass die Webseite wieder funktioniert. Oder auf ein Update. Vielleicht einen Hinweis vom Support? Doch nichts passiert – scheinbar hat HP den Support für die Dreamscreen-Geraete eingestellt. Keine Updates heißt keine Bilder-Downloads mehr. Und damit ist der teure Bilderrahmen nicht mehr als ein Stück Plastik – nutzlos.

Mit Zugriff auf die Programm-Sourcen des Dreamscreens (das Prinzip Open Source) könnte man das Problem sicherlich leicht lösen – oder eine alternative Lösung entwickeln. Abertausende von Programmieren wären dazu problemlos in der Lage – kostenlos! Doch da es sich jedoch um eine geschlossene Software-Lösung handelt ist man damit leider auf das Wohlwollen des Lieferanten angewiesen. Und wenn der sich verweigert bleibt man zwangsweise auf seiner Investition sitzen.

Und das ist dann auch der Grund wieso regelmäßig negativ über proprietäre Software berichtet wird. Und Jailbreaks so beliebt sind.

15. October 2010: Androides Windows Mobile

Am Montag wurde ja nun Windows Phone 7 offiziell vorgestellt. Grund genug, ein wenig nach Alternativen zu meinem mittlerweile etwas betagten Smartphone zu suchen. Windows Mobile 6.1 ist schließlich auch nicht gerade ein Highlight in der Microsoft’schen Geschichte gewesen.

Was liegt also näher als einfach das Betriebssystem des Telefons zu wechseln? Und, einigen fleissigen Entwicklern sei gedankt, es gibt in der Tat einen AndroidPort fuer mein HTC Touch Diamond Pro aka Raphael!

Eine wirklich einfache und mühelose Installation später und – schwuppdiwupp – schon hat man ein komplett neues Smartphone. Da man von einer SD-Karte bootet, muss man nicht einmal das Original OS löschen. Eindruck: Empfehlenswert!

1. August 2010: Bluetooth mal praktisch

Wer ein Handy hat und Linux nutzt, sollte es eigentlich als Pflicht-Tool installiert haben: BlueProximity. Das Tool ist dabei so einfach wie genial: Es lauscht ob das gekoppelte Handy in der Nähe ist und sperrt den Computer, falls dem nicht so sein sollte. Kommt man wieder zurück (oder besser gesagt: nähert sich das Handy wieder dem Computer), wird der Computer wieder entsperrt. Einfach, praktisch und man nicht drumherum sich zu fragen warum das nicht schon viel eher gemacht wurde. Endlich hat Bluetooth auch mal einen praktischen Nutzen!

Nachdem ich nun vor kurzem Opfer einer Computer-Sabotage wurde, habe ich mich auf die Suche nach einer passenden Lösung für Windows gemacht. Und siehe da, es gibt tatsächlich einen Port für Windows: Blue Lock. Leider ist es jedoch entweder nicht mit meinem Bluetooth-Adapter kompatibel, oder mit XP. Jedenfalls kommt eine Meldung das keine Bluetooth-Adapter gefunden werden konnten. Schade!