Gnosis (γνῶσις) is a spaced repetition system (SRS) implementation for note taking and self testing, for GNU Emacs.
Gnosis does not use flashcard type learning, instead it uses a binary value to rate user input. Meaning you either know the right answer, or you do not, no rating of your own is involved.
*Update: Visit this user-manual for updated information on gnosis. Consider this as an just old blog post about my project.
About
On my last post, Spaced Repetition Software Gripes, I outlined a blueprint for what I consider to be the optimal design of an SRS, that caters to my personal preferences.
So, I’ve developed my own SRS, gnosis (γνῶσις), pronounced “GNU-sis”, meaning knowledge in Greek. This SRS addresses the concerns that I previously highlighted. Currently, I have found it to be highly beneficial and, as a result, I decided to share it with all of you.
Differences with other SRS
Gnosis does not implement flashcard type review sessions where the
user rates his own answer on an arbitrary scale. Instead implements
“note” types that require user input. Some of these note types, like
the MCQ
multiple choice question, even allow for simulating
real-life exams.
Unlike other SRS implementations for GNU Emacs, gnosis does not rely
on org-mode
, which I’ve found not to be an ideal option for a
database replacement. Instead opting for an
sqlite database with
git to track any changes made,
enabling efficient data management, manipulation and data integrity.
Furthermore, since Gnosis is built upon Emacs, with Emacs Lisp, it offers a convenient and (hopefully) enjoyable experience for customization according to your individual preferences.
However, one drawback of using Gnosis is that it is not currently supported on mobile devices, as Emacs has yet to extend its compatibility to such platforms.
Installation
You can get gnosis from my personal git server here or using this sourcehut mirror.
Straight.el
(straight-use-package
'(gnosis :type git
:host nil
:repo "https://git.thanosapollo.org/gnosis"))
Manual
$ git clone https://git.thanosapollo.org/gnosis
Add this to your emacs configuration:
(add-to-list 'load-path "/path/to/gnosis")
(load-file "~/path/to/gnosis.el")
(require 'gnosis)
Adding notes
Creating notes for gnosis can be done with a simple
M-x gnosis-add-note
Everything is done through the mini-buffer. My personal workflow takes
advantage of that by not really leaving gnosis-add-note
prompt until
I finish studying a chapter/section, using
pdf-tools or
nov.el.
I think you won’t need much guidance on creating notes for any note type, except cloze
.
Creating cloze type notes
Cloze type note questions are formatted similarly to Anki’s syntax, like so:
{c1:Cyproheptadine} is a(n) {c2:5-HT2} receptor antagonist used to treat {c2:serotonin syndrome}
NOTE: You can also format clozes like Anki if you so prefer; e.g
{{c1::Cyproheptadine}}
For each
cX
-tag there will be created a cloze type note, the above example creates 2 cloze type notes.Each
cX
tag can have multiple clozes, but each cloze must be a UNIQUE word (or a unique combination of words) in given note.
Customizing gnosis algorithm
gnosis-algorithm-interval
This is a list of 2 numbers, for the first 2 intervals after a successful review. For example:
(setq gnosis-algorithm-interval '(1 3))
After first successfully reviewing a note, you will see it again tomorrow, if you successfully review said note again, the next review will be after 3 days.
gnosis-algorithm-ef
This is the value of gnosis “easiness factor”, it’s basically a list that consists of 3 items. The first item is the increase factor, used to increase the easiness factor upon successful review. Second item refers to the decrease factor, used to decrease the easiness factor upon an unsuccessful review. The third item is the (starting) total easiness factor, used to calculate the next interval.
The basic’s of how this is used is that it’s being multiplied with the last interval, e.g if you last reviewed a note 6 days ago, and the easiness factor (total) of this note is 2.0, your next interval would be 6 * 2.0 & the next total ef will be 2.0 + increase-factor.
Example configuration:
(setq gnosis-algorithm-ef '(0.3 0.3 1.3))
gnsois-algorithm-ff
This is the value of gnosis forgetting factor (ff), it needs to be a floating number below 1. This is used to calculate the next interval upon an unsuccessful review, by being multiplied with last interval. If for a note with a value of last-interval of 6 days and a ff of 0.5, upon an unsuccessful review the next interval will be in 6 * 0.5 days
Example configuration:
(setq gnosis-algorithm-ff 0.5)