6 puntos por GN⁺ 2025-12-15 | 1 comentarios | Compartir por WhatsApp
  • 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
    • Q: pregunta, A: respuesta, C: formato de cloze deletion
    • Ejemplo:
      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.
      
  • 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

 
GN⁺ 2025-12-15
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

    • Este ejemplo es realmente interesante. Por mi trabajo, soy del tipo que intenta resolver problemas de inmediato, así que no sé cómo reaccionar cuando alguien solo quiere desahogarse
      Que no deba resolver el problema y solo mostrar empatía es algo totalmente distinto a mi forma de pensar
    • A mí también me gusta este ejemplo. Yo meto mis highlight de Kindle tal cual en mi SRS, y gracias a la revisión periódica las citas se me quedan grabadas de forma natural
    • Es un enfoque muy bueno. Me da curiosidad qué app usas, con qué frecuencia vacías el inbox y cuánto tiempo te toma ese proceso
    • Por la parte de “mi esposa se enojó”, parece que no todo fue culpa tuya
      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?
    • Es un caso realmente inspirador. Es admirable hacer este tipo de esfuerzo para entender mejor a la persona que amas
      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

    • Su lista simplemente son razones de motivación, no un intento de convencer a los demás
      Si te identificas, puedes revisar el proyecto; si no, simplemente ignóralo
    • Yo uso Anki unos 30 minutos al día. Sinceramente no es perfecto, pero es lo bastante bueno como para no tener motivo de buscar otra app
  • 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

    • Esto está realmente interesante. Estoy estudiando una materia centrada en conocimiento y andaba buscando una herramienta que me permitiera crear flashcards y repasarlas directamente dentro de mis notas
      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 > Color se incluye en la tarjeta, lo que permite un repaso con contexto
    Las 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

    • Yo también implementé la función de importación de Anki al crear mi propia app de flashcards, pero al principio solo importaba front/back y eso causaba mucha pérdida de datos
      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
    • Parece que muchos desarrolladores no saben que Anki fue refactorizado recientemente sobre Rust
      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
    • Al final, un dump SQL también es un archivo de texto, así que no parece tan difícil compartirlo en GitHub
  • 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

    • Pero si usas content-addressing, parece que modificar tarjetas sería una desventaja
  • 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