So läuft ein Lerntag
Die App hat fünf gleichwertige Bereiche: Tagestext, Lernen, Wörter, Fortschritt und Einstellungen. Wer „Lernen“ öffnet, sieht sofort eine Karteikarte. Eine Runde besteht zuerst aus fälligen Wiederholungen, die ältesten zuerst, und wird mit neuen Wörtern aufgefüllt, bis die eingestellte Rundengröße erreicht ist. Dahinter steckt ein Kastensystem mit fünf Kästen: Ein gewusstes Wort rückt einen Kasten vor und kommt nach 1, 3, 7 oder 14 Tagen wieder, ein falsch beantwortetes fällt zurück in Kasten 1 und kommt noch in derselben Runde dran.
Sprachausgabe
Jedes Wort lässt sich vorlesen, über die Sprachausgabe des Geräts.
Merkhilfen
Alle 589 Wörter haben einen Tipp auf der Rückseite der Karte: Klangbrücke, Wortfamilie oder falscher Freund.
Freischaltung nach Datum
Der Lernstoff bis Jahresende liegt schon auf dem Server. Jeder Tag wird erst an seinem Datum freigeschaltet.
Die Entscheidungen, auf die es ankam
Der Lernstand bleibt im Browser
Den Lernstand halte ich im Browser statt auf dem Server. Damit brauche ich keine Datenbank, keine Konten und speichere keine personenbezogenen Daten. Der Preis dafür: Sichern muss der Nutzer selbst. Deshalb kann die App den Lernstand als Datei speichern und wieder laden, und die Anleitung erklärt das an erster Stelle. Private Dateien im Webordner sind von außen gesperrt.
Kein täglicher Abgleich nötig
Den Lernstoff für das ganze restliche Jahr habe ich in einem Lauf vorbereitet und hochgeladen. Damit nicht alles auf einmal sichtbar ist, schaltet die App jeden Tag selbst den nächsten frei. Vorher musste ich jeden Tag vom PC aus abgleichen, jetzt bis Jahresende gar nicht mehr.
Merkhilfen mit eingebauter Prüfung
Ein Merktipp, der die Übersetzung verrät, macht die Karte wertlos. Das Skript, das die Tipps einpflegt, bricht deshalb ab, wenn ein Tipp die erste deutsche Bedeutung enthält. Beim Einpflegen hat es 15-mal angeschlagen, darunter bei sieben Tipps, die schon drin waren.
Die Sprachausgabe, die nicht ging
Eines Tages blieb die Sprachausgabe auf dem iPhone stumm. Ich habe zuerst im Code gesucht, der war aber gegenüber der letzten funktionierenden Fassung unverändert, und die Datei auf dem Server hatte dieselbe Prüfsumme. Ein zweites Gerät brachte den nächsten Verdacht: Auf einem älteren Handy ging es, auf dem iPhone lief eine Beta-Version des Betriebssystems.
Die Ursache war am Ende viel einfacher: der Stummschalter. Auf iOS hängt die Sprachausgabe im Browser an diesem Schalter, Musik und Videos ignorieren ihn. Deshalb bewies „Musik geht, YouTube geht“ nichts. Eine kleine Testseite, die Stimmen und Ereignisse der Sprachausgabe anzeigt, hatte die Software zuvor vollständig entlastet.
Bei einem gemeldeten Fehler frage ich zuerst, wo er nicht auftritt. Die Reihenfolge seitdem: erst ein zweites Gerät, dann die naheliegenden Schalter, dann der Code. Unterwegs habe ich eine echte Schwachstelle trotzdem behoben: Die App leerte vor jeder Ausgabe die Warteschlange, was auf iPhones die nächste Ausgabe verschlucken kann.
Den eigenen Lernstand ausgewertet
Nach gut zwei Monaten habe ich meinen Lernstand ausgewertet und einen Fehler in meiner Einstellung gefunden. Der tägliche Wiederholungsbedarf lag bei knapp 17 Karten, die Runde war auf 15 begrenzt. Damit kam praktisch nie ein neues Wort dran, und die Warteschlange konnte gar nicht kleiner werden. Die App war nicht falsch, aber die Zahl, die ich eingestellt hatte, passte nicht zu meinem Tempo.
Technik
| Teil | Womit |
|---|---|
| Anwendung | eine HTML-Seite mit JavaScript, Lerninhalte in einer JSON-Datei, Lernstand im localStorage, Sicherung als Datei |
| Inhalte | ein PowerShell-Skript holt den Tagestext auf Englisch und Deutsch, die Wortlisten entstehen mit KI-Hilfe und werden geprüft eingepflegt |
| Betrieb | nginx auf dem Raspberry Pi 5, eigene Subdomain, Let's Encrypt, Sync-Skripte in beide Richtungen |
| Gestaltung | warme Lesefarben und Serifenschrift für Texte. Die Kopfzeile am Handy habe ich aus drei fertig gerenderten Varianten ausgewählt |