diff options
Diffstat (limited to 'README.org')
| -rw-r--r-- | README.org | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/README.org b/README.org new file mode 100644 index 0000000..7faf0c2 --- /dev/null +++ b/README.org @@ -0,0 +1,410 @@ +# -*- mode: org; coding: utf-8 -*- +#+TITLE: Org-Drill +#+AUTHOR: Paul Sexton + +* Synopsis + + +Org-Drill uses the spaced repetition algorithm in =org-learn= to conduct +interactive "drill sessions", using org files as sources of facts to be +memorised. The material to be remembered is presented to the student in random +order. The student rates his or her recall of each item, and this information +is fed back to =org-learn= to schedule the item for later revision. + +Each drill session can be restricted to topics in the current buffer +(default), one or several files, all agenda files, or a subtree. A single +topic can also be drilled. + +Different "topic types" can be defined, which present their information to the +student in different ways. + +For more on the spaced repetition algorithm, and examples of other programs +that use it, see: +- [[http://supermemo.com/index.htm][SuperMemo]] (the SM5 algorithm is discussed [[http://www.supermemo.com/english/ol/sm5.htm][here]]) +- [[http://ichi2.net/anki/][Anki]] +- [[http://mnemosyne-proj.org/index.php][Mnemosyne]] + + +* Installation + + +Put the following in your =.emacs=. You will also need to make sure that Org's +"contrib/lisp" directory is in the emacs load-path. + +#+BEGIN_SRC emacs-lisp +(require 'org-drill) +#+END_SRC + +I also recommend the following, so that items are always eventually retested, +even when you remember them very well. + +#+BEGIN_SRC emacs-lisp +(setq org-learn-always-reschedule t) +#+END_SRC + +If you want cloze-deleted text to show up in a special font within Org mode +buffers, also add: + +#+BEGIN_SRC emacs-lisp +(setq org-drill-use-visible-cloze-face-p t) +#+END_SRC + + +* Demonstration + + +Load the file [[file:spanish.org][spanish.org]]. Press =M-x= and run the function =org-drill=. Follow +the prompts at the bottom of the screen. + +When the drill finishes, you can look at =spanish.org= to get some idea of how +drill topics are written. + + +* Writing the questions + + +Org-Drill uses org mode topics as 'drill items'. To be used as a drill item, +the topic must have a tag that matches =org-drill-question-tag=. This is +=:drill:= by default. Any other org topics will be ignored. + +You don't need to schedule the topics initially. However =org-drill= *will* +recognise items that have been scheduled previously with +=org-learn=. Unscheduled items are considered to be 'new' and ready for +memorisation. + +How should 'drill topics' be structured? Any org topic is a legal drill topic +-- it will simply be shown with subheadings collapsed. After pressing a +key, any hidden subheadings will be revealed, and you will be asked to rate +your "recall" of the item. + +This will be adequate for some items, but usually you will want to write items +where you have more control over what information is hidden from the user for +recall purposes. + +** Simple topics + +The simplest drill topic has no special structure. When such a topic is +presented during a drill session, any subheadings are "collapsed" with their +contents hidden. So, you could include the question as text beneath the main +heading, and the answer within a subheading. For example: + +#+BEGIN_EXAMPLE +* Item :drill: +What is the capital city of Estonia? + +** The Answer +Tallinn. +#+END_EXAMPLE + +When this item is presented for review, the text beneath the main heading will +be visible, but the contents of the subheading ("The Answer") will be hidden. + + +** Cloze deletion + +Cloze deletion can be used in any drill topic regardless of whether it is +otherwise 'simple', or one of the specialised topic types discussed below. To +use cloze deletion, part of the body of the topic is marked as /cloze text/ by +surrounding it with single square brackets, [like so]. When the topic is +presented for review, the text within square brackets will be obscured. The +text is then revealed after the user presses a key. For example: + +#+BEGIN_EXAMPLE +* Item :drill: +The capital city of Estonia is [Tallinn]. +#+END_EXAMPLE + +During review, the user will see: + +#+BEGIN_QUOTE +The capital city of Estonia is @<font style="background-color: blue;" color="blue"> +XXXXXXX@</font>. +#+END_QUOTE + +When the user presses a key, the text "Tallinn" will become visible. + + +** Two-sided cards + +The remaining topic types all use the topic property, =DRILL_CARD_TYPE=. This +property tells =org-drill= which function to use to present the topic during +review. If this property has the value =twosided= then the topic is treated as +a "two sided card". When a two sided card is reviewed, /one of the first two/ +subheadings within the topic will be visible -- all other +subheadings will be hidden. + +Two-sided cards are meant to emulate the type of flipcard where either side is +useful as test material (for example, a card with a word in a foreign language +on one side, and its translation on the other). + +A two sided card can have more than 2 subheadings, but all subheadings after +the first two are considered as "notes" and will always be hidden during topic +review. + +#+BEGIN_EXAMPLE +* Noun :drill: + :PROPERTIES: + :DRILL_CARD_TYPE: twosided + :END: + +Translate this word. + +** Spanish +la mujer + +** English +the woman + +** Example sentence +¿Quién fue esa mujer? +Who was that woman? +#+END_EXAMPLE + +In this example, the user will be shown the main text -- "Translate this word" +-- and either 'la mujer', /or/ 'the woman', at random. The section 'Example +sentence' will never be shown until after the user presses a key, because it is +not one of the first two 'sides' of the topic. + + +** Multi-sided cards + +The =multisided= card type is similar to =twosided=, except that any +subheading has a chance of being presented during the topic review. One +subheading is always shown and all others are always hidden. + +#+BEGIN_EXAMPLE +* Noun :drill: + :PROPERTIES: + :DRILL_CARD_TYPE: multisided + :END: + +Translate. + +** Spanish +la mesa + +** English +the table + +** Picture +[[file:table.jpg][PICTURE]] +#+END_EXAMPLE + +The user will be shown the main text and either 'la mujer', /or/ 'the woman', +/or/ a picture of a table. + + +** User-defined topic types + +Finally, you can write your own elisp functions to define new kinds of +topics. Any new topic type will need to be added to +=org-drill-card-type-alist=, and cards using that topic type will need to have +it as the value of their =DRILL_CARD_TYPE= property. For an example, see the +function =org-drill-present-spanish-verb=, which defines the new topic type +=spanish_verb=, used in 'spanish.org'. + +See the file [[file:spanish.org][spanish.org]] for a full set of example material. + + +* Running the drill session + + +Start a drill session with =M-x org-drill=. By default, this includes all +non-hidden topics in the current buffer. =org-drill= takes an optional +argument, SCOPE, which allows it to take drill items from other +sources. Possible values for SCOPE are: + +- tree :: The subtree starting with the entry at the cursor. +- file :: The current buffer, including both hidden and non-hidden items. +- file-with-archives :: The current buffer, and any archives associated with it. +- agenda :: All agenda files. +- agenda-with-archives :: All agenda files with any archive files associated + with them. +- (file1 file2 ...) :: A list of filenames. All files in the list will be + scanned. + +During a drill session, you will be presented with each item, then asked to +rate your recall of it by pressing a key between 0 and 5. The meaning of these +numbers is (taken from =org-learn=): + +- 0 :: Completely forgot. +- 1 :: Even after seeing the answer, it still took a bit to sink in. +- 2 :: After seeing the answer, you remembered it. +- 3 :: It took you awhile, but you finally remembered. +- 4 :: After a little bit of thought you remembered. +- 5 :: You remembered the item really easily. + +You can press '?' at the prompt if you have trouble remembering what the +numbers 0--5 signify. At any time you can press 'q' to finish the drill early +(your progress will be saved), or 'e' to finish the drill and jump to the +current topic for editing (your progress up to that point will be saved). + + +* Leeches + + +From the Anki website, http://ichi2.net/anki/wiki/Leeches: + +#+BEGIN_QUOTE +Leeches are cards that you keep on forgetting. Because they require so many +reviews, they take up a lot more of your time than other cards. +#+END_QUOTE + +Like Anki, Org-Drill defines leeches as cards that you have "failed" many +times. The number of times an item must be failed before it is considered a +leech is set by the variable =org-drill-leech-failure-threshold= (15 by +default). When you fail to remember an item more than this many times, the item +will be given the =:leech:= tag. + +Leech items can be handled in one of three ways. You can choose how Org-Drill +handles leeches by setting the variable =org-drill-leech-method= to one of the +following values: +- nil :: Leech items are tagged with the =leech= tag, but otherwise treated the + same as normal items. +- skip :: Leech items are not included in drill sessions. +- warn :: Leech items are still included in drill sessions, but a warning + message is printed when each leech item is presented. + +The best way to deal with a leech is either to delete it, or reformulate it so +that it is easier to remember, for example by splitting it into more than one +card. + +See [[http://www.supermemo.com/help/leech.htm][the SuperMemo website]] for more on leeches. + + +* Incremental reading + + +An innovative feature of the program SuperMemo is so-called "incremental +reading". This refers to the ability to quickly and easily make drill items +from selected portions of text as you read an article (a web page for +example). See [[http://www.supermemo.com/help/read.htm][the SuperMemo website]] for more on incremental reading. + +Much of the infrastructure for incremental reading is already provided by Org +Mode, with the help of some other emacs packages. You can provide yourself with +an incremental reading facility by using 'org-capture' alongside a package that +allows you to browse web pages in emacs -- e.g. w3 or [[http://www.emacswiki.org/emacs/emacs-w3m][emacs-w3m]]. There is a +large variety of bookmarking packages for emacs which allow you to save your +place in webpages (another important component of incremental reading). See the +[[http://www.emacswiki.org/emacs/BookMarks][Emacs Wiki]] for details. + +An example of using Org-Drill for incremental reading is given below. First, +and most importantly, we need to define an =org-capture= template for captured +facts: + +#+BEGIN_SRC emacs-lisp +(setq org-capture-templates + `(("f" "Fact" entry + (file+headline "my_new_facts.org" "Incoming") + (concat "* Fact #%(format \"%s\" (float-time)) :" + org-drill-question-tag + ":%^g\n + :PROPERTIES: + :DATE_ADDED: %t + :SOURCE_URL: %a + :END:\n +%i%?\n\n") + :empty-lines 1 + :immediate-finish nil) + ;; ...other capture templates... + )) +#+END_SRC + +Using this template, you can select a region of text which contains a fact you +want to remember, for example while reading a web page. You then invoke the +capture template above, and the selected text will be turned into a new fact +and saved to whichever file and heading you nominate in the template. You will +be given the opportunity to edit the fact -- you should make sure that the fact +makes sense independent of its context, as that is how it will be presented to +you. The easiest way to turn the text into a 'question' is by cloze +deletion. All you need to do is surround the 'hidden' parts of the text with +square brackets. + +Next, you start reading a web page within Emacs. For example, suppose you are +reading the Wikipedia entry on tuberculosis [[http://en.wikipedia.org/wiki/Tuberculosis][here]]. + +You read the following: + +#+BEGIN_QUOTE +The classic symptoms of tuberculosis are a chronic cough with blood-tinged +sputum, fever, night sweats, and weight loss. Infection of other organs causes +a wide range of symptoms. Treatment is difficult and requires long courses of +multiple antibiotics. Antibiotic resistance is a growing problem in +(extensively) multi-drug-resistant tuberculosis. Prevention relies on screening +programs and vaccination, usually with Bacillus Calmette-Guérin vaccine. +#+END_QUOTE + +You decide you want to remember that "Bacillus Calmette-Guérin vaccine" is the +name of the vaccine against tuberculosis. First, you select the relevant +portion of the text as the active region: + +#+BEGIN_QUOTE +The classic symptoms of tuberculosis are a chronic cough with blood-tinged +sputum, fever, night sweats, and weight loss. Infection of other organs causes +a wide range of symptoms. Treatment is difficult and requires long courses of +multiple antibiotics. Antibiotic resistance is a growing problem in +(extensively) multi-drug-resistant tuberculosis. +@<font style="background-color: yellow;">Prevention relies +on screening programs and vaccination, usually with Bacillus Calmette-Guérin +vaccine.@</font> +#+END_QUOTE + +Then you press a key to "capture" this piece of text (whatever key you have +bound to =org-capture=), followed by "f" to use the "Fact" template shown +above. + +A temporary buffer will be created, containing something like: + +#+BEGIN_EXAMPLE +** Fact #1282372386.671655 :drill: + + :PROPERTIES: + :DATE_ADDED: <2010-08-21 Sat> + :SOURCE_URL: [[http://en.wikipedia.org/wiki/Tuberculosis][Tuberculosis - Wikipedia, the free encyclopedia]] + :END: + +Prevention relies on screening programs and vaccination, usually with Bacillus +Calmette-Guérin vaccine. +#+END_EXAMPLE + +Note that the fact's properties automatically contain the date of its creation, +and a URL linking back to the origin of the fact -- the web page you were +browsing, in this case. Because fact "titles" are seldom necessary, the title +of the fact contains a meaningless but unique number (the number of seconds +elapsed since 1/1/1970). + +Next, you edit the sentence so that it makes sense when you are presented with +it out of context, and you also mark the key fact you want to remember by +surrounding it with single square brackets. + +: Prevention of tuberculosis relies on screening programs and vaccination, +: usually with [Bacillus Calmette-Guérin vaccine]. + +You then press =C-c C-c=, and the new fact is saved. You continue reading the +web page, adding other facts if you wish. + +Points to note: +- You can of course define several different "fact" templates, each of which + might send its fact to a different file or subheading, or give it different + tags or properties, for example. +- You don't have to use a web browser within Emacs. The "fact" template above + will work if you do not have text selected -- the new fact will be empty. You + could read a web page (or PDF document, etc) in a program of your choice, + copy some text to the clipboard, then switch to Emacs and paste it into a new + empty fact. +- Alternatively, you could define a template that takes its text from the + clipboard rather than from the selected region. You can do this by changing + the =%i= in the fact template to =%x= or =%^C=. See the documentation for the + variable =org-capture-templates= for more details. + + +* Still to do + + +- hide drawers. +- =org-drill-question-tag= should use a tag match string, rather than a + single tag +- progress indicator during drill session: cumulative time, time spent thinking + about this card +- perhaps take account of item priorities, showing high priority items first + |
