Anki - intelligente Karteikarten, die wirklich hängen bleiben 🧠
Schritt 1: Komposition vorbereiten
AnkiWir istwollen, dass eine Domain eingerichtet wird, die mit https://... aufgerufen werden kann, weshalb ich mich für Caddy entschieden habe.
Erstelle einen Ordner hier: /opt/bookstack Und darin zwei Dateien: Caddyfile und docker-compose.yml
Füge dort den folgenden Inhalt ein freies und Open-Source-Programmpasse zumihn Lernenan:
BookStack-YML (aktivesdocker-compose.yml)
services:
undmariadb:
Spacedimage: Repetitionlscr.io/linuxserver/mariadb:latest
container_name: bookstack-mariadb
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
- MYSQL_ROOT_PASSWORD=PW_OF_MYSQL_ROOT
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=PW_OF_MYSQL_DB
volumes:
- ./mariadb:/config
restart: unless-stopped
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
depends_on:
- mariadb
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
- APP_URL=https://wiki.fabula.vision
# Wo wird BookStack aufrufbar sein? (verteiltesDeine Wiederholen)URL)
- APP_KEY=base64:...
Dadurch# lernstZum duGenerieren nichtdas nurausführen: „mehr“,docker sondernrun vor-it allem--rm dauerhafter.--entrypoint ✨/bin/bash lscr.io/linuxserver/bookstack:latest Derappkey
Name- „Anki“APP_THEME=custom
stammt#'custom' ausermöglich demes Japanischen „暗記“ und bedeutet wörtlich „Auswendiglernen“ bzw. „Memorisation“.
Warum Anki so gut funktioniert
1. Active Recall: Wissen aktiv herausholen
Statt Inhalte nurHacks zu lesennutzen; odermehr dazu hier: https://www.bookstackapp.com/hacks/applying/
- DB_HOST=mariadb
- DB_PORT=3306
- DB_DATABASE=bookstack
- DB_USERNAME=bookstack
- DB_PASSWORD=PW_OF_MYSQL_DB
# (Wie oben!)
- APP_DEFAULT_DARK_MODE=true
# (Geschmackssache)
volumes:
- ./bookstack:/config
restart: unless-stopped
caddy:
image: caddy:latest
container_name: caddy
depends_on:
- bookstack
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy/data:/data
- ./caddy/config:/config
restart: unless-stopped
Caddyfile
wiki.fabula.vision {
# Deine URL natürlich...
encode zstd gzip
# Reverse Proxy zu markieren,BookStack zwingt(Container dichheißt eine Karteikarte, die Antwort selbst zu produzieren. Dieses aktive Abrufen ist deutlich effektiver als passives Wiedererkennen.
2. Spaced Repetition: Wiederholen im richtigen Moment
Anki zeigt dir Karten nicht zufällig"bookstack", sonderninterner dann,Port 80)
reverse_proxy bookstack:80
# sinnvolle Header (optional)
header {
# HSTS (nur setzen, wenn du siesicher vermutlich gerade zu vergessen drohst. So investierst du Zeit dort, wo sie den größten Effekt hat:
Der „Motor“ dahinter: Algorithmen (SM‑2 & FSRS) ⚙️
Historisch basiert Anki auf dem SM‑2-Ansatz (bekannt aus SuperMemo), wurde aber über die Jahre stark angepasst und deutlich konfigurierbarer gemacht.
Seit Anki 23.10 gibt es zusätzlich FSRS (Free Spaced Repetition Scheduler) als optionalen, modernen Scheduler. FSRS versucht, Wiederholungen noch genauer zu timen, indem es Gedächtniszustände modelliert (u. a. Schwierigkeit, Stabilität und Abrufbarkeit). In der Praxis berichten viele,bist, dass damitHTTPS beidauerhaft gleicheraktiv Ziel-Behaltensquotesein wenigersoll)
ReviewsStrict-Transport-Security nötig"max-age=31536000; sindincludeSubDomains; –preload"
geradeX-Content-Type-Options bei"nosniff"
großenX-Frame-Options Lernprojekten.
Referrer-Policy "strict-origin-when-cross-origin" } }
Wie Anki aufgebaut ist: Notes vs. Cards 📌
Ein Schlüsselkonzept, das Anki von vielen simplen Karteikarten-Apps unterscheidet:
Das ist praktisch, weil du aus einer Notiz mehrere Blickwinkel erzeugen kannst – und Korrekturen an einem Feld automatisch alle Karten aktualisieren.
Beispiel (Sprachenlernen)
Eine Notiz könnte so aussehen:
Daraus lassen sich mehrere Karten bauen, z. B.:
FranzösischIns→VerzeichnisDeutsch/Englischwechseln:
cd /opt/bookstack/AudioUnser→ZeugsWortinstallieren:dockererkennencompose up -d
Aktualisieren geht dann so:
docker compose pull;docker compose up -dDeutsch/EnglischFertig,→aberFranzösischnunproduzierenschnell die URL aufrufen und die Standard-Zugangsdaten ändern!
Standard-Login (User + Passwort):admin@admin.com+password
Cloze Deletion: Lücken lernen wie in echten Texten ✍️
Anki hat einen eingebauten Cloze-Notiztyp: Du markierst Teile eines Satzes als Lücke, z. B.:
Jede Cloze-Markierung erzeugt automatisch eine eigene Karte. Das ist besonders beliebt für:
Beschränkungen & Jura (Definitionen, Klassifikationen)
Inhalte: von Text bis LaTeX und Audio 🎧📷
Anki ist inhaltlich agnostisch: Karten können u. a. enthalten:
Die lokalen Daten werden typischerweise in einem SQLite-Format gespeichert – gut für Stabilität und Portabilität.
Sync & Plattformen: Desktop als Zentrale, Mobile als Begleiter 📱💻
Typisch ist dieser Workflow:
Dazu gibt es mehrere „Bausteine“:
Außerdem existieren Möglichkeiten zum Self-Hosting (z. B. Sync-Server), was für fortgeschrittene Nutzer interessant ist, die Unabhängigkeit oder interne Infrastruktur möchten.
Add-ons & Community: Anki ist ein Baukasten 🧩
Ein großer Pluspunkt ist das Ökosystem aus Add-ons (Erweiterungen). Damit kannst du Anki z. B. aufrüsten um:
Shared Decks: schnell starten – aber mit Bedacht 📚
Module/Hacks
Es gibt einedrei großeEinschränkungen, Sammlungdie anich geteiltenbisher Decks,festgestellt etwa für:habe:
Sprachen(häufig nach Wortfrequenz sortiert)
medizinische DecksE-Mail-Versand (z. B. große„Passwort Community-Decksvergessen“) rundfunktioniert umnicht, USMLE)bzw. meine Experimente haben noch keine Lösung hervorgebracht und ich brauche das auch nicht zwingend. Aber wenn man z.B. Kommentare aktivieren will (User bekommen eine Benachrichtigung, wenn ihre Seiten kommentiert werden), dann kommt man da nicht drumherum. Mehr dazu hier.
TrotzdemMan gilt oftkann die Faustregel:
Funktionalität mit sogenannten Eigene„Hacks" Kartenerweitern sindund meistich wertvollerkann alszwei fremde, weil du beim ErstellenHacks schon lernstmal und die Inhalte besser zu deinem Kontext passen.empfehlen:
Wofür Anki besonders stark ist (und wofür weniger)
✅ Ideal für …
⚠️ Weniger ideal für …
Mini-Leitfaden: So nutzt du Anki „smart“ 😌
Kartenhttps://www.bookstackapp.com/hacks/mathjax-tex/
Mathe-Formelnklein halten („atomic“)Lieberhttps://www.bookstackapp.com/hacks/mermaid-viewer/
(Mermaid-)Diagrammeeinedarstellen;
Allerdings profunktioniert Kartedas nicht mit der Export-Funktion, d.h. wenn ein Besucher Buch X als einPDF ganzesbeispielsweise Kapitel.exportiert, dann sieht er statt Formeln und Diagrammen nur Code-Blöcke.
Und das mit dem Exportieren funktioniert eh leider nicht bei mir, habe keine Ahnung warum und deshalb die Funktion einfach deaktiviert.
Ok, aber wie installiert man nun die Hacks? – Also den ersten Schritt haben wir getan, indem wir oben (in der YML-Datei) APP_THEME=custom definiert haben, was dafür sorgt, dass fortan Module geladen werden können, die sich hier befinden /opt/bookstack/bookstack/www/themes/custom/modules
Nun muss man per SSH das eingeben:
docker exec -it bookstack /bin/bash Damit kann man dann Befehle „von innen“ heraus ausführen;
Dann: cd /app/www/;
Und dort dann das Kommando ausführen, das hier angezeigt wird (am Beispiel Mermaid):https://www.bookstackapp.com/hacks/mermaid-viewer/ (Dort dann im Abschnitt: „Install as Module“)
Kontext hinzufügen
Hier (https://example.com/settings/customization) bei „Custom HTML Head Content“ diesen Code eintragen:
<script>
window.addEventListener('editor-markdown::setup', event => {
event.detail.markdownIt.set({breaks: true});
});
</script>
Dann importierenhier
functions.php anlegen:/opt/bookstack/bookstack/www/themes/Mit dem folgenden Inhalt:
<?php
use BookStack\Theming\ThemeEvents;
use BookStack\Facades\Theme;
Theme::listen(ThemeEvents::COMMONMARK_ENVIRONMENT_CONFIGURE, function ($environment) {
$environment->mergeConfig([
'renderer' => Quantität.[
Schlechte'soft_break' Karten=> erzeugen"<br>",
Frust]
und]);
Review-Berge.return $environment;
});
Fazit:
Anki
Weitere istQoL-Fixes kein(einzustellen hier: https://example.com/settings/customization)
Einfach unter „Trick“,Custom sondernHTML einHead SystemContent“ ✅eintragen:
AnkiBlockquotes isthaben keinen dicken Rand unten (liegt am CSS, weil u.a. alle <p>-Elemente margin-bottom haben):
<style>
/* 1) Letztes & erstes direktes Kindelement im KernBlockquote: einMargin Werkzeug*/
.content-wrap blockquote > :last-child {
margin-bottom: .3em;
}
.content-wrap blockquote > :first-child {
margin-top: .3em;
}
/* 2) Blockquote: keine Scrollbalken */
.content-wrap blockquote {
overflow: visible; /* Standard „ohne Scrollen“ */
overflow-x: visible;
overflow-y: visible;
}
</style>
Codeblöcke haben Soft-Wraps (also man muss nicht horizontal scrollen, um die ganze Zeile zu sehen):
<script>
window.addEventListener('library-cm6::pre-init', dasevent wissenschaftlich=> gut{
begründeteconst Lernprinzipiendetail in= einenevent.detail;
alltagstauglichenconst Workflowconfig gießt.= Werdetail.editorViewConfig;
esconst klugEditorView einsetzt,= bautdetail.libEditorView;
sichif damit(detail.usage über=== Monate'content-code-block') und{
Jahreconfig.extensions.push(EditorView.lineWrapping);
ein}
erstaunlich});
stabiles</script>
Wissensfundament
Text im Dark-Mode heller machen:
<style>
/* Textfarben im Dark Mode auf –'white' egalsetzen ob*/
fürhtml.dark-mode Sprachen,body Studium,{
Berufcolor: oderwhite; persönliche/* Projekte.Haupttext 🌿*/
}
</style>