Der Titel 'Hymnos' erklärt sich durch eine Konzentration an Liegetönen und ihren Obertönen, die in der Mitte des Stückes den Eindruck eines Chores erwecken, der aber in Wirklichkeit gar nicht anwesend ist.
Die kleine Utility-Klasse erlaubt es Dateien in ein Archiv zu kopieren, in einer Jahr/Monat/Tag-Struktur abgelegt und versehen mit einem Zeitstempel.
Beispiel: daten.txt wird kopiert nach /archiv/2020/11/09/1604953664_daten.txt.
Spannendes Detail: Mit dem Package vfsStream kann ein virtuelles Dateisystem im Speicher erstellt werden, in welchem bequem und ohne Seiteneffekt die Unittests ablaufen.
Den folgenden Text habe ich am 15. Oktober 2020 an die API-Newsletter-Liste verschickt. Trag dich in den Newsletter ein um auf dem Laufenden zu bleiben.
Christian
Eine denkwürdige Badesaison ist zu Ende gegangen: Bis spät in den September war die Aare für Normalsterbliche bebadbar. Neue Wörter in unserem Wortschatz. Das Virus brauchen wir gar nicht erst zu erwähnen.
Was wir diesen Sommer getan haben
Wir hatten keine grösseren Ausfälle zu verzeichnen, die APIs liefen stabil. Im Hochsommer gibt es jeweils knapp 5 Millionen Zugriffe pro Monat, selbst im Oktober kommen täglich noch um die 50’000 Requests rein.
Die Dokumentationen sind hübscher geworden. Und mit OpenAPI/Swagger-Definitionen auch praktischer:
Für Integrationen in IoT-Dings und Wearables und anderen Geräten mit wenig Rechenpower gibt es beim Aare.guru neu einen values-Parameter welcher ausgewählte Werte als Text zurück liefert. Nachwievor ist die API auch per HTTP erreichbar.
Neue Daten in der Aare.guru-API: Koordinaten der Messstationen sowie den Temperatur-Text im Kurzformat (text_short / temperature_text_short, weniger als 15 Zeichen).
Aare.guru-API-Responses werden standardmässig mit einer Cachezeit von 120 Sekunden zurückgegeben. Vielleicht stillt das etwas den Datenhunger einiger Integrationen.
Was wir im Winter so treiben
Hintendurch wird das Backend sanft renoviert und modernisiert: Bessere Testabdeckung, bessere Alarmierung, bessere Abläufe beim Datenimport, ein bisschen Modularisierung und Opensourcerierung (Siehe PHP-Packages parse-swissmetnet & parse-hydrodaten).
Auf der Existenz-API ist jeweils nur ein Teil der historischen Daten verfügbar (30-90 Tage), das wird wahrscheinlich so bleiben. Allerdings möchte ich unser gesamtes Datenarchiv öffentlich anbieten, voraussichtlich in einer InfluxDB, sobald deren Version 2 released ist. Dann wird’s dann auch ein Grafana zum drin Rumspielen geben.
Im Rahmen eines Code-Refactoring (auch Refaktorisierung, Refaktorierung oder Restrukturierung) habe ich nach Jahrzehnten von PHP-Coden mein erstes Composer-Package geschrieben und publiziert: cstuder/parse-swissmetnet.
Für die Browser Firefox und Google Chrome habe ich bereits Browser-Plugins geschrieben, welche dir die aktuelle Aare-Temperatur jederzeit auf den Desktop holen. Für Safari ist die Sache leider komplizierter und nicht so einfach möglich.
Bei der diesjährigen Advend Of Code-Herausforderung kam ich 12 Tage weit bis der Vor-Weihnachtsrummel Überhand nahm. Das ist eine neue persönliche Bestleistung, danke auch an Bruder R. für den Ansporn.
Eine Spezialität von Advent Of Code ist dass jede Aufgabe in zwei Teilen gestellt wird: Erst nach dem erfolgreichen Lösen des ersten Teiles erfährt man die restlichen Anforderungen.
Zusätzlich gabe es auch dieses Jahr eine Meta-Aufgabe: Das Schreiben einer einfachen virtuellen Maschine über mehrere Tage hinweg.
Schreib dein Annahmen als Kommentar in den Code
Gerade die Zwei-Teilung der Aufgaben macht es wichtig, alle getroffenen Annahmen im Code entsprechend zu dokumentieren.
Wer hingegen schon im ersten Teil versucht allen möglichen neuen Anforderungen des zweiten Teils zu antizipieren, wird vielen unnützen Code schreiben. Der einfachere Ansatz ist es sich an die aktuelle Aufgabe zu halten. Erst wenn die neuen Spezifikationen bekannt sind, ist es Zeit die getroffenen Annahmen zu überprüfen.
Unittesting beruhigt
Die virtuelle Maschine welche in den ersten 10 Tagen entsteht wird mit jedem Tag komplizierter. Da beruhigt es ungemein alle Beispiele (und vorangegangene Aufgaben) als Unittests für die aktuelle Implementation zu einer Testsuite zusammengefügt zu haben.
Java 13 ist angenehm
Mit jeder neuen Java-Version kommen mehr praktische Features in der Sprache an. Die 13 macht deutlich mehr Spass als alles was vor Version 8 war.
(Natürlich eignen sich für Advent Of Code dynamische Sprachen wie Python oder Ruby was die Implementationsgeschwindigkeit angeht noch immer tausendmal besser…)
Ich freue mich bereits auf nächstes Jahr und bin schon gespannt, welche Sprache ich nächsten Dezember wählen werde.