Teil 3 endete mit einer Beobachtung: Begründungen altern schneller als Code, und niemand beschwert sich, wenn sie abgelaufen sind. Daraus folgte eine naheliegende Frage — wenn dieser Fehlertyp existiert, wie viele davon stecken noch in der Station? Der 12. September war der Versuch, das systematisch herauszufinden.

Teil 4 von 4 — die Entwicklung von Mai bis September. Vorher: Teil 1 · Mai, Teil 2 · Juni und Teil 3 · September. Was die Station heute kann, steht in FT8 ohne Bildschirm. Die Station wird besetzt betrieben — ein Funkamateur beaufsichtigt sie und kann sie jederzeit anhalten.

Drei Fragen an jede Zahl

Der Durchgang folgte einem einfachen Raster. An jede Zahl, jede Regel und jeden Mechanismus in der Station wurden dieselben drei Fragen gestellt:

  1. Woher stammt diese Zahl — ist sie gemessen, übernommen oder geraten?
  2. Wann hat sie zuletzt nachweislich gewirkt?
  3. Was passiert, wenn die Eingabe fehlt oder das Programm neu startet?

Dazu eine Bedingung, die den Unterschied macht: Jede Antwort musste mit einer Messung belegt werden, nicht mit dem Kommentar im Quelltext. Der Kommentar beschreibt, was jemand einmal gemeint hat. Die Messung beschreibt, was heute passiert.

Zwei Wörter, die nicht zusammenpassten

Der erste Fund kam aus der Frage nach den Uploads. Jedes abgeschlossene QSO wird an zwei Logbuchdienste übertragen. Zwei Einträge hingen seit dem Vortag fest — dreizehn Stunden, dreizehn Versuche, immer derselbe Ablauf.

Der Dienst antwortete jedes Mal mit dem Wort Dupe: Das QSO liegt dort längst, alles in Ordnung. In unserer Station stand jedoch die Schreibweise duplicate in der Liste der erwarteten Antworten — so, wie sie in der Dokumentation des Dienstes steht. Nur antwortet er eben anders. Die beiden Wörter fanden nie zueinander, also galt die Antwort als Fehler, und der Versuch wurde stündlich wiederholt.

Dieselbe geratene Schreibweise stand an einer zweiten Stelle noch einmal, und dort war sie gefährlicher: Werden mehrere QSOs gemeinsam übertragen und der Dienst weist die Sendung zurück, galt bisher die gesamte Ladung als erledigt. Ein einziges bereits vorhandenes QSO hätte alle anderen mitgerissen — unbemerkt.

Aufgefallen wäre das übrigens auch weiterhin nicht: Ein Wächter überwacht die Uploads, aber er zählt abgestürzte Vorgänge. Hier stürzte nichts ab. Es lief nur ins Leere.

Die seltensten Inseln der Welt waren unsichtbar

Der zweite Fund brauchte einen Umweg. Eine Filterregel soll Stationen erkennen, die gerade von vielen gleichzeitig gerufen werden — typischerweise seltene Inseln, auf denen für ein paar Tage eine Expedition funkt. Diese Regel hatte in vierzehn Tagen kein einziges Mal gegriffen.

Die naheliegende Erklärung: Solche Expeditionen sind selten, da war eben keine. Die Messung sagte etwas anderes. Die Seltenheitsbewertung der Station benutzt intern die Kürzel einer Länderdatenbank, in der Crozet als FT/w geführt wird. Nachgeschlagen wurde darin aber mit dem Anfang des Rufzeichens — und Crozet funkt als FT8WW. Ein Kürzel mit Schrägstrich kommt in keinem Rufzeichen vor.

Fünf der am höchsten bewerteten Gebiete der Welt — Crozet, Glorioso, Juan de Nova, Tromelin und Bouvet — hatten deshalb denselben Wert wie eine Nachbarstation aus Deutschland: null. Nicht die Regel war untätig. Sie konnte gar nicht auslösen.

Was ohne Spur arbeitet, kann niemand beurteilen

Eine Regel schaltet nach einer Pechsträhne auf strengere Auswahlkriterien um — weniger als zwei Abschlüsse in zwanzig Anrufen. Ob sie das je getan hat, war schlicht nicht feststellbar: keine Meldung, keine Anzeige, nichts. Rechnerisch müsste sie regelmäßig greifen, die längste Serie ohne Abschluss lag in sieben Tagen bei 83 Anrufen.

Das ist der unauffälligste Fehlertyp von allen. Der Mechanismus ist womöglich völlig in Ordnung — nur lässt sich das weder bestätigen noch widerlegen. Er bekam eine Meldung und eine Anzeige; ob er taugt, entscheidet sich in den nächsten Wochen an Zahlen.

Die Aufzeichnungen lagen im Arbeitsspeicher

Der Fund mit den weitesten Folgen kam aus einer Nebenfrage. Wenn zwei Mechanismen sich nur ins Systemprotokoll melden — wie lange bleibt das eigentlich lesbar?

Antwort: bis zum nächsten Neustart. Das Betriebssystem des Raspberry Pi legt das Protokoll in den Arbeitsspeicher, um SD-Karten zu schonen. Diese Station bootet seit Anfang September von einer NVMe-Platte, wo das kein Thema ist — die Einstellung galt trotzdem weiter. Der älteste Eintrag war stets exakt der Startzeitpunkt.

Das betrifft nicht nur Auswertungen. Nach einem Absturz mit anschließendem Neustart wäre genau die Spur verschwunden gewesen, die man dann sucht. Seit dem 12. September liegt das Protokoll auf der Platte; nachgewiesen mit einer Markierung, die vor einem Neustart geschrieben wurde und danach noch da war.

Ein Fehler war der eigene vom selben Vormittag

Am Morgen desselben Tages war eine neue Messreihe entstanden: der Rauschpegel des Bandes zwischen den Aussendungen. Nach sechs Stunden lagen 275 Messungen vor — jede einzelne exakt derselbe Wert.

Der Grund stand seit Langem im eigenen Quelltext, an anderer Stelle: Das Signalstärke-Instrument dieses Funkgeräts liefert über die verwendete Steuerungsbibliothek keinen brauchbaren Wert, weshalb der Empfangspegel dort aus dem Audiostrom bestimmt wird. Die neue Messreihe griff trotzdem auf das Instrument zu. Sie sah aus wie eine Messung und war keine.

Das ist die unbequemste Lehre des Tages: Die drei Fragen gelten auch für die eigene Arbeit von vorgestern — und für die von heute Vormittag.

Was der Tag gebracht hat

Fünfzehn Fehler, dazu zehn Stellen, an denen ausdrücklich kein Fehler war — belegt, nicht vermutet. Die zweite Gruppe ist die wichtigere Hälfte: Dass die Sendefrequenz innerhalb des Bandes keinen messbaren Einfluss darauf hat, wie gut wir gehört werden (über 4357 Empfangsberichte hinweg), spart künftig die Arbeit, daran zu drehen.

Vier Suchmuster haben dabei praktisch alles gefunden, was zu finden war:

  • Was arbeitet ohne Spur? Ein Mechanismus ohne Meldung und ohne Anzeige ist nicht bewertbar.
  • Welche Datenquelle ist leer, ohne dass es auffällt? Eine Regel ohne Treffer kann überflüssig sein — oder blockiert.
  • Treffen zwei Benennungen aufeinander? Dupe gegen duplicate, Länderkürzel gegen Rufzeichenanfang.
  • Welcher Zustand lebt nur im Arbeitsspeicher? Eine tägliche Aufgabe, die nach jedem Programmstart erneut lief, hatte in sieben Tagen 49 statt sieben Durchgänge — und die sieben aufbewahrten Datenbanksicherungen deckten dadurch zusammen knapp drei Stunden ab statt einer Woche.

Jeder dieser Fehler war für sich unspektakulär. Gemeinsam haben sie eine Eigenschaft: Keiner davon hat je eine Fehlermeldung erzeugt. Die Station lief die ganze Zeit, machte QSOs und meldete nichts. Genau das macht diese Sorte Fehler teuer — nicht der Schaden im Einzelfall, sondern dass nichts darauf hinweist.

Fragen, Ideen oder Interesse am Nachbau: über das Impressum oder direkt über die Projektseite.