- 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) ได้หลายใบ
โครงสร้างการ์ดแบบข้อความ
- แฟลชการ์ดเขียนด้วยรูปแบบข้อความที่เรียบง่าย
- สามารถใช้ ไวยากรณ์ 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันคิดว่าพลังที่แท้จริงของ spaced repetition ไม่ได้อยู่ที่แอปแฟลชการ์ด แต่อยู่ที่ การปรับเปลี่ยนพฤติกรรม
ตัวอย่างเช่น หลังจากมีเหตุการณ์ที่ภรรยาของฉันไม่พอใจเพราะปัญหาเรื่องทันตกรรม ฉันก็ใส่สถานการณ์นี้ลงใน SRS ของตัวเองเพื่อฝึกให้เป็นนิสัยว่า “แสดงความเข้าอกเข้าใจทางอารมณ์และรับฟังให้มากพอ”
ต่อให้ทบทวนครั้งละราว 30 วินาทีแบบนี้ไปตลอดชีวิต ก็คงใช้เวลาไม่ถึง 15 นาที
หลังจากนั้นฉันก็ไม่เคยทำพลาดแบบเดิมอีกเลย และภรรยาก็บอกว่าฉันเปลี่ยนไปอย่างสิ้นเชิง
ประเด็นสำคัญคือการมอง spaced repetition ไม่ใช่เป็น “เครื่องมือการเรียนรู้” แต่เป็น ระบบเสริมแรงแบบมีโครงสร้าง
การที่ไม่ต้องแก้ปัญหา แค่แสดงความเข้าอกเข้าใจอย่างเดียว เป็นอะไรที่ต่างจากวิธีคิดของฉันโดยสิ้นเชิง
ถ้าภรรยาของคุณเป็นฝ่ายเสนอทางแก้โดยไม่แสดงความเข้าอกเข้าใจก่อน คุณก็คงจะโกรธเหมือนกันไหม? แล้วตอนนั้นมันจะสายเกินไปแล้วหรือเปล่า?
อยากรู้ว่าตอนบันทึกลง SRS คุณใส่เหตุการณ์เฉพาะเจาะจง หรือใส่เป็นรูปแบบที่สรุปทั่วไป แล้วโครงสร้างหน้าการ์ด/หลังการ์ด หรือรูปแบบ cloze มีไหม
เป็นเรื่องธรรมดาที่คนจะเอาโครงการแบบนี้ไปเทียบกับ Anki แต่ฉันรู้สึกว่าคำวิจารณ์ Anki หลายอย่างนั้น เป็นความเห็นส่วนตัวหรือพูดเกินจริง
โครงสร้างเด็คแบบลำดับชั้น ของ Anki กลับเป็นจุดแข็งด้วยซ้ำ และการแก้ไขแบบ WYSIWYG ก็เป็นตัวเลือกที่สมเหตุสมผลสำหรับกลุ่มผู้ใช้เป้าหมาย
ใช้สมการ LaTeX ก็ได้ง่าย และปลั๊กอินก็เป็นระบบนิเวศแบบ ‘แฮ็ก ๆ แต่มีประโยชน์’
ฉันลองทางเลือกมาหลายตัว แต่สุดท้ายก็กลับมาที่ Anki อยู่ดี มันใช้งานได้ครบขนาดที่แม้แต่ฉันซึ่งชอบเครื่องมือแบบเทอร์มินัลก็ยังยอมรับ
ถ้าคุณรู้สึกอินก็ลองดูโปรเจกต์ได้ ถ้าไม่ก็แค่มองข้ามไป
ถ้าการ์ดถูกระบุด้วย ค่าแฮชของข้อความ ฉันก็สงสัยว่าทุกครั้งที่แก้คำพิมพ์ผิด ประวัติการทบทวนของการ์ดจะหายไปด้วยหรือเปล่า
ฉันสงสัยว่าจะทำ โซเชียลเน็ตเวิร์กที่อิงกับ 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 เลยยังแชร์กันได้
พอเข้าใจ โครงสร้าง note–model–template ของ Anki แล้ว ถึงได้ตระหนักว่ามันออกแบบมาอย่างประณีตแค่ไหน
ถ้ามี ฟอร์แมตเด็คแบบข้อความที่แชร์กันได้ ก็น่าจะทำงานร่วมกันบน GitHub ได้ง่ายขึ้นมาก
ถ้าแยกแต่ละโน้ตเป็นไฟล์เดี่ยวและกำหนด ID เฉพาะ ก็จะจัดการอัปเดตได้ง่ายด้วย
ตอนนี้ลอจิกแกนหลักถูกแยกออกมาเป็น Rust crate แล้ว เลยทำ ฟรอนต์เอนด์ทางเลือก ที่ใช้ฐานข้อมูลเดิมตรง ๆ ได้ง่าย
ฉันเคยใช้ Google Sheets สำหรับป้อนข้อมูล
ถ้าจัดการแต่ละแถวด้วย UUID ก็จะติดตามได้ง่ายแม้ตอนแก้ไข
และยังสร้างได้หลายเด็คจากข้อมูลชุดเดียวกัน เช่น พินอินภาษาจีน→อักษรจีน, อักษรจีน→ภาษาอังกฤษ
ถ้ามีอินเทอร์เฟซแบบนี้ที่ทำหน้าที่เป็นแบ็กเอนด์ด้วยฟอร์แมตข้อความก็คงดีมาก
ในฐานะคนที่ใช้ spaced repetition มานาน ขอแชร์เคล็ดลับเล็กน้อย
1️⃣ ต้อง ตัดสินใจว่าอะไรสำคัญ ถ้าทำการ์ดแม้แต่ข้อมูลเล็กน้อยไม่สำคัญ คุณจะต้องทบทวนวันละหลายร้อยใบ
2️⃣ แนวคิดสำคัญควรถูกทำเป็น การ์ดหลายแบบ เพื่อทดสอบความเข้าใจจากหลายมุม
3️⃣ หลังผ่านไประยะหนึ่ง ควรเปลี่ยนไปใช้ การ์ดระดับที่สอง หรือการนำไปใช้จริง ถ้าเป็นแนวคิดที่ตลอด 1 ปีไม่เคยได้ใช้เลย มันอาจไม่สำคัญก็ได้
สรุปคือ spaced repetition เป็นเครื่องมือการเรียนรู้ที่มีประสิทธิภาพมาก แต่ การจัดลำดับความสำคัญผิดพลาด คือกับดักที่ใหญ่ที่สุด