- Hashcards é um app de repetição espaçada (spaced repetition) local-first, semelhante ao Anki ou Mochi, mas que usa arquivos Markdown em vez de um banco de dados
- Cada flashcard é escrito em texto simples e oferece suporte aos formatos pergunta (Q), resposta (A) e cloze deletion (C), gerenciando a agenda de revisão com o algoritmo FSRS
- Os dados dos cartões são identificados por hash do texto, enquanto o histórico de revisão é armazenado em SQLite, permitindo versionamento e compartilhamento por meio de um repositório Git
- Foi projetado para resolver os problemas da interface complexa do Anki e do algoritmo ineficiente do Mochi, com foco em mínimo atrito na entrada e propriedade total dos dados
- A combinação de base em Markdown, integração com Git e agendador FSRS oferece uma nova abordagem para que desenvolvedores e estudantes façam uma gestão de estudos transparente e automatizada
Visão geral do Hashcards
- Hashcards é um sistema de repetição espaçada open source executado localmente, oferecendo uma experiência de estudo semelhante à do Anki ou Mochi
- A agenda de revisão é gerenciada pelo algoritmo FSRS (Free Spaced Repetition Scheduler)
- A interface web roda em
localhost:8000, e o histórico de revisão é armazenado em um banco de dados SQLite
- Seu principal diferencial é a estrutura que não usa um banco de dados para os cartões, mas gerencia cada flashcard como um arquivo Markdown
- Ex.:
Cards/Math.md, Cards/Chemistry.md etc.
- Cada arquivo inclui vários cartões de Q/A ou de cloze deletion (C)
Estrutura de cartões baseada em texto
- Os flashcards são escritos em um formato de texto simples
- Como é possível usar a própria sintaxe Markdown, a experiência é parecida com a de escrever notas comuns
- O comando para iniciar uma revisão segue o formato
$ hashcards drill <path>
Filosofia de design e benefícios
- O design do Hashcards tem como prioridade máxima a “criação de cartões sem atrito”
- Quanto mais rápido e intuitivo for inserir e editar cartões, maior tende a ser o volume de estudo
- O uso de colchetes (
[]) encurta a entrada de cloze deletion (sem necessidade da tecla Shift)
- A integração com repositórios Git traz vantagens como
- versionamento, rastreamento de mudanças, colaboração e compartilhamento público
- possibilidade de buscar e modificar cartões com ferramentas Unix padrão ou scripts
- geração automática de cartões a partir de dados estruturados, como CSV
- Como os cartões são identificados por hash do texto, é possível ter referências estáveis baseadas no conteúdo
Avaliação dos sistemas existentes (Anki, Mochi)
- Anki
- Vantagens: open source, suporte a FSRS, estatísticas ricas e geração automática de cartões (note types)
- Desvantagens: interface complexa e pouco intuitiva, ineficiência da entrada WYSIWYG e dependência de plugins
- Mochi
- Vantagens: UI limpa, entrada baseada em Markdown e operação centrada em atalhos
- Desvantagens: sintaxe de cloze deletion verbosa, ausência de note types e algoritmo simples
- O algoritmo existente usa uma abordagem simples baseada em multiplicadores (multiplier), ineficiente para retenção de memória no longo prazo
- Embora recentemente tenha adicionado suporte beta ao FSRS, os problemas de agendamento dos cartões antigos permanecem
Implementação e fluxo de trabalho do Hashcards
- O usuário pode criar e editar cartões diretamente em um editor de texto
- Ex.:
Q: What is the atomic number of carbon? / A: 6
- Cartões com várias linhas ou formatos complexos também podem ser expressos naturalmente em Markdown
- É fácil modificar cartões conforme o conhecimento evolui
- É possível organizá-los em arquivos Markdown por capítulo, alinhando-os à estrutura do material de estudo
- Conceitos relacionados podem ser colocados em cartões adjacentes, melhorando a eficiência de navegação durante revisões e alterações
- Com a gestão baseada em Git, é possível usar recursos como
- commits, branches, merges, PRs e todo o conjunto de versionamento completo
- compartilhamento e colaboração de estudos por meio de repositórios públicos
Sinergia da abordagem baseada em texto
- É possível automatizar a geração e navegação de cartões com macros do editor
- Com comandos Unix (
wc, awk etc.), é possível obter estatísticas dos cartões e fazer modificações em lote
- Com scripts e Makefile, é possível gerar cartões automaticamente a partir de dados externos, como CSV
- Ao publicar no GitHub, a pessoa pode compartilhar seu processo de aprendizagem, contribuindo para a disseminação de uma cultura de estudo
Conclusão
- Hashcards é uma nova forma de sistema de repetição espaçada que combina formato de texto simples, algoritmo avançado de agendamento (FSRS) e integração com Git
- Ele minimiza o atrito na criação de cartões, garante propriedade total dos dados e oferece ao mesmo tempo automação e escalabilidade
- É apresentado como uma ferramenta que oferece um ambiente de estudo transparente e controlável tanto para desenvolvedores quanto para estudantes
1 comentários
Comentários no Hacker News
Acho que o verdadeiro poder da spaced repetition não está em apps de flashcards, mas na modificação de comportamento
Por exemplo, depois de uma situação em que minha esposa ficou chateada por causa de um problema no dentista, coloquei isso no meu SRS para criar o hábito de ‘demonstrar empatia emocional e ouvir o suficiente’
Mesmo repetindo essa revisão de 30 segundos pelo resto da vida, isso não daria nem 15 minutos
Desde então, nunca mais cometi o mesmo erro, e minha esposa diz que eu mudei completamente
O ponto principal é ver a spaced repetition não como uma ‘ferramenta de aprendizado’, mas como um sistema estruturado de reforço
Essa ideia de não resolver o problema e apenas demonstrar empatia é totalmente diferente da minha forma de pensar
Se sua esposa tivesse começado dando sugestões sem empatia, você também teria ficado bravo? E, nesse caso, já teria sido tarde demais?
Fiquei curioso se, ao registrar no SRS, você coloca episódios específicos ou padrões mais generalizados. Também queria saber se existe uma estrutura de frente e verso nas cartas ou algum formato cloze
É natural que as pessoas comparem esse tipo de projeto com o Anki, mas sinto que boa parte das críticas ao Anki é subjetiva ou exagerada
A estrutura hierárquica de decks do Anki é, na verdade, um ponto forte, e a edição WYSIWYG é uma escolha óbvia para o público-alvo
Também dá para usar fórmulas em LaTeX com facilidade, e os plugins formam um ecossistema ‘hackeável, mas útil’
Já testei várias alternativas, mas no fim sempre acabo voltando ao Anki. Ele é funcional nesse nível até para alguém como eu, que gosta de ferramentas baseadas em terminal
Se você se identifica, vale a pena olhar o projeto; se não, é só ignorar
Se as cartas forem identificadas pelo hash do texto, fico me perguntando se o histórico de revisão não desapareceria toda vez que um erro de digitação fosse corrigido
Fico imaginando se daria para criar uma rede social baseada em spaced repetition
Se você pudesse marcar um post do feed como algo a ‘agendar para revisão’, isso poderia funcionar como uma espécie de retuíte e ajudar a espalhar conteúdo valioso de forma contínua
Estou trabalhando em um projeto de knowledge base + spaced repetition
Arquivos Markdown são realmente muito práticos — dá para ver em qualquer lugar, versionar com Git e fazer cross-linking livremente
Link do projeto: https://github.com/odosui/mt
Eu queria manter notas locais, então evitava soluções baseadas em nuvem, mas descobri que existem ferramentas que fazem parse de Markdown para Anki
Para quem usa Emacs, recomendo o org-drill, uma ferramenta de spaced repetition baseada em plain text
Eu criei uma biblioteca chamada Ankivalenz. Ela converte Markdown estruturado em decks do Anki
Por exemplo, uma hierarquia como
Path: Solar System > Planets > Colorpode ser incluída na carta, permitindo uma revisão com contextoNotas comuns e cartas podem coexistir no mesmo arquivo Markdown
https://github.com/vangberg/ankivalenz/
Acho uma pena que outros projetos de SRS não implementem direito a função de importar dados do Anki
A maioria dos usuários já tem milhares de cartas no Anki, então não é fácil migrar
O formato de dados do Anki é complexo, mas como é baseado em SQLite, dá para compartilhar
Só depois de entender a estrutura de notas–modelos–templates do Anki percebi o quanto ela é sofisticada
Se existisse um formato de deck compartilhável baseado em texto, seria muito mais fácil colaborar no GitHub
Se cada nota ficasse em um arquivo separado com um ID único, também seria fácil gerenciar atualizações
Agora a lógica central foi separada em um crate Rust, então ficou fácil criar frontends alternativos usando exatamente o mesmo banco de dados
Já usei Google Sheets para entrada de dados
Se cada linha for gerenciada com UUID, fica fácil rastrear alterações mesmo após edições
Dá para criar vários decks com base nos mesmos dados, por exemplo chinês pinyin→hanzi, hanzi→inglês
Seria ótimo ter uma interface que usasse esse tipo de planilha como backend em um formato de texto
Como alguém que usa spaced repetition há muito tempo, compartilho algumas dicas
1️⃣ É preciso decidir o que é importante. Se você transformar até informações triviais em cartas, vai acabar revisando centenas por dia
2️⃣ Conceitos importantes devem ser trabalhados com cartas variadas que testem o entendimento por vários ângulos
3️⃣ Depois de um certo tempo, é preciso migrar para cartas de segunda ordem ou para aplicação real. Se um conceito não foi usado nenhuma vez em um ano, talvez ele não seja importante
Em resumo, spaced repetition é uma ferramenta de aprendizado extremamente eficiente, mas o maior risco está em falhar na definição de prioridades