Jahresrückblick 2017

Schon nach Weihnachten – allerhöchste Zeit das Jahr nocheinmal durch den Filter laufen zu lassen. Ein wichtiges Ereignis hat sicherlich das gesamte Jahr etwas überlagert – die Geburt von Yann im Juni – in den Monaten davor die Vorfreude und die ganze Vorbereitung und danach geht es natürlich erst richtig los (vor allem kann Papa dann auch endlich etwas mehr tun als nur „Babybauchstreicheln“).

Januar

Der Einstieg ins Lauftraining war diesmal etwas anders als gedacht. Gleich bei einem der ersten Trainings gab es einen Sprint außer der Reihe – nachdem wir ein Duo beim Handtaschendiebstahl überrascht hatten, ist es mir wenigstens gelungen einen der Täter so lange zu verfolgen bis die Polizei ihn festnehmen konnte – zum Wegrennen bzw. zur Flucht in den Neckar hat er sich da einfach den falschen Partner rausgesucht – Langstreckenläufer und Rettungsschwimmer – da konnte er nahezu machen was er wollte, ein Entkommen war nahezu unmöglich. Sogar für einen Bericht in der Lokalpresse hat es gereicht. Insgesamt war ja klar, dass ich dieses Jahr mit dem Laufen etwas weniger machen kann, immerhin fällt der Geburtstermin in die Hochzeit der Laufveranstaltungen.
Zudem gab es erste Vorbereitungen auf einen Famlienwagen – wir haben verschiedenen Probefahrten gemacht um zu sehen was es wohl werden soll.

Februar

Auch der Februar war relativ ruhig. Wie fast jedes Jahr waren wir auf der Weinmesse in Strasbourg und haben unsere Vorräte wieder etwas ergänzt. Wobei durch die Schwangerschaft die Verkostung und Auswahl alleine bei mir lag. Zudem war der Keller ohnehin noch gut gefüllt, der Einkauf war also relativ selektiv und vom Ausprobieren neuer Winzer geprägt. Am Rande gab es auch ein Wiedersehen mit der Familie und einigen ausgeschiedenen Mitarbeitern der Bahag, die ich schon länger nicht mehr gesehen hatte.

März

Der letzte Urlaub zu dritt, oder besser gesagt zu dreieinhalbt? Mit dem TGV nach Marseille und in die Umgebung. Insgesamt ein sehr schöner Urlaub, auch wenn wir einige Erkenntnisse für die Familie mitgenommen haben. So ist der ÖPNV in Marseille nicht auf Familien mit Kinderwagen ausgelegt (geschweige denn wir hätten so etwas wie den Chariot CX2 mitgenommen – das möchte ich mir gar nicht ausmalen…). Zudem ist die Unterkunft in den günstigen Hotels für Singles und Paare nicht verkehrt – für Familien mit kleinen Kindern dann doch eher nicht. Auch die Idee mit dem Zug zu fahren hört sich anfänglich gut an und ist auch günstig – als Familie zahlt man dann beim Mietwagen und dem notwendigen Kindersitz allerdings deutlich drauf – noch dazu hatten wir etwas Pech bei der Fahrzeugauswahl – ein Mini-Jeep ist definitiv kein Familienauto, schon für den Kinderwagen muss man den Rücksitz umklappen – das kenne ich aus meinem alen Corsa besser …

April

Das letzte Schwangerschaftstrimester ist angebrochen. Daher hatten wir unter anderem diverse Termine wegen Papierkram (Sorgerecht und Co). Anfang des Monats hatten wir noch ein Familientreffen in Mainz mit den diversen Familienteilen von Marion.
Am Monatsende war dann nochmals ein Termin für mich: Es ging wie alle zwei Jahre nach Bamberg zum Weltulturerbelauf. Das ist auch immer ein Termin um Helgas Lauffreunde aus Nürnberg einmal wieder zu sehen. Aus dem Urlaub in Marseille haben wir unsere Erfahrungen gleich umgesetzt und diesmal für das verlängerte Wochenende eine Ferienwohnung in Bad Staffelstein genommen. Deutlich besser und vor allem flexibler. Zum Abschluss sind wir noch ins Spaßbad „Aqua-Riese“ (in Anlehnung an „Adam Riese“ – welcher in Bad Staffelstein geboren wurde).

Mai

Im gleichen Maße wie Marions Bauch an Umfang zulegt, reduziere ich mein Training. Das heißt vor allem erst einmal Abschied von der täglichen Radfahrt zu nehmen um im Falle eines Falles schnell daheim zu sein – daher mit dem Auto zur Arbeit – obwohl das Wetter eigentlich zum Radeln einlädt.
Zudem gibt es noch eine handwerkliche Herausforderung – bei Marions Mutter steht die Generalsanierung des Wohnzimmers auf dem Plan – inklusive Möbelabbau und Malern.

Juni

Final Countdown für Papa 2.0 – eine sehr angespannte Zeit, vor allem was den Job betrifft – so richtig anfangen will man nichts größeres mehr und ständig sitzt man gefühlt auf Kohlen.
Der Marathon in Mannheim lässt sich kurz vor Geburt anfänglich gut an, aber in Reingönnheim kurz nach Kilometer 35 erhält das Ziel 3:30 einen derben Rückschlag – Krämpfe zwingen mich zum Gehen – am Ende reicht es gerade noch so für eine Nettozeit unter 4h. Aber angesichts des reduzierten Trainings war das Ziel wohl doch etwas vermessen.
Ende Juni ist dann auch die neun Monate Wartefrist vorbei – zwar lässt sich Yann wie sein Bruder etwas mehr Zeit als gedacht, aber das kennen wir ja schon. Als dickes Ende zeigt er dann auch noch sein Interesse am Kunstturnen und verstellt somit jeden Weg auf eine natürliche Gebut – na sei es drumm – immerhin diesmal alles ohne große Hektik. Glen kommt derweil bei den Großeltern unter.

Juli

Ganz klare Aufgabe: Familienleben neu organisieren – immerhin haben wir jetzt zwei Kinder – somit müssen sich die Eltern auch immer wieder neu verteilen. Das bekommen wir aber recht gut hin, besser als erwartet. Zudem nehmen etliche liegen gebliebene Handwerkprojekte in der Wohnung endlich einmal Form an und kommen zum Abschluss. Zudem schicke ich endlich meinen alten Server im Rechenzentrum in Rente – nachdem zum wiederholten Male die Festplatten ihr Alter angemeldet haben, ist es an der Zeit ihn zu ersetzen. Erstaunlicher Weise klappt das besser als gedacht, auch wenn ich doch etwas aus der Übung war.
Zudem schlagen wir beim Angebot eines Familienwagens zu – mit Yanns Geburt hat sich endgültig gezeigt, dass es sehr schwierig wird, ohne ein größeres Auto. Diesmal steht das Fahrzeug auch noch fast vor der Haustür in Hassloch bereit, in unserer Wunschausstattung (uns sogar noch ein wenig mehr als erhofft).

August

Fertig! (ohne Plane)

Das Wetter ist gut und ich nutze die Elternzeit um ein lang gehegtes Projekt endlich umzusetzen – seit fast vier Jahren habe ich meinen PKW-Anhänger und fast genauso lange habe ich mir vorgenommen, die Bordwände und die Bodenplatte zu ersetzen. Ein reichlich aufwändiges Projekt, dass ich auch nicht mal „nebenher“ hätte umsetzen können. Besonderer Dank gilt hier Martin für die Werkstatt um die ganzen Arbeiten überhaupt durchführen zu können. Als Bonus erneuere ich nicht nur die Bodenplatte sondern bringe auch gleich noch eine Reihe Zurrösen an. Derartig generalüberholt wird er mir noch viele Jahre gute Dienste leisten.
Ziemlich genau passend dazu können wir unseren Familienwagen abholen – ein Peugeot 5008 ist es geworden. In diversen Probefahrten hat er uns am meisten überzeugt.

September

Nach zwei Monaten Elternzeit heißt es dann doch wieder arbeiten. Gefühlt ist in den zwei Monaten Abwesenheit aber nicht all zu viel passiert.
Sportlich geht es nun auf den Herbstlauf zu – wenn auch weniger als aktiver Teilnehmer, vielmehr als aktiver Organisator. Wie üblich sind dafür viele Maßnahmen im Vorfeld notwendig.
Zudem bereite ich mich schon einmal auf das kommende Jahr vor und habe angefangen einmal pro Woche den Rettungsschwimmkurs in Schwetzingen zu besuchen – schon einige Zeit her dass ich den letzten gemacht habe und mit kleinen Kindern ist man ja doch häufiger im Schwimmbad, da kann das auf alle Fälle nicht schaden.

Oktober

Drei Monate nach Geburt darf Papa auch wieder auf einen Wettkampf – wenn auch nur auf einen „kurzen“ – es geht zum Traditionslauf nach Nürnberg über die 21km. Die Zeit ist diesmal im Rahmen wenn auch nichts außergewöhnliches. Ganz stilecht bin ich seit langem einmal wieder mit meinem alten Corsa nach Nürnberg gefahren – inklusive Mitfahrgelegenheit wie zu Praktikumszeiten. Das Fahrzeug behalten wir vorerst mal noch – immerhin habe ich noch etwas mehr als ein Jahr TÜV. Liebevoll ist es jetzt der Sport-Wagen, denn bei dem Alter macht es jetzt auch nichts mehr aus wenn man nach einem Waldlauf völlig eingedreckt einsteigt.
Beim Herbstlauf hat der frisch sanierte Anhänger seine Feuertaufe – alles funktioniert einwandfrei und mit dem neuen Fahrzeug vorneweg ist auch die volle Ladung Bierbänke kein Drama mehr.
Etwas ungeplant habe ich dann noch mit Frank in Heidelberg am MTB&Run teilgenommen – einer Abwandlung der erfolgreichen Aktion Bike&Run in Mannheim. So richtig erfolgreich war die Werbung nicht, ganze vier Teams sind an den Start gegangen – dafür waren wir um so erfolgreicher – bei der Erstauflage auf Platz eins – das hat schon was. Schon etwas ungewohnt, dass man noch länger dableiben muss wegen der Siegerehrung, und das auch noch bei feinstem November-Regen.

November

Es geht langsam auf das Jahresende zu, und nach dem dicht gepackten Oktober ist im November deutlich weniger los. Der Umzug eines Kollegen beschäftigt mich aufgrund der Transportmöglichkeit mit Anhänger etwas länger als gedacht, mit Monatsende ist aber auch dieses Projekt dann endlich abgeschlossen.
Auf Arbeit übernehme ich die Leitung eines kleineren Projekts, das wird mich wohl auch noch einige Zeit begleiten.
Sportlich gibt es erfreuliches zu berichten – die Laufgruppe wächst um einige Mitglieder.

Dezember

Zwar habe ich bereits weit vor dem Dezember-Fieber alle Geschenke besorgt, dennoch ist die Zeit irgendwie etwas anstrengend – ich merke dass ich mich an vielen Stellen ziemlich strecken muss zwischen Familie, Job und Sportaktivitäten. Früher fand ich den Dezember nicht so anstrengend wie in diesem Jahr. Ich bin richtig erleichtert, dass an Weihnachten auch endlich einmal einige Tage Ruhe angesagt sind.

 

Soweit einmal der Jahresrückblick – mal sehen was das neue Jahr bringen wird. Ich hoffe ich finde wieder etwas häufiger Zeit mich hier im Blog zu melden.

Fiese Falle in MySQL bei Verwendung von Views in (Left)-Joins

Da habe ich doch kurz vor Weihnachten noch eine echte Knobelaufgabe erlebt, deren Ergebnis für den ein oder anderen sicherlich interessant sein dürfte. Ausgangspunkt war folgendes eigentlich simple SQL-Statement:

Select * from tableA left join viewC 
     on tableA.id=viewC.lookup

Soweit so unspektakulär, auch wenn das Original noch mit einigen weiteren Filtern gespickt war und die View nicht gerade ein einfaches Query kappselt.

Was allerdings gar nicht lustig war, waren die Ergebnisse dieser Abfrage, denn sie entsprachen nicht den Erwartungen. Aus der View erhielt ich nämlich keinen Join-Partner obwohl ich diesen als Test extra geprüft hatte mit:

 Select * from viewC where lookup='TestValue'

Folgende Punkte habe ich als „übliche Verdächtige“ abgeprüft:

  • Vergleich der Datentypen – auch nicht die Ursache
  • Collations (also Zeichensätze) – auch mit Casting, das Ergebnis bleibt das Gleiche

Spannender Nebeneffekt, der bei der weiteren Untersuchung heraus kam – nutze ich die view nicht sondern packe 1:1 den Code aus der Definition mit in mein Statement

 
Select * from tableA left join 
   (select * from tableB 
     left join tableF 
         on tableB.id=tableF.foo 
      where tableF.bar='baz' and deletedDate is null)
   as testview on testview.id=tableA.id

Dann funktioniert wieder alles wie erwartet. Es staunt der Laie und der Fachmann wundert sich. Höchste Zeit das Problem genauer unter die Lupe zu nehmen und die bekannten Bugs von MySQL bzw. den Deviraten wie MariaDB und Percona zu durchforsten. Ergebnisse sind leider recht dürftig und beschreiben nicht das was ich erlebe. Immerhin stoße ich auf weitere Probleme die erst einmal völlig losgelöst von der Thematik erscheinen, es geht dabei um möglich Einstellungen des Servers und den Standard-Verhalten. Das hat sich in den letzten Jahren immer mal wieder etwas verändert und spiegelt des „Erwachsen werden“ von MySQL wieder. Wir erinnern uns: Es hat eine geraume Zeit gedauert bis MySQL endlich als Standard auf INNODB als Engine gewechselt hat und somit referenzielle Integrität in Form von Transaktionen und Foreign Keys unterstützt wurden. Ebenso aus der grauen Urzeit von MySQL stammen Probleme mit NULL-Werten bei Datumsfeldern (DATE,DATETIME). Und genau da liegt der Hase am Ende auch begraben. Die Server-Konfiguration gibt vor, dass der Server sich strikt verhalten soll, unter anderem bei den Datumsfeldern.
Somit ist es nicht mehr zulässig den „uralten NULL-Ersatz 0000-00-00 00:00:00“ zu verwenden. Die Routinen für den Ersatz kann man aber per Session einschalten, und genau das ist bei der manuellen Abfrage der Werte jedes mal passiert, sei es per manuellem Join oder bei der Abfrage der einzelnen Tabellen. Dabei verhält sich das isnull je nach eingestelltem Modus. Mal liefert es Zeilen mit „0000-00-00 00:00:00“ als Ergebnis, mal nicht, je nachdem ob strict-mode gesetzt ist oder nicht.

Warum läuft es dann beim Verwenden der View aus dem Ruder? Das liegt an der Art und Weise wie MySQL mit Views umgeht: Sind diese übermäßig komplex werden sie als separater Thread gestartet, der eine temporäre Tabelle bereitstellt auf die dann wiederum gejoined werden kann. Dieser Thread wird allerdings vom Serverprozess angestoßen, und dort steht der Modus per default auf strict und dieser wird dann auch angewandt. Somit ist das Ergebnis nicht das was ich bei der singulären Abfrage erhalten habe, sondern leider eben ein leeres da in der Tabelle anstelle NULL eben noch „0000-00-00 00:00:00“ verwendet wird.

Die temporäre Lösung ist, den Join manuell auszuführen, mittelfristig werden wir den Server umstellen. Das sind aber eigentlich nur kosmetische Lösungen. Die eigentlich korrekte Maßnahme für dieses Problem ist die Verwendung von sauberen NULL-Werten anstelle obskurer Workarounds. Leider verlassen sich sehr viele Applikationen bei uns noch auf die Tabelle und diese kruden Werte, einfach Umstellen ist also erstmal leider nicht drin. Ich kann jedem Entwickler nur wärmstens empfehlen, sich auf derartige Altlasten nicht zu verlassen und schnellstmöglich dafür zu sorgen diese abzubauen.