Enkiplate: Japanse flashcards op e-paper
Functionaliteiten
Leerpad en inhoud
Het systeem volgt de route: Kana → woorden → kanji → zinnen. Je kunt beginnen met hiragana en katakana, of direct verder springen. Bekende woorden tonen ook hun gebruikelijke kanji (bijvoorbeeld: ねこ / 猫, いぬ / 犬, やま / 山).
Gespreide herhaling (Spaced Repetition)
Er wordt gebruikgemaakt van FSRS om herhalingen in te plannen met een streefretentie van 90%. Het starttempo ligt op 12 nieuwe kaarten per dag. Het niveau, het tempo en de automatische progressie kunnen worden aangepast in de browser.
Uitbreidingsmogelijkheden
De basis bestaat uit een gecureerde set van 12.000 veelvoorkomende JMdict-vermeldingen. Daarnaast is het mogelijk om eigen JSON-bestanden te importeren. Er is geen generatief model of AI-abonnement vereist.
Robuuste verbinding
Tot 16 volledige kaarten worden in cache op het apparaat opgeslagen. Antwoorden worden opgeslagen voordat men verder gaat en worden gesynchroniseerd met stabiele ID's. Hierdoor blijft de voortgang behouden, zelfs bij een onderbroken verbinding.
Dagoverzicht
Het apparaat toont de dagelijkse minimum- en maximumtemperatuur buiten, een weersymbool en de volgende drie geplande agenda-afspraken. De standaardlocatie is Bratislava.
Visueel ontwerp
Er zijn veertien verschillende schermontwerpen beschikbaar, waarbij 'Wave washi' de standaard is. Andere opties zijn onder andere 'terminal', 'large-print' en lichtere uitsneden, elk met bijbehorende touch-targets.
Privacy en focus
Geen streaks, geen accounts en geen pushmeldingen.
Uitproberen in de browser
Om de begeleidende app in de browser te testen, heb je Python 3.11+ en uv nodig. macOS is het geteste besturingssysteem; de service maakt gebruik van standaard Linux-compatibele Python-bibliotheken. Windows wordt momenteel niet ondersteund.
Installatie en start
git clone https://github.com/virpo/enkiplate.git
cd enkiplate
uv sync --frozen
uv run enki setup
uv run enki serve
Open vervolgens http://localhost:8787. Dit is de functionele begeleidende app die dezelfde 600 × 600 afbeeldingen met acht grijstinten verstuurt als naar de hardware. Verschillende ontwerpen zijn te bekijken via http://localhost:8787/designs.
Het commando setup downloadt de Engelse JMdict-bronnen en importeert veelvoorkomende vermeldingen. Volledige Japanse en Latijnse lettertypen zijn inbegrepen. Je kunt dit commando veilig opnieuw uitvoeren; de bestaande reviewgeschiedenis blijft behouden. Voor de eerste download van het woordenboek is internettoegang nodig.
Gebruik
- Spreek de lezing uit en, bij woorden en zinnen, de betekenis.
- Tik op Reveal.
- Beoordeel het zwakste onderdeel: missed (niet geweten), knew a little (een beetje geweten) of knew (geweten).
Installatie op Inkplate hardware
Het ondersteunde apparaat is de Soldered Inkplate 4TEMPERA, voorzien van een 600 × 600 touchscreen, ESP32, 4 MB flash en PSRAM. Andere Inkplates vereisen een firmware-port.
Configuratie
Volg de instructies voor firmware-setup en veilig flashen. Start daarna de begeleidende app op je vertrouwde netwerk:
uv run enki serve --host 0.0.0.0
Open de lokale app, kies Inkplate → Connect USB en voer je wifi-gegevens in. De app verstuurt het serveradres en een private apparaatsleutel via USB. Inloggegevens blijven opgeslagen in het NVS van het apparaat. Zorg dat de host-computer aan blijft staan en bereikbaar is voor nieuwe kaarten; reserveer hiervoor een vast LAN-adres in je router.
De begeleidende app kan kaarten overdragen en touch-antwoorden ontvangen via USB. Koppel USB in de app voordat je de firmware flasht. De eerste USB-laadbeurt is traag vanwege de 115200 baud-snelheid.
Weer en agenda
Weergegevens
Open-Meteo levert de dagelijkse temperatuurrange en het symbool, wat elke 30 minuten wordt vernieuwd. Deze versie gebruikt de coördinaten en tijdzone van Bratislava (Europe/Bratislava). Om dit aan te passen, wijzig je HOME_TIMEZONE in config.py en de coördinaten in context.py.
Agenda-integratie
In de sectie Calendar kun je een optionele private HTTPS .ics feed toevoegen. Voor Google Calendar gebruik je: Instellingen → jouw agenda → Agenda integreren → Geheim adres in iCal-formaat. Behandel deze link als een wachtwoord. Bij een nieuwe installatie is er geen agenda gekoppeld.
De service vernieuwt afspraken elke 10 minuten en toont de volgende drie tijdgebonden events, inclusief lopende afspraken. Het systeem breidt terugkerende events en wijzigingen uit, negeert hele-dag- en geannuleerde afspraken, en staat toe om specifieke titels of event-UID's uit te sluiten. Geen agenda-inhoud wordt naar een AI-service gestuurd. Het apparaat verbergt gecachte context na twee uur of wanneer de klok onbekend is.
Leerproces en import
Gebruik de sectie Learning om je startniveau te bepalen. Het geselecteerde niveau fungeert als vloer: het kiezen van 'woorden' slaat de kana-fase over, terwijl de geschiedenis behouden blijft. Instellingen bereiken een online apparaat normaal gesproken binnen 15 seconden.
Voor extra woordenschat of korte zinnen kun je imports gebruiken:
uv run enki import my-cards.json
Imports worden gecontroleerd op de lay-out van het papier voordat ze worden opgeslagen. Stabiele kaart-ID's zorgen ervoor dat de leergeschiedenis behouden blijft. Persoonlijke imports komen binnen in fase 4 en krijgen prioriteit over nieuwe woordenboekvermeldingen zodra die fase is bereikt.
Gegevensbeheer
Alle gegevens worden opgeslagen in de map data/ (die standaard in .gitignore staat). Gebruik de omgevingsvariabele ENKIDATADIR om een andere locatie te kiezen. Deze map bevat de SQLite-database, de apparaatsleutel, de optionele agenda-URL, logs, back-ups en hardware-flash back-ups. Houd deze map privé.
Je kunt een consistente back-up downloaden via de interface of via de opdrachtregel:
uv run enki backup ~/Downloads/enkiplate-backup.sqlite3
De service bewaart 14 automatische dagelijkse back-ups; handmatige back-ups worden niet verwijderd. Om te herstellen: stop de service, bewaar de oude datamap, kopieer de back-up naar data/enki.sqlite3 en behoud data/device-token zodat het apparaat opnieuw verbinding kan maken. Bewaar de data/ map bij updates.
Antwoorden die niet veilig kunnen worden toegepast, worden bewaard in een recovery-tabel en kunnen worden gedownload via Your data. Deze zijn inbegrepen in back-ups.
Opstarten bij login op macOS
Om de server automatisch te starten zonder handmatige actie:
- Stop eventuele handmatig draaiende servers.
- Voer uit:
uv run python scripts/install_service.py
Dit installeert een user LaunchAgent zonder dat administrator-rechten nodig zijn. De Mac moet wel aan staan (awake). Stop de service met: launchctl bootout gui/$(id -u)/io.virpo.enki.
Systeemarchitectuur
Het systeem is als volgt opgebouwd:
Inkplate touchscreen $\xleftarrow{\text{Wi-Fi of USB}}$ Companion op computer
- Apparaat: Gecachte kaartafbeeldingen, persistente antwoorden, weer + 3 events.
- Companion: FastAPI + Pillow renderer, FSRS + SQLite, JMdict + weer + ICS.
De host rendert typografie, papierstructuur en touch-targets tot 3-bit frames. De firmware verifieert gecomprimeerde frames voordat een nieuwe batch wordt geplaatst. Het apparaat vult de cache aan wanneer er nog zes kaarten over zijn en behoudt openstaande antwoorden na een herstart.
Belangrijke beperkingen
- Cache: De cache is eindig en bevat maximaal 16 kaarten, niet het volledige woordenboek. De host-computer is nodig om de cache aan te vullen. Je kunt inhoud toevoegen zonder de firmware te wijzigen.
- Gebruik: Dit is een apparaat voor op het bureau. Het scherm blijft aan. De batterijduur is niet gemeten. Firmware-updates gaan via USB; OTA en sleep-mode zijn niet geïmplementeerd.
- Netwerk: Gebruik een vertrouwde LAN. De hardware gebruikt lokale HTTP en een apparaatsleutel. Stel poort 8787 niet open naar het internet.
- Installatie: De broncode-checkout is de ondersteunde installatiemethode. De renderer heeft de mappen
enki/assets/enweb/nodig. Een standalone wheel is geen volledige distributie. - Inhoud: Japanse materialen vereisen menselijk oordeel. Woordenboekdefinities zijn ingekort. Imports moeten gecontroleerde lezingen en betekenissen hebben, vooral wat betreft partikels in zinnen.
Ontwikkeling en testen
Voor ontwikkelaars zijn de volgende commando's beschikbaar:
uv sync --frozen
uv run pytest -q
uv run ruff check enki_core --select F,E9
node --test tests/js/state.test.mjs
uv run python scripts/render_washi_ready.py
De Python-tests dekken onder andere scheduling, migraties, agenda-recurrentie, imports, schermpassing, integriteit van gecomprimeerde frames, sessie-refill en flash-layout protectie. Native tests maken gebruik van de vastgelegde ArduinoJson en Inkplate bibliotheek-headers.
Het script scripts/renderwashiready.py exporteert representatieve schermen zonder reviews te registreren.
Licenties en bronvermeldingen
De originele applicatiecode, documentatie, foto's en artwork zijn beschikbaar onder de MIT License. Third-party fonts, woordenboekdata en gekoppelde firmware-bibliotheken behouden hun eigen licenties (zie NOTICE.md).
- JMdict / Electronic Dictionary Research and Development Group: CC BY-SA 4.0.
- Open-Meteo: Forecast-data onder CC BY 4.0.
- Noto Sans JP, Manrope en IBM Plex Mono: SIL Open Font License 1.1.
- Soldered Inkplate library: LGPL-3.0.
Dit is een onafhankelijk project van Peter Hraska. Niet gelieerd aan Soldered, Anki of de uitgevers van het woordenboek.
Groetjes,