Dienstag, 29. Januar 2008

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Biel < 9] KW 4: 89,1 km (90), 4898 kcal (Rodgau)

Das war eine schöne Woche: 3 x Laufen, 2 x Aquajoggen, 2 x Krafttraining und 1 x Schwimmen, dazu ein wenig Wettkampf-Feeling bei einem 30-km-Trainingslauf in Rodgau. Der Ischias nervte nur ein ganz klein wenig, und es wird immer besser damit. Die Trainingsspizte im Januar ist damit erreicht und in der nächsten Woche erhole ich mich bei bescheidenen 70 Wochenkilometern.

Der 50-km-Ultramarathon in Rodgau, von dem ich 30 km mitgelaufen bin, war gut. Von fast 900 gemeldeten Läufern sind knapp 650 gestartet, und von denen sind knapp 450 die vollen 50 Kilometer gelaufen. Mein Trainingsplan sah zwei Möglichkeiten vor: die 50 voll durchzulaufen und dafür eine andere Einheit in der Woche zu knicken, oder 30 km zu laufen ohne eine weitere Einheit auszulassen. Da ich den ganzen Winter über schon Probleme mit der Hüfte habe, war mein Physiotherapeut gar nicht davon begeistert, dass ich 50 km am Stück laufen will, und so bin ich dann nur 6 der 10 5-km-Runden gelaufen.

Dabei habe ich mich voll verrechnet: angestrebt war eine Zeit zwischen 5:30 und 6:00 min/km laut Plan, wobei ich mich an die 5:30 halten wollte. In der ersten 5-km-Runde habe ich dann gemerkt, dass ich meinen Distanzmesser falsch kalibriert hatte (kann man zum Glück während des Laufes richten, ohne die Messung zu unterbrechen!). Und dabei muss ich wohl irgendwie in meinem Kopf verankert haben, dass man eine 5-km-Runde bei 5:30 in/km in 25 Minuten absolvieren müsste. Und da ich in der ersten Runde mit 27:34 min viel zu langsam war (dachte ich!), habe ich versucht, dass in den nächsten 3 Runden zu korriegieren - was natürlich total frustrierend war. Tatsächlich hätte mir eine Zeit von 27:30 min auf einer Runde als Limit gegolten, so aber habe ich ständig überzogen und bin zu schnell gelaufen. Den Rechenfehler habe ich erst in der 5. Runde bemerkt, und so bin ich dann mit 2:38 h ins Ziel gekommen, durchschnittlich 5:16 min/km und damit deutlich zu schnell. Naja, mein Physiptherapeut hat's mir verzeihen können :-)

Toll fand ich, dass ich nach den 30 km überhaupt nicht fertig war und eigentlich noch gerne die 50 vollgemacht hätte. Das ist ein gutes Zeichen, denn das bedeutet, dass ich konditionell zumindest Oberwasser habe und der Bielplan bislang zu funktionieren scheint. Wenn ich jetzt noch meine Physiologie in den Griff bekomme, dann wird das eine ziemlich gute Saison!

Mittwoch, 16. Januar 2008

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Biel < 9] KW 3: 79,3 km (80), 4562 kcal

Ereignisreiche Woche, in beide Richtungen der Ying-Yang-Skala. Zuerst die Fakten: 5 Einheiten, davon 3 Laufen und 2 Aquajoggen, dazu einmal Schwimmen und einmal Krafttraining. Das Aquajoggen schlägt mit knapp 20 km zu Buche, Laufen macht 55 km aus und das Schwimmen bringt's umgerechnet auf 5 Laufkilometer, zusammen also knapp 80 km diese Woche. Soweit, so Plan.

In einer Laufeinheit bin ich 25 km am Berg gelaufen ("Schwarzwald-Hügelchen"), immerhin 440 HM. Die Hüfte hat mich weitestgehend (=leichter Reiz) in Ruhe gelassen. In einer anderen Laufeinheit von 15 km Länge habe ich drei Ein-Kilometer-Tempoläufe versucht unterzubringen, mit mäßigem Erfolg: Ich bin zwar im angestrebten Bereich von 4:00 bis 4:15 min gelaufen, das aber nur mit deutlichen Schmerzen in der Hüfte. Noch ist das Ding nicht kuriert und ausgestanden :-(

Mein Physiotherapeut Frank Schmelcher hat mir Anfang der Woche noch drei Übungen draufgepackt auf meinen Krafttrainings-Übungs-Stapel - als ob ich nicht schon so über eine Stunde damit beschäftigt wäre, alle Übungen zu machen. Naja, dient den Bauch- und Rückenmuskeln... "Wenn s Scheeeee macht!" Starken Rumpf macht's auf jeden Fall, und das hilft wiederum der Hüfte.

Am Montag habe ich mir den S3-Sensor für meine RS800G3 besorgt (der den RS800 dann zu einem RS800sd macht). GPS mit dem G3 ist gut und schön, kann Dir aber so Dinge wie Aktuelle Geschwindigkeit, Schrittlänge und Trittfrequenz, wie es der S3 kann, nicht mitteilen, wobei die letzteren beiden nett sind, die Aktuelle Geschwindigkeit mir aber wichtig ist. Ich experimentiere mit dem S3 mal ein wenig rum und berichte dann hier wieder.

Am Mittwoch Morgen wachte ich mit blockiertem Rücken auf - den ich bis heute nicht wieder richtig losgeworden bin. Blockierter Rücken bedeutet Schmerzen wie Messerstiche im Rücken (nein, ich hatte noch nie ein Messer im Rücken, aber so stelle ich's mir vor) und eine stark eingeschränkte Beweglichkeit des Kopfes. Die Blockade im Rücken erfolgt durch ein Verschieben der Wirbel, die dann ungünstig auf Nerven rumreiben. Dast tut weh und man verkrampft die Rückenmuskeln, was wiederum die Wirbel noch mehr blockiert usw. Tolle Abwärtsspirale. Laufen hilft gegen die Auswirkungen, weil lockert die Rückenmuskulatur. Bin's bis jezt, Montag, noch nicht wieder richtig losgeworden. Mal schauen, was mein Physiotherapeut da noch anrichten kann. Ach ja, man wacht oft Nachts auf (wegen der Schmerzen), kann dann nicht wieder einschlafen und schreibst dann Blogeinträge...

Die kommende Woche wird mit 90 km Laufumfang eine Spitze bilden im aktuellen Superkompensationszyklus. Der Januar wird dann so ausgesehen haben: 70, 80, 90, 70 km. Der Februar wird dann schon deutlich anspruchsvoller: 90, 100, 110, 90 km. Aber man sieht das Prinzip der Superkompensation hier immer recht schön: drei Wochen Trainingsreize, eine Woche Erhohlung.

Rodgau (Ausschreibung) steht am Ende der kommenden Woche an, der erste Ultra des Jahres in Deutschland. In zig Foren liest man immer nur "... und wir sehen uns ja dann auch in Rodgau!", als ob es eine Selbstverständlichkeit für einen Ultramarathoni wäre, dort mitzulaufen. Da scheint sich ganz Ultramarathon-Deutschland und Umzu zu treffen. Leider kann und werde ich dort nicht die vollen 50 km laufen, dafür reicht mein bisheriges Laufpensum nicht aus und ich will mir jetzt nichts kaputt machen und so das Training gefährden - das wär's nicht wert. Der Plan ist da ganz gut gestrickt und rät: "[Die 9- und 11-h-Läufer] erfüllen eventuell die Voraussetzungen noch nicht und schaden ihrem Aufbau damit eher. Ein Tipp: Den 50er von vorne herein geplant nach 30 km bzw. 20 km beenden." Guter Tip. Und so werde ich denn auch in Rodgau nur sechs der zehn 5-km-Schleifen laufen und so trotzdem meinen bisher längsten Langen Lauf bestreiten. Wird bestimmt lustig. Trotzdem.

Sonntag, 13. Januar 2008

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Biel < 9] KW 2: 70 km (70), 4029 kcal

Wird immer besser: knapp 40 km von 70 bin ich gelaufen, den Rest geschwommen und ge-aquajogg-t. Bin leider nur einmal zum Kraftraining gekommen. Von den sechs Trainingseinheiten an fünf Tagen bin ich drei gelaufen (12, 13 und 14 km), eine mehr als letzte Woche. Permanente Schmerzen hatte ich weder während des Laufens noch sonst. Bei der ersten Laufeinheit (12 km) hatte ich gegen Ende zwar drei "Stiche" in die linke Pobacke (Ischias?), bei der letzten Laufeinheit (14 km) einen kleinen Stich irgendwann zwischendurch, aber ansonsten war alles ruhig. Die 14 km Laufen heute (Sonntag) habe ich wieder mit Hund am Berg gemacht (365 m Aufstieg). Wunderbar!

Nächste Woche wird's ernster: 80 km insgesamt, 10 km mehr als diese Woche. Normalerweise kein Problem, aber mit der Hüfte? Hinzu kommt, dass ich viel unterwegs sein werde: Montag Karlsruhe, Dienstag und Mittwoch Köln, Donnerstag Karlsruhe, Freitag Bremen, am Wochenende nach Bochum - wird nicht einfach, das Training da unterzubekommen. Hinzu kommt ein langer Lauf über 25 km und eine Tempoeinheit, die aber nur über 4 km.

Wird so langsam wieder... :-)

Montag, 7. Januar 2008

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Biel < 9] KW 1: 51 km (50), 2755 kcal

So langsam geht's wieder bergauf: Dies Woche habe ich vier Laufeinheiten plus eine Schwimmeinheit plus zwei Krafttrainingseinheiten absolviert. Davon bin ich zweimal gelaufen und dreimal Aquajoggen gegangen. Am Samstag abend bin ich den Karlsruher Turmberg mit Hund und Stirnlampe bei Regen rauf (Merke: Kaufe Dir endlich Trailschuhe!). Das war sehr schön und verhältnismäßig anstrengend - und ich hatte keine Schmerzen im verlängerten Rücken :-)

Heute, am Montag morgen, 7.1., hatte ich dann endlich wieder einen Physiotherapietermin. Ab diesem Termin habe ich dann wieder wöchentlich Physiotherapie bis in den März hinein (auch Dank Jorinas Weihnachtsgeschenk: Gutschein über 10 mal Physiotherapie für Biel!). Nach einer Unterhaltung mit Frank ging's dann auch gleich zur Sache: Dehnen, Strecken, Massieren - und siehe da, die vom Nerv ausgehende Reizung ist deutlich zurückgegangen in der halbstündigen Sitzung. Als "Hausaufgabe" gab's zwei Übungen mit auf den Weg, die ich täglich zweimal auszuführen habe.

Laufen soll ich mehr, sofern die Schmerzen nicht stärker werden oder ich beim Laufen selbst Schmerzen verspüre. Da ich bisher kaum oder keine Schmerzen während des Laufens selbst habe, sondern immer erst danach, soll ich mich nun verstärkt wieder aufs Laufen konzentrieren. Das bedeutet also, dass ich jetzt von zwei Laufeinheiten der letzten Woche auf drei Laufeinheiten in dieser Woche aufstocke. Die Laufeinheiten letzter Woche waren bei 11,5 und 10,3 km (letztere am Berg), diese Woche versuche ich 12, 13 und 14 km (letztere am Berg) plus 15 und 11 km im Wasser. Mit Schwimmen (ich rechne die dortigen Kilometer aufs Laufen an) komme ich dann auf 70 km - und damit wird's langsam "Biel"-ernst. 70 Wochenkilometer bin ich lange nicht mehr gelaufen. Die nächsten drei Wochen zeigen den Kurs: 70, 80, dann 90 km.

In der 90-Wochenkilometer-Woche (KW 4) wäre ein 50er in Rodgau drangewesen - wäre, denn Frank meint, dass sollte ich mal vergessen. Menno, immer diese ins Gewissen redenden Physiotherapeuten ;-) Nun ja, er hat wohl recht. Aber mal abwarten: Wenn die Therapie anschlägt und ich die nächsten beiden Wochen gut hinbekomme, vielleicht kann ich dann in Rodgau noch 30 oder 40 km mitlaufen. Immerhin ist dieser 50er als 10-km-Rundkurs ausgelegt, d.h. man kann relativ einfach aussteigen, wenn es etwa schmerzen sollte. Hrmpf, ich hätte wirklich mal wieder lust, etwas länger zu laufen...

Freitag, 4. Januar 2008

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

Kata in Groovy ge-DRY-t

Neulich schrieb mir ein it-agile-Kollege...

Von: Sanitz, Sebastian (Blog) (07.12.2007)
====================================
Hallo Bernd,
zur Zeit tue ich mir doch Groovy und bald auch Grails an. Unter anderem probiere ich mich an den CodeKatas vom pragmatischen David um die Sprache richtig kennen zulernen.

Jetzt habe ich da ein paar Fragen. Meine Lösung zum Wetterproblem ist angehängt, sie funktioniert mittlerweile, ist zum Vergleich mit meinen stümperhaften Anfängen "grooviger" bzw. kleiner gemacht. Das Ergebnis sieht so aus:

Tag: 14 Spread:  2 Min: 59 Max: 61
Tag: 15 Spread: 9 Min: 55 Max: 64
Tag: 13 Spread: 11 Min: 59 Max: 70
Tag: 24 Spread: 13 Min: 77 Max: 90
Tag: 12 Spread: 15 Min: 73 Max: 88
Tag: 2 Spread: 16 Min: 63 Max: 79
Tag: 7 Spread: 16 Min: 57 Max: 73
Tag: 28 Spread: 16 Min: 68 Max: 84
Tag: 4 Spread: 18 Min: 59 Max: 77
Tag: 25 Spread: 18 Min: 72 Max: 90
Tag: 27 Spread: 19 Min: 72 Max: 91
Tag: 6 Spread: 20 Min: 61 Max: 81
Tag: 10 Spread: 20 Min: 64 Max: 84
Tag: 16 Spread: 20 Min: 59 Max: 79
Tag: 19 Spread: 20 Min: 61 Max: 81
Tag: 8 Spread: 21 Min: 54 Max: 75
Tag: 3 Spread: 22 Min: 55 Max: 77
Tag: 23 Spread: 22 Min: 68 Max: 90
Tag: 29 Spread: 22 Min: 66 Max: 88
Tag: 5 Spread: 24 Min: 66 Max: 90
Tag: 17 Spread: 24 Min: 57 Max: 81
Tag: 22 Spread: 26 Min: 64 Max: 90
Tag: 20 Spread: 27 Min: 57 Max: 84
Tag: 21 Spread: 27 Min: 59 Max: 86
Tag: 1 Spread: 29 Min: 59 Max: 88
Tag: 18 Spread: 30 Min: 52 Max: 82
Tag: 11 Spread: 32 Min: 59 Max: 91
Tag: 26 Spread: 33 Min: 64 Max: 97
Tag: 30 Spread: 45 Min: 45 Max: 90
Tag: 9 Spread: 54 Min: 32 Max: 86

Hier meine Anfänger-Fragen:
  • Kann ich mit Groovy noch einfacher ein Integer aus dem String machen, als mit Integer.valueOf? (asType wirft natürlich eine Exception...)
  • Gibt es noch eine einfachere Lösung Exemplare von WeatherData mit den Daten zu erzeugen? Meine die Zeile:
    data {{ new WeatherData(day: day, min: min, max: max)
    (Anmerkung: da gehören statt geschweifte spitze Klammern hin, aber damit kommt Blogspot nicht klar :-( )
  • Benutze im Beispiel String.format() für die Ausgabe - gibt es da was groovigeres?
  • Obwohl ich seit über zehn Jahren mit regulären Ausdrücken (früher nur in Perl) hantiere, dauert es sehr lange bis ich eine funktionierende Lösung finde. Hast Du eine schnelle Herangehensweise? Und vielleicht ein anderes Muster für die Aufgabe?
  • Hast Du für die Aufgabe eine ganz andere Lösung?
Viele Grüße - Sebastian

PS
Glaube das liegt an Groovy, man schreibt sehr viel weniger Code und
textet in Emails mehr als sonst ;-)

Von: Schiffer, Bernd (07.12.2007, 23:09 h)
====================================
Hi Sebastian.

> Hier meine Anfänger-Fragen:
> * Kann ich mit Groovy noch einfacher ein Integer aus dem String machen,
> als mit Integer.valueOf? (asType wirft natürlich eine Exception...)
'2'.toInteger()
> * Gibt es noch eine einfachere Lösung Exemplare von WeatherData mit den
> Daten zu erzeugen? Meine die Zeile:
> data {{ new WeatherData(day: day, min: min, max: max)

Nope, das wäre die einfachste mit einem impliziten Konstruktor. Wenn Du einen expliziten Konstruktor benutzt hättest, dann könntest Du über Positional Parameter einfachere WeatherDatas erzeugen:
def data = [day, min, max] as WeatherData
oder
WeatherData data = [day, min, max]
Du brauchst allerdings für Skripte dieser Kürze gar keine Klassen und Objekte, wenn Du so tolle Dinge hast wie literale Maps - später mehr.

> * Benutze im Beispiel String.format() für die Ausgabe - gibt es da was
> groovigeres?

Jein, komme ich gleich zu.

> * Obwohl ich seit über zehn Jahren mit regulären Ausdrücken (früher nur
> in Perl) hantiere, dauert es sehr lange bis ich eine funktionierende
> Lösung finde. Hast Du eine schnelle Herangehensweise? Und vielleicht ein
> anderes Muster für die Aufgabe?

Mein Muster ist ähnlich wie Deines.
Deins:
~/\s+(\d+)\D+(\d+)\D+(\d+).*/
Meins:
def number = /\W+(\d+)/
/(?m)^${number * 3}.*/
Der Unterschied: Deins ist nicht DRY. Du wiederholst zweimal \D+(\d+). Du kannst statt Deines \d+ und Deines \s+ auch ein \W+ nehmen. Dann sind sogar dreimal \D+(\d+). Groovys Slashed Strings sind GStrings, d.h. Du kannst sie substituieren per $-Schreibweise. So kannst Du die Duplikation entfernen.

Mein (?m)^ am Anfang hat mit der Art zu tun, wie ich die Daten einlese.
Deins:
def pattern = ~/\s+(\d+)\D+(\d+)\D+(\d+).*/
new File("weather_orginal.dat").each{ line ->
matcher = pattern.matcher(line);
if (matcher.matches()) {
def day = matcher.group(1)
int max = Integer.valueOf(matcher.group(2))
int min = Integer.valueOf(matcher.group(3))
...
}}
Meins:
def number = /\W+(\d+)/
new File('weather.dat')
.text
.eachMatch(/(?m)^${number * 3}.*/){
all, tag, max, min ->
...
}
(Anmerkung: Wenn man das nicht im Blog schreibt, dann ist das ein Zweizeiler.) Dein Code kompiliert übrigens nicht mit Groovy-1.5.1 (da gibt's kein file.each mehr). Abgesehen davon: Was wir eigentlich gerne hätten wäre ein file.eachLineMatch auf File, aber da es das nicht gibt, nutze ich halt die lange Version file.text.eachMatch (was um ein Zeichen länger ist ;-) ). Und dann habe ich auch die Möglichkeit, sprechender die Gruppen zu benennen mit all, tag, max, min.

Der Grund für (?m)^: ?m ist der MULTILINE-Mode (siehe JavaDoc zu Pattern). Nichts Neues, wenn man JavaRegExp kennt. Über diesen Mode wird ^ zum Beginn einer Zeile, nicht mehr zum Beginn des Strings.

Reguläre Ausdrücke ertüftel ich mir testgetrieben. Sofern es "technische" Probleme gibt, weiche ich auf die GroovyConsole aus. Mit diesem Snippet bekommst Du ganz brauchbare Aussagen darüber, welche Group was gemacht hat:
def regexp = ...
def text = ...
text.eachMatch(regexp){ println it }
> * Hast Du für die Aufgabe eine ganz andere Lösung?

Nein - drei :-)

Schau Dir diese Version an:
def number = /\W+(\d+)/
def eintraege = []
new File('weather.dat')
.text
.eachMatch(/(?m)^${number * 3}.*/){
all, tag, max, min ->
def spread = max.toInteger() - min.toInteger()
eintraege << [tag, spread, min, max] // #1
}
eintraege
.sort{ it[1] } // #3
.each{
println String.format('Tag:%3s Spread:%3s Min:%3s Max:%3s',
*(it*.toString())) // #2
}
Bei #1 erzeuge ich Einträge als Liste von Listen. In den inneren Listen sind die Werte in der Reihenfolge, wie sie von String.format gebraucht werden. Das komische Konstrukt bei #2 - *(it*.toString())) - ruft erst auf allen Werten toString() auf (ich habe ja spread als int gespeichert) um dann das Ergebnis nochmal zu spreaden (*. ist der Dot-Spread-Operator und macht aus einer Liste [a, b] eine kommaseparierte Wertefolge a, b, die man etwa in anderen Listen oder zwecks Parameterübergabe benutzen kann; hat jetzt überhaupt nichts mit dem Spread aus der Kata zu tun!), damit die Parameter für String.format() erzeugt werden. Ich kann auch schreiben it*.toString().toArray() - ist aber länger.

Diese Lösung hatte ich zuerst gebaut. Und dann fiel mir auf, dass die nicht DRY ist: Wenn Du die Reihenfolge der Spalten ändern willst, also z.B. Spread vor Tag oder so, dann musst Du an zwei völlig unterschiedlichen Stellen schrauben, nämlich an der Liste bei #1 und beim beschreibenden String bei #2. Du mußt sogar noch bei #3 etwas ändern, wenn sich Spread nicht mehr an 2. Stelle befindet. Und Du hast das Padding auf 3 gesetzt - an vier Stellen. Fazit dieser Variante: Sehr fragil, unflexibel, redundant - naja, eben nicht DRY.

Dann bin ich auf das hier gekommen:
def number = /\W+(\d+)/
def eintraege = []
new File('weather.dat')
.text
.eachMatch(/(?m)^${number * 3}.*/){
all, tag, max, min ->
def spread = max.toInteger() - min.toInteger()
eintraege << [tag:tag, spread:spread, min:min, max:max] //#1
}
eintraege
.sort{ it.spread } // #3
.each{
println it.collect{ // #2
def label = format(it.key)
def wert = it.value.toString().padLeft(3)
"$label:$wert "
}.join()
}

def format(label) {
label[0].toUpperCase() + label[1..-1]
}
Bei #1 übergebe ich jetzt keine Liste mehr, sondern eine Map (da wird bereits eine LinkedHashMap erzeugt, damit die Einträge in der entsprechenden Reihenfolge bleiben). Da habe ich zwar immer noch Redundanz zwischen Key und Value, aber dazu später mehr. Durch die Map kann ich bei #3 jetzt explizit auf den Key verweisen. Ändere ich die Reihenfolge bei #1 ist davon #3 nicht betroffen. Zu #2: Das ist jetzt die groovyfizierte Version von String.format(). Statt %3s ist der Ausdruck it.value.toString().padLeft(3) gekommen - finde ich jetzt nicht so schön, wo man doch mit %3s so eine nette DSL hat. Besser finde ich da schon format(label), denn damit kann ich mir das Label aus dem Key der Map erzeugen (und wenn Du alles lowercase haben möchtest, dann reicht auch def label = it.key - aber Du hast ja mit der Formatierung angefangen ;-) ).

DRY ist das Ding aber jetzt: Wenn ich an #1 die Reihenfolge ändere, dann zieht #2 schön mit und nichts geht in die Brüche.

Frage mich, ob DRY und String.format() geht. Geht. Hier:
eintraege
.sort{ it.spread }
.each{ // #2
def format = it.keySet().collect{
format(it) + ':%3s'
}.join(' ')
def values = it.values()*.toString()
println String.format(format, *values)
}
Hier ist jetzt nur #2 zu sehen, der Rest blieb gleich. Dachte, dass wäre simpler, als die Variante zuvor, aber wenn ich mir das jetzt so anschaue, dann "gewinnt" mein zweiter Vorschlag. Beide sind DRY, aber die zweite Variante ist IMHO verständlicher als die erste. Ist jetzt aber nur mein Bauchgefühl.

> PS
> Glaube das liegt an Groovy, man schreibt sehr viel weniger Code und
> textet in Emails mehr als sonst ;-)

Echt? Ist mir gar nicht aufgefallen ;-) Mist, Kaffee alle, muß ins Bett!

Viele Grüße,
Bernd

====================================

Die Codesnippets gibt's hier als Nicht-DRY, DRY, und String.format-DRY.

Mittwoch, 2. Januar 2008

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Biel < 9] KW 52: 48 km (60), 2415 kcal

Der Hauptunterschied zwischen Aquajoggen, als Trainingsalternative zum Laufen zwecks Reha und Schonung des Gehapparates, und dem Laufen selbst sind die Abhängigkeiten zum Zeitaufwand und zur Lokalität. Zum Aquajoggen braucht man ein Schwimmbad, im Winter zwangsläufig ein Hallenbad. Man an die Öffnungszeiten gebunden: Arbeitszeiten der Schwimmmeister, Feiertage, Ferien, Sanierung und Reinigung der Anlage, Kursangebote und Sonderveranstaltungen sind hier maßgebend und man darf sich wunder, dass noch Zeit für den Schwimmbetrieb bleibt. Laufen kann ich, wann ich will und wo ich will. Hat man die entsprechenden Klamotten, dann gibt's auch kaum ein Wetter, dass einmal das Laufen umöglich macht. Dann die Anfahrt: Zum Aquajoggen muss ich Klamottenpacken (dabei ja nichts vergessen!), Anfahren, Umziehen, Klamottenverschließen, Duschen, Training, Dehnen, Duschen, Klamotten Aufschließen, Umziehen, Abfahren, Klamottenauspacken. Zum Laufen reduziert sich das auf Umziehen, Training, Dehnen, Duschen, Umziehen. Ich habe keine Anfahrt, meine Laufklamotten haben feste Drüberwerf-Punkte in der Wohnung (selbst im Hotel), müssen also nicht gepackt und verschlossen werden, und das Duschen mache ich auch nur einmal nach dem Laufen. Alleine die Anfahrt kostet mich in Karlsruhe ohne ÖPNV 20 Minuten, mit ÖPNV wären es 35 Minuten. In Köln, da arbeite ich gerade in einem Projekt, brauche ich von meiner Unterkunft zum Schwimbad auch noch 10 Minuten per ÖPNV. "10 Minuten, das macht den Kohl ja wohl nicht fett" mag man jetzt einwenden; das sind schon 20 Minuten reine Fahrt auf etwa 1 h Training, also 33 %! Das finde ich viel, besonders dann, wenn ich beim Laufen direkt von der Haustür mit dem Training anfangen kann.

Die arbeitnehmerfreundlichen und aquajoggingunfreundlichen Weihnachten dieses Jahr haben dann auch eine Einheit effektiv zu verhindern gewußt, und so komme ich nur auf 48 von 60 geplanten Kilometern in der letzten Trainingswoche 2007. Zum Glück durfte ich zweimal diese Woche laufen, so richtig, ohne Wasser. Das klappte gut, einmal 9 und einmal 10 km. Mehr Laufeinheiten pro Woche traue ich mir nicht zu - in eineinhalb Wochen fängt endlich die Physiotherapie an und dann kann ich mich mit meinem Physiotherapeuten beraten und eine Strategie aushecken, wie's weitergeht.

Ende Januar steht eigentlich ein 50er auf dem Plan, und ob ich den überhaupt angehen kann, weiß ich beim besten Willen nicht. Ich zweifel dran. Als Weihnachtsgeschenk kam dann aber die Anmeldung zum 50. Bieler 100-km-Lauf ins Haus geflattert - und ich freu mich immer noch drauf! Muss doch machbar sein, mich in den verbleibenden fünfeinhalb Monaten wieder fit zu bekommen.

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Biel < 9] KW 51: 60 km, 2719 kcal

Außer, dass ich mehr im Wasser trete, als ich das möchte, läuft alles nach Plan. Am Ende dieser Woche habe ich mal ein vorsichtiges Come-Back mit dem Laufen versucht, 8 km lang. Ist wie bei jeder Post-Verletzungsphase: Läuft sich wie auf rohen Eiern! Die Bewegungsabläufe sind unrund und ein entspanntes Laufen ist das nicht gerade. Aber immerhin: keine Schmerzen in der Hüfte während des Laufens und am Tag danach nur ein komisches Gefühl in der Lende.

Ich finde es immer schwer zu unterscheiden, ob - nach der akuten Verletzungsphase - eine Verletzung nur noch unterschwellig da ist (und jederzeit wieder ausbrechen kann), oder ob ich da nur zu genau "hinhorche" und mir die Schmerzen einbilde. Die Gefahr besteht, dass ich vorhandene Schmerzen ignoriere, und wenn die Verletzung dann wieder aufbricht, wird's nur um so schlimmer. Andererseits will ich aber ja auch wieder anfangen zu trainieren und nicht länger als nötig die Füße stillhalten. Bisher hat mich meine Ungeduld zu oft zu früh wieder mit dem Training anfangen lassen, daher halte ich mich lieber zurück. Nächste Woche also zweimal Laufen, nicht mehr.