- Hashcards ist eine Local-First-App für Spaced Repetition, ähnlich wie Anki oder Mochi, verwendet aber Markdown-Dateien statt einer Datenbank
- Jede Lernkarte wird als Klartext geschrieben und unterstützt die Formate Frage (Q), Antwort (A) und Cloze Deletion (C); die Wiederholungsplanung wird mit dem FSRS-Algorithmus verwaltet
- Kartendaten werden über Text-Hashwerte identifiziert, während der Wiederholungsverlauf in SQLite gespeichert wird; über ein Git-Repository sind Versionsverwaltung und Teilen möglich
- Das System wurde mit dem Ziel entwickelt, die Probleme von Ankis komplexer Oberfläche und Mochis ineffizientem Algorithmus zu lösen, mit Fokus auf minimale Eingabereibung und vollständige Datenhoheit
- Die Kombination aus Markdown-Basis, Git-Integration und FSRS-Scheduler bietet einen neuen Ansatz, mit dem Entwickler und Lernende transparentes und automatisiertes Lernmanagement umsetzen können
Überblick über Hashcards
- Hashcards ist ein lokal ausgeführtes Open-Source-System für Spaced Repetition, das ein Lernerlebnis ähnlich wie Anki oder Mochi bietet
- Die Wiederholungsplanung wird mit dem FSRS (Free Spaced Repetition Scheduler)-Algorithmus verwaltet
- Die Weboberfläche läuft auf
localhost:8000, und der Wiederholungsverlauf wird in einer SQLite-Datenbank gespeichert
- Der zentrale Unterschied ist die Struktur, bei der keine Datenbank für die Karten verwendet wird, sondern jede Lernkarte als Markdown-Datei verwaltet wird
- Beispiel:
Cards/Math.md,Cards/Chemistry.mdusw. - Jede Datei enthält mehrere Q/A- oder Cloze-Deletions-Karten
- Beispiel:
Textbasierte Kartenstruktur
- Lernkarten werden in einem einfachen Textformat geschrieben
Q:Frage,A:Antwort,C:Cloze-Deletion-Form- Beispiel:
Q: What is the role of synaptic vesicles? A: They store neurotransmitters for release at the synaptic terminal. C: Speech is [produced] in [Broca's] area.
- Da die Markdown-Syntax direkt genutzt werden kann, entsteht ein Arbeitsgefühl ähnlich wie beim Schreiben normaler Notizen
- Der Befehl zum Starten einer Wiederholung hat die Form
$ hashcards drill <path>
Designphilosophie und Vorteile
- Das Design von Hashcards setzt „reibungsloses Kartenschreiben“ als oberstes Ziel
- Wenn das Erfassen und Bearbeiten von Karten schnell und intuitiv ist, steigt das Lernvolumen
- Durch die Verwendung von eckigen Klammern (
[]) wird die Eingabe von Cloze Deletions verkürzt
- Die Integration mit Git-Repositories bietet unter anderem folgende Vorteile
- Versionsverwaltung, Änderungsverfolgung, Zusammenarbeit und öffentliches Teilen
- Karten können mit standardmäßigen Unix-Werkzeugen oder Skripten gesucht und bearbeitet werden
- Aus strukturierten Daten wie CSV lassen sich Karten automatisch erzeugen
- Karten werden über Text-Hashwerte identifiziert, wodurch stabile inhaltsbasierte Referenzen möglich sind
Bewertung bestehender Systeme (Anki, Mochi)
- Anki
- Vorteile: Open Source, FSRS-Unterstützung, umfangreiche Statistiken, automatische Kartenerzeugung über note types
- Nachteile: komplexe und wenig intuitive Oberfläche, Ineffizienz der WYSIWYG-Eingabe, Abhängigkeit von Plugins
- Mochi
- Vorteile: aufgeräumte UI, Markdown-basierte Eingabe, bedienung per Tastenkürzeln
- Nachteile: umständliche Cloze-Deletions-Syntax, keine note types, einfacher Algorithmus
- Der bisherige Algorithmus arbeitet mit einem einfachen Multiplier-Modell und ist für das langfristige Behalten ineffizient
- Kürzlich wurde zwar FSRS-Beta-Unterstützung hinzugefügt, die bestehenden Probleme bei der Kartenplanung bleiben jedoch bestehen
Implementierung und Workflow von Hashcards
- Nutzer können Karten direkt in einem Texteditor schreiben und bearbeiten
- Beispiel:
Q: What is the atomic number of carbon? / A: 6 - Auch mehrzeilige Karten oder komplexere Formate lassen sich innerhalb von Markdown natürlich ausdrücken
- Beispiel:
- Karten lassen sich leicht an verändertes Wissen anpassen
- Durch Markdown-Dateien pro Kapitel kann die Struktur eines Lehrbuchs nachgebildet werden
- Verwandte Konzepte können in benachbarten Karten angeordnet werden, was die Navigation bei Änderungen effizienter macht
- Mit Git-basierter Verwaltung lassen sich folgende Funktionen nutzen
- Vollständige Versionsverwaltung mit Commits, Branches, Merges, PRs usw.
- Teilen von Lernmaterial und Zusammenarbeit über öffentliche Repositories
Synergie des textbasierten Ansatzes
- Über Editor-Makros sind automatische Kartenerzeugung und Navigation möglich
- Mit Unix-Befehlen (
wc,awkusw.) lassen sich Kartenstatistiken und Massenänderungen durchführen - Mit Skripten und Makefiles können Karten aus externen Daten wie CSV automatisch erzeugt werden
- Über eine Veröffentlichung auf GitHub kann der persönliche Lernprozess geteilt werden, was zur Verbreitung einer Lernkultur beiträgt
Fazit
- Hashcards ist eine neue Form von Spaced-Repetition-System, die ein einfaches Textformat, einen fortgeschrittenen Scheduling-Algorithmus (FSRS) und Git-Integration kombiniert
- Es minimiert die Reibung beim Erstellen von Karten, garantiert vollständige Datenhoheit und bietet gleichzeitig Automatisierung und Skalierbarkeit
- Es wird als Werkzeug präsentiert, das sowohl Entwicklern als auch Lernenden eine transparente und kontrollierbare Lernumgebung bietet
1 Kommentare
Hacker-News-Kommentare
Ich denke, die eigentliche Stärke von spaced repetition liegt nicht bei Flashcard-Apps, sondern in der Verhaltensänderung
Zum Beispiel habe ich, nachdem meine Frau wegen eines Zahnproblems verärgert war, diese Situation in mein SRS aufgenommen, um mir anzugewöhnen, „emotional mitzufühlen und lange genug zuzuhören“
Selbst wenn ich diese 30-Sekunden-Wiederholung mein ganzes Leben lang mache, wird sie insgesamt nicht einmal 15 Minuten kosten
Seitdem habe ich denselben Fehler kein einziges Mal wiederholt, und meine Frau sagt, ich hätte mich komplett verändert
Der Kern ist, spaced repetition nicht als „Lernwerkzeug“, sondern als strukturiertes Verstärkungssystem zu sehen
Das Problem nicht zu lösen, sondern nur Mitgefühl zu zeigen, ist völlig anders als meine Denkweise
Wenn deine Frau zuerst einen Vorschlag ohne Empathie gemacht hätte, wärst du dann auch wütend geworden? Und wäre es dann ebenfalls schon zu spät gewesen?
Mich würde interessieren, ob du beim Eintragen ins SRS konkrete Episoden festhältst oder eher verallgemeinerte Muster. Ich würde auch gern wissen, wie Vorder- und Rückseite der Karten aufgebaut sind oder ob du ein Cloze-Format nutzt
Es ist naheliegend, solche Projekte mit Anki zu vergleichen, aber ich habe das Gefühl, dass viele Kritikpunkte an Anki subjektiv oder übertrieben sind
Ankis hierarchische Deck-Struktur ist eher eine Stärke, und WYSIWYG-Bearbeitung ist für die Zielgruppe eine ganz naheliegende Wahl
Auch LaTeX-Formeln lassen sich einfach verwenden, und Plugins sind ein „hackiges, aber nützliches“ Ökosystem
Ich habe viele Alternativen ausprobiert, komme am Ende aber immer wieder zu Anki zurück. Selbst für jemanden wie mich, der terminalbasierte Tools mag, ist es funktional genug
Wenn es bei dir Anklang findet, kannst du dir das Projekt ansehen, und wenn nicht, dann ignorier es einfach
Wenn Karten über den Hashwert des Textes identifiziert werden, frage ich mich, ob bei jeder Korrektur eines Tippfehlers der Wiederholungsverlauf der Karte verloren geht
Ich frage mich, ob ein spaced-repetition-basiertes soziales Netzwerk möglich wäre
Wenn man Beiträge im Feed wie „zur Wiederholung vormerken“ markieren könnte, könnte das eine Art Retweet werden, durch den sich dauerhaft wertvolle Inhalte verbreiten
Ich arbeite an einem knowledge base + spaced repetition-Projekt
Markdown-Dateien sind wirklich praktisch — man kann sie überall ansehen, mit Git versionieren und frei cross-linking betreiben
Projektlink: https://github.com/odosui/mt
Ich wollte lokale Notizen behalten und habe deshalb Cloud-basierte Lösungen vermieden, dabei aber entdeckt, dass es Tools gibt, die Markdown für Anki parsen
Wer Emacs benutzt, dem empfehle ich org-drill, ein plain-text-basiertes spaced-repetition-Tool
Ich habe eine Bibliothek namens Ankivalenz erstellt. Sie wandelt strukturiertes Markdown in Anki-Decks um
Zum Beispiel kann ein hierarchischer Pfad wie
Path: Solar System > Planets > Colorin Karten enthalten sein, sodass Wiederholung mit Kontext möglich wirdNormale Notizen und Karten können in derselben Markdown-Datei nebeneinander bestehen
https://github.com/vangberg/ankivalenz/
Schade ist, dass andere SRS-Projekte die Import-Funktion aus Anki nicht richtig umsetzen
Die meisten Nutzer haben bereits Tausende Karten in Anki und können deshalb nicht einfach wechseln
Das Datenformat von Anki ist komplex, aber da es auf SQLite basiert, kann es geteilt werden
Erst als ich Ankis Notiz–Modell–Template-Struktur verstanden habe, wurde mir klar, wie ausgefeilt sie ist
Wenn es ein textbasiertes teilbares Deck-Format gäbe, wäre Zusammenarbeit auf GitHub viel einfacher
Wenn jede Notiz als einzelne Datei vorläge und eine eindeutige ID hätte, wäre auch die Verwaltung von Updates leicht
Die Kernlogik ist jetzt als Rust-Crate ausgelagert, sodass man mit derselben DB relativ leicht alternative Frontends bauen kann
Ich habe für die Dateneingabe schon einmal Google Sheets verwendet
Wenn man jede Zeile per UUID eindeutig verwaltet, lässt sich auch bei Änderungen alles leicht nachverfolgen
Auf Basis derselben Daten kann man mehrere Decks erzeugen, etwa Chinesisch Pinyin → Hanzi und Hanzi → Englisch
Eine Oberfläche, die solche Tabellen mit einem Textformat als Backend verbindet, wäre wirklich großartig
Als jemand, der seit Langem spaced repetition nutzt, möchte ich ein paar Tipps teilen
1️⃣ Man muss entscheiden, was wichtig ist. Wenn man aus jeder Kleinigkeit Karten macht, wiederholt man jeden Tag Hunderte davon
2️⃣ Wichtige Konzepte sollten aus verschiedenen Karten bestehen, die das Verständnis aus mehreren Blickwinkeln prüfen
3️⃣ Nach einer gewissen Zeit sollte man zu Karten zweiter Ordnung oder zur tatsächlichen Anwendung übergehen. Wenn man ein Konzept ein Jahr lang kein einziges Mal benutzt hat, ist es vielleicht gar nicht wichtig
Unterm Strich ist spaced repetition ein sehr effizientes Lernwerkzeug, aber das größte Risiko ist eine falsche Priorisierung