Mein Masterplan für die nächsten 30 Tage

Ich starte gerade ein neues Experiment, um ein wenig von dem in den letzten 6 Monaten angesammelten Fett wieder loszuwerden. Dazu hab ich meinen Ernährungsplan aufgemotzt und werde etwas mehr Kohlenhydrate akzeptieren. Ich esse jetzt zu jeder Mahlzeit jeweils eine Komponente aus den folgenden Gruppen:

Protein

  • Eier
  • Huhn
  • Schwein oder Rind
  • Fisch

Hülsenfrüchte

  • Linsen
  • Bohnen

Gemüse

  • TK Gemüsemix
  • Salat (inkl. Paprika, Gurke, Tomate…)
  • Erbsen
  • Spinat, Broccoli, Blumenkohl
  • Spargel

Das ganze läuft 30 Tage, also bis zum 15. Januar 2011.

Update Eins hab ich noch vergessen: Samstags ist Refeed, sprich: Iss alles, bis mir schlecht wird. Eis, M&Ms, Kekse usw.

Update 2 Und damit es so richtig peinlich wird, könnt ihr hier meine regelmässigen Messungen und Fortschritte nachlesen.

Schneechaos in Norddeutschland

Heute nachmittag sind wir mit dem Wagen für einen kleinen Ortswechsel losgefahren, und kamen durch schön verschneite Landschaften:

Schneechaos in NorddeutschlandSo müsste es 3 Wochen weiter gehen...In Niedersachsen sieht es noch besser aus

Im Radio ist mir dabei wieder die dramatisierende Berichterstattung aufgefallen: Blitzeis, Unfälle, Chaos, Ausfälle im Schienenverkehr.

Und wenn ich mir dann die Schneehaufen am Strassenrand angucke, dann fällt mir auf, dass man damit keine guten Igloos bauen kann. Das hab ich nämlich früher immer gemacht, wenn Schnee lag. Das geht heute nicht mehr. Oder wenigstens nicht im Moment. Und eigentlich ist das auch kein Schneechaos, das ist nichtmal besonders viel Schnee.

Aber wenn dann irgendwelche Deppen mit 80km/h überholen und im Graben landen, dann müsste man nicht von Chaos sprechen. Das ist halt so. Aber ich glaube, Fefe und die Nachdenkenseiten haben recht.

Fitbit mit neuem Interface für Mobilgeräte

Gestern hab ich mal wieder die Adresse http://m.fitbit.com mit meinem Android-Browser aufgerufen und -siehe da- das neue Interface für Mobilgeräte für Fitbit.com gefunden. 🙂 Hier sind ein paar Screenshots:

Fitbit Mobile Interface - Homepage
Fitbit Mobile Interface - Homepage
Fitbit Mobile Interface - Food
Fitbit Mobile Interface - Food report
Fitbit Mobile Interface - Activity Log
Fitbit Mobile Interface - Weight Log

Jetzt kann ich unterwegs endlich mein Fitbit nutzen! Das wurde auch Zeit, ich musste nämlich schon oft auf die mobile Version der FDDB ausweichen, wenn ich meine Nahrung von unterwegs loggen wollte. Es gibt aber auch noch ein paar Nachteile:

  • noch keine echte Lebensmittelsuche, sondern nur die Auswahl aus bereits eingetragenen Lebensmitteln
  • Community ist nicht erreichbar, weil die Foren nicht angezeigt werden
  • keine Synchronisation mit dem Fitbit (dafür gibt es die Basisstation)

Wer sich jetzt endlich ein Fitbit kaufen will, der sollte das bei Amazon US tun. Mit Versand und Zoll dürfte der Preis bei ca. 100€¬ liegen.

Es geht weiter.

Ihr habt es vielleicht gemerkt: mein Blog war ein paar Tage nicht erreichbar.

Nach dem Ende des Aikidoforums (in ein paar Tagen wird die Domain abgeschaltet und der Nachfolger meldet sich auch nicht mehr) habe ich in der Verwirrung um den JMSTV überlegt, auch meinen Blog abzuschalten.

Aber ich werde doch weiter machen.

Clojure Tutorial, Teil 2: Namespaces

Dies ist der zweite Artikel in einer kleinen Serie, die meine ersten Schritte in der neuen funktionalen Programmiersprache Clojure dokumentieren soll. Die Artikel werden in unregelmäßigen Abständen hier publiziert.

Im letzten Artikel habe ich in dem erweiterten Hallo Welt eine Var definiert, in der ich die auszugebende Nachricht "Hallo Welt" abgelegt hatte. Man könnte jetzt glauben, eine Var ist gleichbedeutend mit einer globalen Variable, aber das ist nicht so.

Namespaces

In Clojure sind alle Variablen und Funktionen “gescoped”, d.h. mit einem Gültigkeitsbereich belegt. Startet man die REPL, wird automatisch der Namespace “user” angelegt. Man kann den Namespace einfach mit der special form ns wechseln:

$ java -cp clojure.jar clojure.main
Clojure 1.3.0-alpha3-SNAPSHOT
user=> (ns mynamespace)
nil
mynamespace=>

Mit der Funktion (ns mynamespace) erstelle ich einen neuen Namespace und wechsel direkt dort hinein. Anschliessend kann ich dort Vars und Funktionen erstellen, und zwar ohne explizit den Namespace angeben zu müssen. Allerdings kann ich sie ausserhalb meines Namespaces nur voll qualifiziert referenzieren, d.h. ich muss immer den Namespace mit angeben:

mynamespace=> (def msg "Hallo Welt")
#'mynamespace/msg
mynamespace=> (println msg)
Hallo Welt
nil
mynamespace=> (ns user)
nil
user=> (println msg)
CompilerException java.lang.Exception: Unable to resolve symbol: msg in this context, compiling:(NO_SOURCE_PATH:5)
user=> (println mynamespace/msg)
Hallo Welt
nil
user=>

Ich habe die Var mynamespace/msg angelegt und anschliessend in einen anderen Namespace gewechselt. Dort habe ich versucht, die Var msg auszugeben, die im Namespace user gar nicht existiert und der Compiler hat das mit einer Fehlermeldung quittiert. Anschliessend habe ich den vollständigen Namen mynamespace/msg verwendet und konnte die Var erfolgreich ausgeben.

Organisation in Dateien

Um die Organisation der Quelltexte in Dateien zu vereinfachen, gibt es eine kleine Regel:

Jede Datei hat ihren eigenen Namespace, die erste Form in einer Datei ist die special form ns.

Wenn man allerdings in einer Datei sehr oft Funktionen eines anderen Namespace verwendet, kann man den Schreibaufwand etwas reduzieren, in dem man alle Funktionen des anderen Namespace in den eigenen importiert. Dazu verwendet man die :use Direktive der special form ns:

user=> (ns mynamespace (:use clojure.xml))
nil
mynamespace=> parse
#<xml$parse clojure.xml$parse@55a7b0bf>
mynamespace=>

Die seltsame Ausgabe ist Clojures Repräsentation der Funktion parse, das kann jetzt erstmal ignoriert werden. Der springende Punkt ist die Tatsache, dass ich die Funktion clojure/xml/parse ohne Angabe des voll qualifizierten Namen aufrufen kann. Damit werden die eigenen Quelltexte wieder etwas kürzer und hoffentlich lesbarer.