- Hashcards es una app de repetición espaciada con enfoque local-first, similar a Anki o Mochi, pero usa archivos Markdown en lugar de una base de datos
- Cada flashcard se escribe en texto plano y admite los formatos de pregunta (Q), respuesta (A) y cloze deletion (C), mientras que el calendario de repaso se gestiona con el algoritmo FSRS
- Los datos de las tarjetas se identifican mediante hashes de texto, y el historial de repasos se guarda en SQLite, con posibilidad de versionado y compartición mediante un repositorio Git
- Fue diseñado para resolver los problemas de la interfaz compleja de Anki y del algoritmo ineficiente de Mochi, con el objetivo de minimizar la fricción de entrada y ofrecer propiedad total de los datos
- La combinación de Markdown, integración con Git y programador FSRS ofrece un nuevo enfoque para que desarrolladores y estudiantes gestionen el aprendizaje de forma transparente y automatizada
Resumen de Hashcards
- Hashcards es un sistema de repetición espaciada de código abierto que corre localmente, y ofrece una experiencia de estudio similar a la de Anki o Mochi
- El calendario de repaso se administra con el algoritmo FSRS (Free Spaced Repetition Scheduler)
- La interfaz web se ejecuta en
localhost:8000, y el historial de repasos se almacena en una base de datos SQLite
- Su diferencia clave es una estructura que no usa una base de datos para las tarjetas, sino que gestiona cada flashcard como un archivo Markdown
- Ejemplo:
Cards/Math.md, Cards/Chemistry.md, etc.
- Cada archivo contiene varias tarjetas de tipo Q/A o cloze deletion (C)
Estructura de tarjetas basada en texto
- Las flashcards se escriben en un formato de texto simple
- Como puede aprovechar directamente la sintaxis de Markdown, ofrece una experiencia similar a la de escribir notas normales
- El comando para iniciar un repaso se ejecuta con la forma
$ hashcards drill <path>
Filosofía de diseño y ventajas
- El diseño de Hashcards tiene como máxima prioridad la “creación de tarjetas sin fricción”
- Si introducir y editar tarjetas es rápido e intuitivo, aumenta la cantidad de estudio
- El uso de corchetes (
[]) acorta la escritura de cloze deletions (sin necesidad de la tecla Shift)
- La integración con repositorios Git ofrece las siguientes ventajas
- Posibilidad de control de versiones, seguimiento de cambios, colaboración y compartición pública
- Búsqueda y modificación de tarjetas mediante herramientas Unix estándar o scripts
- Generación automática de tarjetas a partir de datos estructurados como CSV
- Como las tarjetas se identifican mediante hashes de texto, es posible mantener referencias estables basadas en el contenido
Evaluación de sistemas existentes (Anki y Mochi)
- Anki
- Ventajas: código abierto, soporte para FSRS, estadísticas abundantes y función de generación automática de tarjetas (note types)
- Desventajas: interfaz compleja y poco intuitiva, ineficiencia de la entrada WYSIWYG y dependencia de plugins
- Mochi
- Ventajas: UI limpia, entrada basada en Markdown y manejo centrado en atajos de teclado
- Desventajas: sintaxis de cloze deletion verbosa, ausencia de note types y algoritmo simple
- El algoritmo anterior se basaba en un sistema simple de multiplicadores, ineficiente para mantener la memoria a largo plazo
- Aunque recientemente añadió soporte beta para FSRS, los problemas de programación de tarjetas anteriores siguen presentes
Implementación y flujo de trabajo de Hashcards
- El usuario puede escribir y editar tarjetas directamente con un editor de texto
- Ejemplo:
Q: What is the atomic number of carbon? / A: 6
- También pueden expresarse de forma natural tarjetas multilineales o formatos complejos dentro de Markdown
- Es fácil modificar tarjetas según cambie el conocimiento
- Se pueden organizar en archivos Markdown por capítulo, alineados con la estructura del material de estudio
- Al colocar conceptos relacionados en tarjetas adyacentes, mejora la eficiencia de navegación al editarlas
- La gestión basada en Git permite aprovechar funciones como
- commits, ramas, merges y PR, con control de versiones completo
- compartición del estudio y colaboración mediante repositorios públicos
Sinergia del enfoque basado en texto
- Es posible generar y navegar tarjetas automáticamente mediante macros del editor
- Se pueden obtener estadísticas y hacer modificaciones masivas con comandos Unix (
wc, awk, etc.)
- Es posible generar tarjetas automáticamente desde datos externos como CSV usando scripts y Makefile
- La publicación en GitHub permite compartir el proceso personal de aprendizaje, lo que contribuye a expandir la cultura de estudio
Conclusión
- Hashcards es una nueva forma de sistema de repetición espaciada que combina un formato de texto simple, un algoritmo avanzado de planificación (FSRS) e integración con Git
- Minimiza la fricción al crear tarjetas, garantiza propiedad total de los datos y ofrece al mismo tiempo automatización y escalabilidad
- Se presenta como una herramienta que brinda a desarrolladores y estudiantes un entorno de aprendizaje transparente y controlable
1 comentarios
Comentarios en Hacker News
Creo que el verdadero poder de la spaced repetition no está en las apps de tarjetas, sino en la modificación de conducta
Por ejemplo, después de que mi esposa se enojó por un problema dental, metí esa situación en mi SRS para volver hábito el “empatizar emocionalmente y escuchar lo suficiente”
Aunque haga esta revisión de 30 segundos durante toda mi vida, no me tomará ni 15 minutos en total
Desde entonces no he cometido el mismo error ni una sola vez, y mi esposa dice que cambié por completo
La clave es ver la spaced repetition no como una “herramienta de aprendizaje”, sino como un sistema de refuerzo estructurado
Que no deba resolver el problema y solo mostrar empatía es algo totalmente distinto a mi forma de pensar
Si tu esposa hubiera empezado dando una sugerencia sin empatía, ¿tú también te habrías enojado? ¿Y para ese momento ya habría sido demasiado tarde?
Me da curiosidad si al registrarlo en el SRS pones anécdotas concretas o patrones generalizados. También quisiera saber si usas estructura de anverso/reverso o formato cloze
Es natural que la gente compare proyectos como este con Anki, pero siento que muchas de las críticas a Anki son subjetivas o exageradas
La estructura jerárquica de decks de Anki es más bien una fortaleza, y la edición WYSIWYG es una elección totalmente lógica para su público objetivo
También se pueden usar fórmulas en LaTeX fácilmente, y los plugins forman un ecosistema “hacky pero útil”
He probado varias alternativas, pero al final siempre vuelvo a Anki. Incluso para alguien como yo, que prefiere herramientas basadas en terminal, sigue siendo así de funcional
Si te identificas, puedes revisar el proyecto; si no, simplemente ignóralo
Si las tarjetas se identifican por el hash del texto, me pregunto si cada vez que corriges un typo no se pierde el historial de repaso de la tarjeta
Me pregunto si sería posible una red social basada en spaced repetition
Si en el feed pudieras marcar publicaciones que te gusten como si “programaras un repaso”, eso podría funcionar como una especie de retuit y ayudar a que se difunda contenido valioso de forma sostenida
Estoy trabajando en un proyecto de knowledge base + spaced repetition
Los archivos Markdown son realmente prácticos: se pueden ver desde cualquier lugar, permiten control de versiones con Git y facilitan el cross-linking
Enlace del proyecto: https://github.com/odosui/mt
Quería mantener mis notas en local, así que evitaba soluciones en la nube, pero me enteré de que existen herramientas que parsean Markdown hacia Anki
Si eres usuario de Emacs, recomiendo org-drill, una herramienta de spaced repetition basada en plain text
Hice una biblioteca llamada Ankivalenz. Convierte Markdown estructurado en decks de Anki
Por ejemplo, una jerarquía como
Path: Solar System > Planets > Colorse incluye en la tarjeta, lo que permite un repaso con contextoLas notas normales y las tarjetas pueden coexistir dentro del mismo archivo Markdown
https://github.com/vangberg/ankivalenz/
Me parece una lástima que otros proyectos de SRS no implementen bien la función de importar datos desde Anki
La mayoría de los usuarios ya tienen miles de tarjetas en Anki, así que no es fácil migrar
El formato de datos de Anki es complejo, pero como está basado en SQLite, sí se puede compartir
No fue hasta entender la estructura de notas–modelo–plantillas de Anki que me di cuenta de lo sofisticada que es
Si existiera un formato de deck compartible basado en texto, sería mucho más fácil colaborar en GitHub
Si cada nota estuviera en un archivo individual y tuviera un ID único, también sería más sencillo gestionar actualizaciones
Ahora la lógica central está separada como crate de Rust, así que es fácil crear frontends alternativos usando la misma base de datos tal cual
Yo he usado Google Sheets para capturar datos
Si gestionas cada fila con un UUID, también es fácil rastrear cambios cuando editas
A partir de los mismos datos puedes crear varios decks, por ejemplo pinyin chino→hanzi y hanzi→inglés
Sería buenísimo tener una interfaz que use este tipo de hoja como backend pero en formato de texto
Como alguien que ha usado spaced repetition durante mucho tiempo, comparto algunos consejos
1️⃣ Hay que decidir qué es importante. Si conviertes hasta la información trivial en tarjetas, terminarás repasando cientos al día
2️⃣ Los conceptos importantes deben cubrirse con tarjetas variadas que prueben la comprensión desde varios ángulos
3️⃣ Después de cierto tiempo, hay que pasar a tarjetas de segundo nivel o a la aplicación real. Si es un concepto que no has usado ni una vez en un año, quizá no era tan importante
En conclusión, la spaced repetition es una herramienta de aprendizaje muy eficiente, pero el mayor riesgo es fallar al establecer prioridades