Mittwoch, 11. September 2013

Küchenuhr TFA 38.2021: Schnell kaputt

Im April 2013 haben wir uns ein digitale Küchenuhr von TFA gekauft. Obwohl ich das Produkt auf Galaxus ursprünglich als gut bewertet habe, ging die Plastic-Halterung am Rücken des Produkts nach wenigen Wochen kaputt. Die Uhr hat – mit dem Magneten am Backofen angeheftet – so zuviel Spiel, was bei der Betätigung der Tasten klar unhandlich ist.

Ansonsten überzeugt das Produkt: Grosses Display, grosse Buttons und einfachste Bedienung sind garantiert:

TFA 38.2021 elektronischer Timer mit Stoppuhr (Affiliate-Link)

Tags: , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 11. September 2013

incase Sports Armband Pro: Unbrauchbar

Vor einiger Zeit habe ich mir bei einer Reise in die USA folgendes Accessoire gekauft, um mein iPhone 4S während Trainings im Fitness-Center und beim Jogging am Arm zu tragen und Musik zu hören:

Incase iPhone 5 Sportsarmband Pro, black (Affiliate-Link)

Das Armband verrichtete seinen Dienst im Grunde zufriedenstellend – bis zu dem Tag im Sommer, an welchem ich es auf unserem Balkon in die Sonne zum Trocknen hinlegte und es ein oder zwei Tage später erst wieder abholte. Seither ist die durchsichtige Plasticfolie an der Front gewellt, was die händische Bedienung des iPhones durch die Folie hindurch zu einem Geduldsspiel werden lässt:

incase Sports Armband Pro

Von einem Sportarmband erwarte ich gerade in diesem Bereich eine deutlich bessere Materialwahl, als es incase an den Tag legt.

Tags: , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 11. September 2013

Wieso Touch ID für iOS-Geräte wirklich revolutionär wird

Innerhalb weniger Monate durfte ich in diesem Jahr sowohl meinem Vater als auch meiner Mutter bei der Inbetriebnahme ihrer iPads (iPad 4 resp. iPad mini) helfen. Als ich die beiden dabei beobachtete, wie sie die ersten zaghaften Schritte auf den Geräten vollführten, fiel mir insbesondere folgende Punkte auf:

Himmelheiland, das Passwort des iTunes Accounts muss ja bei der Verwendung des iPads andauernd eingegeben werden!

Uns Vertretern der jungen Generation ist es anerzogen, sich für die Anmeldung an Dutzende Internet-Services mit Unmengen an Passwörtern herumzuschlagen. Wobei ich zugeben muss, dass ich erst seit einem Jahr KeePass zur Verwaltung meiner Passwörter einsetze und so endlich über das ganze Internet hinweg komplexe – und vor allem: unterschiedliche! – Passwörter einsetze. Die ältere Generation hat hingegen immer noch massive Probleme mit dem Umgang mit Passwörtern.

Sollten meine Eltern dereinst Touch ID-fähige Apple-Geräte anschaffen, werden solche Kapriolen ein Problem der Vergangenheit sein: Ab sofort werden sie sich mit ihren Fingerabdrücken am Gerät anmelden und Käufe im iTunes Store autorisieren können. Vorbei die Fragen à la „Muss ich jetzt mein E-Mail-Passwort oder mein iTunes-Passwort eingeben?“ Auch der PIN zum Entsperren des Gerätes wird entfallen. Vertipper gehören der Vergangenheit an – der Finger wird entweder erkannt oder nicht. Neu wird der Bildschirm den Benutzern sagen, welches „Passwort“ sie „eingeben“ müssen: „Bitte den Fingerabdruck einlesen“. Vorbei auch die Befürchtungen zur Passwortkomplexität.

Ich hoffe zudem, dass durch diese Massnahme auch das Phishing von Passwörtern des iTunes-Accounts erschwert wird, indem die Leute dieses Passwort mit der Zeit vergessen – oder der Kauf von Titeln bald eine Zwei-Faktor-Authentifizierung erfordert.

Schnüffelnder Lebenspartner

Ausserdem wird Touch ID für alle Generationen ein wirksames Mittel sein, um den Partner vom herumschnüffeln im Gerät abzuhalten (ausser man erfasst deren Fingerabdruck als einen der fünf im Gerät hinterlegbaren Fingerabdrücke). Ich werde wohl Stephanies Fingerabdruck ebenfalls erfassen, denn es kommt immer wieder vor, dass wir bspw. während einer Autofahrt gegenseitig auf unsere Geräte zugreifen, um Anrufe zu tätigen oder etwas nachzuschlagen.

Sicherheit biometrischer Daten

Im Promotionsvideo betont ein Apple-Mitarbeiter zudem, dass der Fingerabdruck ausschliesslich in einem hochsicheren Bereich des Telefons abgelegt wird – weder Applikationen haben darauf Zugriff, noch werden Fingerabdrücke. Diese Beteuerungen wird man als -bemühungen im Zuge der NSA-Affäre zu deuten haben.

Finger verloren – was nun?

Ich gehe davon aus, dass die Möglichkeit besteht, den Zugriff auf das Telefon entweder mittels einer Rücksetz-Aktion über den iTunes-Account freizugeben, oder aber es besteht die Möglichkeit, zusätzlich einen vierstelligen PIN-Code – oder noch besser: ein langes alphanumerisches Passwort – (für Notfälle) zu hinterlegen.

Letzte Frage: Macs?

Wann kriegen die Apple Macintosh-Computer dieses Lesegerät? Falls der Fingerabdruckscanner wirklich hält, was es verspricht, haben wir in Bälde erstmals eine brauchbare Zwei-Faktor-Authentifizierung in Consumer-Geräten. Corporate IT wird sich freuen.

Nachtrag

Gruber hat heute (d.h. am 18. September 2013, 5 Tage nach dem Erscheinen dieses Blog-Posts) das iPhone 5S gründlich getestet. Sein Fazit zum Touch ID-Sensor:

In practice, Touch ID has proved incredibly convenient. I always knew that entering my lock screen passcode and App Store password dozens of times a day, every day, was a hassle, but I had no idea how much of a hassle it was until I didn’t have to do it any longer.

Tags: , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Montag, 9. September 2013

Fujitsu ScanSnap ix500: Dokumente zu Hause schnell und qualitativ perfekt scannen

Über Jahre hinweg machte ich mir die Multifunktionsgeräte (insbesondere den Ricoh NRG MC4500) meiner Arbeitgeber zu Nutzen, um auf wochenbasis Rechnungen, Quittungen und sonstigen Briefverkehr ins PDF-Format zu digitalisieren und auf dem heimischen PC abzulegen. Da ich mir während des Studiums zudem Adobe CS2 geleistet hatte, konnte ich mit Adobe Acrobat zusätzlich auch noch die OCR Texterkennung auf den gescannten PDFs durchführen. Dies erlaubt mir, Dokumente wiederzufinden, welche sich in der ausgeklügelten Ordnerhierarchie in meinem Dokumenten-Verzeichnis verirrt haben.

Auf Grund eines Stellenwechsels im Sommer dieses Jahres habe ich mir Gedanken über den Digitalisierungsprozess gemacht und basierend auf hochfliegenden Testberichten entschieden, privat einen Dokumentenscanner anzuschaffen. Meine Wahl fiel auf folgendes Gerät:

Fujitsu ScanSnap iX500 Scanner (600dpi, WLAN, USB 3.0) (Affiliate-Link)

Wichtig war mir, dass Mac OS X nicht stiefmütterlich unterstützt wird. Die ScanSnap-Applikation – einmal eingerichtet – ist klein, handlich und tut genau das, was man von ihr verlangt. Der Scanner steht sofort nach dem Einschalten bereit, ein oder mehrere Blatt Papier einzulesen. Dank guter Motoren erfolgt der Einzug kaum mit Problemen. Der Scanner ist so intelligent, dass er doppelseitig bedruckte Dokumente erkennt und diese ohne manuelle Intervention doppelseitig einscannt. Der Einzug ist flexibel einstellbar, um auch kleinere Dokumentenformate scannen zu können (bspw. die Kaufquittungen von internationalen Zugbillets). Gestern habe ich zudem auch die etwas dickere Kartonverpackung meines Velolichts eingescannt – beim zweiten Anlauf klappte es problemlos. Belege mit angeheftetem Debitkarten-Beleg laufen in der Regel auch problemlos durch. Für kleine Kaufquittungen auf dünnem Thermopapier liegt zudem noch ein Plasticmäppchen bei, in welches man alle fragilen Dokumentenformate einlegen und beidseitig scannen kann.

Mittlerweile habe ich damit über 2500 Dokumente gescannt und bin wunschlos glücklich. Das papierlose Privatbüro rutscht so in Greifweite.

Tags: , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Samstag, 7. September 2013

Unter Mac OS X auf den Avocent SwitchView IP 1010 zugreifen

Seit mein privater Linux Entwicklungsserver im Juli auf Grund eines Ausfalls des Kabelmodems und einem Wackelkontakt des Switch-Netzteils länger als erwartet offline war, habe ich drei verschiedene Massnahmen ergriffen, damit solche Probleme nicht mehr auftreten können:

  • Der Server ist nun mit zwei Netzwerkkabeln mit dem Intranet verbunden; eines über den besagten Gigabit-Switch, eines direkt am Internet-Router
  • Der Server soll dereinst zudem noch mit einem ZYXEL NWD2205 Ultra Compact Wireless N USB Adapter NWD2205 WLAN Client (Affiliate-Link) als dritter Netzwerk-Fallback funktionieren; bisher hatte ich aber noch nicht Zeit, den USB-Stick zu konfigurieren (stecken tut er vorerst einmal an einem freien USB-Port)
  • Der Server hängt nun an einem iKVM-Switch, d.h. ein netzwerkbasiertes Gerät, welches das analoge Bild des VGA-Ausganges nimmt, es digitalisiert und per VNC an eine Client-Software weitergibt.

Letzte Massnahme dient uns dann, wenn der Server bspw. nach einem apt-get dist-upgrade nicht mehr hochkommt und keine Möglichkeit besteht, per SSH auf den Server zuzugreifen. Mit dem iKVM-Switch kann ich den Bootprozess aus der Ferne überwachen.

Ich habe mich über Ricardo.ch für 150 CHF mit einem (notabene völlig veralteten) Avocent SwitchView IP 1010 eingedeckt (Nachfolgemodell: Avocent SVIP1020 – 202 SwitchView IP, Affiliate-Link).

Gestern nun nahm ich mir die Zeit, um das Teil in das Intranet zu integrieren. Der Aufwand war leider grösser als erwartet, doch nun klappt der Zugriff von meinem Mac mini hier in Bern auf den iKVM-Switch in Neuenegg:

SVIP Viewer Mac OS X Wine

Nachfolgend sei das Vorgehen beschrieben:

Inbetriebnahme Hardware

Leider erhielt ich den iKVM–Switch per Ricardo.ch ohne das dem Gerät normalerweise beliegenden KVM-Kabel, welches PS/2-Schnittstellen und VGA-Anschluss vereint und vom Server zum Switch führt. Dumm gelaufen!

Jedenfalls war ich nicht bereit, zusätzlich noch ein Heidengeld für dieses Kabel auszugeben. Meine Shopping-Liste sah dementsprechend folgendermassen aus:

Den LCD-Monitor (15 Zoll) und die Mini-Tastatur (leider mit deutschem Layout) besass ich bereits. Beides schloss ich direkt an den iKVM-Switch an.

Werkseinstellungen und IP-Konfiguration

Zuerst setzte ich das Gerät auf Werkseinstellungen zurück, was dazu führte, dass es neu die IP 192.168.1.254 trug — in meinem Subnetz verwende ich aber 192.168.0! Ich verband deshalb mein MacBook Air mit einem Ethernetkabel mittels Apple USB-Ethernet-Adapter direkt mit dem iKVM-Switch. Anschliessend änderte ich die IP-Adresse meines MacBooks auf 192.168.1.1 und setzte dieselbe IP als Gateway.

Nun konnte ich den Web-Browser öffnen und auf https://192.168.1.254/ zeigen lassen. Mittels HTTP Basic Auth authentifiziert man sich als admin mit dem Passwort password (liebe Grüsse vom IT-Auditor). Bevor der Konfigurationsspass beginnen kann, muss man den Popup-Blocker des Browsers (bei mir für solche Fälle Firefox) deaktivieren.

Erst so gelangt man in die äusserst hässliche Java-Konfigurationsoberfläche. Die Netzwerkeinstellungen befinden sich unter

  1. Settings
  2. Global
  3. Network

Wer dem iKVM-Switch die IP-Adresse per DHCP übergeben will, findet in der Anzeige auch die MAC-Adresse des Gerätes. Wer auf Nummer sicher gehen will, konfiguriert die Adresse statisch, damit man auch beim Ausfall des DHCP-Servers auf das Gerät zugreifen kann. Mittels OK bestätigen, und schwups kann der Switch nun direkt mit dem Intranet verbunden werden.

In der weiteren Konfiguration deaktivierte ich unter

  1. Settings
  2. Global
  3. Sessions

die erzwungene SSL-Verschlüsselung ([ ] SSL connections only (must use https://) sowie [x] Allow Telnet and FTP connections. Ersteres bringt die Zertifikatswarnungen in den Web-Browsern weg, zweiteres eröffnet einem Telnet-Zugang auf das auf dem iKVM-Switch laufende FreeBSD-System. Natürlich sollte man die Aktivierung/Deaktivierung dieser Optionen in einem Unternehmensnetzwerk hinterfragen — im heimischen Netzwerk nehme ich die Sicherheitsrisiken gerne in Kauf.

Schlussendlich änderte ich auch noch das Administrator-Passwort und erstelle einen zusätzlichen Benutzer ohne Administrationsrechten.

VNC-Client in Gang bringen

Als der Switch auf den Markt gelassen wurde, sah die Systemlandschaft von iKVM-Benutzern noch deutlich anders aus als heute. Leider bietet der Switch nur eine Zugriffsmöglichkeit über den vpclient.exe, dem über die Web-Oberfläche zwei Sicherheitstoken mitgegeben werden. Folglich benötigt man nicht nur installiertes Java, sondern auch den Microsoft Internet Explorer und natürlich Windows, welche das Win32-Binary ausführen kann.

Glücklicherweise hat ein findiger Hacker (für mich nur via Google Cache erreichbar; lokales Backup) für das offenbar mehr oder weniger baugleiche APC AP5456 IP Gateway for Analog KVM ein bash Shell-Script entwickelt, mit welchem man die Tokens via cURL über die Web-Oberfläche des Switches abfrägt und damit die EXE-Datei aufruft (via wine).

wine

Zu Beginn sollte man Kaffee und Pop-Corn bereithalten, denn zuerst installiert man sich mit MacPorts das Paket wine:

# port install wine

Nach gefühlten vier Stunden Kompiliererei liegt wine als ausführbare Binärdatei vor.

vpclient.exe

Als nächstes lädt man sich vom Web-Server des iKVM-Switches die .cab-Datei herunter, welche die unter Windows ausführbare vpclient.exe und anderes Geschmäus enthält. Im Grunde kann man sich das weiter unten aufgeführte Script zu Nutze machen — aber etwas manuelle Arbeit schadet ja auch nichts. Deshalb logge ich mich per Telnet auf dem Switch ein und führe anschliessend folgenden Befehl aus, welcher mir den Namen der .cab-Datei nennt:

$ telnet 192.168.1.254
...
$ find /web -name "*.cab"
/web/vpclient4102.cab

Bei meinem iKVM-Switch mit Firmware-Version 1.0.5.6 und Build 04.09.07.1 handelt es sich um folgende URL:

192.168.1.254/vpclient4102.cab

ikvm.sh

Die .cab-Datei entpackt man danach in einem frei wählbaren Ordner; ich verwende hierzu The Unarchiver. Ins selbe Verzeichnis lädt man sich auch das Script von Chris, welches im oben genannten Cache vorgehalten wird. Der Vollständigkeit halber poste ich das Script hier auch noch:

#!/bin/bash

# A script to access an APC brand model AP5456 IP Gateway for Analog KVM 
# In Linux, using Wine

USERNAME="apc"
PASSWORD=""
KVM_SERVER=""

VIEWER_PATH=""

while [ -z "$KVM_SERVER" ]
do
    echo -n "FQDN of KVM Server (not including https://): "
    read KVM_SERVER
done

while [ -z "$USERNAME" ]
do
        echo -n "Username: "
        read USERNAME
done

while [ -z "$PASSWORD" ]
do
        echo -n "Password: "
        tput invis
        read PASSWORD
        tput sgr0
done

get_cab_name () {
    while read line
    do
        if [ "${line/'OBJECT CODEBASE'/}" != "$line" ]; then
            cab_name="${line##*'<OBJECT CODEBASE="'}"
            cab_name="${cab_name%%'"'*}"
            echo "$cab_name"
        fi
    done
}

get_cmd_args () {
    while read line
    do
        if [ "${line/PARAM/}" != "$line" ]; then
            ipaddr="${line##*'<PARAM NAME="ipaddr" VALUE="'}"
            ipaddr="${ipaddr%%'"'*}"

            sessionkey="${line##*'<PARAM NAME="sessionkey" VALUE="'}"
            sessionkey="${sessionkey%%'"'*}"

            encryptionkey="${line##*'<PARAM NAME="encryptionkey" VALUE="'}"
            encryptionkey="${encryptionkey%%'"'*}"
        fi
    done
    if [ -n "$sessionkey" ] && [ -n "$encryptionkey" ] && [ -n "$ipaddr" ]; then
        echo "-k $sessionkey -e $encryptionkey $ipaddr"
    fi

}

wine="`which wine`"
if [ -z "$wine" ]; then
    echo "Wine was not found, but is required.  Can not continue without it." >&2
    exit 1
fi

cd "`dirname $0`"
#If a path to vpclient.exe wasn't specified, and we can't find it, use /tmp
#as a place to download it to
if [ -z "$VIEWER_PATH" ] && ! [ -f "vpclient.exe" ]; then
    mkdir -p "/tmp/vpclient"
    VIEWER_PATH="/tmp/vpclient"
fi

#If a full path wasn't specified, prepend current working directory
if [ "${VIEWER_PATH:0:1}" != "/" ]; then
    VIEWER_PATH="`pwd`/$VIEWER_PATH"
fi

if ! [ -f "$VIEWER_PATH/vpclient.exe" ]; then

    cab_url="`curl -s --insecure --user "$USERNAME:$PASSWORD" "https://$KVM_SERVER/launch.asp" |get_cab_name`"
    cab_url="https://$KVM_SERVER/$cab_url"

    cabextract="`which cabextract`"
    if [ -z "$cabextract" ]; then
        echo "vpclient.exe was not found in $VIEWER_PATH" >&2
        echo "cabextract was not found either, so we can't download">&2
        echo -e "and extract vpclient.exe from it's CAB archive.\n" >&2
        echo "Error: user intervention required." >&2
        echo "----------------------------------" >&2
        echo "Download $cab_url" >&2
        echo "Unpack `basename $cab_url` into $VIEWER_PATH" >&2
        echo " -- OR -- " >&2
        echo "Install cabextract" >&2
        exit 1
    fi

    if ! [ -d "$VIEWER_PATH" ]; then
        echo "WARNING: Viewer Path specified is not valid." >&2
        echo "Path: $VIEWER_PATH" >&2
        echo -e "-------------------------------------------\n" >&2
        echo -n "Would you like me to create it? (y/N)?" >&2
        read answer
        shopt -s nocasematch
        if [ "$answer" = "y" ]; then
            mkdir -p "$VIEWER_PATH"
            if ! [ -d "$VIEWER_PATH" ]; then
                echo "Couldn't create: $VIEWER_PATH" >&2
                exit 1
            fi
        else
            exit
        fi
        shopt -u nocasematch
        
    fi

    cd "$VIEWER_PATH"
        curl -s --insecure --user "$USERNAME:$PASSWORD" "$cab_url" >"`basename $cab_url`"
        $cabextract -q "`basename $cab_url`" 2>/dev/null
fi


cmd_args="`curl -s --insecure --user "$USERNAME:$PASSWORD" "https://$KVM_SERVER/launch.asp" |get_cmd_args`"

cd "$VIEWER_PATH"

#Sanity check
if [ -f "./vpclient.exe" ]; then
    $wine "./vpclient.exe" $cmd_args
else
    echo "Failed, do it yourself: $wine vpclient.exe $cmd_args"
fi

Ich speichere es als ikvm.sh und mache es mit folgendem Befehl ausführbar:

$ chmod 755 ikvm.sh

Nachdem ich mich mit PPTP auf meinen Netgear WNDR3700-100PES RangeMax Router (Dual Band, Wireless-N,300 GigaBit) (Affiliate-Link) mit DD-WRT eingewählt habe (die Konfigurationsanleitung für die VPN-Lösung würde den Umfang dieses Blog-Posts sprengen), kann ich das Script starten (beim ersten Laden dauert es eine Ewigkeit, bis wine sich konfiguriert hat), gebe die IP-Adresse ein (192.168.0.5 reicht vollkommen aus) und die Zugangsdaten des Routers ein und erhalte innert Sekunden die Bildschirmanzeige des Servers auf den Monitor gezaubert.

Problembehandlung

Sobald alles sauber eingerichtet ist, sollte man den iKVM-Switch neu starten. Dies kann entweder physisch vor Ort oder aber über die Web-Oberfläche aus der Ferne geschehen:

  1. Tools
  2. Reboot Appliance

Ich habe zudem über Telnet auch noch einige Male /usr/bin/vps von Hand gestartet. Seither klappt jeder Verbindungsversuch auf Anhieb.

Erscheint ein pinkiger Hintergrund anstelle des Videobildes und friert wine anschliessend ein, sollte man den ganzen Prozess abschiessen und ikvm.sh erneut ausführen. Das Problem löst sich beim zweiten Aufruf.

Tags: , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 1. September 2013

Der Dank iPhone-Apps und -Gadgets vermessene und vernetzte Mensch

Seit meine Partnerin und ich am 1. Juni 2012 offiziell hier in unsere Mietwohnung in Bern eingezogen sind haben sich auch einige iPhone-Apps und Gadgets in unserem Leben breit gemacht, ohne welche ich nicht mehr auskommen möchte. Hier eine Auswahl der Produkte, die helfen, meinen Körper und mein Leben zu vermessen:

Waage

Ganz frisch in unserem Gadget-Park aufgenommen wurde eine per WLAN vernetzte Waage:

Withings WS-30 Online-Waage (für iPhone und iPad) (Affiliate-Link)

Sowohl Stephanie als auch ich haben uns mit per iPhone-App mit der Waage vernetzt (mittels zwei separaten Konten, damit der Datenschutz gewahrt bleibt). Das Beste: Die Waage ist mit einer Intelligenz ausgestattet und merkt, ob Stephanie oder Mario auf der Waage steht und sendet das Gewicht an das richtige Benutzerkonto auf den Withings-Servern.

Ich habe mir nun vorgenommen, täglich zweimal (morgens und abends) auf die Waage zu stehen und so mein Gewicht über Wochen und Monaten zu überwachen. Ich bin ja mal gespannt, wie sich der Cannstatter Wasen sowie die Feiertage im Dezember auf meine Pfunde auswirken werden.

Wetterstation

Über jcfricks Tweet bin ich ein halbes Jahr nach dem Einzug in die Mietwohnung auf die Wetterstation für das 21. Jahrhundert aufmerksam geworden:

Netatmo NWS01 Wetterstation für Apple iPhone und Android (Affiliate-Link)

Seither steht die Basisstation im Wohnzimmer, registriert Temperatur, Feuchtigkeit und Lärm, während die Aussenstation auf dem Balkon die Temperatur misst (obwohl nicht über alle Zweifel erhaben, da ich hier auch schon Werte von 40 Grad Celsius abgelesen haben — wohl mangels Schattenplatz und der metallenen Unterlage?).

Mittels Web-API greife ich zudem auf diese Daten zu und zeige sie auf meinem Raspberry Pi-Dashboard minutenaktuell an. Den ursprünglich eingerichteten Lärm-Alarm habe ich deaktiviert, da meine Freundin zweitweise von zu Hause arbeitet und ich so von der iPhone-Applikation unnötig „alarmiert“ wurde. Mittels Web-Applikation lassen sich nämlich bei der Über- oder Unterschreitung von Schwellenwerten Alarmierungen an die für eine bestimmte Wetterstation registrierten Smartphone-Applikationen senden. In meinem Fall generierte jeder Lärm über 50dB eine solche Warnmeldung. Effektiv nützlich war diese Alarmierung nur gerade einmal: Als mein Bruder die Wohnung betrat, um einen ausgeliehenen Gegenstand zurückzubringen. Ansonsten waren es Helikopter, die das Inselspital anflogen oder der Hausmeister, welcher den Rasenplatz mit seinem Gebläse von Laub befreite.

Pulsmesser

Vorbei sind die Zeiten, in denen Polar ein Heidengeld mit seinen überteuerten Pulsmessern machen konnte. Dank dem immer präsenten iPhone mit grosser Rechenkraft ist es nun möglich, während dem Lauftraining auf einen „dummen“ Pulsmessgurt zu setzen, der seine Daten per Bluetooth an iPhone-Applikationen übermittelt:

Mobile Action HRM-10 i-gotU Herzratenmonitor (Bluetooth, Herz-Frequenz-Messgerät) (Affiliate-Link)

Meine Fitness-App, RunKeeper, unterstützt dieses Modell problemlos. Beim Lauftraining höre ich so in 5-Minuten-Abschnitten nicht nur, wie viele Kilometer ich schon zurückgelegt habe, sondern auch, wie hoch meine Pulsfrequenz gerade ist.

Einziger Wermutstropfen: Bisher habe ich noch nicht herausgefunden, ob und wie man die Pulswerte über eine gesamte Laufstrecke exportiert.

Tags: , , , , , , , , , ,
Labels: Shopping

1 Kommentar | neuen Kommentar verfassen

Sonntag, 1. September 2013

Ersatz für die TomTom EasyPort-Halterung

Obwohl unser Haushalt mittlerweile über vier iPhones verfügt und ich Datenroaming-Kosten über die Fringe Benefits meines Arbeitgebers begleichen kann, ist es gerade bei Auto-Ausflügen ins Ausland manchmal doch recht nützlich über ein Offline-Navigationssystem zu verfügen. Vor Jahren habe ich mir deshalb ein TomTom ONE Europe geleistet.

Seit dem Wechsel auf unseren Toyota Yaris vor einem Jahr haben wir es nicht mehr fertiggebracht, die TomTom EasyPort-Halterung an der Windschutzscheibe zu befestigen: Nach wenigen Sekunden Autofahrt kommt einem das Navigationsgerät mitsamt Halterung entgegen. Und als Bleifuss bin — zumindest — ich wahrlich nicht bekannt.

Anstelle über den Hersteller des Navigationsgerätes selbst ein Ersatz zu bestellen (TomTom EasyPort™ Mount Kit), habe ich mich nach Alternativen umgesehen — und bin fündig geworden:

HR KFZ Halter Halterung Vibrationsfreies Befestigungssystem für TomTom (Geräte mit easy-port Befestigung) (Affiliate-Link)

Die Halterung ist bei uns seit einigen Wochen fix im Auto installiert und hat uns restlos überzeugt. Die Installation des Arms erfolgt dank des Anpresshebels im Handumdrehen innert Sekunden, und hält, und hält und hält. Seit Wochen hängt die Halterung am ursprünglich installierten Platz und macht keine Anzeichen eines Schwächeanfalls.

Das Navigationssystem lässt sich problemlos in den am Arm angebrachten EasyPort-Adapter einrasten und in alle Richtungen verschieben, damit man als Fahrer immer den richtigen Blickwinkel auf das LCD-Display hat.

Tags: , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Freitag, 30. August 2013

Google Chrome unter die Haube schauen (und JSON lesbar ausgeben)

Hierzu haben die Google-Entwickler folgende URI erdacht:

chrome://net-internals/

Über diese Benutzeroberfläche lassen sich Daten auch im JSON-Format exportieren. Damit diese JSON-Daten auch für Menschen (einigermassen) lesbar werden, nimmt man Python zu Hilfe. Im nachfolgenden Beispiel gehen wir davon aus, dass der JSON-Dump in der Datei dump.json abgelegt ist:

python -mjson.tool < dump.json > dump-pretty.json

Tags: , , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Freitag, 30. August 2013

urllib unter Python 3 Debug-Meldungen entlocken

Im Grunde ganz simpel – vorausgesetzt, man weiss wie (angelehnt an how to debug a urllib.urlopen in python!, wo aber noch mit urllib unter Python 2 gearbeitet wird):

import urllib.request
import http.client

http.client.debuglevel = 1
http.client.HTTPConnection.debuglevel = 1

url = 'http://www.eMeidi.com/?action=hack'
headers = {}

Request = urllib.request.Request(url,None,headers)
response = urllib.request.urlopen(Request)	
html = response.read()

Dies produziert Ausgaben in folgender Form:

send: b'GET http://www.eMeidi.com/?action=hack HTTP/1.1\r\nAccept-Encoding: iden
tity\r\nHost: www.eMeidi.com\r\nUser-Agent: Python-urllib/3.3\r\nConnection: clo
se\r\n\r\n'
reply: 'HTTP/1.0 407 Proxy Authentication Required\r\n'
header: Date header: Proxy-Authenticate header: Proxy-Connection header: Content
-Type header: Content-Length

Tags: , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 22. August 2013

Midori auf Raspberry Pi von jQuery-Effekten entlasten

Mein Raspberry Pi, welcher ein 24″ Dashboard speist, hat sich in den letzten Tagen vermehrt aufgehängt. Dies mag mit einer Aktualisierung der Dashboard-Software zusammenhängen, insbesondere wohl mit Anpassungen am JavaScript-Code.

Ich setze jQuery als JavaScript-Framework ein und steure damit einige visuelle Gimmicks; beispielsweise schwarze Eselsohren an aktualisierten Tiles, welche innert 30 Sekunden nach der Aktualisierung verblassen und dann ganz verschwinden. Auch wird das Doppelpunkt der Zeitanzeige (HH:MM) so animiert, dass es jede zweite Sekunde ausgeblendet wird.

Dies scheint dazu geführt zu haben, dass die schwachbrüstige CPU des Raspberry Pis voll ausgelastet war. Der Browser Midori, welcher als Vollbild läuft, beanspruchte teilweise bis zu 50% CPU-Last und auch das X-Window-System wieso ähnlich hohe Werte auf. Die Load Average des Raspberry Pis war über 1.

Ich entschied mich deshalb, in den JavaScript-Code eine Weiche einzubauen, welche die grafischen Animationen für schwachbrünstige Browser/Systeme auf ein Minimum beschränkte.

Leider hatte die jQuery-eigenen Konfigurationseinstellung Kollateralschäden zur Folge, weshalb ich den Code selber optimieren musste:

jQuery.fx.off = true;

… funktionierte nicht zufriedenstellend.

Nachfolgend einige Konstrukte, die seit gestern Abend in der Produktion laufen:

Browser-Weiche

var browserIsPerformant = true;
if(navigator.userAgent.match(/(Midori)/)) {
	browserIsPerformant = false;
}

Delay statt FadeOuts

An den zwei Orten, wo ich schnelle (250ms – eine Viertelsekunde) und langsame (30000ms – 30 Sekunden) FadeOuts implementiert hatte, baute ich mit der Variable browserIsPerformant eine Weiche ein. jQuery kennt die .delay()-Funktion, mit welcher Aktionen für eine benutzerdefinierte Zeit (Millisekunden) hinausgezögert werden können. Damit konnte ich sicherstellen, dass die Effekte sowohl in der abgespeckten als auch in der Vollversion des Dashboards zur selben Zeit endeten.

Leider kann .delay() nicht auf .toggle(), .show() und .hide() angewendet werden.

Eselsohren

	if(browserIsPerformant) {
		$(obj).children('.updated').fadeToggle(30000);
	}
	else {
		$(obj).children('.updated').delay(30000).fadeOut(1);
	}

Indem ich im else-Abschnitt den Delay auf 30 Sekunden setzte und den fadeOut auf 1 Millisekunde, ergab sich unter Midori neu keine Performance-Einbusse mehr.

Sekundenanzeige (Doppelpunkte)

	if(browserIsPerformant) {
		$('.separator').fadeTo(250,clockSeparatorMap[opacity]);
	}
	else {
		$('.separator').delay(250).fadeTo(1,clockSeparatorMap[opacity]);
	}

Auch hier arbeite ich mit der .delay()-Funktion, setze sie hier aber „nur“ auf 250 Millisekunden. Anschliessen wird der FadeOut innert 1 Millisekunde gemacht.

Nachtrag

Obwohl Midori nach diesen Anpassungen vorerst stabil lief, fror der Browser nach ca. 10 Stunden erneut ein.

Ich entschied mich deshalb, statt Midori auf Chromium zu setzen:

# apt-get install chromium

… und den Google-Browser folgendermassen zu starten (/etc/xdg/lxsession/LXDE/autostart, via Raspberry PI kiosk mode with Chromium.):

@xset s off
@xset -dpms
@xset s noblank

@chromium --kiosk --incognito http://domain.tld/dash

Auch Chromium (Version 22) hat Probleme mit den opulenten jQuery-Animationen, weshalb ich den JavaScript-Code noch ein wenig anpassen musste:

var browserIsPerformant = true;
if(navigator.userAgent.match(/(Midori)/) || navigator.userAgent.match(/(armv6l)/)) {
	browserIsPerformant = false;
}

Chromium trägt aktuell auch die Prozessorplattform im User Agent-String, im Falle von Raspberry Pi ist das ARM.

Tags: , , , ,
Labels: Web

2 Kommentare | neuen Kommentar verfassen