Cool learning software: Mnemosyne
By | May 5th, 2008
A couple weeks ago I came across an article about learning through spaced-repetition. The article claims that when you first learn something new you will tend to forget it rather quickly, but if you recall it at an optimal time (near when you would forget it) you will remember it for an even longer interval. As you continue to recall this information at these critical points the interval grows longer and longer, until it is measured in years. The article refers to software called SuperMemo, which can be purchased for the Windows operating system, but is not available for OSX, which I happen to use.
The idea of spaced-repetition was interesting enough for me to experiment. Initially I thought I might be stuck writing my own software, but fortunately I came across a very cool open source project called Mnemosyne, which works similarly to SuperMemo: it uses flash cards that quiz you on a piece of knowledge at critical times determined by its algorithm. Here’s an example of one of the cards in my system (from the European geography card deck):

Cards can include graphics, sounds, or text. You can import card decks or you can create your own. I’ve been using it for about about two weeks to study European geography and Spanish (in combination with LiveMocha). So far, I’ve found the system to be very helpful with both subjects, so I will continue the experiment. If you’re interested in learning a new subject, I would definitely recommend taking a look at this.
Using MacPorts to Install Mnemosyne
On OSX, Mnemosyne can be installed by downloading all of the dependencies and building from source or by using Fink (instructions here). I prefer MacPorts, and though it is not yet part of the port collection (I’m working on that), I have steps here that have been tested on OSX Tiger:
- Install MacPorts
- Create a local ports repository
- In your ports repository, create a new directory
education/mnemosyne - Download the Mnemosyne Portfile and put it in
education/mnemosyne. - Download a patch for setup.py and place it in
education/mnemosyne/files. - Update your port index by going to the root of your local repository and running
portindex. - Install the port by running:
sudo port install mnemosyne.
Running Mnemosyne on a USB Drive
As I use both a laptop and a desktop, I want to keep my learning information in one place. The Mnemosyne website has a guide to use a USB drive. However, I didn’t want to put the whole Mnemosyne package on my USB stick, just the data. Here’s my approach:
- Mount your USB stick (mine mounts to /Volumes/THUMBDRIVE)
- Move your mnemosyne data to the USB stick:
mv ~/.mnemosyne /Volumes/THUMBDRIVE/mnemosyne - Symlink the mnemosyne data dir to the USB stick:
ln -s /Volumes/THUMBDRIVE/mnemosyne ~/.mnemosyne
David
says:
May 17th, 2008 at 11:49 am
Thanks for making the Mnemosyne Portfile. Has anyone tested this on Tiger 10.4.11? I just tried installing Mnemosyne via MacPorts, but it appears that the py-pyobjc dependency installs pyobjc 1.6, an old version of the software that conflicts with Safari 3’s version of WebKit. I couldn’t find a way of cleanly downgrading Safari 3 to Safari 2 in 10.4.11 because Safari 3 seems to be built into that version of the OS. Any suggestions?
Chris Pettitt
says:
May 17th, 2008 at 9:30 pm
Hi David,
I’m running 10.4.11 on two of my systems and somehow I didn’t run into this issue. I tried an uninstall and reinstall of py-pyobjc and it worked, which is odd, because I am reading about this issue all over the ‘net. It makes it difficult for me to find a definitive set of steps to try.
I did come across a couple ideas though.
I found a post about how to downgrade Safari on the Apple support forums.
One other avenue to pursue is trying a parallel install of Safari. The author also talks about how to set up the environment for a different version of webkit.
I hope these might be of help. It’s unfortunate that I’m not able to get the issue to happen locally, so that I could come up with a definitive solution.
David
says:
May 18th, 2008 at 5:43 pm
Hi Chris,
That post on the Apple forums was actually mine.
I’m not thrilled about the prospect of downgrading the whole OS to 10.4.10 permanently just to run Mnemosyne. I don’t love Anki, but I’m starting to think a bloated SRS program is better than none.
I also saw the Multi-Safari site, but I didn’t see the instructions to set up the environment for different versions of WebKit. I’ll have to look into that, but I don’t want to mess with my system too much. I generally leave that to my Arch Linux VM…
If I can’t get the WebKit instructions to work systemwide, I might just archive & install from my Tiger DVD and upgrade to 10.4.10 like Hawaiian_Starman said on the Apple discussion forum. Then I could try to install Mnemosyne from MacPorts, upgrade to 10.4.11, and see if pyobjc still works. By the way, “pyobjc 1.6″ was a typo in my other post. I meant 1.4.
Thanks again, and I hope I get this to work. Worst comes to worst, I’ll have to use Anki instead of Mnemosyne. At least Mnemosyne works on your box.
Regards,
David
Chris Pettitt
says:
May 18th, 2008 at 6:21 pm
David,
One other thing that occurred to me is that I could probably just build a binary of py-pyobjc and send it to you. The MacPorts documentation has a section on making binaries from a port: http://guide.macports.org/#using.binaries.archives. If that idea is appealing to you, comment here or drop me a mail (through the contact page) and I’ll put it together.
I haven’t used Anki, so I don’t have a basis for comparison, but I’ve really been getting a lot of Mnemosyne every day.
Regards,
Chris
David
says:
May 18th, 2008 at 7:08 pm
Chris,
That would be great. I don’t know if the WebKit problem only occurs at compile-time, but it’s certainly worth a try. It looks like you would create a binary archive (port -d archive logrotate) rather than a binary package so that it will integrate with my MacPorts installation.
Thanks,
David
Chris Pettitt
says:
May 18th, 2008 at 7:36 pm
Hi David,
You’re right - the archive is what you want. I’ve posted it here. I’d be happy to hear if it works for you.
Thanks,
Chris
David
says:
May 19th, 2008 at 1:38 pm
Thanks, Chris. I just realized, I have no clue how to install the archive. All I know is that it’s supposed to go somewhere inside /opt/local/var/macports/packages/ (I don’t know if I’m supposed to duplicate the port’s hierarchy of directories inside there) in order for MacPorts to find the package when I type “sudo port install py-pyobjc” and for MacPorts to skip all the steps from fetch up to, but not including, install. Should I decompress the archive or will MacPorts do that automatically? How do I get MacPorts to recognize that the py-pyobjc binary archive exists? Do I use some form of the “port archive” command?
Thanks,
David
Chris Pettitt
says:
May 19th, 2008 at 4:54 pm
In /opt/local/etc/macports/macports.conf look for these two lines:
# Create and use binary archive packages for installation/reinstallation ease
portarchivemode yes
# Where to store/retrieve ports binary archive files
portarchivepath /opt/local/var/macports/packages
I had to set portarchivemode to yes. My .tgz is at /opt/local/var/macports/packages/darwin/i386/py-pyobjc-1.4_0.i386.tgz
When I install with this setup, I get:
sudo port install -d py-pyobjc
—> Unpacking tgz archive for py-pyobjc 1.4_0
—> Installing py-pyobjc 1.4_0
—> Activating py-pyobjc 1.4_0
—> Cleaning py-pyobjc
I think the same should work in your environment.
Regards,
Chris
David
says:
May 24th, 2008 at 8:16 am
Hi Chris,
Sorry for the late response. MacPorts still attempted to compile py-pyobjc from source as if the binary archive didn’t exist. I read online that pyobjc 1.4 (the Tiger version) just doesn’t work with the new version of WebKit, and therefore with 10.4.11, and I’m assuming that that means the problem is at runtime rather than just at compile time.
I think I’ll stick with Anki until they release a fix for the Tiger version of pyobjc, if they ever will, or until I write my own SRS program, probably tailored to learning Chinese (which I am currently doing) with built-in support for seamless switching between simplified and traditional characters. That was quite a long sentence.
In any case, thanks for the article and for getting me to switch to MacPorts. You don’t know how good it felt to get “sudo rm -rf /sw” over with once and for all.
Regards,
David
Chris Pettitt
says:
May 24th, 2008 at 10:20 am
Hi David,
I’m sorry to hear that the package didn’t work for you.
It is still a net gain, IMO, if it motivated you to move from fink to MacPorts - I remember enjoying my “sudo rm -rf /sw” moment as well :).
If you end up writing an SRS program with the intention of sharing it, send me an email - I’d be happy to try it out.
Regards,
Chris
David
says:
May 24th, 2008 at 8:35 pm
Hi Chris,
If I do decide to write an SRS program, it will be probably be in the somewhat distant future (i.e. development would start in several months to a year from now), but I would definitely release it under a free/open source license, and it would probably “find its way” to SourceForge.net where you could download it. I’m not sure it would help you more than Mnemosyne for learning European geography and Spanish, but I’ll be sure to email you if I embark on the task.
Regards,
David
P.S. I’m glad you also regard your “sudo rm -rf /sw” moment fondly. I’ve begun to think that trashing Fink is a better cure for hypertension than taking Angiotensin-Converting Enzyme inhibitors.
David
says:
May 24th, 2008 at 8:37 pm
P.P.S. I’ll be sure to notify you if I end up writing the software.