- Hashcards est une application de répétition espacée (spaced repetition) local-first, similaire à Anki ou Mochi, mais qui utilise des fichiers Markdown au lieu d’une base de données
- Chaque flashcard est rédigée en texte brut et prend en charge les formats question (Q), réponse (A) et cloze deletion (C), avec une planification des révisions gérée par l’algorithme FSRS
- Les données des cartes sont identifiées par le hash du texte, tandis que l’historique de révision est stocké dans SQLite ; le versioning et le partage sont possibles via un dépôt Git
- Le projet a été conçu pour résoudre les problèmes de l’interface complexe d’Anki et de l’algorithme inefficace de Mochi, avec pour objectif de réduire au minimum la friction de saisie et garantir une propriété totale des données
- La combinaison d’une base Markdown, de l’intégration Git et du planificateur FSRS propose une nouvelle approche permettant aux développeurs et aux apprenants de mettre en place une gestion de l’apprentissage transparente et automatisée
Présentation de Hashcards
- Hashcards est un système open source de répétition espacée exécuté en local, offrant une expérience d’apprentissage proche de celle d’Anki ou de Mochi
- Le planning de révision est géré par l’algorithme FSRS (Free Spaced Repetition Scheduler)
- L’interface web s’exécute sur
localhost:8000, et l’historique des révisions est stocké dans une base de données SQLite
- Sa différence clé est une architecture qui n’utilise pas de base de données pour les cartes, celles-ci étant gérées sous forme de fichiers Markdown
- Exemple :
Cards/Math.md,Cards/Chemistry.md, etc. - Chaque fichier contient plusieurs cartes Q/A ou cartes à trous (C)
- Exemple :
Structure des cartes basée sur du texte
- Les flashcards sont écrites dans un format texte simple
Q:pour la question,A:pour la réponse,C:pour la forme cloze deletion- Exemple :
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.
- Comme la syntaxe Markdown peut être utilisée telle quelle, l’expérience se rapproche de la prise de notes classique
- La commande pour lancer une révision prend la forme
$ hashcards drill <path>
Philosophie de conception et avantages
- La conception de Hashcards donne la priorité absolue à la « rédaction de cartes sans friction »
- Si la saisie et l’édition des cartes sont rapides et intuitives, le volume d’apprentissage augmente
- L’utilisation de crochets (
[]) permet d’accélérer la saisie des cartes à trous (sans nécessiter la touche Shift)
- L’intégration avec un dépôt Git apporte notamment les avantages suivants
- gestion de versions, suivi des modifications, collaboration et partage public
- recherche et modification des cartes via des outils Unix standard ou des scripts
- génération automatique de cartes à partir de données structurées comme du CSV
- Les cartes sont identifiées par le hash du texte, ce qui permet une référence stable fondée sur le contenu
Évaluation des systèmes existants (Anki, Mochi)
- Anki
- Points forts : open source, prise en charge de FSRS, statistiques riches, génération automatique de cartes (note types)
- Points faibles : interface complexe et peu intuitive, inefficacité de la saisie WYSIWYG, dépendance aux plugins
- Mochi
- Points forts : interface épurée, saisie basée sur Markdown, navigation centrée sur les raccourcis clavier
- Points faibles : syntaxe de cloze deletion verbeuse, absence de note types, algorithme simpliste
- L’algorithme existant repose sur un système simple de multiplicateurs, inefficace pour la rétention en mémoire à long terme
- Une prise en charge bêta de FSRS a été ajoutée récemment, mais les problèmes de planification des cartes existantes persistent
Implémentation et workflow de Hashcards
- L’utilisateur peut écrire et modifier directement les cartes dans un éditeur de texte
- Exemple :
Q: What is the atomic number of carbon? / A: 6 - Les cartes sur plusieurs lignes ou les formats complexes peuvent aussi être exprimés naturellement dans Markdown
- Exemple :
- Il est facile de modifier les cartes à mesure que les connaissances évoluent
- En organisant les cartes dans des fichiers Markdown par chapitre, on peut les aligner sur la structure d’un manuel
- Le fait de placer des concepts liés dans des cartes adjacentes améliore l’efficacité de navigation lors des modifications
- La gestion basée sur Git permet d’utiliser les fonctions suivantes
- commits, branches, merges, PR et tout l’outillage complet de gestion de versions
- partage public de l’apprentissage et collaboration via des dépôts publics
Synergie de l’approche textuelle
- Génération automatique et navigation dans les cartes possibles grâce aux macros d’éditeur
- Statistiques sur les cartes et modifications par lots possibles via des commandes Unix (
wc,awk, etc.) - Génération automatique de cartes à partir de données externes comme du CSV à l’aide de scripts et Makefile
- La publication sur GitHub permet de partager son parcours d’apprentissage personnel, contribuant ainsi à diffuser une culture de l’apprentissage
Conclusion
- Hashcards est une nouvelle forme de système de répétition espacée qui combine un format texte simple, un algorithme de planification avancé (FSRS) et une intégration Git
- Il vise à réduire au minimum la friction de création des cartes, à garantir la pleine propriété des données et à offrir à la fois automatisation et extensibilité
- L’outil est présenté comme un environnement d’apprentissage transparent et contrôlable pour les développeurs comme pour les apprenants
1 commentaires
Commentaires sur Hacker News
Je pense que le vrai pouvoir de la spaced repetition ne réside pas dans les applis de flashcards, mais dans la modification du comportement
Par exemple, après que ma femme s’est mise en colère à cause d’un problème dentaire, j’ai ajouté cette situation à mon SRS pour prendre l’habitude de « faire preuve d’empathie émotionnelle et écouter suffisamment »
Même si je faisais cette révision de 30 secondes toute ma vie, cela ne me prendrait pas 15 minutes au total
Depuis, je n’ai plus jamais refait la même erreur, et ma femme dit que j’ai complètement changé
L’idée clé, c’est de voir la spaced repetition non comme un « outil d’apprentissage », mais comme un système de renforcement structuré
Le fait qu’il ne faille pas résoudre le problème mais juste faire preuve d’empathie, c’est totalement à l’opposé de ma façon de penser
Si ta femme avait commencé par faire une suggestion sans empathie, est-ce que toi aussi tu te serais énervé ? Et à ce moment-là, aurait-il déjà été trop tard ?
Je me demande si, quand tu l’enregistres dans ton SRS, tu notes des anecdotes précises ou des schémas plus généraux. J’aimerais aussi savoir si tu utilises une structure recto/verso ou un format cloze
Les gens comparent naturellement ce genre de projet à Anki, mais j’ai l’impression qu’une bonne partie des critiques envers Anki sont subjectives ou exagérées
La structure hiérarchique des decks d’Anki est plutôt un point fort, et l’édition WYSIWYG est un choix évident pour le public visé
On peut aussi utiliser facilement des formules LaTeX, et les plugins forment un écosystème « bricolé mais utile »
J’ai essayé plusieurs alternatives, mais je finis toujours par revenir à Anki. Même moi qui aime les outils en terminal, je le trouve plus fonctionnel
Si ça te parle, tu peux regarder le projet, sinon tu peux simplement l’ignorer
Si les cartes sont identifiées par le hachage du texte, est-ce que l’historique de révision ne disparaît pas à chaque fois qu’on corrige une faute de frappe ?
Je me demande s’il serait possible de créer un réseau social basé sur la spaced repetition
Si on pouvait marquer dans le fil des posts qu’on aime comme « à revoir plus tard », cela pourrait faire office de retweet et permettre à des contenus durablement utiles de se diffuser
Je travaille sur un projet de knowledge base + spaced repetition
Les fichiers Markdown sont vraiment pratiques — on peut les consulter n’importe où, les versionner avec Git, et faire du cross-linking librement
Lien du projet : https://github.com/odosui/mt
Je voulais conserver des notes locales, donc j’évitais les solutions cloud, mais j’ai découvert qu’il existe des outils pour parser du Markdown vers Anki
Pour les utilisateurs d’Emacs, je recommande org-drill, un outil de spaced repetition basé sur du plain text
J’ai créé une bibliothèque appelée Ankivalenz. Elle convertit du Markdown structuré en decks Anki
Par exemple, une hiérarchie comme
Path: Solar System > Planets > Colorpeut être incluse dans la carte pour permettre une révision avec contexteDes notes classiques et des cartes peuvent coexister dans le même fichier Markdown
https://github.com/vangberg/ankivalenz/
Je trouve dommage que les autres projets SRS n’implémentent pas correctement l’importation des données depuis Anki
La plupart des utilisateurs ont déjà des milliers de cartes dans Anki, donc il est difficile de migrer facilement
Le format de données d’Anki est complexe, mais comme il est basé sur SQLite, le partage reste possible
Ce n’est qu’après avoir compris la structure notes–modèles–templates d’Anki que j’ai réalisé à quel point c’était sophistiqué
S’il existait un format de deck partageable basé sur du texte, la collaboration sur GitHub serait bien plus simple
En mettant chaque note dans un fichier séparé avec un identifiant unique, la gestion des mises à jour serait aussi facilitée
Désormais, la logique centrale est isolée dans une crate Rust, ce qui permet de créer facilement des frontends alternatifs en réutilisant la même base de données telle quelle
Il m’est arrivé d’utiliser Google Sheets pour la saisie des données
Si chaque ligne est gérée de façon unique avec un UUID, il devient facile d’en suivre les modifications
À partir des mêmes données, on peut créer plusieurs decks différents (par ex. pinyin chinois → hanzi, ou hanzi → anglais)
Une interface qui utiliserait ce type de feuille comme backend dans un format texte serait vraiment idéale
En tant qu’utilisateur de longue date de la spaced repetition, voici quelques conseils
1️⃣ Il faut décider de ce qui est important. Si vous transformez chaque détail anodin en carte, vous finirez par en réviser des centaines chaque jour
2️⃣ Les concepts importants doivent être couverts par des cartes variées qui testent la compréhension sous plusieurs angles
3️⃣ Après un certain temps, il faut passer à des cartes de second niveau ou à une application concrète. Si un concept n’a jamais été utilisé en un an, c’est peut-être qu’il n’est pas si important
En résumé, la spaced repetition est un outil d’apprentissage extrêmement efficace, mais la mauvaise priorisation est de loin le principal piège