5P by GN⁺ 1일전 | ★ favorite | 댓글 1개
  • Hashcards로컬 우선(local-first) 방식의 간격 반복 학습(spaced repetition) 앱으로, AnkiMochi와 유사하지만 데이터베이스 대신 Markdown 파일을 사용함
  • 각 플래시카드는 일반 텍스트로 작성되며, 질문(Q) , 답변(A) , 클로즈 삭제(C) 형식을 지원하고, FSRS 알고리듬으로 복습 일정을 관리함
  • 카드 데이터는 텍스트 해시값으로 식별되며, SQLite에 복습 기록이 저장되고, Git 저장소를 통해 버전 관리 및 공유 가능
  • 기존 Anki의 복잡한 인터페이스와 Mochi의 비효율적 알고리듬 문제를 해결하기 위해, 입력 마찰 최소화와 완전한 소유권을 목표로 설계됨
  • Markdown 기반, Git 통합, FSRS 스케줄러의 결합으로, 개발자와 학습자가 투명하고 자동화된 학습 관리를 수행할 수 있는 새로운 접근 제공

Hashcards 개요

  • Hashcards는 로컬에서 실행되는 오픈소스 간격 반복 시스템으로, Anki나 Mochi와 유사한 학습 경험을 제공
    • 복습 일정은 FSRS(Free Spaced Repetition Scheduler) 알고리듬으로 관리
    • 웹 인터페이스는 localhost:8000에서 실행되며, 복습 기록은 SQLite 데이터베이스에 저장
  • 핵심 차별점은 데이터베이스를 사용하지 않고, 각 플래시카드를 Markdown 파일로 관리하는 구조
    • 예: Cards/Math.md, Cards/Chemistry.md 등으로 구성
    • 각 파일은 여러 개의 Q/A 또는 클로즈 삭제(C) 카드 포함

텍스트 기반 카드 구조

  • 플래시카드는 간단한 텍스트 형식으로 작성
    • Q: 질문, A: 답변, C: 클로즈 삭제 형태
    • 예시:
      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.
      
  • Markdown 문법을 그대로 활용할 수 있어, 일반 노트 작성과 유사한 경험 제공
  • 복습 실행 명령은 $ hashcards drill <path> 형태로 수행

설계 철학과 이점

  • Hashcards의 설계는 “마찰 없는 카드 작성” 을 최우선 목표로 함
    • 카드 입력과 편집이 빠르고 직관적이어야 학습량이 증가함
    • 대괄호([]) 사용으로 클로즈 삭제 입력을 단축 (Shift 키 불필요)
  • Git 저장소와의 통합을 통해 다음과 같은 이점 제공
    • 버전 관리, 변경 추적, 협업 및 공개 공유 가능
    • 표준 Unix 도구나 스크립트를 이용한 카드 검색·수정 가능
    • CSV 등 구조화된 데이터로부터 자동 카드 생성 가능
  • 카드가 텍스트 해시값으로 식별되어, 내용 기반의 안정적 참조 가능

기존 시스템(Anki, Mochi)에 대한 평가

  • Anki
    • 장점: 오픈소스, FSRS 지원, 풍부한 통계, 자동 카드 생성(note types) 기능
    • 단점: 복잡하고 비직관적인 인터페이스, WYSIWYG 입력의 비효율성, 플러그인 의존성
  • Mochi
    • 장점: 깔끔한 UI, Markdown 기반 입력, 단축키 중심 조작
    • 단점: 클로즈 삭제 문법이 장황, note types 부재, 단순한 알고리듬
    • 기존 알고리듬은 간단한 배수 기반(multiplier) 방식으로, 장기 기억 유지에 비효율적
    • 최근 FSRS 베타 지원을 추가했으나, 기존 카드 스케줄링 문제는 여전함

Hashcards의 구현 및 워크플로우

  • 사용자는 텍스트 편집기로 직접 카드 작성 및 수정 가능
    • 예: Q: What is the atomic number of carbon? / A: 6
    • 여러 줄 카드나 복잡한 형식도 Markdown 내에서 자연스럽게 표현 가능
  • 지식의 변화에 따른 카드 수정이 용이
    • 챕터별 Markdown 파일로 구성해, 교재 구조와 일치시킬 수 있음
    • 관련 개념을 인접 카드로 배치해, 수정 시 탐색 효율 향상
  • Git 기반 관리로 다음 기능 활용 가능
    • 커밋, 브랜치, 병합, PR 등 완전한 버전 관리
    • 공개 저장소를 통한 학습 공유 및 협업 가능

텍스트 기반 접근의 시너지

  • 편집기 매크로를 통한 카드 자동 생성 및 탐색 가능
  • Unix 명령어(wc, awk 등) 로 카드 통계 및 일괄 수정 가능
  • 스크립트와 Makefile을 이용해 CSV 등 외부 데이터로부터 자동 카드 생성 가능
  • GitHub 공개를 통해 개인의 학습 과정을 공유할 수 있으며, 이는 학습 문화 확산에 기여

결론

  • Hashcards는 간단한 텍스트 포맷, 고급 스케줄링 알고리듬(FSRS) , Git 통합을 결합한 새로운 형태의 간격 반복 시스템
  • 카드 작성의 마찰을 최소화하고, 데이터의 완전한 소유권을 보장하며, 자동화와 확장성을 동시에 제공
  • 개발자와 학습자 모두에게 투명하고 제어 가능한 학습 환경을 제공하는 도구로 제시됨
Hacker News 의견들
  • 나는 spaced repetition의 진짜 힘이 플래시카드 앱이 아니라 행동 수정에 있다고 생각함
    예를 들어, 아내가 치과 문제로 화가 났던 일을 계기로 ‘감정적으로 공감하고 충분히 듣기’를 습관화하기 위해 이 상황을 내 SRS에 넣었음
    30초 정도 걸리는 이 복습을 평생 반복해도 15분도 안 걸릴 것임
    그 후로 같은 실수를 한 번도 하지 않았고, 아내는 내가 완전히 달라졌다고 함
    핵심은 spaced repetition을 ‘학습 도구’가 아니라 구조화된 강화 시스템으로 보는 것임

    • 이 예시가 정말 흥미로움. 나는 직업상 문제 해결을 바로 시도하는 타입이라, 누군가가 단지 불만을 이야기하고 싶어할 때 어떻게 반응해야 할지 모르겠음
      문제를 해결하지 말고 그냥 공감만 해야 한다니, 내 사고방식과는 완전히 다름
    • 나도 이 예시가 마음에 듦. 나는 Kindle 하이라이트를 SRS에 그대로 넣어두는데, 주기적인 복습 덕분에 인용문이 자연스럽게 머릿속에 각인됨
    • 정말 멋진 접근임. 어떤 앱을 쓰는지, 얼마나 자주 inbox를 비우는지, 그리고 그 과정이 얼마나 걸리는지 궁금함
    • “아내가 화를 냈다”는 부분을 보면, 너만 잘못한 건 아닌 것 같음
      만약 아내가 먼저 공감 없이 제안했다면, 너도 화가 났을까? 그리고 그때도 이미 늦었을까?
    • 정말 영감을 주는 사례임. 사랑하는 사람을 더 잘 이해하기 위해 이런 노력을 한다는 게 대단함
      SRS에 기록할 때는 구체적인 일화를 넣는지, 아니면 일반화된 패턴을 넣는지 궁금함. 카드의 앞뒤 구조나 cloze 형식이 있는지도 알고 싶음
  • 사람들은 이런 프로젝트를 Anki와 비교하는 게 자연스럽지만, Anki에 대한 비판 중 상당수는 주관적이거나 과장된 부분이 많다고 느낌
    Anki의 계층형 덱 구조는 오히려 강점이고, WYSIWYG 편집도 대상 사용자에게는 당연한 선택임
    LaTeX 수식도 간단히 쓸 수 있고, 플러그인은 ‘해킹스럽지만 유용한’ 생태계임
    여러 대안을 써봤지만 결국 다시 Anki로 돌아오게 됨. 터미널 기반 도구를 좋아하는 나조차도 그만큼 기능적임

    • 그의 리스트는 단순히 동기 부여의 이유일 뿐, 다른 사람을 설득하려는 목적이 아님
      공감이 된다면 프로젝트를 살펴보면 되고, 아니라면 그냥 무시하면 됨
    • 나는 매일 30분 정도 Anki를 씀. 솔직히 완벽하진 않지만, 다른 앱을 찾을 이유가 없을 만큼 충분히 쓸 만함
  • 카드가 텍스트의 해시값으로 식별된다면, 오타를 수정할 때마다 카드의 복습 이력이 사라지는 것 아닌지 궁금함

  • spaced repetition 기반 소셜 네트워크가 가능할지 궁금함
    피드에서 마음에 드는 글을 ‘복습 예약’처럼 표시하면, 그게 일종의 리트윗이 되면서 지속적으로 가치 있는 콘텐츠가 확산될 수 있을 것 같음

  • 나는 knowledge base + spaced repetition 프로젝트를 진행 중임
    Markdown 파일이 정말 편리함 — 어디서나 볼 수 있고, Git으로 버전 관리가 가능하며, cross-linking이 자유로움
    프로젝트 링크: https://github.com/odosui/mt

    • 이거 정말 흥미로움. 나는 지식 중심 과목을 공부 중인데, 노트 안에서 바로 플래시카드를 만들고 복습할 수 있는 도구를 찾고 있었음
      로컬 노트를 유지하고 싶어서 클라우드 기반 솔루션은 피했는데, Markdown을 Anki로 파싱하는 도구들이 있다는 걸 알게 됨
  • Emacs 사용자라면 plain text 기반의 spaced repetition 도구인 org-drill을 추천함

  • 나는 Ankivalenz라는 라이브러리를 만들었음. 구조화된 Markdown을 Anki 덱으로 변환해줌
    예를 들어, Path: Solar System > Planets > Color처럼 계층 구조가 카드에 포함되어 맥락 있는 복습이 가능함
    일반 노트와 카드가 같은 Markdown 파일 안에서 공존할 수 있음
    https://github.com/vangberg/ankivalenz/

  • 다른 SRS 프로젝트들이 Anki에서 데이터 가져오기(import) 기능을 제대로 구현하지 않아 아쉬움
    대부분의 사용자는 이미 수천 장의 카드를 Anki에 가지고 있어서 쉽게 옮기기 어려움
    Anki의 데이터 포맷은 복잡하지만 SQLite 기반이라 공유는 가능함

    • 나도 직접 플래시카드 앱을 만들며 Anki import 기능을 구현해봤는데, 처음엔 단순히 front/back만 가져와서 데이터 손실이 컸음
      Anki의 노트–모델–템플릿 구조를 이해하고 나서야 그 정교함을 깨달음
      텍스트 기반의 공유 가능한 덱 포맷이 있다면 GitHub에서 협업하기 훨씬 쉬울 것 같음
      각 노트를 개별 파일로 두고 고유 ID를 부여하면 업데이트 관리도 용이할 것임
    • 많은 개발자들이 Anki가 최근 Rust 기반으로 리팩터링된 걸 모르는 듯함
      이제 핵심 로직이 Rust crate로 분리되어 있어서, 같은 DB를 그대로 사용해 대체 프론트엔드를 쉽게 만들 수 있음
    • SQL dump도 결국 텍스트 파일이니, GitHub에서 공유하기 어렵지 않을 것 같음
  • 나는 데이터 입력을 위해 Google 스프레드시트를 쓴 적이 있음
    UUID로 각 행을 고유하게 관리하면 수정 시에도 추적이 쉬움
    같은 데이터를 기반으로 여러 덱(예: 중국어 병음→한자, 한자→영어)을 만들 수 있음
    이런 시트를 텍스트 포맷으로 백엔드화한 인터페이스가 있다면 정말 좋을 것 같음

    • 하지만 content-addressing 방식이라면 카드 수정이 어렵다는 점이 단점으로 보임
  • 오랫동안 spaced repetition을 써온 입장에서 몇 가지 팁을 공유함
    1️⃣ 무엇이 중요한지 결정해야 함. 사소한 정보까지 카드로 만들면 매일 수백 장을 복습하게 됨
    2️⃣ 중요한 개념은 여러 각도에서 이해를 테스트하는 다양한 카드로 구성해야 함
    3️⃣ 일정 기간 후에는 2차 카드나 실제 적용으로 전환해야 함. 1년 동안 한 번도 쓰지 않은 개념이라면 중요하지 않은 것일 수 있음
    결론적으로 spaced repetition은 매우 효율적인 학습 도구이지만, 우선순위 설정 실패가 가장 큰 함정임