Kurzkritik: Arrival

Endlich kam ich dazu, mir Denis Neuvilles Film Arrival von 2016 anzusehen. Science-Fiction vom höchster Qualität. Sehr empfehlenswert.

Die Kurzgeschichte Story of Your Life von Ted Chiang welche als Vorlage diente, hatte ich zuerst gelesen. Ich empfehle die andere Reihenfolge: Den Film geniessen und dann, falls man Lust auf eine Erklärung hat, die Kurzgeschichte lesen. (Angenehmer Nebeneffekt: Es gibt sie nur in Sammlungen zusammen mit anderen äusserst lesenswerten Geschichten von Ted Chiang.)

WordPress-Fehler anzeigen

Aktuell deaktivieren viele Hoster die veraltete PHP Version 7 und stellen auf PHP Version 8 um. Das führt dazu, dass gewisse Codezeilen Fehlermeldungen und Warnungen provozieren können (Deprecation-Notices). Wer wie ich nicht alle WordPress-Plugins auf der neuesten Version am Laufen hat, bekommt diese plötzlich angezeigt oder aber einzelne Seiten, z.B. Produkteseiten in Woocommerce, werden nur noch fehlerhaft dargestellt..

Diese Notices führen nicht zwangsläufig dazu, dass die Seite nicht mehr funktioniert und werden deshalb vom WordPress-internen Fehlermanagement nicht abgefangen. Die Standardeinstellungen von WordPress aber verstecken die Fehlermeldungen. Das Resultat ist unschön: Eine halb funktionierende Seite.

Hilfe zur Lösungsfindung

  1. Direkt auf dem Hosting die Datei wp-config.php im obersten Verzeichnis von WordPress zum Editieren öffnen. Bei Unsicherheiten zuerst eine Sicherheitskopie der Datei anfertigen.
  2. Die Zeile define( 'WP_DEBUG', false); suchen (Oder im oberen Teil einfügen) un den Wert von false auf true ändern.
  3. Betroffene Seite aufrufen. Die Fehlermeldungen sollten jetzt sichtbar sein und das verursachende Plugin identifizierbar machen.
  4. Fehler beheben.
  5. Den Wert define( 'WP_DEBUG', false); wieder auf false zurück wechseln.

Temporär kann die PHP Version je nach Hoster noch für eine Übergangsfrist auf die veraltete Version 7 hinuntergesetzt werden. Längerfristig ist ein Update der WordPress-Instanz & -Plugins unabdingbar.

PHP-Package MyTS – Zeitreihen in SQL-Datenbanken

Wer als Werkzeug nur eine SQL-Datenbank hat, sieht in jedem Problem relationale Daten.

Aus der alten Architektur von meiner OpenData-Seite api.existenz.ch ist eine isolierte PHP-Bibliothek zum Speichern und Abfragen von Zeitreihen entstanden: MyTS (My Time Series).

Da auf dem verwendeten Shared Hosting nur eine MySQL-Datenbank zur Verfügung steht, lagern die aktuellen Daten dort relational und besser verfügbar als mein Langzeit-Datenarchiv auf InfluxDB.

Das spannende Details hier: Für das Unittesting mit einer echten Datenbank wird in den GitHub Actions ein eigener Datenbankcontainer hochgefahren.

Link zum vergangenen Jahr: Machete Order (Oder auch nicht.)

Wie jedes verantwortungsvolle Elternteil musste ich mich letztes Jahr mit der Frage auseinandersetzen, in welcher Reihenfolge wir die Star Wars-Filme unseren Kindern zeigen wollen.

Natürlich sind unsere Kinder dank Hörspielen, Bilderbüchern, Legomodellen etc. mit der Franchise vertraut. Aber die Abmachung ist, dass sie erst mit 12 Jahren die eigentlichen Filme sehen können. Letztes Jahr war es für K1 so weit.

Bei der Recherche zu diesem Thema stiess ich unweigerlich auf den Ausdruck Machete Order, das Einschieben von Episode II und III vor dem Ende der Originaltrilogie. Ich fand die Argumentation sinnvoll.

Dennoch, als wir nach Episode V da sassen und ich mich zwischen Episode II und VI entscheiden musste, war die Wahl für mich klar: Die Originaltrilogie ist dermassen gut, dass wir Return of the Jedi vorziehen. Der Rest kann noch etwas warten.

Entwicklertagebuch in Visual Studio Code führen

VSCode Journal - Erster Eintrag
Mein erster Eintrag im Tagebuch

Seit sieben Jahren dokumentiere ich meine Entwicklertätigkeiten in einem Tagebuch im Texteditor Visual Studio Code. Dazu benutze das Plugin vscode-journal. Mit der Tastenkombination Command-Shift-J legt mir dieses Plugin eine neue Textdatei im Markdown-Format mit folgender Namensstruktur an:

/.../Text/2024/11/10.md

Das heisst das Plugin erstellt automatisch Verzeichnisse für das Jahr und den Monat, benennt die Datei nach dem aktuellen Tag und öffnet sie im Editor.

Der Inhalt des Entwicklertagebuchs hat sich über die Jahre ausgeweitet:

  • Berufliche und private Programmiertätigkeiten, Systemkonfiguration
  • Kurzfristige Todo-Listen und was als Nächstes ansteht
  • Konzeptionelles, Dokumentations- und Mailentwürfe
  • Private Tätigkeiten (Administrative Arbeiten, Wohnungsunterhalt, Veloreparaturen, Hobbys, Sport, Rätselparcours etc.)
  • Soziales (Treffen, Feste, Mittagessen etc.)

Was sich als besonders wertvoll erwiesen hat: Eine „Nächste Schritte“-Notiz bei privaten Projekten. Wenn ich ein solches Projekt nach Monaten oder gar Jahren wieder in die Finger nehme, bin ich froh über Anhaltspunkte darüber was ich als Nächstes geplant hatte.

Parallel dazu führe ich im /Text-Verzeichnis eine Sammlung von Textdokumenten, PDFs und Bildern als persönliche Wissensdatenbank in einer möglichst flachen Verzeichnisstruktur.

Alle fünf Minuten wird das ganze Verzeichnis via Git automatisch zu GitHub in ein privates Repository commited. Dazu wird aus der lokalen crontab folgendes Skript aufgerufen:

#!/usr/bin/env bash

cd "$(dirname "$0")" || exit

/usr/bin/git add -A
/usr/bin/git commit -m "Autocommit."
/usr/bin/git push

Ich benutze dieses System nur auf einem Computer, deshalb benötige ich nur eine Einweg-Synchronisation. Bei meinen externen Mandaten richte ich mir normalweise ein separates Repository in der internen Codeverwaltung ein.

Der grösste Vorteil ist meiner Meinung nach die Einfachheit der Datenspeicherung: Es handeln sich zum grössten Teil um einfach Textdateien. Keine proprietäre Formate, diese Dateien werden immer lesbar bleiben.

Ein Nachteil hat meine einfache Lösung, besonders im Umfeld des Wissensmanagements: Als einzige Recherchemöglichkeit steht die Volltextsuche zur Verfügung. Was ich mit dieser Suche nicht finde, ist verloren. (Habe ich jetzt den Ausdruck „Aare.guru“ oder „Aare Guru“ oder „Aareguru“ verwendet?) Das System würde zwar Verknüpfungen zwischen Dateien unterstützen, aber nur rudimentär.

Als Alternative empfiehlt sich ein spezialisiertes System wie Obsidian. Dieses speichert (Soweit ich weiss) auch alles als reine Textdateien und bietet Mehr-Weg-Synchronization.

Ich bleibe für den Moment bei vscode-journal. Für eine ausführliche Reflexion über Entwicklertagebücher kann ich diesen Stackoverflow-Blogpost empfehlen.

Rätselparcours #3

Nach dem Erfolg der ersten beiden Rätselparcours wünschte sich K1 zu seinem 12. Geburtstag ebenfalls einen, dieses Mal zum Thema „Fussball“. Konkret freut er sich auf die anstehenden Frauenfussball-Europameisterschaft 2025 hier in der Schweiz.

Mein persönliches Thema war eher „Eskalation“: Ich plante alles sorgfältiger, aufwändiger und mit mehr Vorlaufzeit. Ich fürchte einfach, dass ich damit die Messlatte für zukünftige Parcours ziemlich hoch angelegt habe. Aber das ist ein Problem für zukünftige Christians. Drei Tage vor dem Geburtstag war alles fixfertig vorbereitet. Dieses Mal gab es keine Nachtschicht.

Schritt 1: Sammelalbum

Sammelalbum zum 12. Geburtstag

Was ist eine bessere Repräsentation für organisierten Fussball als ein Sammelalbum? Aus zwei zusammengeklebten A4-Seiten Fotopapier, bedruckt mit dem EURO 2025-Pokal habe ich ein Sammelalbum gestaltet und in einem Couvert auf den Zmorgentisch gelegt. Es dient als Meta-Rätsel für den ganzen Parcours.

Leeres Sammelalbum

Zu Beginn war das Album noch leer und keine Sammelbilder vorhanden. Auf der Rückseite des Albums begann der Parcours mit einem…

Schritt 2: Gedicht

Heute feierst du dein Geburtstagsfest,
Aber zuerst kommt ein laaaaaanger Test.

Eine Überraschung wartet am Ende,
Darum nimm die Füsse in die Hände.

Findest du das erste Lösungswort?
Dann geh und such an dessen Ort:

Pass auf, mach keinen Unfall,
Wenn du spielst mit dem ????????.

(Ja, ich habe selber gedichtet und keine KI zur Hilfe genommen.)

Hast du das Lösungswort gefunden? (Auflösung.)

Schritt 3: Kreuzworträtsel

Kreuzworträtsel

Im Couvert befand sich neben einem Pack Sticker dieses Kreuzworträtsel. Ich habe mir dazu Wörter sowohl zum Thema Fussball wie auch aus dem persönlichen Umfeld von K1 überlegt. Etwas fies war beispielsweise die Frage nach dem Nachnamen unserer Nachbarin.

Mit Hilfe einer der vielen Kreuzworträtselgeneratoren im Internet habe ich mir das Rätsel zusammenstellen lassen und danach in Apple Pages zusätzlich Felder eingefärbt. Die Felder übertragen auf den Schlüssel unten ergab den nächsten Suchort…

Schritt 4: Lego

Kiste Lego mit Anleitung

Auf dem Balkon leicht versteckt fand K1 ein eingepacktes Geschenk. Etwas enttäuscht darüber, dass die Rätseljagd bereits vorüber ist, öffnete er es und fand: Eine selbstgebastelte Lego-Schachtel mit Lego-Teilen, einer Anleitung und einem Stickerpack.

Auf diesen Teil bin ich besonders stolz: Als erstes habe ich aus unserer Lego-Sammlung ein Modell gebaut. Danach habe ich das Modell mit einem Lego-3D-Programm namens LeoCAD virtuell nachgebaut. Und mit der daraus exportierten LDR-Datei konnte ich auf der Webseite Web Lic eine Anleitung generieren. Guck dir das PDF an, das sieht praktisch originalgetreu aus!

Bei der Anleitung habe ich strategisch die erste und letzte Seite rausgerissen, so dass K1 nicht sofort sehen konnte was er baut. Schlussendlich hielt er das vollständige Modell in den Händen:

Veloanhänger als Lego-Modell
Veloanhänger im Original

Unser Veloanhänger! Unten am Anhänger klebte das nächste Couvert.

Schritt 5: Fotorätsel

Was ist das?

Ein Gegenstand aus ungewohnter Perspektive fotografiert und ausgedruckt ist der ganze Bestandteil dieses Rätsels.

Das stellte sich für K1-3 als das schwierigste Rätsel von allen heraus.

Schritt 6: Stadt-Land-Fluss

Unter dem Sitzkissen des Bürostuhls lag das nächste Couvert mit einem bereits ausgefüllten Blatt einer Partie Stadt-Land-Flusss, eines der Lieblingsspiele von K1, plus ein Pack Sticker.

Ich war unsicher, wie sehr ich auf das Lösungswort hinweisen sollte. Beispielsweise war das Couvert mit „sTaDt-lAnD-FlUsS“ beschriftet um die Aufmerksamkeit auf die Gross/Kleinschreibung zu richten. Zusätzlich hatte ich jeweils die Anfangsbuchstaben ganz unten noch unterstrichen.

Schlussendlich fand K1 aber relativ schnell das Lösungswort heraus, begab sich zur Dusche und fand das letzte Couvert. In diesem befand sich das letzte Stickerpack und sonst nichts.

Schritt 7: Die Sticker

Stickerpack

Die Verpackung der Sticker bestand aus gefaltetem Papier welches mit Heftklammer verschlossen waren. Die Sticker selber habe ich auf Selbstklebe-Papier gedruckt und ausgeschnitten.

Das erste Stickerpack war noch normal nummeriert, ab dem zweiten Pack gab es hingegen einfache Rechenaufgaben zum Lösen. Der Sticker „13 – 9“ kam so auf die Position 4 geklebt.

Sammelalbum gefüllt

Für die Vorderseite der Sticker wollte ich eigentlich Fussballspieler im Comiclook verwenden. Weil ich aber keine Vorlage fand, habe ich die Bilder der aktuellen Frauen-Nationalmannschaft genommen und diese versucht in einen Comicstyl zu bringen. Styletransfertools im Internet brachten nicht das gewünschte Ergebnis. Deshalb habe ich im Bildeditor Krita mit verschiedenen Filtern wie Kantendetektion, Verschwimmen und Invertierung gespielt, solange bis die abgebildeten Personen völlig unkenntlich geworden sind.

K1 konnte praktisch alle sofort mit Namen nennen…

Egal, es ging mir auch darum einige der Trikots so zu verändern, dass ich unauffällig ein letztes Lösungswort platzieren konnte. Die mittlere Reihe der korrekt platzierten Trikots buchstabierte den Vornamen von K1’s Lieblingsspielerin.

Nur wohin jetzt mit diesem Lösungswort?

Schritt 8: Karte

Überzähliger Sticker

Komischerweise war der letzte Sticker überzählig. Er hatte keinen Platz im Album. Und statt einer Rechenaufgabe befand sich eine Zeichnung auf der Rückseite des Stickers.

Relativ schnell identifizierte K1 dies als Plan der Küche, vor allem anhand der Symbole für Wasserhahn und Kühlschrank. Das X markierte vermutlich den Schrank mit der Lüftungsanlage.

Lüftungsschrank

Und tatsächlich, darin schien etwas zu sein.

Schritt 9: Cryptex

Im Lüftungsschrank, dramatisch ausgeleuchtet von einer LED-Lichterkette, lag ein Cryptex.

Den Cryptex habe ich auf meinem 3D-Drucker nach einer ausgezeichneten Vorlage von cees auf Printables.com hergestellt. Und danach mit meinen zweifelhaften Zeichenkünsten und Miniaturmodellfarben versucht aufzuhübschen. Das Ergebnis ist ein ca. 15cm breiter und 7cm dicker Zylinder mit einem Geheimfach. Im Innern der Buchstabenringe befinden sich verstellbare Codierringe mit denen das Schlüsselwort festgelegt werden kann.

K1 stellte das letzte Lösungswort ein und konnte sein Geschenk in Empfang nehmen.

Abschluss

K1 freute sich extrem über Tickets zu einem Spiel der Schweizerinnen an der kommenden EURO 2025. Im ersten Anlauf konnten wir keine Tickets erwerben. Ich hatte ihm verschwiegen, dass wir in einem zweiten Verkaufsfenster genügend Tickets für alle ergattern konnte.

Der Rätselparcours selber kam ebenfalls gut an. K3 hat sich auf jeden Fall auch wieder einen Parcours zum Thema „Fussball“ gewünscht. Aber ich bin unsicher ob ich diesen Parcours hier jemals noch toppen kann.

Rätselparcours #2

Nach dem Erfolg des ersten Rätselparcours wünschte sich K3 zu ihrem 7. Geburtstag ebenfalls einen. Da konnte ich nicht nein sagen und machte mich an die Planung.

Leider habe ich diesen Parcours nicht so gut mit Bildern dokumentiert wie den letzten.

Schritt 1: Buchstabenkette

Buchstabenkette

K3 hatte zu diesem Zeitpunk gerade lesen gelernt und deshalb begann ich mit einer Buchstabenkette: Wenn sie dem Weg vom Zmorgentisch zum Geschenk folgte, ergab sich der Ort des nächsten Hinweises.

Man beachte einmal mehr meine unglaublichen Zeichenkünste! Leuchtfarben zu verwenden war ein bewusster Entscheid und ein subtiler Hinweis auf spätere Schritte im Rätsel. K3 war aber zu beschäftigt, um diese aufzugreifen, sie rannte los…

Schritt 2: Finde den Unterschied

Finde den Unterschied links
Finde den Unterschied rechts

Im Briefkasten fanden sich zwei Fotos, nebeneinander ausgedruckt mit der Aufforderung „Finde den Unterschied“.

Ich habe versucht, beide Fotografien aus dem gleichen Winkel zu machen. Da mir das nicht exakt gelang, schlichen sich feine Veränderungen hinein welche die Kinder beim Unterschied-Suchen unnötig verwirrten. Besser wäre es gewesen, den Unterschied künstlich einzufügen, z.B. mit dem Retouchier-Werkzeug von Apple Fotos.

Schritt 3: Memory

Hast du den Unterschied gefunden?

Der blaue Wimpel an der Girlande entpuppte sich als Tüte aus Papier, in welchem sich ein Memory mit 25 Teilen befand. Im Internet fand ich irgendwo eine Vorlage für ein Memory mit jeweils zwei Gegenständen, welche zusammengehören (Ich habe die Vorlage leider nicht aufbewahrt.) Einfach auf etwas festeres Papier gedruckt.

Das 25. Teil, welches zu keinem anderen Gegenstand gehörte, zeigte einen roten Ballon. Und tatsächlich, zur Geburtstagsdekoration im Raum waren ein paar Ballone aufgehängt, darunter…

Schritt 4: Roter Ballon

…ein roter Ballon, in dem sich ein Gegenstand versteckte. K3 hat den Ballon sofort zum Platzen gebracht um daran ranzukommen.

Das war nicht so geplant: Ich hatte auf dem Ballon einen Hinweis aufgemalt! Glücklicherweise hatte ich noch eine Skizze zur Hand: Ein Diagram zeigte ein bestimmtes Möbelstück in der Wohnung und Lichtstrahlen, welche darunter leuchten.

Der Gegenstand im Ballon war eine kleine…

Schritt 5: „Ultraviolette“ LED-Leuchte

Kleine LED-Lampe, überklebt mit blau eingefärbtem Klebeband

Eine kleine LED-Lampe überklebt mit mehreren Schichten transparentem Klebeband, jeweils mit blauem Filzstift angemalt, ergibt eine Ultraviolet-Effekt.

Blaues Licht macht unsichtbare Zeichen sichtbar

Mit dem blauen Licht werden unsichtbare Zeichen sichtbar: Mit gelben Markierstift auf gelben PostIt-Zettel aufgemalte Buchstaben.

(Diese Idee ist nicht von mir, ich habe sie auf mehreren Rätselseiten gefunden.)

Das Licht war allerdings nicht sehr stark. Damit der Effekt funktioniert, habe ich eine Reihe von PostIt-Zetteln an einem dunkeln Ort platziert: Unter einem Möbel.

Mit der LED-Lampe die Zettel ableuchtend konnte K3 den Schriftzug „Im Keller“ entziffern.

Schritt 6: Pfeile im Keller

Ein Zettel an der Kellertür wies darauf hin, im Dunkeln wieder die LED-Lampe zu benutzen. Eine Reihe von aufgemalten neongelben Pfeilen auf dem Boden und an den Gestellen führten schlussendlich zum Geschenk.

Wiederum war die verwendete LED-Lampe leider etwas zu schwach um die Pfeile leicht auffindbar zu machen.

Abschluss

Das Geschenk war gefunden, K3 war happy und ich machte mich in Gedanken bereits an die Planung vom nächsten Parcours. K1’s Geburtstag folgte als nächstes und er wünschte sich ein bestimmtes Thema…

Kurzkritik: Unlock Kids

Die Kindervariante der Unlock-Rätselbrettspiele kommt ohne App aus und basiert einzig auf Spielkarten und ein paar zusätzlichen Kartonteile. Sehr fantasievoll und bei K1-3 so beliebt, dass sie jedes Abenteuer mehrere Male gespielt haben. Dank der Zusatzaufgabe versteckte Zahlen zu finden bleibt es spannend und nachhaltiger als die Exit-Einweg-Spiele.

Macht Spass und kann ich uneingeschränkt empfehlen.