complete-computing-environment/spaced_reptition_study.org

168 lines
7.1 KiB
Org Mode

:PROPERTIES:
:ID: 2e31b385-a003-4369-a136-c6b78c0917e1
:ROAM_ALIASES: SRS org-fc
:ROAM_REFS: https://github.com/l3kn/org-fc
:END:
#+TITLE: Spaced Repetition Study
#+ARCOLOGY_KEY: cce/org-fc
#+ARCOLOGY_ALLOW_CRAWL: t
#+filetags: :Project:CCE:
#+ARROYO_MODULE_WANTS: cce/org_mode_installation.org
#+ARROYO_MODULE_WANTS: cce/evil_mode.org
#+ARROYO_EMACS_MODULE: org-fc
#+PROPERTY: header-args :mkdirp yes :results none
#+PROPERTY: header-args:emacs-lisp :tangle org-fc.el
#+AUTO_TANGLE: t
flashcard based learning, a [[id:knowledge_base][Knowledge Management]] system designed around the idea that recall is best solidified if it's done as close to forgetting as possible.
#+begin_quote
Spaced repetition is an evidence-based learning technique that is usually performed with flashcards. Newly introduced and more difficult flashcards are shown more frequently while older and less difficult flashcards are shown less frequently in order to exploit the psychological spacing effect. The use of spaced repetition has been shown to increase rate of learning.
#+end_quote
Anki is the go-to digital solution for general study these days, but I'd have to extract cards from my notes, and I would rather not. I used org-contrib's =org-drill= for a while but it didn't scale to many files in the [[id:cce/org-roam][org-roam]] paradigm very well. I used Wani Kani for a bit too but syncing my score between local cards and what is in Wani Kani; once I started making cards from my own readings things kind of went off course and even though I have a lifetime subscription to it. It's a good tool, but without making custom cards for it it sort of falls short.
So these days I use a piece of software called [[https://github.com/l3kn/org-fc][org-fc]] which uses =awk= and =find= to generate an index across all files and stores the scores in a drawer alongside each heading. It's not MELPA so it's a bit of a "sleeper hit", but I use it across my [[id:knowledge_base][Knowledge Base]] and [[id:e7f18233-1138-4ff8-bc06-36e8f04c0558][Japanese Study]] but also in things like [[id:tokipona][Tokipona]].
#+begin_src emacs-lisp :noweb yes
(provide 'cce/org-fc)
(use-package org-fc
:ensure t
:custom
(org-fc-directories '("~/org/"))
(org-fc-review-history-file (expand-file-name "~/org/org-fc-reviews.tsv"))
(org-fc-shuffle-positions nil)
<<org-fc-contexts>>
:config
(require 'org-fc-hydra)
(defalias 'srs #'org-fc-dashboard)
<<org-fc-customization>>
(evil-define-minor-mode-key '(normal insert emacs) 'org-fc-review-flip-mode
(kbd "RET") 'org-fc-review-flip
(kbd "n") 'org-fc-review-flip
(kbd "s") 'org-fc-review-suspend-card
(kbd "q") 'org-fc-review-quit)
(evil-define-minor-mode-key '(normal insert emacs) 'org-fc-review-rate-mode
(kbd "a") 'org-fc-review-rate-again
(kbd "h") 'org-fc-review-rate-hard
(kbd "g") 'org-fc-review-rate-good
(kbd "e") 'org-fc-review-rate-easy
(kbd "s") 'org-fc-review-suspend-card
(kbd "q") 'org-fc-review-quit))
#+end_src
Since it's not in MELPA, I have to package it myself. This gets crammed in =overrides= to be in the =epkgs= "index" in [[id:arroyo/emacs][Arroyo Emacs]] definition:
#+ARROYO_HOME_EPKGS: overrides/org-fc.nix
#+begin_src nix :tangle ~/arroyo-nix/overrides/org-fc.nix
org-fc = let
versions = pkgs.lib.pkgVersions;
in epkgs.melpaBuild {
pname = "org-fc";
version = "20220823.2107";
commit = versions.org-fc.rev;
src = pkgs.callPackage versions.org-fc.src {};
recipe = pkgs.writeText "recipe" ''
(org-fc
:files (:defaults "awk")
:repo "l3kn/org-fc"
:fetcher github)
'';
packageRequires = [ pkgs.gawk epkgs.hydra pkgs.findutils ];
meta = {
homepage = "https://www.leonrische.me/fc/index.html";
license = lib.licenses.gpl3Plus;
};
};
#+end_src
This probably doesn't need to be here..., but why not
#+ARROYO_HOME_MODULE: hm/org-fc.nix
#+begin_src nix :tangle ~/arroyo-nix/hm/org-fc.nix
{ pkgs, ... }:
{
home.packages = with pkgs; [ findutils gawk ];
}
#+end_src
* Some Custom SRS contexts
:PROPERTIES:
:ID: 20230508T223733.992116
:END:
Sometimes it's nice to focus on one thing at a time. =org-fc= gives us custom contexts and here's how I use it:
#+NAME: org-fc-contexts
#+begin_src emacs-lisp
(setq org-tags-exclude-from-inheritance '("kanji" "jokugo"))
(setq org-fc-custom-contexts
'((japanese . (:filter (and (tag "japanese")
(tag "vocabulary"))))
(buddhism . (:filter (and (not (tag "vocabulary"))
(tag "Buddhism"))))
(trivia . (:filter (tag "trivia")))
(kanji . (:filter (or (tag "jokugo") (tag "kanji"))))
(poetry . (:filter (tag "poem")))
(tokipona . (:filter (tag "tokipona")))
(row . (:filter (and
(not (tag "Buddhism"))
(not (tag "vocabulary")))))))
#+end_src
* Some =org-fc= hacks
I have a =node_modules= directory with a Node package used for some of my [[id:cce/literate_programming][Literate Programming]] shenanigans and it includes a directory with a =.org= suffix. This modifies the find command to exclude those.
#+begin_src emacs-lisp :noweb-ref org-fc-customization
(defun org-fc-awk--find (paths)
"Generate shell code to search PATHS for org files.
Matches all .org files ignoring ones with names don't start with
a '.' to exclude temporary / backup files.
With the '-L' option, 'find' follows symlinks."
(format
"find -L %s -type f -name \"*.org\" -not -name \".*\" -print0"
(mapconcat
(lambda (path) (shell-quote-argument (expand-file-name path)))
paths " ")))
#+end_src
I add a customization option which allows me to do my reviews in smaller bursts. it makes it easier to come back to things which I have forgotten; if i have a stack I haven't touched in Too Long, it'll take a really long time to retain because i will get through 40 or 80 or them and the ones i have to repeat will be at the bottom of the pile. Adjusting this down lets me get through my stacks faster.
#+begin_src emacs-lisp :noweb-ref org-fc-customization
(defcustom org-fc-review-count 30
"if numeric, truncate reviews to this many positions")
(defun org-fc--truncate-reviews (oldfn &rest args)
(take org-fc-review-count (apply oldfn args)))
(advice-add 'org-fc-index-positions :around 'org-fc--truncate-reviews)
#+end_src
* Cards to Add
** NEXT [#A] PNW Trees
** NEXT [#A] PNW birds
** NEXT [#A] PNW native plants
** NEXT [#B] [[id:3a202b25-16d4-4c80-9641-20072ed75e6c][iNaturalist]] observations
** NEXT take better notes
- geopolitics and historic events
- [[id:7d049500-aeb6-41d5-af95-cb05da233d6b][China History Podcast]] show notes
- fact headings from [[id:d17a9ccf-0bfe-426e-85b3-d15771d3ee03][Archive]]
- schools of psychology
- [[id:109_mental_models_explained][109 Mental Models Explained]] -> slowly building a network of "ways of looking at the world"?
- architectural or [[id:a58e4523-b7db-4dd8-93c6-77e445f22a87][Art]] works that i like
- [[id:80661910-20e3-4a77-9fc8-9e6a04ae6de0][Tea]] Facts [[id:80661910-20e3-4a77-9fc8-9e6a04ae6de0][Tea]] Facts
- [[id:8803fda8-20cd-4d62-878d-dcb1b7853183][People]]'s birthdays
- my notes from [[id:edward_tufte_s_seminar][Edward Tufte's Seminar]]