Generate an RSS feed linking periodically to tagged pages of a wiki in order have optimal proper memorization.


Minimize memory biases, Recall bias, improve Long-term memory and gracefully handle Memory and aging.



Assuming you have a running PmWiki instance.

  1. Download memorization.php in your cookbook/ directory and load the recipe with include_once('cookbook/memorization.php');
  2. Add the date you want to start working on a page (after finishing writing down the notes of a book for example) by adding (:startrecall: 25/12/2010 :)(d/m/Y format) anywhere in the page.
    1. Add this to every page you want to start memorizing
  3. Open the page Path:?action=memorization in your feed reader
    1. Note that you need to subscribe to only that 1 feed for the entire wiki, not a feed per page
  4. Read the new items as they appear

Tweaking notes

  1. if it's the first time you use the recipe and want to add notes finished today "cheat" by using the date of the day before in the startrecall variable
    1. If you do not, you'll have to wait the next day to see the result as it's useless to have a recall the same day (but you can if you want to by changing the recall intervals, see below).
  2. personalize the message to something more appropriate for you
    1. edit the recipe file to change the content of <description>
  3. change the recall intervals based on your needs and personality
    1. edit the recipe file to change the content of $datestorecall

Organization and principle

  1. the organization of your notes and recalls is up to you
    1. e.g. if you want to recall an entire set of books
      1. instead of using the date on each page of the set, create a new page with links to the books, eventually instructions for yourself, and the recall date
    2. consider instead of just links in order to make proper revision pages (cf PmWiki:IncludeOtherPages)
    3. in general consider PmWiki:PageLists and PmWiki:PageDirectives to build powerful recalling pages embedding other pages with your notes
  2. the recipe doesn't check when you edit or note, it only checks the date
    1. if it's today, update the feed, else do nothing
    2. this implies that you should use the feed reader (as it's supposed to be used) to bump/start/mark read notification
  3. the content you want to memorize does not have to be limited to your own wiki
    1. create a page then link to the content you want to memorize, add your own justification and motivation about why it is important to you then finally add the startrecall keyword with the date you want to start memorizing.
      1. defined MemoryRecalls

Known bugs

  • HTML anchors are not logged by lighttpd (and probably by other httpd but rather limited to the browser)
  • when there is no date (e.g. using Template with empty startrecall) the date is interpreted as Unix epoch (~1970) and thus trigger a recall.
    • happened with 15 000 days recall in early January 2011

To do

  1. weight principle based on a composite function of
    1. the estimated importance (e.g.
    2. the amount of new information added or removed
      1. use the size of the diff
        1. rather crude measure since the structure can be changed and have a major impact yet it would not be reflected there
    3. note that this also allows to drop the randomized solution as this would probably be sufficiently complex to produce non-predictable events
      1. by experience this does not seem to be a justified requirement anyway since too many items are added so that they can not be tracked
  2. validate through W3C feed validator after each modification
  3. push on RCS cf code repository
  4. add the GPL license done for the whole wiki
    1. Felipe said aGPL was more adapted
  5. support random shifts to try to cancel predictability and boredom deprecated for composite weighting
  6. support intervals per page
  7. support more complex patterns (with + * ...) per page
  8. display a default item with instruction rather than the error msg
    1. <item><description>tsss. set it up man, add startrecall in pages!</description></item>
  9. provide a specific feed per page (unclear)
    1. renders through..? ?action=memorization&feedname=myfeed
  10. filter (via parameter by URL) by
    1. group
      1. ReadingNotes
      2. Languages
        1. LanguageRandomized
    2. specific page
      1. Seedea:Content/Newconcepts
        1. Newconcepts
    3. note that this is mostly covered via behavior_recall
  11. caching
    1. use the mechanism used in the processing recipe
  12. handle permission
    1. anybody can mess with your memory feed if they can edit the wiki
  13. the recipe is oblivious to startrecall changes
    1. this is actually useful, it can be used to "push" up the recall date after important changes
  14. use last time read from PersonalInformationStream#Finished to generate reminders from books studied before this recipe
  15. add in the <description> or <comment> a notification if no edit was done on that page during the last X days (suggesting to update the content)
    1. consider other productive patterns, including Cognition#DailyExercisesFeed
    2. eventually generate test on the fly
      1. not giving the book title but instead asking from which book this came from and providing a (locally redirected in order to hide the solution) link to the solution
      2. asking to sum the book up then storing the result and only after, providing a look to the book
    3. since tests can not be known (or at least predicted too accurately) by the note author consider
      1. Amazon Turk
      2. friends
      3. existing communities (book readers, Wikiversity, ...)
  16. integrate a visited link system
    1. grep /var/log/lighttpd/access.log | grep ReadingNotes, works well but limited to the current log (see man:logrotate)
      1. grep bloglines /var/log/lighttpd/access.log | grep -v action=
      2. a non-used parameters with the date should thus be added to know from which recall days the reading was actually requested
    2. this is usually handled by the RSS client but that doesn't provide a nice integration with the wiki
    3. each link to the page is modified to be handled by modifying a variable like {$:LastTimeMemoryRead} when clicked
      1. probably using a regex+pageUpdate
  17. check Reward to be more motivating
    1. WithoutNotesSeptember10#TDlearning
  18. integrate the social aspect
    1. note the recall of a friend to prepare question for him or her
    2. eventually propose connection through a group reading books synchronously
    3. added to
  19. re-apply context in which the reading was done
    1. e.g. use the page edition dates to create a YouTube (or whatever the user was using at that time) music playlist from user activity of the same period
      1. briefly discussed during MBE19#BrainRules on BrainRules
    2. e.g. geographical location using coordinates in Trips
      1. especially with points of interest, cf Madrid10#ToDo
  20. integrate ImprovingPIM#VisualDecayOfInformation to warn about old content before improving memorization of it
    1. note that by default, visiting the page to recall does show the decay information
  21. consider doing it again but visually closer to card, based on the recent Hubs?action=whiteboard
    1. with possible as a source Seedea:Content/Newconcepts (either as-is or via ?action=source)


  1. extended to ~273 years (100 000 days)
  2. render part of the page
    1. replace <description> with RetrieveAuthSection() cf PmWiki:Functions
  3. add the generator
    1. <generator>Generated by for PmWiki</generator>

To do for my own usage


Check Path:?action=memorization and change the date of startrecall

Demonstration feed

(:pmfeed feed=' ' max_count=5 showtitle=false showpubdate=true newwin=false itemspace=0:)

which should display items from

Inspired by

Other possible scripts derived from this one

Memorization for fast access to indexes

Mnemonics and memory are useful for rote learning but should be distinguished from learning which is done through building link, understanding by usage and synthesis to provide further affordances (a form of embodiment).

Somehow the goal is only to get access to the information you need in a reasonable time, so memory regarding the index (or an instanciation of the structure that holds the information) and the ways to access the actual information would be a significant improvement.

Numbers Everyone Should Know :


  1. do not just review content periodiocally but also the list of the things written
    1. e.g. weekly parse through

See also

Reading rhythm

  1. me forcer a avoir un rythme de lecture plus consistent
    1. si non fini et date de derniere lecture de chaque livre > X jours
      1. suggerer de continuer la lecture

Event preparation

  • revert recipe
    • future date
    • inverted pattern
    • if ( future date - current pattern item ( inverted pattern ) == today )
      • push

Consider blending the 2 and thus recalling content in as part of the preparation of an event.


Check Path:?action=preparation and change the date of startprepare

Demonstration feed

(:pmfeed feed='' max_count=5 showtitle=false showpubdate=true newwin=false itemspace=0:) Date of this even should be the 30th but changed just for testing purposes.

which should display items from


  • SuperMemo Introduction to fast learning
  • Mnemosyne Project flash-card tool which optimizes your learning process.
  • Anki friendly, intelligent flashcards

See also