This is the web site for eding, an Emacs-based Spaced Repetition Software
(SRS) System for learning German using
Frank Richter's Ding dictionary.
(Or English, if you happen to speak German...)
What is eding?
eding is a collection of Emacs-Lisp routines that you run under Emacs.
eding provides a powerful regular expression lookup system that makes it
easy to search the Ding dictionary and to add the results of your searches
to a test database. It also provides a Spaced Repetition Software system which
creates quizzes for the user based on past performance. In other words,
when you take a test, eding automatically grades the test, stores your
performance results in a database, and uses the scores from past tests to
figure out which questions you need to see in future tests. It is
similar in concept to
and Anki, but it adds very convenient
dictionary lookup capability and leverages an existing 140,000+ line dictionary
to make creating your test database a snap.
Why use eding?
There are many reasons:
- eding works under Emacs, so it is very portable.
- eding provides a lot of flexibility for the user to choose an input
method that is comfortable. This is because the people that wrote Emacs
have done all the heavy lifting for us. Emacs has great input-method
support built in, so why should we rewrite it?
- eding is specifically tailored to work with the Ding dictionary, so you
have a 140,000 line dictionary at your disposal. This makes it very
easy for you to put together your test database and to keep adding
entries to it as you learn.
- The eding lookup routines print results into a sorted Emacs buffer.
This means you can do editing or subsearches on the search results before
adding them to the test database very easily.
- Emacs has very powerful regular expression capability for tailoring your
search strings. eding adds extensions to the Emacs regular expression
syntax specifically for use with the dictionary and the SRS system.
- eding is very modular. If you don't like the scheduling algorithm, or
if you would like to experiment with it, you can easily copy it, change
what you want, and try it, all without leaving the system!
- eding is very lightweight. Almost all of the user interface stuff is
handled by Emacs. If you want to modify eding you can concentrate on
the important stuff, the SRS algorithms.
- eding has built-in documentation for every function and a built-in user
- eding takes advantage of the Emacs keybinding system to make invoking
commands very simple. There are really only three key sequences of a
couple of keystrokes each that you use very often.
- eding has customized sorting routines for sorting UTF-8 German text.
Even if you don't care about the Ding dictionary and speak fluent
German already, you might be able to use these routines to sort
UTF-8 German text in Emacs, because I think they do a much better
job than the built-in sorting routines.
- While eding is set up to work with the Ding dictionary, it would not
take much work to make it work with any set of challenge-response data.
- eding works! I have been using it for months with great results.
Why is eding on Sourceforge?
Again, there are many reasons, but the main reason is simple: The truth is,
I had never even heard of SRS systems until about a week before I
started working on eding. I started reading about SuperMemo and got
hooked. My first scheduling algorithms were based on an early SuperMemo
algorithm, but I was never happy with the feel of the system. I felt that
the performance measurement was too subjective. I started experimenting
with algorithms based purely on speed of response, because I believe that
fluency requires your response to be automatic; lightning fast.
Well, based on what I have read, this philosophy would probably not be
embraced by most people that are working on SRS systems. But the thing is,
the system as it is now works really well for me. So I figured, why not
let other people give it a try and possibly come up with even better
scheduling algorithms? I freely admit that mine is not based on some grand
theory. It is based on common sense and months of trial and error.
Also, the scheduling algorithm doesn't even account for much of the code!
Most of the code is housekeeping and parsing stuff. So I invite people
to beat on the scheduling algorithm and improve it!
Here are some of the other reasons that eding belongs on Sourceforge:
- eding has hooks in it to be English-centric or to be German-centric.
The truth is, however, that I have only slightly tested it from the
German perspective. That is, if you are German and you want to learn
English. Frankly the code probably needs a little work to make it
more balanced in this regard.
- The prompts and the built-in manual are totally unbalanced. That is,
the prompts are all in German, but they are prompts that I made up. I am
not a native German speaker and I tried to come up with prompts that are
short and correct, but I probably failed miserably! Similarly, the
built-in manual is entirely in English. I could translate the manual into
German, but it would sound like an English manual tranlated into German by
a four-year-old. I think to do the job right, a native German speaker
has to translate the manual and fix the prompts.
- All of the routines have documentation strings (this is common in Lisp systems),
but I can see how some of the routines could be considered cryptic. I have
tried especially to put enough comments in the quiz routine to help people
figure out what it is doing, but I would like to put in more comments and
make it more modular so it is easy for people to experiment with different
- The scoring system gives you a handicap based on the length of the
challenge. That is, if there are 80 characters in the challenge it will
take you longer to read the challenge than if there were 10. Right now
the system subtracts an amount of time that is proportional to challenge
length from your response time. The nice thing about this is that it is
simple and automatic, and it seems to work OK for me. But it is not very
scientific, because it should be based more on complexity than simple
length. I'd like to come up with a more elegant approach to this issue.
- I would like to improve the manual. Right now the on-line manual opens
up a new window and you have to either use the Emacs scroll-other-window
command (which only goes one way) or type C-x o to go to the other window
to scroll it. I'd like to do something to simplify this or make it better,
but keep it simple. I like the fact that the current manual doesn't complicate
installation. Perhaps it would make sense to convert it to an info page,
if that can be done without complicating the installation.
- I would love to add built-in drills for declension of nouns and
adjectives, and drills for conjugation of irregular verbs which work the
words in the test database into the challenges.
- I would like to generalize the UTF-8 German text sorting routines so
they can be used like the built-in Emacs sorting routines on buffer data.
Essentially I would like to clone sort-lines, sort-fields, sort-columns
(at least) into eding-sort-lines, eding-sort-fields, eding-sort-columns,
etc. to make these routines sort the way eding does.
- I would like to improve the eding-check-dictionary routine so that
it works like the Emacs apropos command. Right now, it just prints out
a list of the line numbers with issues. I would like it to use the
same mechanism that apropos uses to jump to the offending line in the
dictionary when you hit return (or mouse click) on one of the line
numbers in the list.
- I am not completely satisfied with the options I have for loading
the code into Emacs. I don't know enough about autoloading to know if
it is appropriate for eding. I'd like to get some input from real Emacs-Lisp
How to get eding
- Documentation: You can look at the documentation
with your browser. The web page is essentially a carbon copy of the
- CVS: You can check out the source code using CVS with the following command:
cvs -d :pserver:firstname.lastname@example.org/cvsroot/eding co eding
This will create a directory named eding which contains a README.txt file and
a file named eding.el. It is very simple to install. You don't really
need to compile anything. (unlike some CVS distributions!)
- Tarball: The source tarball is available