flashcard based learning, a Knowledge Management system designed around the idea that recall is best solidified if it's done as close to forgetting as possible.
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.
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 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 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 Knowledge Base
and Japanese Study
but also in things like Tokipona.
provide 'cce/org-fc)
(use-package org-fc
(t
:ensure
:custom"~/org/"))
(org-fc-directories '("~/org/org-fc-reviews.tsv"))
(org-fc-review-history-file (expand-file-name nil)
(org-fc-shuffle-positions
<<org-fc-contexts>>
:configrequire 'org-fc-hydra)
('srs #'org-fc-dashboard)
(defalias
<<org-fc-customization>>
'org-fc-review-flip-mode
(evil-define-minor-mode-key '(normal insert emacs) "RET") 'org-fc-review-flip
(kbd "n") 'org-fc-review-flip
(kbd "s") 'org-fc-review-suspend-card
(kbd "q") 'org-fc-review-quit)
(kbd
'org-fc-review-rate-mode
(evil-define-minor-mode-key '(normal insert emacs) "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)) (kbd
Since it's not in MELPA, I have to package it myself. This gets
crammed in overrides
to be in the epkgs
"index" in Arroyo Emacs definition:
-fc = let
orgversions = 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;
};
};
This probably doesn't need to be hereā¦, but why not
{ pkgs, ... }:
{
home.packages = with pkgs; [ findutils gawk ];
}
Some Custom SRS contexts
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:
setq org-tags-exclude-from-inheritance '("kanji" "jokugo"))
(setq org-fc-custom-contexts
(and (tag "japanese")
'((japanese . (:filter ("vocabulary"))))
(tag and (not (tag "vocabulary"))
(buddhism . (:filter ("Buddhism"))))
(tag "trivia")))
(trivia . (:filter (tag or (tag "jokugo") (tag "kanji"))))
(kanji . (:filter ("poem")))
(poetry . (:filter (tag "tokipona")))
(tokipona . (:filter (tag and
(row . (:filter (not (tag "Buddhism"))
(not (tag "vocabulary"))))))) (
Some org-fc
hacks
I have a node_modules
directory with a
Node package used for some of my Literate Programming shenanigans
and it includes a directory with a .org
suffix. This modifies the find command to exclude those.
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"
(mapconcatlambda (path) (shell-quote-argument (expand-file-name path)))
(" "))) paths
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.
30
(defcustom org-fc-review-count "if numeric, truncate reviews to this many positions")
defun org-fc--truncate-reviews (oldfn &rest args)
(apply oldfn args)))
(take org-fc-review-count ('org-fc-index-positions :around 'org-fc--truncate-reviews) (advice-add
Cards to Add
NEXT [#A] PNW Trees
NEXT [#A] PNW birds
NEXT [#A] PNW native plants
NEXT [#B] iNaturalist observations
NEXT take better notes
- geopolitics and historic events
- China History Podcast show notes
- fact headings from Archive
- schools of psychology
- 109 Mental Models Explained -> slowly building a network of "ways of looking at the world"?
- architectural or Art works that i like
- Tea Facts Tea Facts
- People's birthdays
- my notes from Edward Tufte's Seminar