- Hashcards, local-first yaklaşımıyla çalışan bir aralıklı tekrar öğrenme (spaced repetition) uygulamasıdır; Anki veya Mochi'ye benzer, ancak veritabanı yerine Markdown dosyaları kullanır
- Her flashcard düz metin olarak yazılır; soru (Q), cevap (A) ve cloze deletion (C) biçimlerini destekler, tekrar takvimini ise FSRS algoritması yönetir
- Kart verileri metin hash değerleriyle tanımlanır ve tekrar geçmişi SQLite'a kaydedilir; ayrıca Git deposu üzerinden sürüm kontrolü ve paylaşım mümkündür
- Mevcut Anki'nin karmaşık arayüzü ve Mochi'nin verimsiz algoritması sorunlarını çözmek için, girdi sürtünmesini en aza indirme ve tam sahiplik hedefiyle tasarlanmıştır
- Markdown tabanı, Git entegrasyonu ve FSRS zamanlayıcısının birleşimi, geliştiriciler ve öğrenciler için şeffaf ve otomatikleştirilmiş öğrenme yönetimi sunan yeni bir yaklaşım sağlar
Hashcards'a genel bakış
- Hashcards, yerelde çalışan açık kaynaklı bir aralıklı tekrar sistemidir ve Anki veya Mochi'ye benzer bir öğrenme deneyimi sunar
- Tekrar takvimi FSRS (Free Spaced Repetition Scheduler) algoritmasıyla yönetilir
- Web arayüzü
localhost:8000 üzerinde çalışır ve tekrar geçmişi SQLite veritabanında saklanır
- Temel farkı, veritabanı kullanmaması ve her flashcard'ı Markdown dosyaları olarak yönetmesidir
- Örnek:
Cards/Math.md, Cards/Chemistry.md gibi dosyalardan oluşur
- Her dosya birden fazla Q/A veya cloze deletion (C) kartı içerir
Metin tabanlı kart yapısı
- Flashcard'lar basit bir metin biçiminde yazılır
- Markdown sözdizimi doğrudan kullanılabildiği için, normal not alma deneyimine benzer bir kullanım sunar
- Tekrar başlatma komutu
$ hashcards drill <path> biçimindedir
Tasarım felsefesi ve avantajları
- Hashcards'ın tasarımında en yüksek öncelik **“sürtünmesiz kart yazımı”**dır
- Kart girişi ve düzenlemesi ne kadar hızlı ve sezgisel olursa öğrenme hacmi de o kadar artar
- Cloze deletion girişi köşeli parantezler (
[]) ile kısaltılır (Shift tuşu gerekmez)
- Git deposu entegrasyonu şu avantajları sağlar
- Sürüm kontrolü, değişiklik takibi, iş birliği ve açık paylaşım mümkündür
- Kartlar standart Unix araçları veya betiklerle aranabilir ve düzenlenebilir
- CSV gibi yapılandırılmış verilerden otomatik kart üretimi yapılabilir
- Kartlar metin hash değerleriyle tanımlandığı için, içerik tabanlı kararlı referanslama mümkündür
Mevcut sistemlere (Anki, Mochi) bakış
- Anki
- Artıları: açık kaynak, FSRS desteği, zengin istatistikler, otomatik kart üretimi (
note types) özelliği
- Eksileri: karmaşık ve sezgisel olmayan arayüz, WYSIWYG girişin verimsizliği, eklenti bağımlılığı
- Mochi
- Artıları: temiz bir arayüz, Markdown tabanlı giriş, kısayol odaklı kullanım
- Eksileri: cloze deletion sözdiziminin uzun olması,
note types eksikliği, basit bir algoritma
- Mevcut algoritma, uzun süreli hafızayı korumada verimsiz olan basit çarpan tabanlı (multiplier) bir yaklaşıma dayanır
- Yakın zamanda FSRS beta desteği eklenmiş olsa da, mevcut kart zamanlama sorunları sürmektedir
Hashcards'ın uygulaması ve iş akışı
- Kullanıcılar kartları doğrudan bir metin düzenleyici ile yazıp düzenleyebilir
- Örnek:
Q: What is the atomic number of carbon? / A: 6
- Çok satırlı kartlar veya daha karmaşık biçimler de Markdown içinde doğal şekilde ifade edilebilir
- Bilginin değişmesine bağlı kart düzenlemeleri kolaydır
- Markdown dosyaları bölüm bazlı düzenlenerek ders kitabı yapısıyla eşleştirilebilir
- İlgili kavramlar bitişik kartlar olarak yerleştirilebilir; bu da düzenleme sırasında gezinme verimliliğini artırır
- Git tabanlı yönetim ile şu işlevler kullanılabilir
- Commit, branch, merge, PR gibi tam sürüm kontrolü
- Açık depolar üzerinden öğrenme paylaşımı ve iş birliği
Metin tabanlı yaklaşımın sinerjisi
- Düzenleyici makroları ile otomatik kart üretimi ve gezinme mümkündür
- Unix komutları (
wc, awk vb.) ile kart istatistikleri çıkarılabilir ve toplu düzenleme yapılabilir
- Betikler ve Makefile kullanılarak CSV gibi harici verilerden otomatik kart üretilebilir
- GitHub'da açık paylaşım sayesinde bireylerin öğrenme süreçleri paylaşılabilir; bu da öğrenme kültürünün yaygınlaşmasına katkı sağlar
Sonuç
- Hashcards, basit bir metin formatı, gelişmiş zamanlama algoritması (FSRS) ve Git entegrasyonunu bir araya getiren yeni tür bir aralıklı tekrar sistemidir
- Kart yazımındaki sürtünmeyi en aza indirir, veri üzerinde tam sahiplik sağlar ve otomasyon ile ölçeklenebilirliği aynı anda sunar
- Hem geliştiriciler hem de öğrenciler için şeffaf ve kontrol edilebilir bir öğrenme ortamı sağlayan bir araç olarak öne çıkar
1 yorum
Hacker News yorumları
Bence spaced repetition’ın gerçek gücü bir flashcard uygulamasında değil, davranış değişikliğinde yatıyor
Örneğin, eşimin dişle ilgili bir sorun yüzünden sinirlendiği bir olaydan sonra, ‘duygusal olarak empati kurmak ve yeterince dinlemek’ alışkanlığını edinmek için bu durumu kendi SRS’ime ekledim
Yaklaşık 30 saniye süren bu tekrarları hayat boyu yapsam bile toplamda 15 dakikayı bile bulmaz
O zamandan beri aynı hatayı bir daha hiç yapmadım ve eşim tamamen değiştiğimi söylüyor
Asıl mesele, spaced repetition’ı bir öğrenme aracı değil, yapılandırılmış bir pekiştirme sistemi olarak görmek
Sorunu çözmeyip sadece empati kurmak gerektiği fikri, benim düşünme tarzımdan tamamen farklı
Eğer eşin önce empati kurmadan öneri verseydi, sen de sinirlenir miydin? Ve o noktada da artık çok mu geç olurdu?
SRS’e kaydederken somut anekdotlar mı yazıyorsun, yoksa genelleştirilmiş kalıplar mı ekliyorsun merak ediyorum. Kartların ön/arka yapısı ya da cloze formatı olup olmadığını da bilmek isterim
İnsanların böyle projeleri Anki ile kıyaslaması doğal ama Anki’ye yönelik eleştirilerin önemli bir kısmı bana öznel ya da abartılı geliyor
Anki’nin hiyerarşik desteler yapısı aslında bir güçlü yön ve WYSIWYG düzenleme de hedef kullanıcı kitlesi için gayet doğal bir tercih
LaTeX formülleri de kolayca kullanılabiliyor ve eklenti ekosistemi ‘hacky ama faydalı’ bir yapıda
Pek çok alternatifi denedim ama sonunda yine Anki’ye geri dönüyorum. Terminal tabanlı araçları seven biri olarak söylüyorum, o kadar işlevsel
Sana hitap ediyorsa projeye bakarsın, etmiyorsa da geçersin
Eğer kartlar metnin hash değeriyle tanımlanıyorsa, yazım hatası düzelttiğinde kartın tekrar geçmişi silinmiş olmuyor mu diye merak ediyorum
spaced repetition tabanlı bir sosyal ağın mümkün olup olmadığını merak ediyorum
Akışta hoşuna giden bir gönderiyi ‘tekrar için planla’ gibi işaretlersen, bu bir tür retweet’e dönüşüp kalıcı olarak değerli içeriklerin yayılmasını sağlayabilir gibi geliyor
Ben de knowledge base + spaced repetition projesi üzerinde çalışıyorum
Markdown dosyaları gerçekten çok kullanışlı — her yerden görüntülenebiliyor, Git ile sürüm kontrolü yapılabiliyor ve cross-linking çok esnek
Proje bağlantısı: https://github.com/odosui/mt
Yerel notlarımı korumak istediğim için bulut tabanlı çözümlerden kaçınıyordum ama Markdown’ı Anki’ye parse eden araçlar olduğunu öğrendim
Emacs kullanıcıları için plain text tabanlı bir spaced repetition aracı olan org-drill’i öneririm
Ben Ankivalenz adlı bir kütüphane geliştirdim. Yapılandırılmış Markdown’ı Anki destelerine dönüştürüyor
Örneğin,
Path: Solar System > Planets > Colorgibi bir hiyerarşi kartın içine eklenerek bağlamlı tekrar yapılmasını sağlıyorNormal notlar ve kartlar aynı Markdown dosyasında bir arada bulunabiliyor
https://github.com/vangberg/ankivalenz/
Diğer SRS projelerinin Anki’den veri içe aktarma (import) özelliğini düzgün şekilde sunmaması üzücü
Kullanıcıların çoğunun zaten Anki’de binlerce kartı var, bu yüzden geçiş yapmak kolay olmuyor
Anki’nin veri formatı karmaşık ama SQLite tabanlı olduğu için paylaşım mümkün
Ancak Anki’nin note–model–template yapısını anlayınca ne kadar rafine olduğunu fark ettim
Metin tabanlı, paylaşılabilir bir deste formatı olsa GitHub üzerinde birlikte çalışmak çok daha kolay olurdu
Her notu ayrı bir dosya olarak tutup benzersiz ID vermek, güncellemeleri yönetmeyi de kolaylaştırırdı
Artık çekirdek mantık bir Rust crate olarak ayrılmış durumda, bu yüzden aynı veritabanını kullanarak alternatif frontend’ler yapmak daha kolay
Veri girişi için daha önce Google Sheets kullandım
Her satırı UUID ile benzersiz şekilde yönetirsen, düzenlemelerde iz sürmek daha kolay oluyor
Aynı veriyle birden fazla deste oluşturulabiliyor (örneğin Çince pinyin→hanzi, hanzi→İngilizce)
Böyle tabloları metin formatında backend olarak kullanan bir arayüz gerçekten çok iyi olurdu
Uzun yıllardır spaced repetition kullanan biri olarak birkaç ipucu paylaşayım
1️⃣ Neyin önemli olduğuna karar vermek gerekir. Önemsiz bilgileri de karta çevirirsen her gün yüzlerce kart tekrar etmek zorunda kalırsın
2️⃣ Önemli kavramlar, anlayışı farklı açılardan test eden çeşitli kartlarla çalışılmalı
3️⃣ Bir süre sonra ikinci seviye kartlara ya da gerçek uygulamaya geçmek gerekir. Bir kavramı bir yıl boyunca hiç kullanmadıysan, o kadar da önemli olmayabilir
Sonuç olarak spaced repetition çok verimli bir öğrenme aracı ama en büyük tuzak, önceliklendirmeyi yanlış yapmak