Rätselparcours Spezial: Z

Das Entwerfen von der drei ersten Rätselparcours für meine Kinder machten mir derart Spass, dass ich überall davon erzählt hatte. Kollege Z fragte mich deshalb im Scherz, wann ich für ihn einen Rätselparcours organisieren würde. Ich schüttelte nur den Kopf.

Aber die Idee lies mich nicht mehr los. Wie kann ich so etwas „remote“ organisieren? Könnte ich auf dem Postweg etwas machen? Sollte ich etwas an seinen Arbeitsplatz schmuggeln?

Schlussendlich entschied ich mich für einen hybriden Ansatz: Z hatte kurz nach unserem gemeinsamen Chor-Probewochenende Geburtstag. Ich würde ihn dort überraschen und fing also an, einen „kleinen“ Parcours zu planen. (Und benötigte erneut viel mehr Zeit dafür, als ich dachte.)

Am Samstag Abend spät, nach etlichen Chorproben, beim gemütlichen Zusammensein im Hotel ging es los:

Schritt 1: Emoji-Geheimschrift

Collage mit Texten, einzelne Buchstaben mit Emojis ersetzt

Z und ich spielen seit Jahren in verschiedenen Konstellationen Tichu & Dominion. Als Auftakt für den Rätselparcours habe ich in Apple Pages eine A3-Collage von Fotos unserer Spielrunden zusammengestellt, gemeinsam mit Geburtstagswünsche aller Mitspieler*innen. Dabei habe ich einzelne Buchstaben mit Emojis ersetzt und eine entsprechende Geheimbotschaft hinten aufs Papier gedruckt:

🐉♠️   🐉🎂🃏🍿🃏   🌼🎂🍷   🎵🎈🎂🎉♠️?

Eine unserer Mitspielerinnen übergab ihm die Collage und nach ein bisschen Drauflüpfen konnte die Rätseljagd beginnen.

Schritt 2: Noten

Die Geheimbotschaft lotste ihn zum Standort des Pianos, unter welchem ein Couvert angeklebt war. Im Couvert befand sich eine Karte mit folgendem Aufdruck:

Musiknoten

Mit dem freien Notensetzprogramm MuseScore Studio habe ich ein bestehendes Musikstück genommen, den Text entfernt und die Notenhöhen verändert.

Findest du die geheime Nachricht in den Noten?

Schritt 3: Kreuzworträtsel mit Scrabble-Steinen

Inspiriert vom nicht mehr ganz zeitgenössischen Kinderlied buchstabieren die Noten wiederholt dasselbe Wort: C-A-F-F-E-E. Weiter ging es bei der Kaffeemaschine in der Hotellounge. Hinter der Maschine lag versteckt in einem Couvert eine Karte mit Begriffen, ein Blatt Papier mit einem aufgedruckten Raster und ein Säcklein voller Scrabble-Steinen:

Kreuzworträtsel mit Scrabblesteinen

Auf der Karte stand die Überschrift „Was bleibt Z jetzt noch übrig zu tun?“ und danach ein Dutzend Hinweise auf Begriffe. Diese waren allesamt Insiderwitze mit Bezug zu Z’s Leben. Die Scrabble-Steine waren derart ausgewählt, dass die Lösungswörter gesetzt werden konnten, danach aber noch einige Steine übrig blieben. Die Überschrift lieferte den Hinweis darauf, dass aus diesen restlichen Steinen ein weiteres Wort zu bilden war.

Das Raster wollte ich zuerst mit einem Kreuzworträtselgenerator generieren. Dabei stiess ich auf zwei Probleme: Die Quadrate waren zu klein im Vergleich zu den Steinen und die verwendeten Buchstaben passten nicht zur Auswahl, welche das Scrabble-Spiel bot.

Ich habe deshalb die Steine selber in einem passenden Raster ausgelegt, umgedreht, fotografiert und wieder ausgedruckt.

Kreuzworträtsel-Hinweise
Beispiel: mp steht natürlich für „MORE POWER“.

In diesem Moment habe ich entschieden, den Schwierigkeitsgrad dieses Rätsel zu erhöhen: Es gibt keine Hinweise mehr darauf, wo und in welcher Richtung (horizontal/vertikal) das entsprechende Lösungswort platziert werden muss. Nicht einmal die Ausrichtung des Rasters ist klar. (Z hatte es tatsächlich zufälligerweise korrekt platziert…)

Die übriggebliebene Buchstaben waren: C E E H H N P S T U U Z. Findest du das Lösungswort?

Schritt 4: Flussdiagramm

An dieser Stelle eine Anekdote: Unser Chor führt seit über 15 Jahren fast jedes Probewochenende in diesem Hotel durch. Ich kenne es entsprechend gut und konnte mir im Voraus exakt überlegen, wo ich was verstecken werde. Um sicher zu gehen, dass wirklich alle Lokalitäten noch existieren, rief ich im Hotel an. Und erfuhr, dass sie ausgerechnet dieses Jahr ihr Hauptgebäude abgerissen haben und neu am Bauen sind. Miserables Timing. Glücklicherweise waren die meisten Dinge noch vorhanden. Ausser…

Das Lösungswort forderte auf, die Schuhe zu putzen. Auf zur Schuhputzmaschine! Welche aber leider nicht mehr existierte. Zum Glück hatte Z noch eine vage Ahnung, wo sie stand. Dort fand er ein Couvert mit einem kleinen Flussdiagramm auf sechs A4-Seiten verteilt:

Komplexes Flussdiagramm
Bild anklicken für die PDF-Version in voller Pracht

Wer dem Flussdiagramm korrekt folgt, landet beim Ort wo es weitergeht.

Die Struktur des Flussdiagramms habe ich in Mermaid geschrieben, einem Textformat für Diagramme aller Art. Das geht wesentlich schneller als zusammenklicken mit der Maus. Der Anfang sieht so aus:

flowchart TD
    STARTHERE([PROJEKTBEGINN]) --> START
    START{Sind die Requirements geklärt?} --> |Ja| REKURSION2
    START --> |Nein| EGAL[\Egal, starten wir trotzdem schon mal\]
    EGAL --> REKURSION(Gibt es in den Abhängigkeiten noch Rekursionen?)
    REKURSION --> |Ja| REKURSION2(Gibt es in den Abhängigkeiten noch Rekursionen?)
    REKURSION2 --> |Ja| REKURSION
    REKURSION --> |Nein| BEGINN
    REKURSION2 --> |Nein| BEGINN
    BEGINN{Zweiter Projektbeginn} --> ZAHL(SCRUM-Poker-Start: Wähle eine Zahl zwischen 1 und 100)
    ...

Mit Hilfe der freien Applikation Draw.io habe ich den Mermaid-Quelltext importiert, danach das Diagramm von Hand noch etwas bunter und komplizierter gemacht (Einige Kästchen herumgeschoben, Pfeile angepasst) und ausgedruckt.

Im Flussdiagramm stecken neben einigen funktionslosen Umwegen zwei Hauptpfade drin, welche aus einer beliebigen Zahl immer dasselbe Resultat rechnen. Es basiert auf einem beliebten Zaubertrick für Kinder. Findige Mathematiker haben ihn sicher schnell durchschaut.

Schritt 5: Formel

Mathematische Formel: 473 * 4/3 pi r^3

Es ging weiter mit Mathematik: Die vierte und letzte Karte bestand nur aus einer Formel. Kannst du dich noch daran erinnern für was sie steht? Und was die ganze farbige Rechnung stehen könnte?

Schritt 6: Tresor

Bälllelibad

Inmitten mindestens 473 bunter Bälleli (Mit einem Volumen von vier Drittel Pi mal Radius hoch drei) versteckte sich ein Tresor:

3d-gedruckter bunter Tresor

Um den Tresor zu öffnen, mussten die Rückseiten der gefundenen Karten zu einem QR-Code zusammengesetzt werden. Wenn man ihn scannt, erscheint ein Text mit der richtigen Kombination.

QR-Code zusammengesetzt aus Postkarten

Und schon öffnete sich der Tresor. Als Belohnung zur erfolgreichen Bewältigung des Rätselparcours gab es einen Haufen Süssigkeiten.

Den Tresor hatte ich 3d-gedruckt nach einer bestehenden Vorlage. Weil das Schloss leider nicht ganz funktionierte ist die Rückwand abnehmbar und nur mit einigen Magneten fixiert. In Kombination mit genügend Heissleim war das Modell ausreichend stabil für den Einsatz

Den QR-Code (Hier das effektive Bild) habe ich mit einem spezialisierten AI-Bildergenerator für QR-Codes erstellt (Prompt: swiss mountain range with blue sky). Tipp: Im codierten Text ausschliesslich Grossbuchstaben verwenden, damit wird der QR-Code weniger komplex.

Zuerst wollte ich den QR-Code in einem Bergbild verstecken. Das funktionierte zwar theoretisch, es war aber praktisch unmöglich die Karten wieder so anzuordnen, dass der kleine Code scannbar blieb. Die grosse Version oben hingegen wurde problemlos sofort erkannt.

Abschluss

Die ¨Überraschung war gelungen, alles hat funktioniert. Nur Z war etwas unter Druck, da ihm dauernd ein Dutzend Leute im Nacken sassen und seine Fortschritte kommentierten. Oder mit der Gitarre musikalisch untermalten.

Den Tresor durfte Z als Souvenir mit nach Hause nehmen, ebenso wie alle Karten & Materialien.

Schritt X+1: Im Briefkasten

Am Montag darauf hatte Z seinen eigentlichen Geburtstag. Und eine rätselhafte Postkarte im Briefkasten.

(Tatsächlich war die Post zu schnell: Die Postkarte kam zu früh an und ich musste seine Frau bitten, sie noch zu verstecken.)

Aus meinen initialen Überlegungen, wie sich ein Rätselparcours „remote“ durchführen liesse, blieb mir die Idee eines mehrstufigen Parcours auf dem Postweg im Kopf. Und als ich eine Geheimfach-Erweiterung für den Safe fand, waren die Voraussetzungen für einen genialen Twist gegeben.

🎵🎁🎩🎈🎵🎵    🍷🃏🎈🎩🃏   🌈🎈🃏🍿-🌈🎈🃏🍿

Auf der Postkarte stand einzig eine codierte Nachricht. Z hatte in Schritt 1 bereits bemerkt, dass er nicht alle Emojis zum Entschlüssen gebraucht hatte. Jetzt ergab sich mit Hilfe der restlichen Emojis den Text: „PCtipp Seite Vier-Vier“.

PCtipp Probeexemplar

Unerwarteterweise hatte Z in der Woche zuvor ein Probeexemplar der Zeitschrift PCtipp zugeschickt erhalten. Dieser Brief kam aber nicht vom Verlag, sondern von mir. Der Begleitbrief war zu 100% von ChatGPT generiert. In der Hoffnung, dass er die Zeitschrift nicht sofort entsorgen würde, habe ich ihm auf Seite 44 einen Hinweis mit Bleistift hinterlassen:

Versteckter Hinweis in der Zeitschrift
„So sicher wie ein Safe mit Geheimfach innen rechts“

Z hatte sie noch nicht entsorgt und fand den Hinweis. Im Innern des Tresors befand sich eine mit Magneten fixierte abnehmbare Seitenwand. Und dahinter…

Seitenwand mit verstecktem Geschenk

…das zweite Geschenk.

Es handelte sich dabei um ein Set einer personalisierten Dominion-Karte, zugeschnitten auf Z’s Persönlichkeit und illustriert von Kollegin I. (Der Inhalt der Karte ist zu persönlich, um ihn hier zu veröffentlichen.)

Generiert habe ich die Karte mit dem Dominion Card Generator. Für die Funktion der Karte liess ich mir von ChatGPT helfen (Prompt: Propose custom cards for the board game Dominion representing a male co-player who likes to talk a lot, is covivial and funny and likes to do a lot of actions), passte den Text aber noch an. Die Produktion übernahm wiederum I. Ansonsten wäre ich dieser Anleitung hier gefolgt.

Z hatte an seinem Geburtstag so viel los, dass er erst am Tag darauf auf das ¨Überraschungsgeschenk gestossen ist. Aber auch dieser Teil des Rätselparcours hatte zu meiner grossen Freude geklappt.

Herzlichen Glückwunsch Z. Ich freue mich schon auf das nächste Mal Spielen mit dir!

Konzerthinweis: Der Chor – FLOW

Der Chor - FLOW - Cover

Dieses Jahr führen wir mit Der Chor ein A cappella-Konzert auf. In FLOW singen wir eine Auswahl von Stücken unter anderen von Jaakko Mäntyjärvi, Eric Whitacre, Veljo Tormis und Laura Jekabsone. Das wird abwechslungsreich, von sehr, sehr schön (Indodana) bis zum abgrundtiefen Fluch auf Eisen (Raua needmine).

Ich kann einen Besuch nur empfehlen.

  • Donnerstag, 8. Mai 2025, 20:30, Petruskirche, Bern (Tickets)
  • Freitag, 9. Mai 2025, 20:30, Petruskirche, Bern (Tickets)
  • Samstag, 10. Mai 2025, 20:00, Kirche Oberstrasse, Zürich (Abendkasse)

Twint auf Abwegen: Zahlungslinks

Die Schweizer Finanzapp-Lösung ist eine Erfolgsgeschichte. Seit ihrer Lancierung und der überraschenden und erfolgreichen Fusion mit der damaligen Konkurrenz Paymit im Jahr 2016 ging’s nur noch nach oben. Über 5 Millionen Benutzer, unzählige Onlineshops, Hofläden und Opferstöcke, die beliebteste Marke der Schweiz. Ein Erfolg reiht sich an den anderen.

Jetzt kann es eigentlich nur noch abwärts gehen. Tatsächlich scheinen sich neue Funktionen in den Apps weg von Nützlichem hin zu Gamifizierung und Rabattaktionsshop zu entwickeln. Das könnte man ja noch ignorieren.

Aber diesen Monat lancierte Twint Zahlungslinks. Und bewegt sich damit auf sehr dünnes Eis: Derartige Links sind Einfallstor für die meisten Scam- und Phishingversuche auf Plattformen wie Ricardo und Tutti. Regelmässig versenden Betrüger gefälschte Links und versuchen damit an Logininformationen zu kommen. Und sind dabei immer und immer wieder erfolgreich. Und die betroffenen Personen erhalten danach kaum Unterstützung von den Finanzinstituten.

Das Bundesamt für Cybersicherheit BACS verzeichnet jährlich zehntausende gemeldete Phishingversuche.

Twint scheint mit den Zahlungslinks da jetzt auch mitmachen zu wollen und legt schon mal wie erwartet vor: Auf der entsprechenden Webseite erscheint das Wort „Sicherheit“ oder „Schutz“ kein einziges Mal. Phishing wird ironischerweise nur in einer Warnmeldung ganz oben erwähnt.

Ich fürchte damit handelt sich Twint unnötig massive Probleme ein und könnte auf der Marken-Beliebtheitsskala schon bald wieder von irgendwelchen Pommes-Chips-Produzenten überholt werden.

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.