Post-Mortem in der Entwicklung

Ein Post-Mortem wird häufig im Projekt-Management eingesetzt, um zu analysieren, warum ein Projekt nicht erfolgreich abgeschlossen werden konnte. Im Bereich IT Operations habe ich das Konzept als RCA (Root Cause Analysis) kennengelernt. In der Software-Entwicklung habe ich dieses Konzept bisher noch nicht angetroffen. Auf Störungen im Betrieb wird meistens durch das Erstellen und Bearbeiten von Tickets reagiert. Wir haben Post-Mortem bei uns vor mehr als einem Jahr eingeführt und pflegen ein Dokument, in dem wir jeden Vorfall eintragen und die daraus abgeleiteten Maßnahmen protokollieren. ...

October 5, 2022 · 1 min · 188 words · Florian Sperber
Optional.get()

Optional.get()

Vor längerem bin ich über dieses Beispiel in unserem Code gestolpert. Aufgabe dieser Methode ist es eine Konfiguration auszulesen und (weil als String in der DB) in ein BigDecimal umzuwandeln. Tatsächlich versteckt sich hier eine Falle, da der Code davon ausgeht, dass immer ein Wert vorhanden ist (Optional.get()). Eine NoSuchElementException wird ebenfalls ignoriert. Da wir in diesem Programm viele tausend Belege täglich verarbeiten wollen, stellt sich jetzt die Frage, wie wir damit umgehen, wenn dieser (erwartete) Konfigurationswert doch fehlt. Ist unsere Anwendung dann in der Lage sich schnell und schmerzfrei von diesem Fehler zu erholen? ...

September 29, 2022 · 1 min · 140 words · Florian Sperber

Optional.ifPresent()

Basierend auf einer Entdeckung in einem unserer Projekte habe ich eine spannende Diskussion mit zwei KollegInnen im Team geführt. Im Code wurde if (optional.isPresent()) { verwendet, um dann mit optional.get() den Wert zu verwenden. Mein Vorschlag, besser ifPresent(...) zu verwenden, führte dann zu den erwähnten Diskussionen. Zur Verdeutlichung habe ich nachfolgend eine vereinfachte Version beider Möglichkeiten: class Scratch { public static void bad() { var optional = Optional.of("ABC"); if (optional.isPresent()) { System.out.println(optional.get()); } } public static void good() { var optional = Optional.of("ABC"); optional.ifPresent(value -> { System.out.println(value); }); } } isPresent() wurde, meinen Recherchen zufolge, dafür konzipiert, dem Nutzer von Optionals eine Möglichkeit zu geben, auf das Vorhandensein zu reagieren, ohne unbedingt den tatsächlichen Wert zu benötigen. ...

September 21, 2022 · 2 min · 255 words · Florian Sperber

Hallo Caddy, Adé Apache2

Seit langem betreibe ich einen (inzwischen kleinen) Server im Keller, auf dem via KVM verschiedene virtuelle Maschinen laufen. Zum einen Spielwiese, zum anderen “kostengünstiges” Hosting für meine eigenen kleinen Projekte. Da ich hauptsächlich mit Java unterwegs bin und das Webframework meiner Wahl Apache Wicket ist, läuft jede Webanwendung in einer eigenen virtuellen Maschine (Ubuntu Server 22.04LTS). Eine Zeitlang hatte ich lighttpd im Einsatz, bin dann aber, wegen irgendwelcher Probleme (ich glaube damals gab es noch keinen HTTP/2 Support in Verbindung mit der ReverseProxy-Funktion) zu Apache2 gewechselt, um die einzelnen VMs nach außen sichtbar zu machen. ...

September 16, 2022 · 2 min · 306 words · Florian Sperber
Move von gogs zu gitea

Move von gogs zu gitea

Die Tage habe ich von gogs nach gitea umgestellt. Dummerweise war meine Version von gogs tatsächlich zu neu, als das ich die Migrationswerkzeuge von gitea hätte nutzen können. Dank Atlassian habe ich eine Anleitung gefunden, in der vor allem folgender Befehl von Interesse war: git clone --mirror <url to ORI repo> temp-dir Da ich privat inzwischen einige private Repositories angesammelt habe, habe ich mir ein kleines Skript geschrieben, um die Tipparbeit zu reduzieren: ...

September 16, 2022 · 1 min · 173 words · Florian Sperber