Jahresrückblick 2025
Geleistetes und Verpasstes
Wieder einmal neigt sich ein Jahr dem Ende zu, und wieder einmal möchte ich auf das Geleistete und Verpasste in diesem Jahr zurückblicken. Ich beginne mit einem Rückblick auf meinen damaligen Ausblick: Meine Vorsätze für 2025.
Clojure
Zunächst einmal wollte ich mich mit Clojure befassen. Das habe ich getan, wovon mein Clojure Phrasebook zeugt. Hierzu habe ich Getting Clojure von Russ Olsen erneut durchgearbeitet, knapp zusammengefasst und mir Übungen dazu ausgedacht. Clojure hat mir damals sehr viel Freude bereitet. Im Anschluss haben wir in der Firma versucht, das Clojure-Web-Framework Kit produktiv zu verwenden. Dabei hatte ich zwei wichtige Erkenntnisse:
- Clojure aus dem Lehrbuch ist wunderschön. Echtes Clojure ist eine Nischentechnologie, bei der es v.a. um möglichst schmerzloses Wrappen bestehender Java-Artefakte geht.
- Die Clojure-Community ist zwar sehr angenehm, aber auch extrem klein. Bei vielen Problemen kann einem schlichtweg gar niemand helfen, weil man der einzige auf der Welt ist, der ein vergleichbares Problem hat.
Zwar konnte ich die Request-Authentifizierung für Exoscale erfolgreich nach Clojure portieren, was im Repository exoscale-auth zu sehen ist. Dazu habe ich auch eine Library publiziert. Doch sind wir dann beim Umsetzen des Backends mit Kit steckengeblieben. Die langen Aufstartzeiten der Emacs-basierten Entwicklungsumgebung mit CIDER waren dann der letzte Sargnagel. Seither habe ich Clojure nicht mehr angefasst. Ganz allgemein reizt mich LISP derzeit nicht mehr.
TypeScript
Das Modul über agile Softwareentwicklung, das ich im Frühling unterrichtete, habe ich wie geplant auf TypeScript umgestellt. Die meisten Übungen liessen sich problemlos von C# portieren, selbst eine nebenläufige Simulation. Diese liess sich einfach via async/await umschreiben, was wesentlich einfacher ist als die Threads von C#, zumal es nur um I/O-Nebenläufigkeit und nicht um parallele Abarbeitung geht.
Viel über TypeScript habe ich jedoch nicht gelernt. Die Bewertung von Übungen war aber eher mühsam, da jedes triviale Beispiel ein npm install für TypeScript mit diversen Zusatzwerkzeugen erforderte, z.B. Jest für Unittests, jeweils inkl. eines TypeScript-Wrappers.
Ende Semester habe ich dann meine Festplatte entmüllt, indem ich sämtliche Verzeichnisse namens node_modules rekursiv gelöscht habe. Ich rede von Millionen von Dateien und etlichen Gigabyte an Daten. Das kommt schon einmal zusammen, wenn man für 50-60 Schüler jeweils vier, fünf Übungs-Repositories lokal zum Laufen bringt.
Für das Modul zum Thema Software-Testing, das ich im zweiten Halbjahr unterrichte, habe ich zwar TypeScript beibehalten, verwende statt Node nun aber Deno. Dieses unterstützt TypeScript und Unittests nativ und hat auch ein sinnvolles Dependency-Management mitsamt einer Standard-Library für JavaScript. Damit konnte ich den Bloat massiv reduzieren. Deno gefällt mir sehr gut. Für mich ist es derzeit die beste Umgebung für Programmier-Übungen an der Berufsschule.
Produktiv habe ich kaum etwas mit TypeScript gemacht. Auch Angular habe ich ‒ wieder einmal mehr ‒ komplett schleifen lassen. Es interessiert mich einfach nicht.
Halbgare Vorsätze
Mit Concrete Mathematics habe ich mich dieses Jahr überhaupt nicht beschäftigt. Ich habe nicht einmal daran gedacht. Aber das Buch läuft mir ja nicht weg.
In der Firma haben wir das Cloud Castle gemeinsam soweit vorangebracht, dass ich es jetzt gewinnbringend im Unterricht einsetzen kann. Nächstes Jahr soll es dann auf einen grösseren Benutzerkreis ausgedehnt werden. Wenn alles gut läuft, können wir dann dafür auch Geld verlangen.
Ansonsten haben wir in der Firma im gewohnten Modus weitergearbeitet, wobei wir das Büro im Frühling aufgegeben haben: Die Fixkosten kombiniert mit dem ständigen Baulärm haben die Kosten-/Nutzen-Rechnung entscheidend auf die Negativseite gekippt.
Minimalismus, analog und digital
Was das Thema Minimalismus betrifft, bin ich noch einmal recht viele Sachen losgeworden, gerade im Zusammenhang mit der Büroauflösung. Andere Sachen habe ich jedoch vom Büro in meine Wohnung übernommen, ohne diese dabei zu verkrempeln.
Im Keller habe ich das Büchergestell ca. um die Hälfte des Inhalts reduziert, womit ich Platz für Gegenstände geschaffen habe, die ich nicht zu einem Schleuderpreis loswerden wollte: Beamer, Kopfhöhrer, verschiedene Schlagzeug-Utensilien. Das Schlagzeug steht jetzt in meinem Keller, den ich dafür entsprechend aufgeräumt und eingerichtet habe.
Beim digitalen Minimalismus hatte ich dieses Jahr leider zahlreiche Rückfälle zu verzeichnen. Der erste ist auf den Re-Release von Command and Conquer: Red Alert II zurückzuführen, womit das Spiel seit 2024 problemlos auf einer modernen Umgebung läuft. Nach dem Durchspielen der beiden Kampagnen hatte ich aber auch wieder genug davon.
Im Spätsommer erschien eine neue Version von Jagged Alliance 2: Stracciatella, wonach ich mich erneut einige Abende durch Arulco kämpfte. Die vergeudete Zeit nervte mich aber schon bald, wonach ich alles wieder deinstallierte. Meine Accounts auf Steam und GoG habe ich dieses Jahr endgültig löschen lassen.
Diesen Herbst habe ich wieder vermehrt Videos auf YouTube geschaut, was grösstenteils eine Zeitverschwendung ohne jeglichen Erkenntnisgewinn war. Auch das eine oder andere Formel-1-Rennen habe ich wieder mitverfolgt, und in den letzten paar Wochen auch wieder hie und da ein Skirennen. Da ich meine Samstage und Sonntage nicht um diese Ereignisse herum planen möchte, verzichte ich nun wieder darauf.
Rudern
Das Rudern habe ich bis Ende Mai sehr konsequent durchgezogen. Andernorts habe ich aufgerechnet, wie viele Trainings ich innerhalb eines Jahres hinter mich gebracht habe: Es waren fast 300 in weniger als einem Jahr. Im Juni hatte ich aber einen schweren Einbruch, der bis heute anhält: Mir fehlt seither schlichtweg die Kraft, regelmässig am Morgen um 5 Uhr aufzustehen.
Phasenweise mache ich nun wieder mehrere Trainings pro Woche, aber nicht mehr so konsequent wie vorher. So musste ich das Training zurückfahren, da es zu viel meiner Willenskraft und Energie gekostet hat. Hier muss ich wieder die Balance finden. Ich bin jetzt auf einem sehr hohen Fitness-Niveau und brauche keine Aufbauarbeit mehr zu leisten, sondern kann mich damit begnügen, dieses Leistunsniveau zu konservieren. Hierzu genügen zwei, drei Trainings pro Woche.
Soviel zu meinen Vorsätzen. Aber was habe ich sonst noch gemacht?
Lernprojekte
Nach meiner Beschäftigung mit Clojure, von der ich oben schon berichtet habe, muss ich mich offenbar kurze Zeit mit Lua befasst haben. Im Standardwerk Programming Lua (4. Ausgabe) habe ich immerhin acht Kapitel durchgearbeitet. Immerhin habe ich dann meinen Markdown-zu-BBCode-Converter für Pandoc noch verbessert. Da ich sonst keinen Verwendungszweck für Lua hatte, liess ich es dabei bleiben.
Weiter habe ich mich wieder etwas mit Elixir befasst, wozu ich einen kleinen Scraper für OpenRussian.net geschrieben habe. Damit konnte ich diverse Frequency Lists exportieren, die ich dann per Anki lernen wollte. Dies hat mir wieder einmal vor Augen geführt, dass digital unterstütztes Lernen kaum etwas bringt. So habe ich Anki wieder deinstalliert.
Es muss dann Anfang Mai gewesen sein, dass ich Die Brüder Karamasow zu lesen angefangen habe. Ich habe jedes Kapitel zunächst zweimal durchgelesen und dann beim dritten Durchlesen von Hand zusammengefasst. Anschliessend habe ich die Zusammenfassung in eine Markdown-Datei übertragen und ein PDF daraus generiert.
Das Buch hat 1247 Seiten; meine Zusammenfassung deren 83. Ende September war ich mit der Lektüre fertig. Noch nie habe ich ein so gutes Werk so gut gelesen, und es hat sich wirklich gelohnt. Durch das dreimalige Durchlesen jedes Kapitels kombiniert mit meinem Korrekturlesen der Zusammenfassung habe ich wohl in diesem Zeitraum 4000 Seiten gelesen.
Berufsschule
In der gleichen Weise habe ich dann ab Sommerferien das Buch Basiswissen Softwaretest zu einem grossen Teil zusamengefasst. Hier habe ich mich aber mit zwei Durchläufen pro Kapitel begnügt: einmal überfliegen; einmal gründlich lesen und gleichzeitig zusammenfassen. Diese Zusammenfassung ist immerhin 65 Seiten lang geworden und dient mir als Grundlage für den Unterricht des Moduls zum Thema Software Testing, wozu ich eine Modulwebseite mit Hugo erstellt habe.
Für die Grafiken habe ich mich nun endlich einmal mit TikZ befasst. Die Syntax ist zwar gewöhnungsbedürftig, mittlerweile kann ich aber recht gut damit arbeiten. Die Ergebnisse sind, wie für LaTeX üblich, erstklassig. Ich werde in Zukunft wohl fast alle Grafiken, welche eine manuelle Positionierung von Elementen erfordern, mit TikZ erstellen. Für den Rest bleibe ich bei GraphViz ‒ und dem darauf basierenden PlantUML für gelegentliche UML-Diagramme.
Weiter habe ich dieses Semester die Gelegenheit, einer Klasse das Programmieren von Grund auf beizubringen. Da ich nicht nur die üblichen zwei sondern gleich sechs Wochenlektionen hierfür zur Verfügung habe, bin ich vom üblichen Weg der Schule (mit C# und Visual Studio) abgewichen. (Ich wollte auch keinen Co-Pilot in der Entwicklungsumgebung haben, womit Programmieranfänger genau nichts mehr lernen.)
Ich habe mich für die Programmiersprache C auf einer WSL-Umgebung entschieden, wobei Nano als Texteditor zum Einsatz kommt. Auf eine IDE verzichte ich, stattdessen wird auf der Kommandozeile gearbeitet. Die Programme werden mit cc kompiliert. Ein Debugger steht nicht zur Verfügung.
Auch Theorie-Unterlagen gehe ich keine ab: Ich erarbeite die Theorie an der Wandtafel, und die Schüler müssen sich handschriftliche Notizen dazu anfertigen. Übungen stelle ich auf eine Webseite. Es ist gar nicht so einfach, sinnvolle Übungen zu entwickeln, wenn ein grosser Teil der Sprache noch gar nicht bekannt ist. Aber ich habe die Kurve wohl einigermassen gekriegt.
Auch an achim habe ich dieses Semester wieder gearbeitet. Neu kann man damit sogenannte Szenarien verwalten, womit pro Person mehrere virtuelle Maschinen bereitgestellt werden. Die initiale Konfiguration lege ich neu mithilfe von Cloud Init an, womit man u.a. sehr komfortabel Benutzer erstellen und mit SSH-Schlüsseln versehen kann. So kommt man grösstenteils ohne Ansible aus. Das Aktualisieren von SSH-Schlüsseln ist aber noch ein ungelöstes Problem; hier ist man nach wie vor auf Ansible angewiesen.
Angular? Rust? Haskell!
Im Frühling habe ich mich noch kurz erfolglos mit Angular befasst, im Sommer noch einmal mit Rust. Nach dem Sommerferien habe ich dann wieder einmal Haskell aufgegriffen. Dabei habe ich mit den Büchern Programming in Haskell und Learn You a Haskell befasst. Zusätzlich habe ich zwei Brettspiele entwickelt: Reversi (Othello) und Spot. Für Reversi habe ich eine Minimax-KI mit Alpha-Beta-Pruning entwickelt, was doch recht anspruchsvoll war. Die Ergebnisse dazu sind in meinem Repository daily-haskell zu finden.
Als ich dann im Oktober von Einzeldateien auf richtige Projekte mit Cabal umsteigen wollte, habe ich Haskell dann leider wieder fallengelassen. Der Unterricht (22 Wochenlektionen, was fast einem Vollpensum entspricht) hat mir kaum Zeit dafür gelassen. So werde ich mich bei anderer Gelegenheit einmal mit Cabal befassen und dann weiter Haskell lernen. Haskell gefällt mir nach wie vor, nur fehlte mir halt im Herbst die Zeit, um den Fokus aufrecht zu erhalten.
OpenBSD
Im Frühling habe ich mich anlässlich des Release 7.7 wieder einmal mit OpenBSD befasst und eine persönliche Dokumentationswebseite namens OpenBSD Journey erstellt. Lange habe ich mich aber nicht damit beschäftigt.
Erst, als im Herbst Version 7.8 freigegeben worden ist, habe ich mich erneut daran gewagt. Und dieses Mal habe ich das Desktop-Setup mit Ansible automatisiert, damit ich in Zukunft ausgediente Laptops schneller mit OpenBSD nutzen kann. Nächstes Jahr möchte ich mich dann mit dem Packet Filter (pf) befassen. Meinen Laptop habe ich damit nun schon ziemlich gut abgedichtet, sodass ich neben dem Web nur E-Mail und SSH durchlasse.
In diesem Kontext ist auch die zweite Ausgabe von Networking for System Administrators von Michael W. Lucas interessant. Das handsignierte Buch ist derzeit auf dem Weg zu mir; ich bin erneut im Anhang als Sponsor aufgeführt. Derzeit arbeite ich nebenher sein Buch httpd & relayd Mastery durch. Das Design von httpd begeistert mich wirklich. Es ist so wunderbar durchdacht und einfach gehalten. Gerne möchte ich in Zukunft einen produktiven Webserver mit OpenBSD betreiben.
Schreiben
Geschrieben habe ich dieses Jahr ‒ neben den beiden grossen Zusammenfassungen ‒ eher wenig. Auf meiner Hauptseite war es gerade ein einziger Artikel über Nebenläufigkeit in Elixir. Auf Read, Think, Write waren es knapp ein dutzend Beiträge.
Einiges an Text ist auf verschiedenen Modulwebseiten zusammengekommen: Modul 319, Modul 346, Modul 426 und Modul 450, wobei letztere auf der bereits genannten Zusammenfassung von Basiswissen Softwaretest basiert.
Von Diskussionsforen habe ich mich weitgehend zurückgezogen. Ich bin nur noch auf Foren für bestimmte Programmiersprachen oder Betriebssysteme unterwegs, oder gelegentlich auf StackOverflow. So schreibe ich diesen Dezember nach intensiven Teilnahmen in den vergangenen drei Jahren auch keine Beiträge mehr für den Debianforum-Adventskalender.
Meinen Account habe ich nach über 15 Jahren löschen lassen, nachdem ein von mir gestarteter Thread ohne Begründung und ohne Fehlverhalten meinerseits gesperrt worden ist. Ich will keine Zeit auf Plattformen verbringen, auf denen Diskussionen willkürlich unterbunden werden. Da schreibe ich lieber für meine eigenen Seiten. Meine bestehenden Beiträge auf dem Debianforum sind aber weiterhin lesbar.
In den letzten Wochen habe ich meine Freude an C wiederentdeckt. Zwar bietet die funktionale Programmierung sehr viele interessante Herausforderungen, die Beschäftigung mit Low-Level-Konzepten macht mir aber ähnlich viel Freude. Ich bin dann zufrieden, wenn ich an einem konkreten Problem zu beissen habe, das sich über wenige Zeilen Programmcode erstreckt.
Fazit
Ich habe dieses Jahr wieder verschiedenstes geleistet und gelernt, richtig fokussiert war ich dabei aber nicht. Das hat vielleicht auch damit zu tun, dass meine berufliche Situation derzeit keine längerfristige Planung zulässt. Eine konsequente quartalsweise Planung wäre aber durchaus möglich, was ich für 2026 auch angehen möchte. Aber davon mehr in einem anderen Beitrag…