6 pontos por GN⁺ 2025-12-15 | 1 comentários | Compartilhar no WhatsApp
  • 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
    • Q: pergunta, A: resposta, C: formato de cloze deletion
    • Exemplo:
      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 é 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

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

    • Esse exemplo é realmente muito interessante. No trabalho, eu sou o tipo de pessoa que tenta resolver o problema imediatamente, então não sei como reagir quando alguém só quer desabafar
      Essa ideia de não resolver o problema e apenas demonstrar empatia é totalmente diferente da minha forma de pensar
    • Eu também gostei desse exemplo. Eu coloco meus destaques do Kindle direto no SRS, e graças às revisões periódicas as citações acabam ficando naturalmente gravadas na minha cabeça
    • Que abordagem incrível. Fiquei curioso sobre qual app você usa, com que frequência você zera a inbox e quanto tempo esse processo leva
    • Pela parte de “minha esposa ficou brava”, parece que a culpa não foi só sua
      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?
    • É um caso realmente inspirador. É admirável fazer esse tipo de esforço para entender melhor alguém que você ama
      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

    • A lista dele é apenas um motivo de motivação; não tem a intenção de convencer outras pessoas
      Se você se identifica, vale a pena olhar o projeto; se não, é só ignorar
    • Eu uso Anki por uns 30 minutos por dia. Sinceramente, ele não é perfeito, mas é bom o suficiente a ponto de eu não ver motivo para procurar outro app
  • 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

    • Isso é realmente muito interessante. Estou estudando uma disciplina focada em conhecimento e estava procurando uma ferramenta que permitisse criar flashcards e revisar direto dentro das notas
      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 > Color pode ser incluída na carta, permitindo uma revisão com contexto
    Notas 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

    • Eu mesmo implementei importação do Anki ao criar um app de flashcards, mas no começo eu só trazia frente/verso e houve muita perda de dados
      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
    • Muitos desenvolvedores parecem não saber que o Anki foi recentemente refatorado com base em Rust
      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
    • Um SQL dump no fim das contas também é um arquivo de texto, então não parece difícil compartilhar isso no GitHub
  • 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

    • Mas, se for um modelo de content-addressing, a dificuldade de editar cartas parece uma desvantagem
  • 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