Modularer Querbaukasten in PHP: Traits

Objektorientierte Entwicklung ist mittlerweile der Standard wenn es um Geschäftslogiken geht. Für verschiedene weitere Anwendungszwecke gibt es auch immer noch gute Funktionale Programmiersprachen. Jede Herangehensweise hat ihre Vor- und Nachteile.

Wie immer sind Programmierer komische Wesen und würden an einigen Stellen gerne das Beste aus beiden Welten haben, auch wenn diese sich eigentlich gegenseitig ausschließen.

Aktuell hatte ich mal wieder einen solchen Fall: Es gibt eine „fertige“ PHP-Bibliothek zum Erzeugen von PDF-Dokumenten (diese eigenen sich in der Regel besser zum Ausdrucken als HTML-Seiten) – etabliert hat sich hier FPDF bzw. dessen Fork TCPDF. TCPDF ist die aktuellere und modernere Fassung, sie unterstützt unter anderem die Verwendung von UTF-8-Zeichensätzen. Daher musste ich mich auch „mal wieder“ mit schon lange gepflegten und eigentlich abgeschlossenen PDF-Routinen beschäftigen: FPDF kann mit UTF8 nicht richtig umgehen, somit sehen die erzeugten PDFs aus wie Kraut und Rüben sobald Umlaute oder Sonderzeichen im Spiel sind.

Beim Umstellen gibt es ein paar Feinheiten, aber nichts was einen wirklich davon abhält die Umstellung halbwegs zügig durchzuführen. Die meisten Probleme erkennt man einmal und kann sie dann in den Folgedateien direkt korrigieren.

In diesem Zusammenhang habe ich mich mal wieder etwas geärgert: Viele unserer Dokumente enthalten Tabellen. Soweit so langweilig. Aus Mangel an Alternativen haben wir häufig den Code einfach von der einen eigenen Klasse in die nächste mit kopiert. Das Ergebnis ist altbekannt. Wenn man einen Fehler beseitigen will, muss man alle Kopien mit durcharbeiten. Effizient ist das nicht gerade.

Eine mögliche Option ist es eine eigene Klasse dazwischen zu setzen, die solche Funktionen realisiert. Aber was ist mit den Dokumenten wo man dann gar keine Tabelle braucht – da hat man Pech gehabt? Fazit das geht, aber richtig schön finde ich das auch nicht. Mehrfach-Vererbung kennt PHP nicht – aus gutem Grund (Diamond-Problem). Für meinen Fall hätte ich mir etwas gewünscht wie eine Art Plugin oder von mir aus auch eine Art „include“ das entsprechende Funktionen einbindet wenn sie benötigt werden. Vergleichbar mit dem was ein Präprozessort für C erreichen kann: Macro-mäßig das einfügen was gerade gebraucht wird – bei compilierten Sprachen eine sehr feine Sache, bei Skripten leider kein gangbarer Weg.

Was braucht man eigentlich genau? bzw. was wünsche ich mir? – Das waren meine Fragen. Damit man eine Tabelle einfach einbauen kann braucht man Zugriff auf einige Klassenvariablen – man könnte sich ggf. behelfen, eine Referenz an eine Tabellenklasse zu übergeben und dort den notwendigen Code zu schreiben. Aber eine Tabelle ist ja auch nur wieder eine Sammlung von einfacheren PDF-Elementen – würde also auch wieder aus der TCPPDF-Klasse erben müssen, davon den Code in die andere Klasse zu übergeben mal ganz abgesehen. Eine Art „Nachbau“ des Präprozessors wäre es wenn man hergehen könnte und an der benötigten Stelle in der Klasse einfach per include die Funktionen einbaut die man braucht. Das geht natürlich so nicht, auch weil es im Tabellencode ja durchaus sinnvoll ist, diesen strukturiert zu halten und keinen Spaghetti-Code zu erzeugen, den keiner mehr durchschaut. Auch die Nutzung von Klassenvariablen innerhalb der Tabelle wäre doch praktisch. Kurzum: ein simples Include kann das nicht leisten und sollte es auch nie.

Nun ist es ja aber bei weitem kein super exotisches Problem, mit dem wir hier konfrontiert sind: Modulbauweise mit Blackboxes die nur definierte Schnittstellen haben ist ja auch in anderen Bereichen üblich: Keiner entwickelt heute mehr für jedes Auto Standard-Komponenten vollständig neu – vielmehr werden Grundelemente mit einen neuen Aufsatz versehen oder neu miteinander kombiniert. PHP löst das Dilemma mit sogenannten Traits – ich vergleiche das gerne mit Matrix-Vererbung – um ein Gesamtpaket zu erhalten markiert man einfach die Zusatzfunktionen die das Ergebnis haben soll. Klingt kompliziert – ist es aber nicht.

Einen Trait programmiert man fast wie eine ganz normale Klasse – abgesehen, davon dass sie keinen eigenen Konstruktor enthält, gibt es alles was man sonst auch kennt: Funktionen, Zugriffsbeschränkungen (public,private,protected) und Klassenvariablen. Kurzum man kann alles was man immer wieder braucht damit sauber realisieren – in meinem Fall, habe ich alles was ich für eine Tabelle benötige im Trait verpackt. Man hat sogar Zugriff auf die Methoden und Variablen der Klasse in der man den Trait am Ende einsetzen will – hier ist die Unterstützung der Entwicklungsumgebung natürlich nicht so gut wie in einer vererbten Klasse, denn der Trait kann ja in jeder beliebigen Klasse verwendet werden – von daher etwas mehr Denkarbeit. Ich habe vieles direkt aus der bisherigen Realisierung übernehmen können, das macht es etwas leichter.

Was man noch beachten muss: Gleichnamige Funktionen in der übernehmenden Klasse „überdecken“ bzw. überschreiben die Funktionen des Traits (vergleichbar mit dem was man aus der Vererbung kennt: Es wird immer die „nächstliegende“ Funktion genommen, es sei denn man gibt den Namespace bzw. die Elternklasse mit an (parrent::) . Für mich hat es sich bewährt im Trait die Funktionen als solche entsprechend zu bennen – sie bekommen alle den Prefix „pdf_table_trait_“ – die Wahrscheinlichkeit, dass man somit ungeplant etwas überschreibt ist vergleichsweise gering. Die Programmiersprache nimmt einem eben nicht alles ab und etwas Coding-Disziplin hat noch keinem Entwickler geschadet.

Insgesamt habe ich nun mit dem Trait das was ich gesucht habe: Einen Code-Block, den ich separat warten kann – wenn ich einen Fehler in der Tabellenerzeugung beseitige, dann muss ich das nur noch an einer Stelle tun, nicht mehr in jedem Dokument. Zudem habe ich es so realisiert, dass ich den Code sogar innerhalb einer Klasse mehrfach aufrufen kann um verschiedene Tabellen zu zeichnen (das hatte ich vorher mit etwas Verrenkungen unsauber gelöst). Man sollte natürlich jetzt nicht alles und jedes zwingend in einen Trait auslagern, nur weil es geht – mit Maß und Ziel das richitige Werkzeug an der richtigen Stelle ansetzen. Traits gehören dabei eindeutig in die Kiste mit der Aufschrift „Spezialwerkzeuge“ – man braucht sie nicht all zu häufig, aber wenn man weiß dass es sie gibt und wie man sie richtig einsetzt, geht vieles sehr elegant zu lösen.

Jahresrückblick 2013

Ja es ist schon wieder ein Jahr rum – die Zeit der Weihnacht-Besinnungslosigkeit ist auch überstanden, also kommt nun die Bilanzierung der letzten 365 Tage. Wie in jedem Jahr glieder ich das nach Monaten.

Januar

Im Januar war noch nicht all zu viel los, ich habe die ersten Vorbereitungen für den Lauf in Biel begonen – fast hätte ich ja den Start ins Training mit 42km gemacht, aber es war dann doch etwas zu frisch. Eine erste Investition in meinen Haushalt habe ich getätigt und mir einen Staubsauger-Roboter zugelegt. Der hat sich mittlerweile super bewährt, die Staubmenge ist deutlich zurück gegangen.

Februar

Noch immer hatte der Winter das Land fest im Griff, aber das Training ging wie geplant weiter – mit oder ohne Schnee, die Berge des Odenwaldes waren niemals sicher vor den Biel-Läufern am Wochenende. Zudem bin ich ein ein Projekt eingestiegen, dass mich länger als geplant begleiten würde (es hat vor kurzem seinen Abschluss gefunden) der Neubau der DJK Feudenheim sollte mit Netzwerk und Telefon ausgerüstet werden. In der Wohnung habe ich endlich ein noch fehlendes Stück Einrichtung gebaut: Nach zwei Jahren endlich den Wunschspiegel mit Beleuchtung im Bad.

März

Im März war ich ziemlich zugedeckelt mit Arbeit, die bald zum Frust ausartete und in dem Moment auch keinerlei Spaß mehr machte, immerhin war das Wetter etwas besser und mit ausreichend Sport als Ausgleich war auch das zu ertragen. Sport der immer wichtiger wurde, denn Peter hatte den Count-Down auf Biel in jeder Mail eingebunden. Eine gewisse Vorfreude war zu spüren.

April

Ein wichtiges Event im April war sicherlich mein Geburtstag, ich habe ein neues Lebensjahrzehnt begonnen – ein komisches Gefühl. An die neue Klassierung bei Laufveranstaltungen muss man sich auch mal gewöhnen. Die Feier mit vielen Läufern war richtig gut, auhc wenn das Wetter kurzfristig einen Strich durch das geplante Grillen im Freien gemacht hat. Davon abgesehen war der Stresslevel auf Arbeit immer noch recht hoch, und der Frustpegel auch.

Mai

Zeit für einen ersten Testlauf in Vorbereitung auf Biel, allerdings nur ein Halbmarathon, dafür ein richtig schöner: Der Weltkulturerbelauf in Bamberg, zusammen mit Helgas Lauffreunden – immer ein Erlebnis. Einen Marathon der anderen Sorte habe ich mit dem Turnfest in Mannheim mitgemacht – eine Woche lang Ausnahmezustand mit rund 600 Gästen in der Feudenheim-Schule. Aber es hat alles geklappt und auch wenn die Veranstaltung bei den Gästen teilweise etwas „zersplittert“ ankam – die Übernachtung und die Betreuung in der Schule wurde von allen gelobt,

Juni

Der Juni kannte in den Medien und auch für mich nur ein großes Thema: Jahrhunderflut an der Elbe. Damit fiel leider auch sehr sehr kurzfristig mein Lauf über 100km in Biel ind Wasser (im wahrsten Sinne des Wortes). Dafür gab es reichlich Einsatzerfahrung mit unserer Großpumpe und derm ersten richtig großen Hochwasser für mich. Die Menschen in Dresden und  Umgebung waren sehr dankbar, und die Versorgung mit Speisen und Getränken war scon fast luxusriös. Man hatte zeitweise fast vergessen können, dass man in einen Katastrophengebiet befindet.

Juli

Damit das Lauftraining nicht ganz für umme war, musste ich einen Ersatz finden. Den habe ich mit dem Wallensteinlauf in Altdorf als Halbmarathon und dem Römerman als Triathlon in Ladenburg gefunden, wenn auch beim Triathlon nur die Fitness-Variante. Zum Abschluss des Triathlons gab es dann abends noch ein Wiedersehen mit all den Abiturienten, denn es ist zehn Jahre her, dass ich mit der Schule abgeschlossen habe – wie die Zeit vergeht.
Und noch etwas hat sich im Juli ereignet – ich bin nicht mehr Single – mittlerweile sind 5,5 Monate seit dem ersten Treffen vergangen. Daher geht es jetzt auch Schlag auf Schlag weiter.

August

Schon lange geplant (seit Januar) war der Besuch bei den Tauchfreunden aus Glasgow bzw. die Teilnahme an deren verlängertem Wochenende. Mit Raimund bin ich wieder nach Schottland gefahren und habe dort viele schöne Stunden im Wasser in St. Abbs und an den Farne-Islands verbracht. Die Seelöwen sind echt ein Highlight – tierisch verspielt. Das kommt für 2014 auch aufs Programm.
Wichtigstes sportliches Ereignis im August war der Firmen-Ultra-Triathlon – jeder Teilnehmer eines Teams legt dabei einen zehntel Ironman zurück. Dieses Jahr wurde die Veranstaltung für alle Beteiligten zur Geduldsprobe – es hat den ganzen Tag gegossen wie aus Kübeln. Dennoch hat mich meine Freundin begleitet und fleißig Bilder gemacht. Das hat mich überrascht, aber im Rückblick ist das echt super wenn jemand an der Strecke steht den man kennt und der einen nach Kräften unterstützt.

September

Weiter gehts mit Urlaub – diesmal in Schweden, da war ich noch nicht. Zusammen mit meiner Freundin habe ich ein verlängertes Wochenende in Stockholm verbracht. Eine wahnsinnig tolle Stadt bei herrlichem Wetter. Highlights waren unter anderem die Teilnahme an der ersten Evakuierung des ABBA-Museums wegen eines Feueralarms. Abends gab es dann richtig kräftig Musik auf dem Festival „where’s the party?“ – inklusive dem lustigen Spiel „Wie viele Schweden passen in einen Bus?“ – denn die Verkehrsanbindung war absolut überfordert. Es dauerte irgendwie fast 15 Minuten bis der Bus die Türen überhaupt zubekommen hat … wir sind dann doch gelaufen, das war schneller. Hinterher haben wir erfahren, dass es eine Transport-Garantie in Stockholm gibt, wenn man mehr als 20 Minuten Verspätung hat, kann man sich einfach ein Taxi nehmen und bekommt es erstattet, wenn man den Beleg einreicht. Gut zu wissen.
Zudem haben wir ein richtig gutes Restaurant ausgegraben: Svartegrens – sehr sehr lecker und absolut zu empfehlen.

Oktober

Der 3. Oktober ist Tag der deutschen Einheit – für mich ein Tag in Nürnberg beim Stadtlauf. Zudem ist es der Auftakt für die Lebkuchen-Saison. Selbstverständlich habe ich viele bekannte Gesichter wieder getroffen, Helga und Heinrich waren an der Strecke mit dabei, Marion hat mich begleitet und wieder viele Fotos gemacht (endlich habe ich mal welche vom Stadtlauf). Ebenso durfte ein kurzes Treffen mit Erwin Bittel vom Team Bittel natürlich nicht fehlen. Die Laufzeit war ganz ordentlich, und auf das Essen in der L’Osteria kann man sich immer freuen, gerade als ausgehungerter Läufer.
Mit Marion feiere ich 3 Monate Partnerschaft, echt klasse sich wie sich das entwickelt hat, wir verstehen uns echt klasse.
Und auch bei der DJK heißt es wieder mit anpacken: der Herbstlauf ist eine der größten Veranstaltungen auf dem Gelände, dieses Jahr zum zweiten Mal durch die Triathlon-Abteilung durchgeführt. Mit den Erfahrungen aus dem vergangenen Jahr lief es diesmal richtig flüssig.

November

Schon wieder ein Wochenende in Nürnberg, und schon wieder zum Sport – diesmal nicht nur ein Halbmarathon im Freien sondern ein ganzer Marathon bei der LGA – Indoor versteht sich.
Schon Ende November bin ich mit den Geschenken für den Dezember eingedeckt – dann kann die Vorweihnachtszeit ja kommen – bei mir ja auch immer gepflastert mit einigen Geburtstagen – kurz nach Weihnachten ist dann auch Marion noch an der Reihe. Mich selbst beschenke ich dann auch noch und erfülle mir einen lang gehegten Wunsch – seit Mitte November habe ich nun eine Auto-Erweiterung in Form eines Tadem-Achs-Anhängers, auch wenn die Zulassung etwas mühsamer war als geplant.

Dezember

Wie schon angedeutet, ist der Dezember mit jeder Menge Geburtstagen und Weihnachtsfeiern gepflastert. Aber auch um sich Gedanken zu machen um das kommende Jahr 2014 – sowohl was die Wettkämpfe betrifft aber auch den Urlaub. Der ist fürs kommende Jahr schon geplant, auch die meisten Läufe sind schon angemeldet – es geht mal wieder quer durch die Republik soviel sei schon mal verraten.
Zum ersten Mal habe ich Weihnachten einen Tannenbaum bei mir in die Wohnung gestellt und nicht alleine oder bei meinen Eltern gefeiert. Etwas mehr als 5 Monate sind vergangen und es fühlt sich einfach nur gut an. Ich möchte nicht mehr Single sein.

Ausblick für 2014

So wie es im Moment aussieht steht für 2014 ein Umzug in eine gemeinsame Wohnung an. Mal sehen was das Jahr sonst noch bringt. Infos gibts wie immer hier im Blog.

Vom Himmel hoch da komm ich her – Skydrive-Schwachsinn zur Weihnachtszeit

Vor einigen Tagen hatte ich mal wieder ein absolutes Schlüsselerlebnis, das mich in meiner Skepsis gegenüber Windows 8 und Microsoft-Produktem im Allgemeinen deutlich bestärkt hat. Sicher sind die Produkte von Microsoft in vielen Fällen ein gewisser Standard, aber es gibt immer wieder Ecken und Kanten an denen ich mich einfach nur ärgere wie etwas gelöst ist.

Windows Vista ist ebenso eine Ladenhüter wie es schon seinerseits Windows ME war – viele Feautres gut gemeint und gewollt, aber die Realisierung war nicht der Knaller. Ähnliches sehe ich gerade bei Windows 8 – auch hier hakt es an vielen Stellen und das Betriebsystem hat sich meilenweit von dem entfernt was es eigentlich machen sollte – Ressourcen des Rechners bündeln und allen Anwendungen zur Verfügung stellen, auf Basis einer einheitlichen Schnittstelle. Das Fehlen des Startmenüs mit der Suchfunktion ist eines, aber eine komplette Touch-Bedienung für einen Desktop-PC oder Laptop an dem Maus und Tastatur angeschlossen sind – das kann in meinen Augen nicht hinhauen. Ironie dabei ist der Werbesong „Everything at once“ von „Lenka“ – dort werden verschiedenste nicht miteinander vereinbare Gegensätze postuliert, welche die Sängerin alle doch erfüllen möchte. Wer das mal probiert hat, weiß: Manche Dinge schließen sich einfach gegenseitig aus … Ich bin gespannt wann sich diese Erkenntnis auch in Firmen herum spricht (und das betrifft leider nicht nur Microsoft, auch andere Firmen verwenden „Standard-Software“ für Zwecke, für die sie nie gedacht war und wundern sich dann noch über „komische“ Ergebnisse).

Was war das konkrete Problem diesmal? Ein Kunde wollte wie bisher unter Windows verschiedene Bild-Dateien per e-mail verschicken. Soweit nichts wirklich Spannendes oder Nerviges. Da es bequem und auch legitim ist, markierte er die Bilder seiner Wahl und wählte im Kontext-Menü: Senden an … => e-mail-Empfänger. Nun ging auch brav das eingerichtete (und mitgelieferte) Windows Live Mail auf (oder wie ich es nach der Erfahrung wohl eher nenne: „Windows Live Quäl“ – es quält dich ggf. ein Leben lang…). Interessanterweise wollte das System jedesmal einen Hotmail-Account einrichten, obwohl bereits eine e-mail-Adresse konfiguriert war. Klickte man den Dialog einfach weg und schaute in die e-mail so wurde vom Mailprogramm angestrebt, die Bilder nur als Thumbnails in die e-mail einzubetten und die Originale zu Skydrive für eine bestimmte Zeit hochzuladen und per Link oder Bildergalerie verfügbar zu machen. Natürlich ist das nicht das was der Anwender eigentlich wollte, nämlich die Bilder einfach an die e-mail anhängen.

Was ist der Hintergrund? Generell bietet e-mail die Möglichkeit Anhänge mit zu versenden, so wie man es auch von klassicher Snail-Mail her kennt. Einfach etwas mehr in den Umschlag packen und im Anschreiben darauf verweisen. Mit HTML-Mails sind auch direkte Anzeige-Referenzen möglich, aber im Prinzip ist es jedesmal ein elektronisches Kuvert mit dem Inhalt, mal nur reiner Text, mal eben mit Anlagen. Problematisch ist die Mailbox-Größe der Empfänger bzw. Restriktionen der e-mail-Server aus Performance und Sicherheitsgründen: Oftmals sind hier Limits für eine Nachricht vorhanden und oft sind die recht knapp bemessen (es sei denn man ist sein eigener Mail-Admin und stellt sich die Einschränkungen entsprechend ab oder zumindest mal hoch ein). Daher ist es bei größeren Dateien oder Datenmenge oftmals ratsam auf Alternativen auszuweichen, also zum Beispiel den Upload der Datei auf einen Webserver und dem Empfänger nur einen Link (genauer einen URL) zuzuschicken damit er die Datei bei Bedarf herunter laden kann. In Etwa kann man es mit dem Angebot eines Webshops vergleichen bei dem man online bestellt und dann die Info bekommt: „Ihre Ware können Sie in Warenhaus XYZ in ihrer Nähe abholen, sie ist dort für sie bis zum soundsovielten reserviert).

Daher ist das Ansinnen von Live-Mail ja ganz gut gemeint, bewahrt es doch den Nutzer vor etwaigen e-mail-Rückläufern wenn die e-mail nicht zugestellt werden kann. Aber will ich wirklich jedes Bild in die Cloud eines amerikanischen Konzerns auslagern? Gerade im Blick auf die NSA-Affaire halte ich den Vorschlag für nicht zielführend und gelinde gesagt für Irreführung des Benutzers. Es wird eine Notwendigkeit vorgegaukelt die es schlichtweg nicht gibt.

Ich selbst verwende schon seit sehr langer Zeit alternative e-mail-Programme wie Pegasus-Mail (früher) und Mozilla Thunderbird (aktuell). Thunderbird macht hierbei vor wie man es besser machen kann: Hängt man Attachments einer bestimmten Größe an, gibt es einen Hinweis auf einen Cloudservice, der darauf hinweist, dass es problematisch sein könnte eine derat „dicke“ e-mail zu versenden, und ob man diesen nutzen möchte. Man hat also definitiv die Wahl was man machen möchte, etwas was mit Live Mail leider nicht geht – zumindest habe ich auf die Schnelle keine passende Option gefunden und diverse Foren-Einträge im Netz schildern ähnliche Erfahrungen. Von daher kann ich leider als ITler keinem Menschen mehr die Benutzung von Live-Mail auch nur nahelegen als Alternative, sondern kann nur auf externe Programme verweisen die dem alten Unix/Linux-Mantra der Software treu geblieben sind „do one thing and do it right“ – auf gut deutsch: Mache eine Sache, die aber dafür richtig und nicht alles nur so halb und dafür auf einmal (everything at once). In der Linux-Welt gibt es viele spezialisierte Programme für genau einen Zweck, weitere Funktionen, die nichts mit der eigentlichen Aufgabe zu tun haben, sucht man aber (zu Recht) vergeblich. Sicherlich ist das nicht immer und überall bis ins Letzte sinnvoll, aber es hat sich als gute Richtlinie für die Modularisierung von Programmen erwiesen: Für jeden Zweck das passende Werkzeug. Man versucht doch auch nicht, Schrauben mit einem Hammer „einzuschrauben“…

Einen Würg-Around gibt es dann dennoch für Windows Live Mail und das Kontext-Menü:

  1. Im Ordner, in dem sich die Bilddateien befinden eine leere Textdatei erzeugen (z.B. bla.txt), diese muss noch nicht einmal Inhalt haben
  2. Zusätzlich zu den Bildern die gerade erzeugte Dummy-Datei anwählen
  3. Kontextmenü => Senden an e-mail-Empfänger
  4. In Windows Live-Mail wird nun eine e-mail mit regulären Attachments erzeugt (es geht also …)
  5. Aus der Attachmentliste und der Auflistung im Text die leere Textdatei wieder rauswerfen
  6. Voila!

Das so ein Murks notwendig ist, zeugt davon, dass man scheints noch nicht gelernt hat, auf einen Anwendungsfall wirklich passende Lösungen zu liefern – das Gängeln des Benutzers hat ja aber auch eine jahrzehnte lange Tradition bei Microsoft. Warum das wissen wohl nur die Marketing-Menschen aus Redmond.

In diesem Sinne erst mal frohe Weihnachten und viel Spaß beim Verschicken von e-mails mit handelsüblichen Attachments.

Umstellung von Webprojekten auf UTF-8

Im letzten Artikel habe ich die Grundlagen zusammengefasst, mit denen ich mich beschäftigen musste um mein aktuelles Projekt voran zu bringen. Das Problem war ursprünglich die nicht einheitliche Handhabung diverser Zeichenketten, was bei Benutzer-Inhalten und Sonderzeichen zum berühmten Mojibake führen konnte (aber eben nicht zwingend muss). Nun denn, gehen wir ans Eingemacht und stellen das Projekt auf UTF-8 um, damit habe ich hoffentlich dann einen wichtigen Schritt in Richtung Zukunftsfähigkeit getan. Außerdem bietet sich UTF-8 wegen seiner Kompatibilität zu ASCII an – Programmcode wird dadurch nicht angetastet und PHP ist dankenswerter Weise sehr einfach gestrickt war Text-Ausgaben mittels „echo“ oder ähnlichen Befehlen betrifft: Was hintendran als Argument kommt wird genauso wiedergegeben wie es reingekommen ist – Byte für Byte. Damit hat man wenig Probleme, auch wenn eine Seite eben mal doch Sonderzeichen enthält (wie es im Deutschen leider häufiger der Fall ist). Dieser Post kann als grundlegendes Howto verwendet werden, es gilt jedoch immer: „Keine Garantie“ und „your milage may vary“

Erster Schritt – Anpassen der Entwicklungsumgebung

Damit man in Zukunft mit der Entwicklungsumgebung weiterhin einfach arbeiten kann, ohne sich jedesmal Gedanken über irgendwelche Sonderzeichen machen zu müssen – wenn man mal eben drei Zeilen Kommentar schreibt, sollte man sich auf dessen Inhalt konzentrieren können. Je nachdem was man verwendet gibt es da verschiedene Stellen die eingestellt werden müssen. Ich verwende Eclipse, dort kann man das Encoding einmal generell (unter Window -> Preferences -> General -> Workspace:  Text-File-Encoding) einstellen.  Zudem sollte man für die verschiedenen Einträge unter „Content Types“ sicherstellen, dass per default dort auch UTF-8 genommen wird. Unter Linux habe ich festgestellt, dass es meistens schon vorab eingestellt ist, denn die meisten aktuellen Linux-Distris sind vom System aus schon löblicherweise auf UTF-8 als Standard umgestellt. Ein Blick in die Äste Web -> CSS Files und Web -> HTML-Files schadet auch nicht. Im Ast XML sollte es per Default auch schon passen, aber Nachgucken schadet auch hier nicht.

Nun muss man noch die Projekt-Einstellungen anpassen (wenn man bestehende Projekte hat) – wenn man den Fehler gemacht hatte und ein neues Projekt angefangen hat ohne sich vorher über die Verwendung von Zeichensätzen Gedanken zu machen (sowas sollte auf jeder Checkliste für Projekte stehen, aber wer achtet da schon drauf wenn es mal eben um eine kleines Projekt geht …. das dann später wächst …). Wenn man die Umstellung gemacht hat, kann man einmal Buchstabensuppe sehen, indem man eine Datei öffnet die Sonderzeichen enthält … die sehen nun etwas komisch aus. Alle händisch ersetzen ist nur was für Hartgesottene oder sehr sehr kleine Projekte.

Zweiter Schritt – Datein umwandeln / umcodieren

Es gibt ein praktisches Tool zum Umwandeln <code>iconv</code> das Werkzeug gibt es auch für Windows, aber so richtig mächtig und scharf wird das erst in Kombination mit ein wenig Scripting (bei mir in Bash)


#!/bin/bash

for file in $(find . -type f -name ‚*.php‘)
do
iconv -f iso88591 -t utf8 -o $file.utf8 $file
if [ $? -eq 0 ]
then
#echo „$file erfolgreich“
mv $file.utf8 $file
else
echo $file geht nicht $?
fi
done

Was machen wir und warum mache ich da so? Ersteinmal suche ich alle betroffenen Dateien heraus, da ich mit PHP arbeite sind das alle Dateien die auf <code>.php</code> enden. Jede dieser Dateien lasse ich durch Iconv laufen und als neue Datei abspeichern. Man sollte nicht auf die Idee kommen <code>iconv -f iso88591 -t utf8 -o $file $file</code> zu verwenden. Das klappt nur bei kleinen Dateien. Wenn das nicht der Fall ist, hat man evtl. unvollständige Dateien und wundert sich was passiert ist, denn <code>iconv</code> gibt in diesem Fall keine Fehlerme. Mit dem Speichern in eine separate Datei bleibt das Original erst einmal unberührt und man kann sich ggf. auf die Fehlersuche machen, denn: Wenn beim Konvertieren selbst etwas schiefgeht gibt es einen exit-Code > 0. Wo es geklappt hat, überschreibe ich das Original. Ansonsten ein kleines <code>echo</code> das mir die fehlerhaften Dateien angibt damit man dort nachsuchen kann, meistens hat man schon irgendwo mal etwas als UTF8 gespeichert oder die Zeichensätze verbeult, das findet sich aber meist recht schnell. Bei mir waren es von 500 Dateien zwei Stück die etwas Handarbeit erforderten. Das gleiche Schema kann man auf alle reinen Textdateien anwenden, wenn man es braucht, z.B. reine HTML-Dateien (Endung htm oder html) oder auch JavaScript-Code. Wichtig ist noch dass man seinem Webserver ggf. beibringt, per default auch in UTF-8 auszuliefern. Dazu sucht man in den Konfigurationsdateien die folgende Zeile:

AddDefaultCharset UTF-8

Nach einem Neustart des Daemons wird das dann als default verwendet. Warum aber nur im default-Fall? Klar es gibt noch ne Möglichkeit das einzustellen und zwar in den ganzen HTML-Headern. Dort gibt es das META-Tag mit dem man Vorgaben machen kann auch für den Fall, dass man auf dem Server keinen Zugriff auf die Einstellungen des Apache oder wie auch immer sonst gearteten Webserver-Prozess hat.

&lt;meta equiv="content-type" content="text/html; charset=utf8"&gt;

Damit sollte jeder aktuelle und die allermeisten der älteren Browser in der Lage sein zu erkennen: Jetzt kommt was in UTF8.

Wenn man nur eine statische Website hat, ist man jetzt schon fertig – nur wer hat das schon heute noch?

Datenbankumstellung (MariaDB/MySQL)

Die Website an sich sollte nach der Umstellung weiterhin funktionieren, denn der eingebettete PHP-Code ist besteht nur aus Zeichen des ASCII-Repertoires und ist somit nicht verändert. Über das was zwischen Klammern steht oder einfach „unverdaut“ ausgegeben wird, macht PHP sich praktischerweise keine Gedanken sondern gibt es einfach aus, egal wie viel Bytes das sind und ob das nun ein besonderes Zeichen ist oder nicht.

Unlustig sind die Dinge die jetzt noch dynamisch aus der Datenbank nachgeladen werden. Wenn man es bisher (wie häufig bei Standardinstallationen) versäumt hatte auf UTF8 umzustellen, dann muss das jetzt auch noch erfolgen. Ich halte nichts davon die Daten bei jeder Ausgabe in UTF8-Strings zu konvertieren – das ist viel zu viel Aufwand wenn das Projekt eine gewisse Größe erreicht hat. Im übrigen haben viele Leute noch per default den Zeichensatz auf „latin1-swedish“ stehen, ein Hinweis woher MySQL denn ursprünglich mal kam. Im 0815-Tagesgeschäft fällt das aber in Europa meist niemandem auf.

Praktischerweise gibt es die Funktion
ALTER TABLE xyz CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

Damit kann man jeweils eine ganze Tabelle umstellen und eine Collation vorgeben, wir erinnern uns: Collations regeln die Sortierreihenfolge je nach dem wie es gehandhabt werden soll.

Das klingt nicht schlecht und klappt im Allgemeinen auch ganz hervorragend, wenn da nicht einige Fallstricke wären.

Der erste ist ja noch gut gemeint seitens der Engine-Designer: Möglicherweise zu kleine Felder werden in das nächstgrößere Format überführt, wenn der Ausgangszeichensatz einer mit nur einem Byte pro Character ist, der Zielzeichensatz aber mehrere hat oder zumindest haben kann. So werden Textfelder mit bis zu 256 Zeichen zu Mediumtext umgewandelt. Das ist von der Auswirkung her eigentlich zu verschmerzen, aber in meinem Fall habe ich das hinteher wieder manuell korrigiert. richtig problematisch wird das wenn man über die entsprechenden Spalten Indizes angelegt hat, denn Textspalten lassen sich nicht indizieren.

Womit wir beim nächsten Fallstrick wären: An einigen Stellen funktioniert das mit der Umstellung nicht wie geplant, Ursache sind die Foreign-Keys. Ich habe an einigen Stellen „sprechende“ Schlüssel anstelle von numerischen verwendet. Gerade dann wenn man in den referenzierten Tabellen wirklich nur Sateliten-Informationen stehen, wie etwa ein Icon und eine ausführliche textuelle Beschreibung zu einem bestimmten Zustand. Einige werden jetzt die Hände über dem Kopf zusammen schlagen, aber ich habe bisher keine negativen Auswirkungen auf die Performance feststellen können, eher positive Effekte bei der Fehlersuche. Wenn man schon anhand des Eintrags in der Tabelle selbst weiß was Sache ist, kann man sich einen zusätzlichen Join sparen. Das hat ja auch seine Vorteile.

Was also tun? Im Netz findet man praktische Anweisungen, die gesamte DB einmal per  mysqldump in eine Textdatei zu konvertieren, dort dann mit iconv das Gleiche zu veranstalten wie mit den Code-Files, danach noch die Tabellen-Definitionen automatisiert anpassen und den Dump wieder in die Datenbank kippen. Das funktioniert, ist aber bei größeren Datenmengen unhandlich.

Stattdessen habe ich mir die Information-Schema-Tabellen zu Nutze gemacht: dort stehen die Meta-Informationen zu den Tabellen in Tabellen, die man wie gewohnt mit SQL-Befehlen lesen kann – schreiben leider nicht, aber immerhin etwas. Dort sucht man sich nun die betroffenen Spalten und Tabellen heraus (Varchars und Texte), zudem schaut man auf die Foreign-Keys und merkt sich diese. Dann schmeißt man die Foreign Keys weg, führt die Veränderungen an den Tabellen durch (das geht ja dann). Wenn das durchgelaufen ist, kann man noch die vergrößerten Spalten wieder auf die Original-Größe zurück setzen (also Mediumtext => Text usw). Zu guter Letzt schaltet man die Foreign-Keys die man sich gemerkt hat wieder scharf. Fertig ist die Laube. Ganz so einfach ist es im Detail nicht, denn man muss stets vollständige Spaltendefinitionen verwenden, einfach nur den Typ ändern geht so leider nicht, auch wenn das eine praktische Sache wäre.

Jetzt hat man das gesamte Projekt umgestellt – zumindest was die Datenbasis und was die HTML-Seiten und den eingebetteten JS-Code betrifft. Das ist in aller Regel alles was man braucht.

Was noch an Problemen auftreten kann, beschreibe ich in einem weiteren Artikel. Stichwort sind hier externe Libraries und Frameworks.

Mojibake – Buchstabensuppe

Na da hatte ich mir doch eine lange währende Aufgabe ausgesucht, die ich in der aktuellen Pflegephase meines Softwareprojekts endlich einmal angehen wollte. Aktuell läuft das Produkt soweit zufriedenstellend, nur an einigen kleiner Ecken knackt und knirscht es immer mal wieder. Unter anderem das leidige Thema „Sonderzeichen und deren Darstellung“ – da nicht absolut zwingend für die Funktionsfähigkeit habe ich das längere Zeit nicht großartig beachtet.

Nun gut, was ist das eigentliche Problem und woher kommt es? Die Ursachen liegen in der Historie des PCs ver- oder besser begraben: Da Speicher und Datenverarbeitung teuer war, hat man so sparsam wie möglich gearbeitet. Man stellte dabei fest: Inklusive aller wichtigen Zeichen der englischen Sprache und allem was man als Steuerzeichen (Zeilenumbruch, Tabulator, etc.) benötigt, bekommt man in 7 Bit unter. Das ist schon mal etwas krumm, denn gängig ist bei allem was Rechner betrifft doch eigentlich etwas eine Potenz von 2. Die ersten Rechner die ich verwendet habe (mit einem Intel 8088 als Unterbau) konnten nur 8 Bit parallel verarbeiten – immer mehr als die 7. Schon wenig später gab es 16Bit als Standard und mit der großen Verbreitung des PCs in die Büros war der Standard 32 Bit erreicht. Heute findet der sich bereits größtenteils in Ablösung durch 64Bit-Systeme. Was war der Sinn des 8. Bits? Man konnte es je nach Gusto verwenden: Entweder bohrte man damit den Zeichenvorrat auf, oder man konnte es zur Fehlererkennung und Korrektur einsetzen. Insgesamt muss man sagen: Alles mit Hand und Fuß.

Nur leider waren Rechner damals noch nicht gängigerweise vernetzt und die Standard-Definitoren etwas kurzsichtig – erst einmal wurde nur an die eigene Heimat gedacht, dass es möglicherweise andere Sprachen gibt, die nicht Englisch sind und einige Zeichen mehr mitbringen – wer konnte das schon ahnen? So kam was kommen musste: Einschränkungen bei diversen Dingen wie dem Betriebssystem: Umlaute oder Sonderzeichen in Dateinamen waren einfach nicht vorgesehen oder führten zu unvorhergesehenen Ergebnissen. Für das Verfassen und Verarbeiten von Texten war das natürlich keine Option, wer in Deutschland einen Text schreiben wollte, der sollte das auch tun können. Daher erweiterte man den Zeichensatz auf das 8 Bit und schon hatte man jede Menge Möglichkeiten auch Sonderzeichen abzuspeichern. Wichtig war nur, das jeder die gleiche Zuordnung traf und nicht einer ein ü für ein ö verwendete was die binäre Darstellung betraf. Soweit so gut oder auch schlecht.

Nun gehen leider bei verschiedenen Betrachtungen immer wieder einige Dinge durcheinander, auch ich habe hier am Anfag so meine liebe Mühe gehabt alles richtig zu verorten, daher hier einmal die Kurzfassung, zu allem was notwendig ist bzw. was sich auf die Darstellung und Handhabung von Texten am Rechner auswirken kann.

Binärer-Code

Eine Abfolge von 0en und 1en die irgendetwas darstellen – was ist für den Rechner erstmal unerheblich, dafür bedarf es einer Zuordnungs oder Code-Tabelle oder eines Algorithmus, der den Binärcode in etwas umsetzt, das dem Benutzer eher vertraut ist (leider sind wir Menschen nicht sonderlich gut binär veranlagt).

Code-Tabelle/Zuordnung/Algorithmus

Je nachdem was für eine Datentyp abgebildet werden soll, gibt es verschiedene Methoden dies zu tun. Am einfachsten sind ganze, positive Zahlen. Diese lassen sich aus der Abfolge von 0en und 1en entsprechend „errechnen“ – man muss nur noch wissen wo man anfangen muss (little endian vs. big endian). Für positive und negative Ganzzahlen hat sich das Zweierkomplement bewährt, für Fixkomma und Gleitkomma gibt es entsprechende Standards. Alles ein Thema für sich, denn wir wollen ja Texte bzw. Strings beleuchten. Hier hat sich eine Übersetzungstabelle als Mittel der Wahl erwiesen – sie ordnet jeder möglichen Abfolge von 0en und 1en eine menschenlesbare Bedeutung zu. So wird z.B aus der binären Folge 0110 1101  = 0x6D = O155 = „m“. Die Zuordnung an und für sich ist reine Willkür – man hat sich mal auf gewisse Standards geeinigt bzw. diese festgelegt, damit eben auf allen Rechner ein „m“ ein „m“ ist und nicht aus der „e-mail“ durch Willkür eine „e-nail“ wird. Der Urvater aller Standards dazu heißt ASCII (America Standard Code for Information Interchange) – wie der Name schon sagt ein nationales Standardformat. Auch bekannt ist diese Tabelle als Character-Set.

Windows-Codepages und Nornumg

Für verschiedene Regionen wurden verschiedene Verwendungen des verbliebenen 8. Bits (siehe oben) standardisiert – leider teilweise recht unterschiedlich, zum Teil nur an wenigen Stellen. Ziel war es, die in der jeweiligen Region verwendeten Sprachen möglichst gut abzubilden. Leider gab es da erst sehr spät eine Einigung auf einheitliche Standards, so dass zeitweise unterschiedliche Hersteller unterschiedliche Zuordnungen trafen. Ganz genauso wie wenn man Dateien ohne Angabe des verwendeten Zeichensatzes weitergab konnte es also passieren, dass der Zielrechner die Bit-Folge unterschiedlich interpretierte, weil bestimmte Bitfolgen eben etwas unterschiedliches bedeuteten. Dankenswerterweise hat man dabei die sichtbaren Zeichen (leider nicht so bei den Steuerzeichen) aus dem Urvater ASCII gleich belassen (das hatte sich ja bewährt, und für den internationalen Textaustausch reichte dieser kleinste gemeinsame Nenner auch aus). Gängig sind in der westlichen Welt die Standards der ISO 8859 in den Varianten 1-16, unter Windows die Codepage 1250 und unter DOS die Codepage 850.

Unicode

Mit der steigenden Internationalisierung und der immer stärker zunehmenden Vernetzung von Computern ist das mit den Nachschlagetabellen so eine Sache – man muss immer wieder etwas anderes berücksichtigen: Das Betriebsystem und die Region bzw. die Regionaleinstellungen des Anwenders – nur damit Text auch so ankommt wie er einegeben wurde. An einigen Stellen hat man sich beholfen oder die Probleme durch menschliche Intuition überbrückt – durch die Redundanz in der menschlichen Sprache kann man viele Worte ja auch lesen wenn Buchstaben vertauscht wurden oder nicht lesbar sind. Jeder Mensch der Lesen lernt kann das mehr oder weniger: Wenn aus einen Königreich dann plötzlich ein K$nigreich wird, dann wird der geneigte Leser das immer noch erkennen, auch wenn so ein Text etws mühsamer zu lesen ist. Ohnehin: wenn es international wird, dann ist die Sprache der Wahl in aller Regel doch Englisch und somit problemfrei. Aber wäre es nicht toll, wenn jemand eine Lösung hätte, damit ich auch chinesische Texte richtig angezeigt bekomme? Oder auch mal einen arabischen Text im Original anschauen? Das klingt weit hergeholt, aber diese Anwendungsfälle gibt es häufiger als man denkt. Die ursprüngliche Idee mit 32Bit und somit 4 Bytes pro codiertem Zeichen zu arbeiten (UTF-32) ist zwar einfach zu realisieren, aber ein wenig „over the top“ ist das schon: Wer überträgt schon gerne 3 komplett genullte Bytes wenn die Info doch nur in einem steht? Außerdem ist der Standard nicht abwärtskompatibel, er bricht mit den alten Vorgaben von ASCII, was bei älterer Software oder inkompatibler Software Ärger machen kann. Daher gibt es verschiedene Methoden mit variabler Anzahl von Zeichen, sozusagen das Beste aus beiden Welten: UTF-16 oder UTF-8 sind hierbei die bekanntesten Möglichkeiten.

Schriftarten und Glyphen

Wir haben uns nun langsam von der Bits & Bytes-Ebene nach oben gearbeitet hin zum abstrakten Begriff eines „characters“. Es gibt aber noch eine Ebene obendran – die Schriftarten oder auch Glyphen. Das ist im Prinzip eine weitere Tabelle die festlegt wie ein abstraktes Zeichen auf dem Ausgabemedium dargestellt werden soll. Jeder der sich einmal durch den Schriftenkatalog einer gängigen Office-Sammlung gewühlt hat, weiß das ein A ein A bleibt, auch wenn es etwas unterschiedlich geformt ist. Das beste Beispiel ist noch immer die eigene Handschrift im Vergleich zu einem beliebigen, gedruckten Werk. So lange eine gewisse Basis-Form erhalten bleibt, erkennt jeder Leser darin auch weiterhin ein A. Es gibt natürlich auch wieder Spezielle Schriftarten die als Darstellungvon Buchstaben Symbole haben, die nichts mit dem eigentlichen Zeichen zu tun haben – das bekannteste dürfte die Schriftarte Wingding oder auch Webdings sein. Besonders unpraktisch fällt mir diese immer wieder in e-mails aus Outlook auf, wenn man diese als Text ließt. Dort wird der Smily 🙂 automatisch in ein J umgewandelt und mit der Schriftart Wingdings formatiert – sieht zwar im ersten Moment richtig aus, aber mancher hat sich schon gewundert wo das „J“ denn nun herkommt. Ich merke es mir immer so: Ein Glyph macht aus einer Bit-Folge mittels einer Tabelle eine ganz bestimmte Grafik. Das ist zwar etwas vereinfacht, denn Schriftarten machen manchmal noch mehr, aber um den Überblick zu behalten reicht es allemal.

Collations

Was nochwas? Haben wir nicht alles endlich abgehandelt? Leider noch nicht ganz: Es gibt nämlich noch etwas was man mit Zeichenketten gerne macht: Aufreihen und Sortieren. Kling trivial, und es gibt doch Sortieralgorithmen wie Sand am Meer. Könnte man meinen, leider ist dem nicht ganz so (und das ist mit ein Grund weshalb man Sortieralgorithmen am besten an Zahlen erklärt …), denn auch wenn es im ersten Moment verlockend sein mag zu sagen: Man sortiert einfach nach der Größe der entsprechenden Ganzzahl der Bitfolge, das bringt leider nicht das gewünschte Ergebnis, denn schon bei ASCII haben wir ja große und kleine Buchstaben, ordnet man nun nach der errechneten Wertigkeit, so würde das folgende Sortierreihenfolge ergeben A,B,C…..,X,YZ,a,b,c – für die alphabetische Auflistung eines Materialkatalogs nicht das gewünschte Ergebnis – auch im Telefonbuch sucht man die Leute mit „von“ im Vornamen ja nicht unter „v“ sondern unter „V“ und dort irgendwo nach „Voldemort“…. und nun wirds ganz interessant: Wo ordne ich denn die Sonderzeichen wie Ä,Ö,Ü ein … sind das separate Zeichen am Ende? Oder soll ich sie behandeln wie „Ae“,“Oe“ und „Ue“? Das ganze nun noch auf die internationale Ebene gehoben und es wird ganz spannend: Je nach Land gibt es gleiche Zeichen, aber die werden unterschiedlich einsortiert, aber der Rechner soll es dennoch richtig machen. Das kann nur bedingt funktionieren, alles weitere regelt man über die Collation, die kann man zur Not auch bei der Sortierung mit angeben, und dem Sortierprogramm somit die Regeln vorgeben.

So jetzt habe ich einmal die Grundlagen zusammengefasst, die Auswirkungen und Mittel die man braucht um das alles umzusetzen behandle ich in einem separaten Artikel.

 

 

Laufbericht LGA-Indoormarathon

Die Laufsaison neigt sich dem Ende, draußen ist es kalt, nass und bis auf wenige Trainingstermine ist es einfach nur noch ungemütlich draußen unterwegs zu sein. An Wettkampf denkt da kaum noch ein Läufer. Aber es gibt durchaus Alternativen: Eine davon ist der LGA-Indoormarathon mit garantiert gutem Wetter. Wie der Name schon andeutet, findet das ganze Indoor statt. Aber einfach in einer Sporthalle laufen wäre ja öde und langweilig. Dem begegnet der LGA-Indoor-Marathon mit einer ausgewöhnlichen Location: Gelaufen wird in den Büro-Gebäuden der Landesgewerbeanstalt. Zu laufen sind 55 Runden, verteilt zwei Stockwerke, somit sind jede Runde zwei Treppenhäuser zu bewältigen: Einmal runter und natürlich auch wieder hoch.

Anreise nach Nürnberg ist ja für mich als ehemaliger Einwohner (habe dort zwei Praxissemester verbracht und dabei mit der Lauferei angefangen) kein Problem. Auch den Weg zur LGA finde ich mittlerweile ohne Probleme. So kann ich bereits am Samstag nachmittag meine Startunterlagen abholen. Im Gegensatz zum letzten Jahr habe ich mir diesmal tatkräftige Unsterstützung in Form meiner Freundin Marion mitgenommen. Sie wird den Lauf mit Fotos dokumentieren und mich seelisch „über die Runden“ bringen und anfeuern.

Den Abend vor dem Lauf geht es in die Alstadtbrauerei zum Carbo-Loading. Diese Brauerei hat mir mal jemand bei meinen Praxissemestern genannt, und sie ist immer noch ein echt heißer Tipp, wenn man gut essen will und vor allem gutes Bier genießen. Mindestens 4 Sorten gibt es zur Auswahl und alle sind super lecker und gut isotonisch, also genau das richtige für vor einem Marathon. Da kann ich auch verschmerzen, dass es keine Pasta im klassischen Sinne gibt.

Nach dem Frühstück im Hostel in der Nürnberger-City (mit Blick auf die Laufstrecke des Stadtlaufs) geht es zum Start. Alles wie immer bestens organisiert. Marion nimmt ihre Foto-Position ein, und ich beginne mit dem Warmlaufen, auch um die optomael Einstellung für die Kamera zu finden. Trotz scheinbar heller Beleuchtung ist es verdammt dunkel um Bilder zu machen, vor allem wenn die Läufer sich auch noch so schnell bewegen (was nunmal in der Natur des Läufers liegt).

Ich treffe Helga und Heinrich, beide sind dieses Jahr nicht dabei. Ich bin somit der einzige Läufer von Helgas Lauffreunden, der in diesem Jahr teilnimmt. Natürlich treffe ich auch Erwin aka Lionheart Bittel. Wir unterhalten uns auf dem Weg zum Start, natürlich gab es auch wieder die oblkigatorische Einweisung: rechts Laufen, links überholen und in den Treppenhäusern ist Überholverbot.

IMG_8640Ich habe mir vor dem Start noch ausgerechnet, das ich etwa 4:15 Minuten pro Runde (also 767 Meter) laufen muss um auf eine Zielzeit von 3:50h zu erreichen. Aber ich werde mich aber nicht verrückt machen lassen und laufe mit dem Start der Masse los. Recht bald finde ich meinen Rhythmus, meine Pulsuhr sagt mir: Alles ok. Aber irgendwie habe ich latent Durst, und das bereits auf den ersten Runden. Aus meiner Erfahrung weiß ich: Einfach auf den Körper hören, und so erbame ich mich bei der dritten Runde und „entjungfere“ die Versorgungsstation mit einem Becher Wasser. Auf der Runde drauf gibt es dann noch eine Runde ISO hinterher.

In den ersten Runden sortiert sich das Feld sich noch etwas, es streckt sich vor allem. Das ist auch gut so, denn so gibt es keine Staus mehr vor den Treppenhäusern oder zumindest nur noch sehr selten. Es läuft alles einfach, selbst die Treppen fallen mir (noch) recht leicht.

So vergehen die ersten zehn Runden, schneller als ich mir das vorgestellt habe. Natürlich liegt das auch an der Motivation, Marion macht entweder Fotos (auf denen gebe ich mir Mühe nicht übermäßig abgekämpft zu wirken. Nach der Umrundung des Aufzugs an der Katine vorbei stehen Helga und Heinrich und feuern kräftig an.

Ehe ich mich versehen habe, bin ich 18 Runden gelaufen, Marion gratuliert mit einer Notiz auf ihrer Tafel: „Endlich volljährig“. Kurze Zeit später bin ich bereits eine Stunde unterwegs – also knapp ein Viertel der Strecke. Bisher hatr mich Erwin nur wenige Male überrundet. Also ist er entweder dieses Jahr deutlich langsamer oder ich bin verdammt schnell. Ich habe es mir verkniffen Rundenzeiten selbst zu nehmen mit der Pulsuhr. Stattdessen orientiere ich mich an der großen Anzeige – so ganz falsch kann ich aber nicht liegen was die Geschwindigkeit betrifft. Grob überschlagen bin ich bei irgendwas um die 4-5 Minuten, das passt ganz gut mit dem Plan zusammen.

Runde für Runde nähere ich mich der Halbzeit bei 28 Runden. Ich versuche zwischenzeitlich mich nicht aufs zählen zu konzentrieren, aber gelegentlich erhasche ich dann doch einen Blick auf die Rundenanzeige. 30 Runden habe ich noch vor mir, die Halbzeit ist also zum Greifen nah. Ich greife zur Energieversorgung: Banane in handlichen Stücken – mit zunehmender Strecke gelingt es mir nicht mehr so recht einen einzelnen Happen zu greifen, irgendwie sind es immer gleich zwei die ich in der Hand habe. Auch sonst merke ich langsam den typischen Marathon-Effekt bzw. allgmein Ausdauer und Langzeitanstrengung: Man bekommt eine Art Tunnelblick – durch die Flure wird der Eindruck noch weiter verstärkt. Die Halbzeit fliegt dann irgendwie an mir vorbei, Marion hält mir die Tafel mit der frohen Botschaft hoch. Nun gut, ich bin ja auch schon fast zwei Stunden unterwegs – mein Gefühl beim Blick auf die Uhr sagt mir: „Sollte machbar sein, zumindest die Zeit vom letzten Jahr wieder einzustellen“. Der Blick auf die Pulsuhr sagt mir auch: Soweit alles in Ordnung, auch wenn der Puls bei der Veranstaltung leider nur eine geringe Aussagekraft hat: Ich kenne mein Diagramm ja recht gut, beim LGA sieht das immer aus wie mit Haiffischflossen – jedesmal am Treppenhaus steigt der Puls um dann langsam wieder abzuflachen, wenn die Belastung nachlässt.IMG_8761

IMG_8976Schon wieder sind ettliche Runden vergangen, zwischenzeitlich ist die Marke von zwei Stunden überschritten, also auch zeitlich für mich Halbzeit. Ich gewöhne mir wieder einen gewissen Turnus an: Alle 4 Runden etwas trinken, alle 6 Runden etwa etwas Engergie. Als es noch 24 Runden sind, muss ich spontan an die ganzen vorweihnachtlichen Dinge aus Nürnberg denken: vor allem an einen Adventskalender. Der für Läufer beim LGA ist allerdings etwas kurios: Hinter jedem der 24 Türen steckt ein Treppenhaus … und immer das gleiche … ;-). Spätestens ab der Runde ist es mit dem „einfach laufen lassen“ vorbei – ich beginne (mal wieder viel zu früh) die Runden zu zählen und mich zu motivieren. Marion zeigt mir das auch an und betätigt sich bei 20 Runden als Nummern-Girl: „Noch 20 Runden“ … Ich mahne mich dazu mich keinenfalls gehen zu lassen und konstant weiter zu laufen, auch wenn es gerade schwerfällt.

Ab nun finden sich auch die Läufer der Down-Syndrom-Staffel auf der Strecke – hier heißt es zusätzlich Rücksicht nehmen und nach Kräften anfeuern und motivieren, eine tolle Leistung die hier sowohl die Teilnehmer als auch deren Begleiter hier zeigen. Auch ich motiviere mit, soweit ich die Puste dazu habe, denn auf einigen Strecken ist es doch etwas stickig geworden. Vor allem das Wechselbad der Temperaturen im Foyer macht mir etwas zu schaffen – erst wird es feucht warm auf dem Weg zum Wendepunkt um den Aufzugsschacht und an der Kantine vorbei, kurz darauf pfeift es unangenehm kalt von draußen herein ins Foyer – brr…

Ab 15 Runden vor Schluss belohne ich mich und pushe mich nochmal: Ich greife zur Cola, deutlich früher als beim Marathonlauf: Dort hole ich mir den Zucker und Kofein-Schock erst 5km vor dem Ziel, hier liegen noch etwa 11km vor mir – also definitiv keine Strecke mehr vor der ich mich fürchten müsste, vielmehr doch eher eine „kurze“ Trainingseinheit mit ein paar zusätzlichen Höhenmetern. Mittlerweile fallen mir vor allem aber die positiven Höhenmeter doch etwas schwerer – die Treppen „hochtippeln“ klappt nicht mehr ganz so häufig, und ich bin fast froh gelegentlich in langsamere Läufer hinein zu laufen wenn es die Treppen hochgeht, dann habe ich dank Überholverbot wenigstens eine Chance zum Luftholen. Was mir dennoch erstaunlich gut gelingt ist das „Wiederanlaufen“ nach dem Treppenhaus – im vergangenen Jahr ging das in den Endrunden nur noch sehr mühsam, diesmal komme ich damit besser zurecht. Ich habe mir aber auch eine etwas andere Technik angewöhnt. Anstelle gleich wieder mit größtmöglicher Beschleunigung auf die Laufgeschwindigkeit zu kommen, nehme ich mir eine Türe als Marke – die liegt rund 20m nach dem Treppenhaus, so habe ich zumindest mal das Gefühl Energie zu sparen.

IMG_9111Mit Runde 12 beginnt die innere Uhr zu laufen – ich stelle mir bildlich eine Uhr vor und schiebe jedesmal den Zeiger 5 Minuten zurück (eigentlich ja nur um die 4 Minuten, so lange brauche ich ungefähr pro Runde) … das motiviert mich mental. Zudem kündigt mir Marion die ersehnte Spezial-Versorgung an: Bei noch 10 Runden gibt es Domino-Steine, eine Nürnberger-Spezialität die ich fast kiloweise verfuttern kann. Leider erweisen die sich als nicht ganz marathontauglich – ich verschlucke mich beinahe beim Verzehr. Daher bleibt es erst mal bei einem und einem großen Schluck Cola an der Versorgungsstelle.

IMG_9129Nun geht eigentlich alles recht fix, auch weil ich mir immer wieder „Belohnungspunkte“ auslobe – alle zwei Runden gibt es was an der Versorgung – wahlweise ISO oder Wasser, bei Runde 50 nochmal Cola. Die Beine werden langsam richtig schwer und ich verwünsche (wie in jedem Jahr) das Treppenhaus. Erwin überholt mich auf seiner letzten Runde noch einmal, er ist bereits auf seiner letzten, dennoch motiviert er mich natürlich, ich habe noch vier Treppenhäuser aufwärts vor mir (ich lege den Punkt zum runterzählen immer ans Ende dieser kraftraubenden Stelle, der restliche Zieleinlauf ist dann ja nicht mehr schwer und topfeben. Drei Runden vor Schluss gibts nochmal Cola, den Rest beiße ich einfach so durch. Irgendwie kann ich es noch gar nicht fassen, ich schaue zur Sicherheit nochmal auf die Rundenzählung: Aber es stimmt nur noch zwei Mal die Runde, also auch nur noch zwei Treppenhäuser. Ich verschärfe ganz vorsichtig das Tempo, da mittlerweile deutlich weniger Läufer auf der Strecke sind, kann ich mich diesmal durchgängig links halten. Mit richtig gutem Gefühl geht es auf die letzte Runde – hier bin ich schon fast versucht frühzeitig zum Endspurt über zu gehen, aber ich mäßige mich noch ein klein wenig. Zu deutlich sind mir die Erinnerungen an die vergangenen Jahre, als ich es etwas zu früh habe laufen lassen und dann fast das Treppenhaus nicht mehr hochgekommen bin. Diesmal geht die Rechnung aber auf: Nach dem Treppenhaus lege ich nochmal einen Spurt ein, es ist ja nun wirklich gleich geschafft. Rum um die Ecke und durch das Zeitmess-Portal durch. Marion empfängt mich kurz hintendran.

Am Ende sind es 3:49: 47 – somit habe ich mein geplantes Ziel von 3:50 auch erreicht und zwar sogar ziemlich exakt. Dass der vor mir in der Alterklasse dann nur 6 Sekunden schneller war und es somit sogar aufs Treppchen geschafft hat, fuchst mich ein wenig, denn die 6 Sekunden hätten ja eigentlich auch noch drin sein müssen. Aber sei es drum – ich bin immerhin nicht letzter in meiner Klasse und auf Platz 18 im Gesamteinlauf und Platz 16 bei den Gesamt-Herren, da kann ich doch echt nicht maulen. Vor allem bei meiner doch eher „laschen“ Trainingsvorbereitung, mit nur 2x die Woche trainieren, und selbst da fast keine Intervalltrainings und erst recht keine richtig langen Strecken. Merke: für nächstes Jahr doch ein wenig mehr trainieren.

Der Termin fürs nächste Jahr ist auch schon gesetzt bei mir, immerhin feiert der LGA-Indoormarathon seinen 10. Geburtstag – er soll diesmal bereits Samstag am Abend starten und hinterher soll es eine ordentlich Party geben. Das klingt alles sehr positiv, aber es schwingt auch eine etwas traurige Nachricht mit: Da sich der Marathon werbe- und aufwandsmäßig nicht rechnet wird kommendes Jahr wohl der vorerste letzte Marathon in der LGA stattfinden. Das ist schade, denn die Stimmung ist echt klasse, und alle Beteiligten geben sich immer große Mühe und sind mit viel Herzblut dabei. Denn wo sonst kann man bei schlechtem Wetter dennoch ungestört und trockenen Fußes einen Wettkmapf austragen? Das Wetter außerhalb war übrigens absolut richtig für den Indoor-Marathon – als ich das Gebäude verlasse regnet es wie schon die ganze Veranstaltung über.

Filmkritik – Sein letztes Rennen

Bereits beim Stadtlauf in Nürnberg bin ich auf den neuen Film mit Dieter Hallervorden aufmerksam geworden – Erwin (Lionheart) Bittel hatte lustige Bilder davon gemacht, als er vor dem Plakat posierte – ich hoffe mal nicht, dass Lionheart so bald sein letztes Rennen bestreitet.

Nun lief der Film bereits einige Zeit in den Kinos und ich habe mal wieder just-in-time die Kurve bekommen ihn mir noch anzuschauen. Erwartungen hatte ich direkt keine, ich habe mich einfach auf einen unterhaltsamen Abend gefreut – und als Ultra-Marathoni sind die Trainingspausen mit Lauf-Filmen doch gut erträglich. Zwar weiß ich aus der Vergangenheit, dass Dieter eher für Satire bekannt ist, und um einiges kommt man ja einfach nicht herum. Aber ich habe nur bedingt erwartet, dass es in Bully-Herbig-Manier vom Schuh des Manitus genauso in dem Film mit der Komik und Satire einfach hintereinander weggeht.

Jeder Läufer kennt ja das Problem, dass man in jedem Lauf auch mal Phasen hat bei denen es anstrengend wird, sei es wegen des Streckenprofils oder vom Kopf her, somit wäre ein Lauffilm der nur die positiven Seiten zeigt ja auch furchtbar langweilig.

Auch wenn der Filmtitel eine Lauffilm impliziert, so ist die Thematik im Ganzen doch eine andere. Es geht um die alternde Gesellschaft in Deutschland und den Umgang mit alten Menschen. Der ehemalige Marathon-Superstar Paul Averhoff ist alt geworden und hat seit Jahren keinen Wettkampf mehr bestritten. Etwas was ich mir bei Läufern eigentlich nur vorstellen kann, wenn es gesundheitlich nicht mehr geht, aber die Vielzahl älterer Teilnehmer bei fast jeder größeren Veranstaltung zeigt mir eigentlich: Wer regelmäßig weiter trainiert ist auch im hohen Alter noch fit, wenn es auch nicht mehr reichen mag ganz vorne in den Spitzengruppen mitzumischen. Ich habe Respekt vor jedem der sich der Herausforderung eines Laufes stellt (egal ob Volkslauf, Halbmarathon, Marathon oder Ultra-Marathon), und um so mehr Respekt vor denjenigen die sie bezwingen (egal in welcher Zeit, wichtig ist das Durchhalten und ankommen). Aber nun gut, es gibt sicherlich für alles Gründe, auch dafür nicht mehr regelmäßig zu trainieren.

Zu Beginn des Filmes erfahren wir, dass die Lebensgefährtin Margot Averhoff –  welche Paul Averhoff früher als Trainerin zur Seite stand – gesundheitlich angeschlagen ist, sie bricht in der Küche zusammen. Nachdem dies nicht zum ersten Mal geschehen ist, drängt die Tochter darauf, dass ihre Eltern ins Altenheim gehen, da sie keine Zeit hat sich um die Pflege der Eltern zu kümmern. Leider ein sehr häufiges Szenario in der heutigen Arbeitswelt – eine Doppelbelastung mit Pflege der Eltern und Job steht kaum jemand heute auf lange Sicht durch. Auch muss man natürlich sehen, dass die junge Generation auch eigene Bedürfnisse und Wünsche hat.

So endet das Ehepaar im Altenheim, aber schnell wird klar: Das ist nicht wirklich zielführend, vielmehr ist das Heim die letzte Station auf dem Weg aus dem Leben zu scheiden. Genauso wird sie auch betrieben, möglichst effizient und mit allen Notständen die man aus der Pflege so kennt: ungelerntes Personal, zu wenig Zeit etc. Das ist natürlich nix für jemanden der weiß was es heißt draußen unterwegs zu sein und aktiv zu sein.

So beginnt Paul sich wieder zu berappeln und vor lauter Frust gibt er beim Essen bekannt, dass er beim Berlin-Marathon starten will. Es folgt was folgen muss: Training und die Rebellion im Altenheim – wenn sie auch leider nicht so ausgeht wie man es sich im ersten Moment denkt. Margot verstirbt überraschend einige Tage vor dem Rennen. Daraufhin fällt Paul ersteinmal in eine tiefe Krise, leider verwehrt ihm das Altenheim jegliche sinnvolle Betreuung – stattdessen wird er ruhig gestellt und im Bett fixiert. So einfach kann man sich Hilfe machen und Arbeit sparen.

Zusammen mit einem Heimbewohner und einen engagierten Pfleger gelingt Paul gerade noch rechtzeitig die Anreise zum Start beim Marathon. Den Rest verrate ich jetzt hier mal besser nicht…

Insgesamt ein sehr rührender Film, das muss man lassen. Er macht vor allen Dingen nachdenklich wie wir mit der alternden Gesellschaft umgehen wollen und wie wir als Nachfolgegeneration mit unseren Eltern umgehen wollen. Ich bin kein Fan von irgendwelchen Alten-Sammelheimen, auch unseren Großeltern und allen Angehörigen blieb das zum Glück erspart. Aber ich bin auch realistisch: In der heutigen Arbeitswelt ist es beinahe unmöglich sich in Eigenregie um die Eltern kümmern zu können. In vielen Familien wird es dadurch erschwert, dass sich die Last auf zwei oder auch nur vier Schultern verteilt. Kommen dann noch längere Distanzen zwischen den Familienteilen hinzu wird es sehr schnell beinnahe unmöglich oder nur mit sehr hohem Aufwand.

Da das Altern ein schleichender Prozess ist, bin ich der Meinung man muss den älter werdenden Menschen Hilfe anbieten, aber Ihnen diese nicht aufzwingen – niemand wird gerne bevormundet. Viele Menschen haben einen gewissen Stolz den sie auch als Würde empfinden. Dieser verbietet es dem Individum erst einmal sich helfen zu lassen. Gerade wenn es um Dinge geht, die eigentlich trivial sind oder jahrelang einfach dazu gehörten. Das fängt mit dem Kochen und Wäschewaschen an und hört bei eigenständiger Mobiltät auf. Sich selbst eingestehen zu müssen das etwas nicht mehr so bleiben kann wie es ist, ist mit Sicherheit nicht einfach. Hier verhält es sich wie beim Laufen: Einfach von jetzt auf gleich aufhören, das kann nicht gelingen, genauso wenig wie von jetzt auf gleich eine Ultra zu laufen. Unterstützung da wo es gewünscht oder notwendig ist, ansonsten soviel Würde und Eigenständigkeit wie möglich. Die aktuellen Angebote wie betreutes Wohnen oder auch das Mehr-Generationen-Quatier sind hier denke ich erfolgversprechende Ansätze.

Abschließend noch ein paar Gedanken zum Film aus Sicht eines Läufers: 12 Wochen Vorbereitung sind der Standard für einen grundlegend trainierten Läufer. Das kann man mit etwas Willen und Abstrichen in der Zielzeit auch auf 8 Wochen verkürzen, aber das ist schon wirklich ambitioniert. Von daher ist das gewählte Szenario schon etwas grenzwertig und keinenfalls für den Laufanfänger zur Nachahmung empfohlen (dann schon eher etwas in der Art „von null auf 42“ – innerhalb eines Jahres). Auch im fortgeschrittenen Alter sollte man sich ausreichend Zeit für die Vorbereitung nehmen, vor allem aber auch eine entsprechende Betreuung haben. Kontakte sollte man als ehemaliger Olympia-Teilnehmer dafür eigentlich noch irgendwo haben. Die Ausrüstung ist auch etwas kurios, aber es sollte machbar sein, mit einer derartigen Ausstattung einen Marathon zu bestehen – es gibt ja auch Leute die barfuß einen Marathon bestreiten, und früher ging es ja auch, mit weit weniger ausgfeiltem Schuhwerk als heute.

Die Bilder von der Laufstrecke sind beeindruckend und reißen einen als Läufer durchaus mit, wenn man weiß wie schwer es sich anfühlt, jenseits der 30km. Sehr schön dargestellt fand ich die Unterstützung an der Strecke: Aus Erfahrung weiß ich: Ohne die ist jeder Lauf um ein vielfaches anstrengender. Gegen Ende der Strecke hin, sind dem Regisseur dann aber doch die Pferde ein wenig durchgegangen – wie dargestellt ist Paul mit Sicherheit nicht der schnellste Läufer, schlägt sich aber wacker im hinteren Mittelfeld, so würde ich es zumindest einmal einschätzen. Selbst ganz hinten wäre man nicht so verlassen und allein wie im Film dargestellt, ferner würde doch auch mindestens ein Begleitradler als Besenfahrzeug irgendwo in der Nähe sein – wie gut es hinten laufen kann, darüber berichtet Erwin ja häufiger einmal (besonders am Stadtlauf in Nürnberg). Auch die zwischenzeitlich gezeigte Uhr zur Zeitnahme scheint mir etwas sehr optimistisch für einen einsamen Schlussläufer: bei 3:34h ist nach meiner Erfahrung das dicke Hauptfeld im Einlaufen, und auch bei um die 4h sind sicherlich noch mehr Läufer im Zielbereich unterwegs. Das will ebensowenig passen wie ein immer noch voll besetztes Olympia-Stadion zum Einlauf des Helden.

Insgesamt: Sehenswert und zum Nachdenken anregend, aber durchaus auch mit heiteren und sportlichen Momenten. So und jetzt mach ich Schluss – ich muss noch meine Laufschuhe schnüren, damit ich nicht einroste …

Die andere Seite der Laufveranstaltung – Herbstlauf 2013

An einer Laufveranstaltung teilnehmen ist eine Sache – je nach Streckenlänge auch entsprechend anstrengend aber jedesmal ein tolles Erlebnis für mich. Auch nicht zu verachten ist aber der Schritt auf die andere Seite, hinter die Kulissen. Mit der Organisation des Herbstlaufs 2013 der DJK habe ich auch dieses Jahr den Schritt wieder getan. Mittlerweile liegt die Veranstaltung etwas mehr als eine Woche zurück – Zeit ein wenig zurück zu blicken.

Nach dem Lauf ist vor dem Lauf – so ungefähr war das Credo nach der ersten Durchführung des Herbstlaufs 2012 – zum ersten Mal hatte die Triathlon-Abteilung die Organisation vollständig übernommen, zudem wurde erstmals eine Chipzeitmessung eingesetzt. Klar das da einiges noch nicht flüssig lief und die eine oder andere Erkenntnis mühsam gewonnen werden musste. Somit begann es bereits nach der ersten Nachbesprechung mit konkreten Beschaffungen – in diesem Jahr erleichterte uns schon ein Gabelhubwagen an vielen Stellen die Arbeit erheblich. Zudem wurde die Markierung der Strecke optimiert. Auch die Erfahrungswerte in Sachen Software und Hardware zahlten sich dieses Jahr aus: WLAN im Feld ist zwar nett, aber nicht zuverlässig genug. Daher diesmal gleich Kabel, das dauert auch nicht viel länger im Verlegen, wenn alles vorbereitet ist.

Die richtig heiße Phase ab Freitag beim Aufbau verlief denn auch entsprechend kühl, innerhalb weniger Stunden stand die IT-Infrastruktur vollständig zur Verfügung und der Annahmebereich für Nachmeldungen und die Abholung war eingerichtet. Auch der restliche Aufbau war sehr bald abgeschlossen. Einzig die Reinigung der Strecke zog sich etwas in die Länge, beim Herbstlauf hat man nunmal mit etwas Laub zu tun, sonst wäre es ja kein Herbstlauf. Die Beschaffung von Getränken und Werbematerial war auch flugs erledigt und so konnten wir deutlich vor der geplanten Zeit in die letzte Nachtruhe vor dem Lauf gehen. Abgesehen von einer Back-Aktion, der Kuchen für den Verkauf sollte ja frisch sein – aber auch das ist ja kein Drama, so ein Blechkuchen ist ja flugs gemacht und gebacken.

Da dieses Mal die Online-Voranmeldung recht gut lief, hatten wir deutlich weniger Nachmeldungen, und auch zusätzliches Personal bei der Eingabe – somit entfiel ein erkannter Flaschenhals. Auch der Trouble-Desk war diesmal auffällig ruhig, bis auf einige kniffelige Spezialfälle war nichts spektakuläres dabei, die üblichen defekten Startnummern aber alles sehr entspannt.

So konnte ich am Hauptlauf sogar noch fleißig Bilder machen, insgesamt etwas mehr als 2300 mal habe ich abgedrückt. Deutlich zu oft wie ich im Nachinein feststellen muss, dazu weiter unten etwas mehr. Schon sehr bald nach dem letzten Zieleinlauf konnte der Abbau hinter den Kulissen beginnen – wie üblich verlief das nochmals schneller als der Aufbau. Innerhalb weniger Stunden war alles Material verladen, verräumt und teilweise sogar schon retourniert. Durch die Verlegung des Erfassungsrechners in den Anmeldebereich konnte direkt in der Nähe des Druckers weitergearbeitet werden, während gleichzeitig der Abbau der Verkabelung am Zielkanal erfolgen konnte. Bis das demontiert war, konnte das Netzwerk schon wieder ein Stück weiter abgeschmolzen werden – so lange bis am Ende ein simples Cross-Over-Kabel für zwei Rechner erhalten blieb an denen noch gearbeitet wurde. Sämtliche anderen aktiven Komponenten wie Switches und APs konnten derweil schon abgebaut werden. Auch der Backup-Drucker war zu Hochzeiten zwar hilfreich, konnte aber für die wenigen Korrekturdrucke abgezogen werden. Nach und nach stapelten sich diverse Kisten für die Verladung ins Auto. Alles noch einladen – fertig.

Ebenso fix waren die Kollegen an anderer Stelle – nur noch wenige Einzelteile galt es zu verladen oder ins Lager zu schaffen. Somit konnte bereits deutlich vor der geplanten Zeit mit den Helferfeierlichkeiten begonnen werden. Natürlich freut das die Helfer, wenn sich nicht alles ewig hinzieht.

Etwas „Nachwehen“ gab es denn doch noch – das IT-Material musste ich bei mir auch wieder verräumen, auch wenn dank Vorsortieren das recht bald als „erledigt“ abgehakt werden konnte. Zudem noch den geliehenen Anhänger zurück bringen, aufgrund des matschigen Geländes musste der aber auch noch geschrubbt werden. Mein Auto hat dafür auch gleich eine Reinigung erfahren, damit es sich wenigstens lohnt.

Erstaunlich aufwändig gestaltete sich die Auslese der Bilder bzw. deren weitere Verwendung. Einerseits war es das schiere Datenvolumen, dass alleine anderthalb Tage Dauerlast am DSL-Anschluss benötigte um die Bilder auf einen Server zu übetragen. Ferner bringen Bilder einer Laufveranstaltung nichts, wenn sie nicht nach Startnummern gefiltert werden können. Mit meiner Erfahrung habe ich kurzerhand eine kleine Software in PHP geschrieben, die sich der Verwaltung und Ausgabe der Bilder annimmt. Auch dabei habe ich wieder etwas gelernt – diesmal über automatische Nachbearbeitung von Bildern auf der Kommandozeile, also praktisch im Blindflug. Mit einigen Hilfsmitteln kann man Bilder gleich passend rotieren lassen (ohne alles nochmal durch die JPEG-Mühle zu drehen). Die Verwaltung übernimmt dann eine Datenbank in der ich die Bilder direkt als Datensatz abgelegt habe, das erspart Probleme bei doppelten Dateinamen und die Verwaltung von Meta-Informationen ist auch deutlich leichter. Dennoch habe ich die folgenden Abende damit zugebracht die 2300 Bilder mit Nummern zu versehen, eine Multi-User-Fähigkeit muss ich noch einbauen, Ideen dazu habe ich schon. Auch am Layout muss ich noch ein wenig was machen, aber die Funktionalität stand ja erst einmal im Vordergrund.

Insgesamt wieder eine tolle Erfahrung die mein Leben bereichert hat, auch ich habe wieder einiges dazu gelernt – vor allem werde ich nächstes Mal weniger Bilder und dafür besser komponierte machen, Qualität schlägt Quantität. Wer Interesse an der Software hat,  kann sich ja einmal bei mir melden – ich denke wir sind nicht der einzige Verein, der viele Leute mit Kameras hat, aber keinen professionellen Bilderdienst engagiert.

Immer wieder eine Freude – Mailserver einrichten

Neue Dinge machen bekanntlich in der Regel richtig Laune und Spaß – sei es neues Auto, neue Wohnung, neues (Männer-)Spielzeug. Natürlich habe ich mich daher auch über einen neuen Server auf Arbeit gefreut. Aber bekanntlich ist es bei einigen Dingen mit der Anschaffung bzw. Bestellung und Lieferung nicht getan. Die neue Wohnung will bezogen werden, das neue Auto eingeräumt etc. – genauso ist es mit einem Server, auch der wird zwar voreingerichtet geliefert, aber diverse Details und Stellschrauben muss man noch anpassen.

Die gängigen Services die auf einem Linux-Server sind in der Regel schnell eingerichtet, sei es ein Datenbank-Backend in Form von MySQL oder MariaDB, Apache als Webserver ist in der Regel auch gut paketiert, PHP als Standard-Glue-Language ebenso. Damit ist LAMP zumindest einmal abgehakt. Die Kür sind dann noch die Konfigurationen von Apache für verschiedene virtual Hosts (also mehrere Domains auf einer IP), und ggf. die notwendigen Extras für PHP (z.B. Imagick für die automatisierte Bildbearbeitung, diverse Klassen aus dem PEAR-Verzeichnis wie Tools zum Excel-Export) – alles nicht wirklich kompliziert.

Einziger Knackpunkt der mich jedesmal nervt ist die Einrichtung des Mailservers. Zwar funktioniert der Server im ersten Moment auch ohne, aber spätestens beim Versand von Systemnachrichten oder beim Aufruf der Mailfunktion aus PHP kommt man um einen Mailserver nicht oder nur schwerlich herum.

Warum ist das so? – Zum ersten gibt es nicht den Mailserverprozess an sich – wenn man es mit Windows vergleicht wäre eine solche Lösung wohl etwas in der Art wie Exchange, das aber weit mächtiger ist als ein reiner e-mail-Server. Vielmehr müssen für eine Mailserver wie ihn der Nutzer wahrnimmt verschiedene Räder ineinander greifen – leider nicht nur zwei sondern eine ganze Menge mehr.

E-mail – als erstes denkt man hier einmal an das altbekannte SMTP (Simple Mail Transfer Protocol) – wie bei allem wo „simple“ dransteht ist es das leider nicht. Ebenfalls spielen noch andere Protokolle eine wichtige Rolle: IMAP (Internet Message Access Protocol) und POP3 (Post Office Protocol 3). Allein für diese drei Protocolle ergeben sich schon mal mindestens drei Serverprozesse. Auf POP3 kann man evtl. heute im Zeitalter von Flatrates verzichten, allerdings bringen ettliche IMAP-Server auch gleich die POP3-Funktionalität mit, schaden kann es auf keinen Fall, auch wenn der Abruf über eine Wählverbindung eigentlich nur noch eine Nischenlösung ist.

Was macht da eigentlich was und warum gibts da verschiedenes, es geht doch um ein einzelnes „Produkt“ bzw. eine „Dienstleistung“. SMTP dient der Weitergabe von e-mails – viel mehr ist darin gar nicht spezifiziert. Eine e-mail wird zwischen verschiedenen System damit weiter gereicht bis sie ihren Bestimmungsort erreicht hat. Das kann durchaus einmal mehrere Schritte umfassen, nachverfolgen kann man es in den Headern der e-mail, die man nicht immer angezeigt bekommt, aber jedes bessere Mailprogramm hat dafür eine Option. Wie das Zielsystem mit der Mail umgeht ist ihm überlassen. Früher war es üblich pro Benutzer einfach eine Textdatei zu nehmen und die Mails dort hintereinader einzutragen. Das sogenannte MBox-Format, für wenige und reine Textmails eine praktikable Lösung, beim heutigen Volumen (Attachments) und dem parallelen Zugriff von mehreren Endgeräten nicht mehr so ganz aktuell, auch weil es keine Ordner-Struktur unterstützt (oder nur auf Umwegen, die zwar „akzeptiert“ aber nicht wirklich standardisiert sind). Durchgesetzt hat sich als Ersatz das Maildir-Format, wie der Name schon andeutet gibt es da Directories also Verzeichnisse. Ferner wird für jede e-mail eine separate Datei verwendet. Je nach Dateisystem ist das nicht unbedingt platzsparend, aber Speicherplatz ist heute ja in Hülle und Fülle vorhanden.

In den allerwenigsten Fällen ist das Zielsystem der e-mail gleich dem verwendeten Endgerät (schon allein aus Gründen der Erreichbarkeit – ein e-mail-Server ist 24h am Tag erreichbar, das Endgerät im Zweifel nicht). Daher gibt es die Protokolle IMAP und POP3 um e-mails vom Mailserver abrufen zu können. POP3 ist dabei an der klassischen Post orientiert: Man holt seine Nachrichten aus der Box und was man dann damit macht ist nicht mehr Sache des Servers (es sei denn man setzt spezielle Optionen) – der Vorteil: Es bedarf keiner ständigen Verbindung, Nachteil: Habe ich ein Smartphone, einen Laptop, einen Rechner und will womöglich noch per Webmail-Interface auf meine Mails zugreifen, wird die Synchronisation haarig bis unmöglich. IMAP ist daher Stand der Technik – die Nachrichten verbleiben auf dem Server, die meisten Clients haben aber einen Offline-Modus um die Nachrichten vorzuhalten, wenn gerade keine Verbindung zum Server möglich ist.  IMAP und POP3 kümmern sich also um die „letzte Meile“ des e-mail-Verkehrs. Daher haben diese Protokolle auch schon immer eine Benutzer-Authentifizierung vorgesehen, denn ein Mailserver hat ja in aller Regel multiple Postfächer. SMTP hatte das anfänglich nicht, und das ist eine echte Design-Schwäche, die unter anderem für eine e-mail-Plage namens SPAM mit verantwortlich ist.

Soweit so gut, wir haben also 3 Prozesse, das sollte sich doch machen lassen oder etwa nicht? Naja, ganz so einfach ist es heute leider nicht mehr: Im vorangegangenen Absatz habe ich bereits über Authentifizierung gesprochen, also Zugriffsbeschränkungen. Damit nicht jeder einfach SPAM verbreiten kann, sollte kein Mailserver irgendwelche Mails, die nicht für ihn bestimmt sind annehmen und weiterleiten (sogenanntes offenes Relay) – früher war das eine praktische Sache, aber heute ist es schon fahrlässig bis strafbar so etwas zu machen – jeder der sich selbst um den Mailserver kümmert weiß wie viel SPAM angelandet wird (bei mir ca. 95% aller Zustellversuche!). Nun gut, Benutzername und Passwort das ist ja gängig – nur diese Information müssen sich dann auch noch die drei Prozesse teilen und sie sollten nach Möglichkeit synchron laufen. Dafür kann man das Benutzerverwaltungs-System des Zielhosts heran ziehen, das ist der klassische Weg. Die Serverprozesse arbeiten dann mit den Passwort-Mechanismen des Betriebssystems zusammen. Für kleine Server sicherlich eine gute Möglichkeit, aber was wenn man mehrere Domains verwalten möchte, die unterschiedliche Nutzer haben? Für jeden auch noch ein Systemkonto anlegen (mit allen Vor- und Nachteilen) das wird irgendwann anstrengend und schwer zu warten ist es auch noch. Auf alle Fälle aber bedarf es also eines vierten Teils, der sich um die Authentifizierung kümmert, das kann PAM (Plugabble Authentification Module) sein, oder ein andere Mechanismus. Sind wir also bei 4 Prozessen, die man beachten muss. Nicht mehr schön aber noch überschaubar …

Lustig wird es erst bei weiteren Maßnahmen, die man heute aber leider treffen muss: SPAM-Abwehr und Virenschutz. Jede e-mail muss beim Eingang also überprüft werden, dazu gibt es verschiedene Mechanismen. SPAM bekämpft man klassischer Weise mit Spamassassin – ein recht ausgefeiltes (und wiederum modulares) System zur automatischen Inhaltsanalyse (z.B. Abfrage von Blacklists bekannter SPAM-Schleudern, Bayes-Filter und noch einiges mehr), für die Viren und Trojaner gibt es Virenscanner (so viele man möchte, bzw. soweit es der Server von der Leistung hergibt). Bewährt hat sich im Linux-Umfeld mittlerweile der OpenSource-Scanner ClamAV. Sind wir numher also bei 6 Teilen die man zusammensetzten muss, von der jeweiligen Einzelkonfig mal ganz abgesehen. Damit das Filtern leichter geht und auch eine gewisse Fehlerbehandlung (Virenscanner schmiert ab, Spamassissin hängt, etc.) zu erreichen, gibt es die Glue-Software „amavisd“. Macht in Summe schon einmal 7 Prozesse die es zu beherrschen gilt. MySQL bzw. Maria-DB kommt ggf. noch dazu wenn man die e-mail-Adressenverwaltung und ggf. auch die Speicherung der e-mails in einer Datenbank realisieren möchte.

Weiter kann man die Komplexität noch nach oben treiben, wenn man Verschlüsselte Verbindungen wünscht…. Insgesamt also doch ein recht umfangreicher Brocken nur für e-mail, das ja eigentlich bei einem Webserver „nur“ im Hintergrund mitlaufen soll. Die Einrichtung von Clients oder einem Webmail-Interface ist hingegen recht leicht wenn die Infrastruktur einmal steht. Diese stützen sich in aller Regel auf die oben genannten Protokolle und Schnittstellen. Damit der Post hier nicht zu lange wird, mache ich in der näheren Zukunft mal einen zu einer Konfiguration die ich am Laufen habe und mit der ich recht zufrieden bin.

 

 

Mein Traditionslauf – Stadtlauf in Nürnberg 2013

Viele Dinge wiederholen sich jedes Jahr: Ostern, Weihnachten und ganz wichtig: zwischendrin der Tag der deutschen Einheit oder auch der Tag des Nürnberger-Stadtlaufs. Seit ich teilnehme findet er am dritten Oktober statt. Es ist der einzige Lauf an dem ich seit dem Start meiner Laufkarriere jedes Jahr teilgenommen habe – und ich habe nicht vor diese Serie abreißen zu lassen.

Dieses Jahr bot es sich sogar um so mehr an, nach Nürnberg zu fahren – der Brückentag am Freitag zur Erholung, Sightseeing und Freunde treffen in Nürnberg. Eine Neuerung war mir dieses Jahr schon vorab bekannt: Meine Freundin würde sich an die Strecke stellen und Bilder machen – ein echter Service den ich echt zu schätzen weiß. Als wir die Foto-Spots besichtigen sind gerade schon die 10km-Läufer unterwegs – am Ende ein alter Bekannter: Erwin Bittel macht wieder den Schlussläufer. Ich geselle mich zu ihm und laufe mich schon mal einige Meter warm, zudem erste Fotos.

IMG_6175

Das Team von Sportscheck, Mika-Timing und dem TSV Katzwang ist sehr gut eingespielt, alles läuft wie am Schnürchen – auch die Wetterbestellung hat dieses Mal geklappt: Es ist herrlich sonnig, im Schatten zwar etwas frisch und an einigen Stellen windig, aber insgesamt doch perfektes Wettkampfwetter. Kurz vor dem Start treffe ich dann noch Helga und Heinrich von „Helgas Lauffreunden“ – die Betriebslaufgruppe mit der alles in Nürnberg einmal seinen Anfang genommen hat. Beide können erkältungs- und verletzungsbedingt nicht mitlaufen, obwohl sie das gerne würden. Ein wenig Läufer-Smalltalk und ich reihe mich ins Startfeld ein – leider etwas zu spät, ich bin deutlich hinter dem Pacemaker für 1:44h – als Ziel habe ich mir die 1:45h als Obegrenze, als realistisch etwas um die 1:40h vorgenommen.

IMG_6191Die Laune im Startblock ist richtig gut, jeder fiebert dem Start entgegen und natürlich sind wieder alle in den Sportscheck-Farben unterwegs: knallorange, damit die Läufer auch bei schlechter Witterung definitiv nicht übersehen werden. Mit den letzten Minuten steigt die Spannung, und dann gibt es doch eine Panne – eine die wir schon einmal hatten: Aus dem „Stadtlauf“-Portal ist die Luft raus – im wahrsten Sinne des Wortes: das aufblasbare Tor ist zie      lsicher wenige Sekunden vor dem Start in sich zusammen gesackt. Die Läufer und Kommentatoren nehmen es mit Humor, und mit einigen Minuten Verzögerung kann es dann doch losgehen.

IMG_6195Mit der 7. Teilnahme kenne ich die Strecke schon fast im Schlaf – von diversen Trainingseinheiten die ich um den Wöhrder-See und entlang der Pegnitz schon absolviert habe ganz zu schweigen. Praktischerweise geht es die ersten 2 Kilometer auf breiten Hauptstraßen, das gibt mir die Chance langsamer Läufer zu überholen und mich im Feld passend einzusortieren. Es geht vorbei am Hauptbahnhof und entlang des Marientorgrabens an die Pegnitz. Die Kilometer fliegen fast an mir vorbei und ich merke, dass ich gut in der Zeit liege,  um die 4:30Min liegen die Kilometerzeiten. Das passt alles und es läuft sich dennoch sehr angenehm – ich habe nicht das Gefühl schon am oberen Limit zu laufen. Kurz nach dem Abzweig aufs Prinzregenten Ufer ist der erste Foto-Termin für mich, also schön lächeln und ein wenig auf sich aufmerksam machen – die Aussage „ich bin der mit dem organenen Shirt“ hilft beim Stadtlauf in keinster Weise bei der Erkennung eines Läufers… Aber es klappt – die ersten Fotos sind im Kasten, trotz des noch immer sehr dichten Feldes, auf Höhe des Foto-Spots habe ich auch endlich den 1:44h Pacemaker eingeholt – hinter dem klebt schon fast eine dicke Traube Läufer, vornedran wird es etwas lichter.

IMG_6207Durch das Publikum angefeuert geht es auf den ersten Versorgungspunkt zu, und es gibt vorher noch eine kleine Überraschung: Die Strecke wurde leicht geändert, anstelle unter einer der großen Verkehrsadern hindurch (wo es im ersten Durchlauf immer recht eng war), geht es diesmal auf selbiger bis zum Abzweig auf den Fuß- und Radweg an der Pegnitz. Am Altersheim ist ordentlich Stimmung, ich greife bei ISO und Wasser zu, die Getränkeflasche habe ich dieses Jahr daheim vergessen. Die Sonne scheint herrlich und wärmt, das merkt man vor allem auf dem nun folgenden schattigen Kilometern. Die Zeiten sind weiterhin voll im Rahmen und ich überlege kurzfristig etwas mehr Gas zu geben, aber die Erfahrung sagt: Diesem Drang sollte man erst auf der Zielgeraden nachgeben. Die Kraft brauche ich dann auch für die erste Steigung bei Kilometer 4 – es geht über die Pegnitz und nach einer Kehre geht es am anderen Pegnitz-Ufer wieder zurück in Richtung Stadt. Ich motiviere mich mit dem nächsten Foto-Spot kurz nach Kilometer 7. Das hilft auch gegen den teilweise recht kräftigen Gegenwind. Ebenfalls motivierend: Die Strecke ist flach, das Publikum ist vielzählig und die nächste Versorgung kommt auch gleich – dort gibts wieder Wasser und ISO für mich. Fast direkt danach gibts dann auch das nächste Foto und weiter Motivation.

Nun geht es wieder in die Altstadt von Nürnberg, durch ein Tor in der Stadtmauer, über die Insel Schütt in der Pegnitz, an deren Ende lauert eine kleine Gemeinheit der Strecke: Die Nonnengasse, auch als Nonnensteig oder Heartbreak-Hill bekannt – auf diesem kurzen Stück überwindet man den Höhenunterschied zwischen Pegnitz und Lorenzkirch – viele Läufer müssen hier gehen. Dieses Jahr ist die Steigung noch etwas entschärft – aufgrund einer Baustelle muss man eine kleine Extra-Schleife laufen, diese kommt mir ein ganz klein wenig weniger steil vor. Oben Luft holen, Blick auf die Pulsuhr und nur nicht im Tempo nachlassen, wenn es an der Lorenzkirche vorbei geht – vor der Kirche steht immer viel Publikum, dort haben sich Helga und Heinrich postiert und feueren mich lautstark an.

Im Zick-Zack geht es durch die Innenstadt, diese wirkt ein wenig verlassen, klar es ist Feiertag, da sind die Geschäfte zu und somit außer den Läufern und ihren Fans nur wenige unterwegs. Mittlerweile habe ich den Kilometer 9 passiert und es geht auf den Frauentorgraben am Opernhaus zu – der Graben reicht bis auf U-Bahn-Niveau mit Einblick in die Haltestelle, der Start-Ziel-Bereich liegt auf Straßenebene in der Gegenrichtung – mit Schwung komme ich diesmal un die Haarnadelkurve auf die Start-Ziel-Gerade (das Tor steht immer noch wie eine 1), nur der Gegenwind pfeift um so heftiger – aber egal, man hat ja das Zwischenziel vor Augen. Direkt dahinter gibt es dann nochmal Wasser und für mich eine Banane – ungewohnt: die ist nicht geschnitten sondern am Stück – bei vollem Tempo eine Banane schälen und essen ist auch etwas für fortgeschrittene Läufer, aber nach rund 500m sind die Kohlenhydrate und Mineralien im Magen angekommen und stehen zur Versorgung der Muskeln auf der 2. Runde bereit – noch etwa 10km sind es. Was mir allerdings auffällt: Im Eventbereich ist es vergleichweise ruhig und wenig los – viele Besucher sind wohl ob der windigen und kühlen Witterung (wenn man nicht läuft) schon wieder auf dem Heimweg.

IMG_6213Wieder geht es runter an die Pegnitz, diesmal mit einem leicht anderen Schwenk direkt auf den Radweg – der ist schmaler als die Straße bei der ersten Runde, aber das Feld hat sich deutlich gestreckt. Bei Kilometer 12 gibts wieder ein Foto und laute Anfeuerungsrufe – viele Spaziergänger und Familien stehen an den sonnigen Stellen des Radwegs und feuern die Läufer an, was das Zeug hält. Fast schon zu früh kommt die nächste Versorgung in Sicht, nochmal Schmierstoffe für die Muskeln aufnehmen bevor es einen Kilometer später wieder über die Pegnitz-Brücke geht. In der 2. Runde gilt es eine kleine Zusatzschleife zu laufen, damit die 21,1km auch voll werden.

Das Wetter meint es weiterhin gut mit den Läufern, es ist sonnig und wir haben für die Strecke zurück in die Stadt sogar Rückenwind, damit läuft es sich gleich nochmal leichter. Noch immer kann ich Läufer vor mir überholen, auch wenn gelegentlich von hinten mittlerweile der ein oder andere Sprinter angeschossen kommt und vorbei zieht. Viele sehe ich aber an der Versorgunsstation an der Wöhrder Wiese wieder, die machen dort Stop, während ich einfach noch ein Wasser abgreife und es im Laufen so gut es geht in mich hinein schütte, ein nicht unerheblicher Teil geht aber auch daneben, aber das Trikot ist ohnehin schon durchgeschwitzt.IMG_6236

Bei Kilometer 18 suche ich erst mal etwas verdattert nach meiner Freundin, aber sie hat die Seite gewechselt – während ich vollkommen fokusiert auf den rechten Rand der Strecke schaue winkt sie dann doch von der linken Seite – ein letzter kräftiger Anfeuerungsruf „wir sehen uns im Ziel“ und schon läuft es sich wieder leichter – wohl auch weil es nur noch 3 km bis dorthin sind. Etwas langsamer bin ich geworden, ich gebe daher noch etwas Gas, bei 3km kann ja nicht mehr viel passieren (das reicht ja bei mir nicht mal mehr zum Aufwärmen). Noch liegen aber auch die Steigungen an der Lorenzkirche und die Senke vor dem Opernhaus vor mir – also nicht volle Kanne laufen, Reserven lassen. Mit diesem Mantra bezwinge ich den Nonnensteig und immer noch habe ich nicht das Gefühl, wie sonst beim Stadtlauf, am Ende meiner Kräfte zu sein als ich oben ankomme. Auf halber Höhe an der Lorenzkirche steht ein Motivationsschild: 19km sind geschafft – nur noch zwei sind zu bewältigen. Ich steigere weiterhin behutsam das Tempo. Es geht durch die Fußgängerzone und kurz vor Kilometer 20 riecht es dann auch noch lecker nach Essen – Pommes, Burger – der Körper meint: „Lass Pause machen“, der Kopf gibt klar Kontra: „Noch ein Kilometer, dann ist Pause und vorher nicht“.

stadtlauf_nuernberg_211_km_halbmarathon_startnr_99999Noch immer steigere ich das Tempo, oberhalb des Frauentorgrabens stehen Helga und Heinrich, ich sehe sie nicht, aber ich höre Helga ganz deutlich: „Auf, noch nen Endspurt Kai!“ – gesagt getan, ich verschärfe das Tempo noch ein Stückchen und überhole weitere Läufer.  Nun gilt es nur noch die Steigung aus dem Graben heraus zu überstehen – ich höre innerlich Peter von meiner Laufgruppe sagen „Das ist nur ein Scheinbuckel, der scheint nur so steil….“ und siehe da, so anstrengend ist es doch gar nicht. Sicherlich hat auch das freigesetzte Adrenalin seinen Anteil daran – nach der Spitzkehre gehts es aufs Ziel zu. Das Tor steht immer noch, und ich gebe nochmal alles – leider sind keine Läufer in Reichweite an die ich mich noch „ransaugen könnte“, also muss ich gegen die Uhr an der Strecke anlaufen – 1:37:32h zeigt sie beim ersten Anblick – da sind es noch wenige Meter bis zur Ziellinie – ich hole nochmal alle Reserven raus und rausche durchs Ziel – geschafft! Noch dazu deutlich schneller als ich mir vorgenommen hatte, da muss ich nächstes Jahr wohl die Zeiten noch weiter nach unten schrauben. Am Ende sind es netto 1:37:44h das freut mich natürlich. Aber genauso freue ich mich auf die Versorgung im Ziel, das gebotene Menü ist immer sehr reichhaltig, vom obligatorischen Wasser, ISO, Bananen, Äpfeln bis hin zu alkoholfreiem Weizen, Müsliriegeln und Kuchen ist alles geboten was das Läuferherz nach 21,1km begehrt.

Dennoch fällt mir auch hier auf: Es müssen dieses Jahr etwas weniger Läufer gewesen sein, oder zumindest die Verteilung des Feldes ist deutlich anders – wo sonst dichtes Gedränge und bald kein Durchkommen war, ist es diesmal erfrischend leer – man hat jede Menge Platz um an alle Versorgungstische heran zu kommen – oder liegt es vielleicht doch an der flotten Zeit? Mir soll es recht sein, es muss nicht jeder Lauf so überlaufen sein wie der Berliner Marathon. Das schönste kommt aber zum Schluss: Meine Freundin empfängt mich nach der Versorgung mit offenen Armen – allein für diesen Moment hat sich der Lauf gelohnt.  Da ist selbst das technische Problem des ausgefallenen Boilers in der Dusche eine Viertelstunde später völlig nebensächlich, wenn auch sehr erfrischend.

Fazit: Nürnberg, ich komme wieder: Zum Stadtlauf kommendes Jahr und in einem Monat schon zum LGA-Indoor-Marathon, dem wetterunabhängigen Marathon mit Hamsterrad-Effekt.