Vom Tegernseelauf gelernt

Heute bin ich zum Abschluss meines Laufprojektes meinen ersten Halbmarathon, einmal um den ganzen Tegernsee, gelaufen. Hier ein kleines How-To und Fun-Facts für alle, die so was auch mal machen wollen.

  1. Ein 10km-Lauf geht 10km, ein Halbmarathon 21,2km 21,1km. Wie gemein ist das denn?
  2. Bananen.
  3. Beim Start nicht durchdrehen, wenn man nach hinten durchgereicht wird. Das sind alles Typen, die sich von dem Typen mitziehen lassen, der sich von dem Typen mitziehen lässt, der sich von @ivoheckmann mitziehen lässt. Die Hälfte davon überholst du bei Kilometer 18, weil sie am Berg einbrechen (und kein Hydropowergel™ dabei haben) und die andere Hälfte siehst du nie wieder, weil sie bei deinem eigenen Zieleinlauf noch „schnell eine Runde um den See auslaufen“.
  4. Häng dich an den Typen mit Glatze, der 15 Jahre älter ist als du. Bei Kilometer 10 zieht der Typ mit der Glatze, der 15 Jahre älter ist als du, ab.
  5. Häng dich jetzt an den Typen mit den drei Wasserflaschen am Gürtel. Wer weiß, wann man die brauchen kann.
  6. Bei Kilometer 11 zieht der Typ mit den Flaschen davon. Shit!
  7. Deppentechno auf 100db: Das Begleitfahrzeug.
  8. Hinweis an den „Seid ihr gut drauf?!“-Typen auf dem Begleitfahrzeug: Fresse!
  9. Ohne Musik geht’s nicht. Diese Playlist ist gut. Dafür stehe ich mit meinem Namen. Wenn du richtig schnell sein willst, hör einfach das hier in Endlosschleife.
  10. Wenn schon bei Kilometer 7 der Fuß einschläft, wird’s fies.
  11. Wenn bei Kilometer 9 der Fuß aufwacht, kribbelts.
  12. Es ist unmenschlich am Tegernseer Braustüberl vorbeizulaufen ohne einzukehren.
  13. Es ist o.k. den Rangel Song komplett vor sich hinzubrummen und jedes „Hey“ bei „Little Talks“ mitzuschreien. Die Anderen schauen komisch? So what! Es ist dein Lauf!
  14. In Bad Wiessee auf Höhe Kilometer 13 High Five mit den Klatschrentnern an der Strecke.
  15. Ein Typ ist barfuß um den See gerannt. BARFUSS!
  16. Überall kniehohe Kompressionsstrümpfe. Manche davon in Pink! PINK!
  17. Bei der Steigung nahe Kilometer 16 rettet dir das Hydropowergel™ von @ivoheckmann den Arsch.
  18. Was fehlt bei der letzten Steigung bei Kilometer 18: ein zweites Hydropowergel™.
  19. Es ist unmöglich sich die Getränkebecher von den Versorgungsständen nicht komplett übers Gesicht zu leeren.
  20. Bananen!
  21. Ab und zu mal nach links und rechts schauen. Die Landschaft rockt!
  22. Sobald Klatschpublikum an der Straße steht: Brust raus, Bauch rein, lächeln, bei Bedarf eine coole Handgeste einbauen und locker durchlaufen. In den versteckten Bereichen dann: Gebückter Gang, Fluchen, Merkelfresse.
  23. Der iPhone 4 Akku wird bei einer Seeumrundung mit GPS-Tracking und Spotify zur Hälfte leer.
  24. Wenn man am 20.4. anfängt zu trainieren, ungefähr dieses Trainingspensum absolviert und sich Hydropowergel™ in die Hosentaschen packt, kann man am 15. September einmal um den Tegernsee laufen. Dafür stehe ich mit meinem Namen.
  25. Mögliche Kollateraldschäden: Großflächige Blutblasen und spontanes Erbrechen („vielleicht Leberkässemmel war nix gut“)  kurz vor München.

 

Nikeplus: Daten exportieren

Neben dem Jawbone Up nutze ich als zweites Tracking-Tool den Dienst Nikeplus. Dabei handelt es sich um eine Lauf -und Fitnesscommunity des gleichnamigen Sportartikelherstellers. Nike promotet mit dem Dienst v.a. seine eigenen Ausrüstungsgegenstände, wie z.B. die Sportwatch, das Sportband oder einfach nur ein paar schnöde neue Turnschuhe mit integriertem Tracking-Chip. Man kann Nikeplus aber auch mit, sagen wir mal Adidas-Turnschuhen nutzen. Dazu benötigt man dann lediglich die entsprechende App (iOS und Android) und einen Nikeplus-Account. Um die Motivation zu steigern, empfiehlt es sich ein paar Lauffreunde zu finden, mit denen man sich dann fortan in wöchentlichen und monatlichen Laufcharts vergleicht. Sollte einem die Marke Nike aus irgendwelchen Gründen unsympathisch sein, gibt es verschiedene alternative Möglichkeiten, wie z.B. runkeeper oder runtastic, die alle ähnliche Features bieten. Meine Wahl fiel am Ende auf Nikeplus, weil ich dort 4-5 Menschen kenne, mit denen es sich gut messen lässt.

Ähnlich wie beim Jawbone Up wollte ich auch bei Nikeplus relativ schnell meine angesammelten Daten zumindest teilweise exportieren und extern aufbereiten. Nike bietet seit kurzem auch eine API an, allerdings wird die momentan nur von wenigen Diensten unterstützt und davon eignet sich keiner um wirklich selbst Herr seiner Daten zu werden. Abhilfe schafft aber das kleine PHP-Tool nikeplusphp. Diese PHP-Klasse greift die Daten direkt von der Nikeplus-Seite ab. D.h. sie nutzt nicht die API, sondern benötigt Username und Passwort um sich anzumelden und die Daten automatisiert abzugreifen. Wie man das Tool relativ schnell nutzen kann, um seine getrackten Läufe zu exportieren und in einem Google-Spreadsheet zu verarbeiten, erkläre ich im Folgenden Schritt-für-Schritt:

  1. Voraussetzung für den Einsatz von nikeplusphp ist ein eigener Webspace mit PHP5 und cURL und JSON – Unterstützung.
  2. Die aktuelle nikeplusphp-Version (4.5) liegt auf Google-Code zum Download.
  3. Die heruntergelassenen Datei „nikeplusphp.4.5.php“ nun in einem neuen Ordner namens „nikeplus“ ablegen.
  4. In diesem Ordner legt man mit einem Texteditor eine zweite leere Datei „index.php„.
  5. In die „index.php“ im Texteditor folgenden Code kopieren (Login und Passwort mit den eigenen Zugangsdaten ausfüllen):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    < ?php
      require_once 'nikeplusphp.4.5.php';
      $n = new NikePlusPHP('Login', 'Passwort');
      $activities = $n->activities();
      $activities = array_reverse($activities);
     
      $i=1;
    ?>
    <table border="1">
    <tr>
    <th>Count</th>
    <th>ActivityID</th>
    <th>Startzeit</th>
    <th>Distanz in km</th>
    </tr>
    < ?php foreach ($activities as $activity): ?>
    <tr>
    <td>< ?php echo $i; ?>
    </td><td>< ?php echo $activity->activityId; ?></td>
    <td>< ?php echo date ("Y-m-d H:i:s", strtotime($activity->startTimeUtc.' UTC')); ?></td>
    <td>< ?php echo number_format($activity->metrics->distance,2,',','.'); ?></td>
     
    </tr>	
     
    < ?php $i++; ?>
    < ?php endforeach; ?>
    </table>
  6. Jetzt lädt man den Ordner „nikeplus“ per FTP auf den eigenen Webspace hoch. am besten als Unterordner von einer bestehenden Domain, so dass das ganze dann z.B. unter www.meinedomain.de/nikeplus/ abrufbar ist.
  7. Ruft man die Seite auf, sollte das Ergebnis so aussehen. Das obige, kurze Skript erstellt eine rudimentäre HTML-Tabelle, in der alle meine getrackten Läufe mit Datum und Streckenlänge ausgegeben werden.
  8. Den Import der Daten in ein Google-Spreadsheet erledigt folgende Zeile, die man in die erste Zelle eines neuen Spreadsheet-Dokumentes kopiert:
    1
    
    =ImportHtml("http://meinedomain.de/nikeplus/"; "table";1)
  9. Die „ImportHtml„-Funktion greift sämtliche Inhalte der ersten Tabelle auf der mit der URL definierten Seite ab und importiert sie in das Spreadsheet (inkl. Spaltenüberschrift)
  10. Mit den jetzt vorliegenden Daten kann man, wie bereits im Jawbone Up – Beispiel beschrieben, mit einer Pivot-Tabelle die Daten z.B. nach Monaten auswerten und kleine Diagramme erstellen.

  11. Die hier vorgestellte Methode ist natürlich nur die Quick&Dirty-Variante, die in zehn Minuten lauffähig ist. Mit der nikeplusphp-Klasse bekommt man noch wesentlich mehr Daten extrahiert und mit ein bisschen zusätzlichem Aufwand könnte man die exportierten Daten auch gleich in eine eigenen Datenbank oder ein CSV-File auf dem eigenen Server schreiben, so dass man sich nicht in die zusätzliche Abhängigkeit von Google begeben muss.

     

    [Update] Es gibt eine neue Version 4.5.1. Ohne die geht es nicht. Der Code wird ab jetzt wohl nicht mehr bei Google gehostet.

Jawbone Up: Daten exportieren

Im dritten Teil meiner Reihe will ich kurz zeigen, wie man die Daten, die das Jawbone Up sammelt aus der Enge der zwar schönen, aber unflexiblen Jawbon-App befreit. Jawbone hat relativ schnell nach erscheinen des Armbandes eine API nachgelegt, die es ausgewählten Partnern (eine öffentliche API-Dokumentation ist momentan nicht zu finden) ermöglicht auf die Jawbone Up Daten zuzugreifen. Einer der ersten Partner war glücklicherweise IFTTT. Mit IFTTT (IfThisThanThat) kann man zwei Webdienste miteinander verknüpfen und in Abhängigkeit voneinander neue Ereignisse auslösen. Ein einfaches Beispiel wäre z.B. „Wenn ich bei Instagram ein neues Foto poste, speichere eine Kopie in meiner Dropbox“. Dazu muss man sich einen IFTTT-Account anlegen und dort dann die gewünschten Dienste für IFTTT autorisieren. Solche Aktionsverknüpfungen heißen bei IFTTT „Recipe“. Um auf meine Jawbone-Laufdaten zuzugreifen habe ich mir ein Rezept angelegt, mit dem meine Daten einmal am Tag in ein Google-Spreadsheet übertragen werden. Das Rezept ist öffentlich zugänglich und kann gerne kopiert werden. So geht das im Einzelnen:

IFTTT: Jawbone to Google Spreadsheet
So sieht das IFTTT-Rezept im Edit-Modus aus.
  1. Mein Rezept kopieren
  2. Das Rezept nach den eigenen Bedürfnissen anpassen. Folgende Felder sind wichtig: „Spreadsheet Name„: Der Name, den die Tabelle dann später auf Google-Drive hat „Drive Folder path„: Der Unterordner, wo es abgelegt wird „Formatted row„: Hier stehen die einzelnen Spalten mit den Werten, die das Armband liefert. Die Spaltennamen sollten relativ selbsterklärend sein. Ich hab in meinem Rezept ein paar Spalten weggelassen und nur die inkludiert, die mich interessieren. Man kann die aber beliebig mit dem „+“ hinzufügen oder direkt im Feld rauslöschen. Wichtig ist, dass an der Syntax mit den Klammern und Trennzeichen nichts geändert wird, sonst funktioniert der Export nicht.
  3. Das Rezept speichern
  4. Das Armband einmal mit der App synchronisieren. Nun sollte initial das Google-Spreadsheet angelegt werden. Ab jetzt werden bei jedem Synchronisieren einmal täglich die Daten des Vortages in eine neue Zeile des Spreadsheets eingefügt.

Meine Tabelle sieht dann in etwas so aus:

Bildschirmfoto 2013-08-16 um 15.16.21
Die Jawbone Up – Daten im Google Spreadsheet

Um die Daten etwas brauchbarer aufzubereiten, kann man sich eine Pivottabelle anlegen, die z.B. alles nach Monaten zusammenfasst und gleichzeitig noch ein einfaches Diagramm der Laufleistung ausgibt. Das geht so:

  1. Am Ende der Tabelle eine neue Spalte einfügen, die man z.B. „Sortdate“ nennt.
  2. Dort in die erste Zeile folgende Formel eingeben: =TEXT(A2;"YYYY-MM") Das setzt voraus, daß wie in meinem Beispiel in der ersten Spalte A immer das Datum im Format „TT.MM.JJJJ“ steht. In der neuen Spalte „Sortdate“ reduzieren wir das Datum auf Jahr und Monat.

    Bildschirmfoto 2013-08-16 um 15.20.59
    Mit einer kleinen Formel das Datum umformatieren
  3. Daten->Pivottabellenbericht
  4. In den neu erstellten Tab der Pivottabelle wechseln
  5. Auf der rechten Seite sollte jetzt der „Berichteeditor“ zu sehen sein. Dort bei „Zeilen“ das Feld „Sortdate“ und bei „Werte“ das Feld „Schritte“ hinzufügen.

    Pivot, Pivot
    Pivot, Pivot
  6. Jetzt sollte die Tabelle ungefähr so aussehen. Wir haben jetzt für jeden Monat eine Auflistung der Gesammtschrittzahl.
    Bildschirmfoto 2013-08-16 um 15.23.01
  7. Jetzt alle Monate markieren und auf „Einfügen“->“Diagramm“ klicken. Im Diagrammeditor das Schaubild nach den eigenen Wünschen anpassen.
    Ein Diagramm sagt mehr als tausend Listen.
    Ein Diagramm sagt mehr als tausend Listen.

    Am Ende sollte dann in etwas so etwas herauskommen. Diagramm und Tabelle lassen sich jetzt z.B. direkt per Embed-Code in eine Webseite einbauen.

Das obige Beispiel ist lediglich ein schnell zusammengeklicktes. Mit ein bisschen mehr Aufwand kann man die Daten noch mit anderen Tools wie z.B. Google-Charts hübscher aufbereiten. Das gleiche Prinzip funktioniert auch mit den Schlafdaten des Jawbone Ups. Das Praktische daran ist, dass man, ohne noch mal manuell ran zu müssen, bei jedem Synchronisierungsvorgang ein automatisches Backup seiner Daten bekommt. Wenn man sich zusätzlich noch die Google-Drive-Software installiert, werden die kompletten Spreadsheet-Daten auch, ähnlich wie bei Dropbox, auf den eigenen Rechner gesyncht. Und von dort wandert die Tabelle dann in das lokale Backup. So hat man die ganzen Jawbone Up-Daten auch immer noch lokal gesichert, falls einer der Anbieter mal spontan den Laden dicht macht.

Jawbone Up

Im ersten Teil hab ich bereits mein kleines Laufprojekt erläutert. Dabei behilflich ist mir u.a. ein kleines Armband, das Jawbone Up.

Im März 2013 hab ich mir während eines USA-Aufenthaltes das Jawbone Up gekauft. Das kleine, schwarze Armband zählt Schritte und erfasst Schlafphasen. Das Jawbone Up gibt es eigentlich schon seit 2011, wegen technischer Probleme mit der ersten Version wurde es aber in Europa nie verkauft und der Hersteller hat ein knappes Jahr an einer verbesserten Variante gearbeitet. Diese befindet sich nun seit März 2013 in meinem Besitz und in konstanter Verwendung.

Das Armband kommt in einer relativ schlichten, schwarzen Gummihülle daher. An einem Ende ist eine kleine Kappe, die einen Klinkenstecker verdeckt. Mithilfe dieses Steckers synchronisiert man das Armband mit der zugehörigen App auf dem iPhone. Außerdem lädt man den Akku des Armbands über den Klinkenstecker und einen mitgelieferten Adapter an einem handelsüblichen USB-Ladegerät (nicht mitgeliefert) auf.

20130803-174547.jpg

Am anderen Ende des Bandes befindet sich ein Druckknopf mit dem man das Band in drei verschiedenen Modi (Tag/Nacht/Aktivität) setzen kann.

Die Tatsache, dass ich das Band seit dem Kauf innerhalb der letzten 135 Tage nur 1-2 mal vergessen habe tagsüber anzulegen, spricht für guten Tragekomfort. Es fühlt sich nach ein paar Tagen an, als würde man eine Uhr tragen (was dummerweise wiederum dazu führt, ständig nach der Uhrzeit zu schauen).

Im Nachtmodus hab ich es ein paar mal mehr weggelassen (teilweise auch um es aufzuladen). Aber auch beim Schlafen stellt es grundsätzlich keinen größeren Störfaktor dar.

Die Zählgenauigkeit der Schritte scheint mir, nach der ersten zusätzlichen Feinjustierung anhand einiger, in der Nike+-App getrackten Läufe, auch recht genau zu sein (ohne es wirklich nachgezählt zu haben). Die c’t kommt in einem Vergleichstest mit dem Konkurrenzprodukt von Fitbit zu einem ähnlichen Ergebnis.

Andere Aktivitäten, wie z.B. Radfahren, erfasst das Band leider noch nicht automatisch. Hierzu muss man immer per Doppeldruck am Statusknopf eine Aktivität starten (und diese dann auch wieder manuell beenden). Für meine, meist kurzen, Radfahrten im Stadtbereich ist mir das zu umständlich, beim Joggen logge ich aber immer extra mit.

Die zweite wichtige Funktion des Armbands ist für mich der Wecker. Anhand der Bewegungssensoren ermittelt das Band, ob man sich gerade in einer Tief- oder Leichtschlafphase befindet. Stellt man die Weckzeit ein, versucht das Band einen in einer, innerhalb eines definierbaren Zeitrahmens liegenden, Leichtschlafphase zu wecken. Dies geschieht durch einen dezenten Vibrationslarm. Das ist extrem praktisch, wenn man nicht alleine schläft und morgens um 6 zum Joggen gehen will. Die Genauigkeit der Schlaferfassung kann ich nicht wirklich beurteilen. Die Angabe aber wie lange ich z.B. gebraucht habe um einzuschlafen, wirkt zumindest meistens sehr plausibel und deutet auf eine recht korrekte Resterfassung des folgenden Schlafes hin.

Zusätzlich kann man in der App auch noch seine Essgewohnheiten erfassen. Das ist aber viel zu umständlich und daher nicht wirklich praktikabel.

Die ganzen erfassten Daten übermittelt man am besten einmal am Tag, indem man das Armband mit dem Klinkenstecker an das iPhone anschließt und die Jawbone-App startet. Innerhalb der App werden die Daten recht schön in verschiedenen Diagrammen aufbereitet. Dort kann man sich auch mit anderen Nutzern zu Teams zusammenschließen und verschiedene Konfigurationen, wie z.B. die Weckzeit oder den Inaktivitätsalarm (das Band vibriert nach x-Minuten um zur Bewegung zu mahnen) einstellen.

Alle Daten, die man übermittelt, werden auf die Server von Jawbone übertragen. Man kann einstellen, welche Daten andere Teammitglieder sehen dürfen und welche nicht. Ich blende z.B. meine Schlafdaten aus und vergleiche nur meine Schrittergebnisse.

Außerhalb der App passiert relativ wenig. Auf der Jawbone-Seite kann man sich zwar mit seinem Account anmelden, findet dann aber nur eine rudimentäre Kontoverwaltung und, nicht unwichtig für den nächsten Teil meiner kleinen Reihe, die Möglichkeit alle bisher erfassten Daten als CSV-File herunterzuladen. Das benötigen wir nämlich, um unsere Jawbone-Daten aus der Enge der schicken App zu befreien.

Verschiedene andere Testberichte bemängeln die fehlende Bluetooth-Unterstützung. Ich finde die Synchronisierung über den Klinkenstecker aber ziemlich nett, weil ich erstens nicht wusste, dass so was geht und ich zweitens vermute, dass der Akku des Bandes bei Bluetooth-Nutzung wesentlich schneller leer wäre. So hält der nämlich meistens 7-8 Tage (der Hersteller behauptet sogar 10).

Für die Kappe, die den Klinkenstecker abdeckt, sollte man sich auf jeden Fall gleich den Dreierpack Ersatzteile mitbestellen. Ich hab meine bisher einmal verloren und nur durch Zufall wieder gefunden.

Die Kosten für das Band liegen in Europa bei 130 €. Hat man US-Verbindungen, kann man sich das Band für den selben Dollarpreis beim Best-Buy kaufen lassen und ein bisschen sparen.

Was bringt’s jetzt?

Zunächst mal sieht man recht schnell, wie wenig man sich an einem durchschnittlichen Bürotag eigentlich bewegt. Mehr als 2000-3000 Schritte sind da, bei der Nutzung von Auto oder öffentlichen Verkehrsmitteln, nicht drin. Und dann will man recht schnell die vom Hersteller empfohlenen 10.000 Schritte pro Tag erreichen. Zumindest jeden zweiten Tag. Und auf jeden Fall mehr Schritte gehen als @hipcheck, @jakV oder @christophkoch. Und ehe man sich versieht, fängt man z.B. an auch mal den kompletten Weg in die Arbeit zu laufen, anstatt die Tram zu nehmen.

Klingt alles ziemlich gut?

Eigentlich ja. Hätte mein Jawbone nicht just zum Zeitpunkt des Erstellens dieses Postings immer mal wieder spontane Aussetzer und es blinkt nur noch die rote Statusleuchte. Abhilfe schaffen nur mehrmalige Synchronisationsversuche mit der App. Eine Mail an den Support ist raus, @christophkoch meldet parallel den Defekt seines Gerätes und im Jawbone-Forum melden sich auch vermehrt Kunden mit defekten Bändern. Es bleibt abzuwarten, ob das ein zweites Produktfiasko wird oder mit Austauschgeräten schnelle Abhilfe geschafft werden kann.

Im nächsten Teil werde ich aufschreiben, wie ich die Jawbone Up-Daten regelmässig extern wegsichere und weiter auswerte.