6 คะแนน โดย GN⁺ 2025-12-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Hashcards เป็นแอป spaced repetition แบบ local-first ที่คล้ายกับ Anki หรือ Mochi แต่ใช้ ไฟล์ Markdown แทนฐานข้อมูล
  • แฟลชการ์ดแต่ละใบเขียนด้วยข้อความล้วน และรองรับรูปแบบ คำถาม(Q), คำตอบ(A) และ cloze deletion(C) พร้อมจัดการตารางทบทวนด้วย อัลกอริทึม FSRS
  • ข้อมูลการ์ดถูกระบุด้วย ค่าแฮชของข้อความ และบันทึกประวัติการทบทวนไว้ใน SQLite พร้อมรองรับการจัดการเวอร์ชันและการแชร์ผ่าน Git repository
  • ออกแบบโดยมีเป้าหมายเพื่อแก้ปัญหา อินเทอร์เฟซที่ซับซ้อน ของ Anki และ อัลกอริทึมที่ไม่มีประสิทธิภาพ ของ Mochi โดยเน้น ลดแรงเสียดทานในการป้อนข้อมูลและการเป็นเจ้าของข้อมูลอย่างสมบูรณ์
  • การผสาน Markdown, Git integration และ FSRS scheduler เข้าด้วยกัน ทำให้เกิดแนวทางใหม่สำหรับนักพัฒนาและผู้เรียนในการจัดการการเรียนรู้แบบ โปร่งใสและอัตโนมัติ

ภาพรวมของ Hashcards

  • Hashcards เป็น ระบบ spaced repetition แบบโอเพนซอร์สที่ทำงานในเครื่อง ซึ่งมอบประสบการณ์การเรียนรู้คล้าย Anki หรือ Mochi
    • ตารางทบทวนถูกจัดการด้วยอัลกอริทึม FSRS (Free Spaced Repetition Scheduler)
    • เว็บอินเทอร์เฟซทำงานที่ localhost:8000 และประวัติการทบทวนถูกเก็บไว้ใน ฐานข้อมูล SQLite
  • จุดแตกต่างหลักคือโครงสร้างที่ ไม่ใช้ฐานข้อมูล แต่จัดการแฟลชการ์ดแต่ละใบเป็น ไฟล์ Markdown
    • ตัวอย่าง: Cards/Math.md, Cards/Chemistry.md เป็นต้น
    • แต่ละไฟล์มีการ์ดแบบ Q/A หรือ cloze deletion (C) ได้หลายใบ

โครงสร้างการ์ดแบบข้อความ

  • แฟลชการ์ดเขียนด้วยรูปแบบข้อความที่เรียบง่าย
    • Q: คำถาม, A: คำตอบ, C: รูปแบบ cloze deletion
    • ตัวอย่าง:
      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 ให้ความสำคัญสูงสุดกับ “การเขียนการ์ดแบบไร้แรงเสียดทาน”
    • ยิ่งป้อนและแก้ไขการ์ดได้รวดเร็วและเป็นธรรมชาติ ก็ยิ่งเพิ่มปริมาณการเรียนรู้ได้
    • ใช้ วงเล็บเหลี่ยม([]) เพื่อลดขั้นตอนการป้อน cloze deletion (ไม่ต้องใช้ปุ่ม Shift)
  • การผสานกับ Git repository มอบข้อดีดังต่อไปนี้
    • รองรับการจัดการเวอร์ชัน การติดตามการเปลี่ยนแปลง การทำงานร่วมกัน และการแชร์แบบสาธารณะ
    • ค้นหาและแก้ไขการ์ดได้ด้วย เครื่องมือ Unix มาตรฐาน หรือสคริปต์
    • สร้างการ์ดอัตโนมัติได้จาก ข้อมูลแบบมีโครงสร้าง เช่น CSV
  • การ์ดถูก ระบุด้วยค่าแฮชของข้อความ ทำให้สามารถอ้างอิงแบบคงที่ตามเนื้อหาได้

การประเมินระบบเดิม (Anki, Mochi)

  • Anki
    • ข้อดี: โอเพนซอร์ส, รองรับ FSRS, มีสถิติที่หลากหลาย, รองรับการสร้างการ์ดอัตโนมัติ (note types)
    • ข้อเสีย: อินเทอร์เฟซซับซ้อนและไม่เป็นธรรมชาติ, การป้อนข้อมูลแบบ WYSIWYG ที่ไม่มีประสิทธิภาพ, พึ่งพาปลั๊กอิน
  • Mochi
    • ข้อดี: UI สะอาดตา, การป้อนข้อมูลแบบ Markdown, การใช้งานที่เน้นคีย์ลัด
    • ข้อเสีย: ไวยากรณ์ cloze deletion ที่ยืดยาว, ไม่มี note types, อัลกอริทึมเรียบง่ายเกินไป
    • อัลกอริทึมเดิมเป็นแบบ multiplier ที่เรียบง่าย จึงไม่มีประสิทธิภาพต่อการคงอยู่ของความจำระยะยาว
    • แม้จะเพิ่มการรองรับ FSRS แบบเบต้าเมื่อไม่นานมานี้ แต่ปัญหาการจัดตารางของการ์ดเดิมยังคงอยู่

การติดตั้งและเวิร์กโฟลว์ของ Hashcards

  • ผู้ใช้สามารถเขียนและแก้ไขการ์ดได้โดยตรงด้วย โปรแกรมแก้ไขข้อความ
    • ตัวอย่าง: Q: What is the atomic number of carbon? / A: 6
    • การ์ดหลายบรรทัดหรือรูปแบบที่ซับซ้อนก็แสดงใน Markdown ได้อย่างเป็นธรรมชาติ
  • แก้ไขการ์ดตามการเปลี่ยนแปลงของความรู้ ได้ง่าย
    • จัดเป็นไฟล์ Markdown แยกตามบท เพื่อให้สอดคล้องกับโครงสร้างของตำราได้
    • วางแนวคิดที่เกี่ยวข้องกันไว้เป็นการ์ดที่อยู่ติดกัน เพื่อเพิ่มประสิทธิภาพในการไล่ดูตอนแก้ไข
  • ด้วยการจัดการแบบ Git-based จึงใช้งานความสามารถต่อไปนี้ได้
    • commit, branch, merge, PR และการจัดการเวอร์ชันอย่างครบถ้วน
    • แชร์การเรียนรู้และทำงานร่วมกันผ่าน repository สาธารณะได้

ซินเนอร์ยีของแนวทางแบบข้อความ

  • สร้างและไล่ดูการ์ดอัตโนมัติได้ผ่าน editor macro
  • ใช้ คำสั่ง Unix (wc, awk เป็นต้น) เพื่อดูสถิติการ์ดและแก้ไขจำนวนมากพร้อมกันได้
  • ใช้ สคริปต์และ Makefile เพื่อสร้างการ์ดอัตโนมัติจากข้อมูลภายนอก เช่น CSV
  • สามารถ เผยแพร่บน GitHub เพื่อแบ่งปันกระบวนการเรียนรู้ส่วนตัว ซึ่งช่วยขยายวัฒนธรรมการเรียนรู้

บทสรุป

  • Hashcards คือระบบ spaced repetition รูปแบบใหม่ที่ผสาน ฟอร์แมตข้อความเรียบง่าย, อัลกอริทึมจัดตารางขั้นสูง (FSRS) และ Git integration
  • มันช่วย ลดแรงเสียดทานในการเขียนการ์ดให้ต่ำที่สุด, รับประกัน การเป็นเจ้าของข้อมูลอย่างสมบูรณ์, และมอบทั้ง ระบบอัตโนมัติและความสามารถในการขยายต่อ
  • ถูกนำเสนอเป็นเครื่องมือที่มอบ สภาพแวดล้อมการเรียนรู้ที่โปร่งใสและควบคุมได้ สำหรับทั้งนักพัฒนาและผู้เรียน

1 ความคิดเห็น

 
GN⁺ 2025-12-15
ความคิดเห็นจาก Hacker News
  • ฉันคิดว่าพลังที่แท้จริงของ spaced repetition ไม่ได้อยู่ที่แอปแฟลชการ์ด แต่อยู่ที่ การปรับเปลี่ยนพฤติกรรม
    ตัวอย่างเช่น หลังจากมีเหตุการณ์ที่ภรรยาของฉันไม่พอใจเพราะปัญหาเรื่องทันตกรรม ฉันก็ใส่สถานการณ์นี้ลงใน SRS ของตัวเองเพื่อฝึกให้เป็นนิสัยว่า “แสดงความเข้าอกเข้าใจทางอารมณ์และรับฟังให้มากพอ”
    ต่อให้ทบทวนครั้งละราว 30 วินาทีแบบนี้ไปตลอดชีวิต ก็คงใช้เวลาไม่ถึง 15 นาที
    หลังจากนั้นฉันก็ไม่เคยทำพลาดแบบเดิมอีกเลย และภรรยาก็บอกว่าฉันเปลี่ยนไปอย่างสิ้นเชิง
    ประเด็นสำคัญคือการมอง spaced repetition ไม่ใช่เป็น “เครื่องมือการเรียนรู้” แต่เป็น ระบบเสริมแรงแบบมีโครงสร้าง

    • ตัวอย่างนี้น่าสนใจมาก ฉันเป็นคนประเภทที่พอเจอปัญหาแล้วจะพยายามแก้ทันทีเพราะงานบังคับให้เป็นแบบนั้น เลยไม่ค่อยรู้ว่าควรตอบสนองอย่างไรเวลาที่ใครสักคนแค่อยากระบายความไม่พอใจ
      การที่ไม่ต้องแก้ปัญหา แค่แสดงความเข้าอกเข้าใจอย่างเดียว เป็นอะไรที่ต่างจากวิธีคิดของฉันโดยสิ้นเชิง
    • ฉันก็ชอบตัวอย่างนี้เหมือนกัน ฉันเอา Kindle highlights ใส่ไว้ใน SRS แบบตรง ๆ และด้วยการทบทวนเป็นระยะ ๆ ทำให้ข้อความที่อ้างไว้ค่อย ๆ ติดอยู่ในหัวเองตามธรรมชาติ
    • เป็นแนวทางที่เจ๋งมาก อยากรู้ว่าใช้แอปอะไร, เคลียร์ inbox บ่อยแค่ไหน, และกระบวนการนั้นใช้เวลานานเท่าไร
    • จากตรงที่บอกว่า “ภรรยาของฉันโกรธ” ดูเหมือนว่าคงไม่ใช่ความผิดของคุณฝ่ายเดียว
      ถ้าภรรยาของคุณเป็นฝ่ายเสนอทางแก้โดยไม่แสดงความเข้าอกเข้าใจก่อน คุณก็คงจะโกรธเหมือนกันไหม? แล้วตอนนั้นมันจะสายเกินไปแล้วหรือเปล่า?
    • นี่เป็น ตัวอย่างที่สร้างแรงบันดาลใจ มาก การพยายามแบบนี้เพื่อเข้าใจคนที่คุณรักให้ดีขึ้นเป็นเรื่องที่น่าทึ่งจริง ๆ
      อยากรู้ว่าตอนบันทึกลง SRS คุณใส่เหตุการณ์เฉพาะเจาะจง หรือใส่เป็นรูปแบบที่สรุปทั่วไป แล้วโครงสร้างหน้าการ์ด/หลังการ์ด หรือรูปแบบ cloze มีไหม
  • เป็นเรื่องธรรมดาที่คนจะเอาโครงการแบบนี้ไปเทียบกับ Anki แต่ฉันรู้สึกว่าคำวิจารณ์ Anki หลายอย่างนั้น เป็นความเห็นส่วนตัวหรือพูดเกินจริง
    โครงสร้างเด็คแบบลำดับชั้น ของ Anki กลับเป็นจุดแข็งด้วยซ้ำ และการแก้ไขแบบ WYSIWYG ก็เป็นตัวเลือกที่สมเหตุสมผลสำหรับกลุ่มผู้ใช้เป้าหมาย
    ใช้สมการ LaTeX ก็ได้ง่าย และปลั๊กอินก็เป็นระบบนิเวศแบบ ‘แฮ็ก ๆ แต่มีประโยชน์’
    ฉันลองทางเลือกมาหลายตัว แต่สุดท้ายก็กลับมาที่ Anki อยู่ดี มันใช้งานได้ครบขนาดที่แม้แต่ฉันซึ่งชอบเครื่องมือแบบเทอร์มินัลก็ยังยอมรับ

    • รายการของเขาเป็นแค่ เหตุผลด้านแรงจูงใจ ไม่ได้มีจุดประสงค์จะไปโน้มน้าวคนอื่น
      ถ้าคุณรู้สึกอินก็ลองดูโปรเจกต์ได้ ถ้าไม่ก็แค่มองข้ามไป
    • ฉันใช้ Anki วันละประมาณ 30 นาที พูดตามตรงมันไม่สมบูรณ์แบบ แต่ก็ดีพอจนไม่มีเหตุผลให้ต้องไปหาแอปอื่น
  • ถ้าการ์ดถูกระบุด้วย ค่าแฮชของข้อความ ฉันก็สงสัยว่าทุกครั้งที่แก้คำพิมพ์ผิด ประวัติการทบทวนของการ์ดจะหายไปด้วยหรือเปล่า

  • ฉันสงสัยว่าจะทำ โซเชียลเน็ตเวิร์กที่อิงกับ spaced repetition ได้ไหม
    ถ้าในฟีดสามารถทำเครื่องหมายโพสต์ที่ชอบให้เป็นเหมือน ‘ตั้งเวลาทบทวน’ ได้ มันก็น่าจะกลายเป็นรีทวีตอีกรูปแบบหนึ่ง และช่วยให้ คอนเทนต์ที่มีคุณค่าอย่างต่อเนื่อง ถูกกระจายออกไปได้

  • ฉันกำลังทำโปรเจกต์ knowledge base + spaced repetition อยู่
    ไฟล์ Markdown สะดวกมาก — เปิดดูได้จากทุกที่, จัดการเวอร์ชันด้วย Git ได้, และทำ cross-linking ได้อย่างอิสระ
    ลิงก์โปรเจกต์: https://github.com/odosui/mt

    • อันนี้น่าสนใจมาก ฉันกำลังเรียน วิชาที่เน้นความรู้ และกำลังหาเครื่องมือที่ให้สร้างแฟลชการ์ดและทบทวนได้จากในโน้ตโดยตรง
      ฉันอยากเก็บโน้ตไว้บนเครื่อง เลยหลีกเลี่ยงโซลูชันแบบคลาวด์ และก็เพิ่งรู้ว่ามีเครื่องมือที่ parse Markdown ไปเป็น Anki ได้
  • ถ้าเป็น ผู้ใช้ Emacs ขอแนะนำ org-drill ซึ่งเป็นเครื่องมือ spaced repetition แบบ plain text

  • ฉันสร้างไลบรารีชื่อ Ankivalenz ขึ้นมา มันแปลง Markdown ที่มีโครงสร้างเป็นเด็ค Anki ได้
    ตัวอย่างเช่น โครงสร้างลำดับชั้นอย่าง Path: Solar System > Planets > Color จะถูกใส่ไว้ในการ์ด ทำให้ ทบทวนโดยมีบริบท ได้
    โน้ตทั่วไปกับการ์ดสามารถอยู่ร่วมกันในไฟล์ Markdown เดียวกันได้
    https://github.com/vangberg/ankivalenz/

  • น่าเสียดายที่โปรเจกต์ SRS อื่น ๆ มักไม่ได้ทำฟังก์ชัน นำเข้าข้อมูล (import) จาก Anki ให้ดีพอ
    ผู้ใช้ส่วนใหญ่มีการ์ดอยู่ใน Anki หลายพันใบแล้ว เลยย้ายออกได้ยาก
    ฟอร์แมตข้อมูลของ Anki ซับซ้อนก็จริง แต่ก็อิงกับ SQLite เลยยังแชร์กันได้

    • ฉันเองก็เคยทำฟังก์ชัน import จาก Anki ตอนสร้างแอปแฟลชการ์ดของตัวเอง ตอนแรกดึงมาแค่ front/back เลยเกิด ข้อมูลสูญหาย เยอะมาก
      พอเข้าใจ โครงสร้าง note–model–template ของ Anki แล้ว ถึงได้ตระหนักว่ามันออกแบบมาอย่างประณีตแค่ไหน
      ถ้ามี ฟอร์แมตเด็คแบบข้อความที่แชร์กันได้ ก็น่าจะทำงานร่วมกันบน GitHub ได้ง่ายขึ้นมาก
      ถ้าแยกแต่ละโน้ตเป็นไฟล์เดี่ยวและกำหนด ID เฉพาะ ก็จะจัดการอัปเดตได้ง่ายด้วย
    • ดูเหมือนนักพัฒนาหลายคนจะไม่รู้ว่า Anki เพิ่งถูก รีแฟกเตอร์โดยใช้ Rust ไปไม่นานนี้
      ตอนนี้ลอจิกแกนหลักถูกแยกออกมาเป็น Rust crate แล้ว เลยทำ ฟรอนต์เอนด์ทางเลือก ที่ใช้ฐานข้อมูลเดิมตรง ๆ ได้ง่าย
    • SQL dump ก็เป็นไฟล์ข้อความเหมือนกัน ดังนั้นก็น่าจะไม่ได้แชร์บน GitHub ยากอะไร
  • ฉันเคยใช้ Google Sheets สำหรับป้อนข้อมูล
    ถ้าจัดการแต่ละแถวด้วย UUID ก็จะติดตามได้ง่ายแม้ตอนแก้ไข
    และยังสร้างได้หลายเด็คจากข้อมูลชุดเดียวกัน เช่น พินอินภาษาจีน→อักษรจีน, อักษรจีน→ภาษาอังกฤษ
    ถ้ามีอินเทอร์เฟซแบบนี้ที่ทำหน้าที่เป็นแบ็กเอนด์ด้วยฟอร์แมตข้อความก็คงดีมาก

    • แต่ถ้าใช้แนวทางแบบ content-addressing ก็ดูจะมีข้อเสียตรงที่แก้ไขการ์ดยาก
  • ในฐานะคนที่ใช้ spaced repetition มานาน ขอแชร์เคล็ดลับเล็กน้อย
    1️⃣ ต้อง ตัดสินใจว่าอะไรสำคัญ ถ้าทำการ์ดแม้แต่ข้อมูลเล็กน้อยไม่สำคัญ คุณจะต้องทบทวนวันละหลายร้อยใบ
    2️⃣ แนวคิดสำคัญควรถูกทำเป็น การ์ดหลายแบบ เพื่อทดสอบความเข้าใจจากหลายมุม
    3️⃣ หลังผ่านไประยะหนึ่ง ควรเปลี่ยนไปใช้ การ์ดระดับที่สอง หรือการนำไปใช้จริง ถ้าเป็นแนวคิดที่ตลอด 1 ปีไม่เคยได้ใช้เลย มันอาจไม่สำคัญก็ได้
    สรุปคือ spaced repetition เป็นเครื่องมือการเรียนรู้ที่มีประสิทธิภาพมาก แต่ การจัดลำดับความสำคัญผิดพลาด คือกับดักที่ใหญ่ที่สุด