Skip to content

adham-omran/ir

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ir.el - Incremental Reading

The term is orginally coined by Piotr Wozniak and he describes it as:

Incremental reading is a learning technique that makes it possible to read thousands of articles at the same time without getting lost. Incremental reading begins with importing articles from electronic sources, e.g. the Internet. The student then extracts the most important fragments of individual articles for further review. Extracted fragments are then converted into questions and answers. These in turn become subject to systematic review and repetition that maximizes the long-term recall.

Introduction to Incremental Reading

This project aims to cover all the useful features of incremental reading. The main features I have implemented so far are scheduling of material and extraction from PDFs.

The current way to create questions and clozes out of the extracts is to write them out using ankifier but I want to improve on this in the future.

Tutorial

@TODO

Development

Changelog

  • 0.7.0:
    • Refactor (ir-start-session).
    • Fix issues in the algorithm.
    • Add org-roam integration.
    • Generalize (ir–check-duplicate)
  • 0.6.0: Add session functions (ir-start-session).
  • 0.5.0: Add editing function (ir-edit-update-column).
  • 0.4.0: Add function (ir-add-bibtex-entry).
  • 0.3.0: Add basic view by due functions.
  • 0.2.0: Add basic persistent highlighting functions.
  • 0.1.0: Initial release with basic extraction functions.

What’s Next?

  • [ ] Implement ordering by priority.
  • [ ] Video playback (vlc vs mpv).
    • [ ] From YouTube.
    • [ ] From local files.
  • [ ] Change the affinity for priority from INTEGER to REAL.
  • [ ] Create a heading of a pdf even if the pdf is not in the db.
  • [ ] Research the possibility of sioyek integration

    Release 1.4.0 of sioyek adds the ability to control a running instance of sioyek with the command line.

Implementation of question creation

I see a reason to implement a way to create basic or cloze questions. This is not SuperMemo and I’ve already worked out a way to create basic and cloze cards using ankifier.el. Such that the form of my final workflow would be:

EXTRACT TEXT

QUESTIONS

Design of the Database

Using emacsql I created the following table.

ColumnAffinityDescription
idTEXTUnique ID using org-id
afactorREALA-Factor
priorityREALPriority
intervalINTEGERInterval
dateINTEGERDate of next repetition
typeTEXTType of file (org-mode, pdf)
pathTEXTPath to file if applicalble

One of my goals is to support as many possible file types as possible. This would allow one to incrementally learn any piece of material. This also allows others to easily extend the program by including their favorite file types and programs to open them.

One way to query the database is to sort the ir table by date, then match the file type to a function that opens that file type.

Such files have a path which is inserted in the path column.

Example

File typeMethodDescription.
textorg-id-findA simple org heading.
pdfdired-find-fileA pdf file.
mp4@TODOA video.

Algorithm Design

I use a simplified SM2 algorithm to calculate the intervals. The A Factor increases by 0.08 per repetition.

$\text{New Interval} = \text{round}(\text{Old Interval} × \text{A Factor})$

$\text{New Date} = \text{Old Date} + \text{New Interval}$