jMemorize on github

I don’t have a lot of experience with github, but I really love the idea of having patch and fork management integrated in a hosted code management site. During my active development of jMemorize I worked mostly alone, one reason for this being how much hassle it was to handle code submissions by other people. Either I would have manually wrestle with patch files sent over email or the patch board, or I would have to give away direct SVN access to the official repository. Two options which never felt super comfortable.

I haven’t released a new version for jMemorize for a long time, but none the less I uploaded the code for version 1.3.0 to github. You can find the source code on github at

Feel free to fork away, browse the code and maybe even to submit patches.

Good Habits Android App

GoodHabits is a new Android app that I’ve been working on.  Its kinda like a friendly coach. Its goal is to help you adapt good habits by motivating you to maintaing long running streaks of repeated uses. Let’s say you feel great after just coming back from jogging and realize that you want to do this more often. You log the habit usage in the app and it will then keep track of your stats and high scores in a playful manner.

Assuming you logged the activity 3 x time, GoodHabits will tell you: “Great! 3 is your highscore. Can you also go 5 times?”. Once you managed to go 5 times, it will start pressing you to beat 10 times and so on, always making sure that you have a new goal in sight. More importantly though it picks up your usage pattern. Let’s say you always go jogging on Tuesdays, the app will recognize this and start maintaining a separate high score just for this pattern and try to motivate you to continue with that streak. Should you fail to maintain your streak, GoodHabits will motivate you to pick up the pattern again by showing you how far you had come previously.

You can manage as many habits as you like. When you start the app you will always be presented with an overview of all habits that you are tracking. The list is sorted in a way that the most relevant habits for you right now are at the top. So when you just logged a habit use, the habit moves out of view towards the bottom of the list, since you probably don’t want to repeat it until at least the next day.

The app was born out of my personal habit forming system that I’ve been using in different variations for about three years now. The basic idea is that the app does its job without you having to set up complex time patterns. It automatically detects what you are already doing and helps you in continuing that activity, so that it can become a long running habit at some point. And it does this in a friendly manner, emphasizing your achievements, instead of complaining about failed goals.

This is just a first iteration of the app. Please let me know what you think about the idea. For now its just an experiment to play around some more in the area of life tracking and habit forming, but I have quite a few ideas, so look forward to new versions. I hope you enjoy the app. You can now find it on the android market.

jMemorize broken lesson file bug

There is a bug in jMemorize that can break the lesson file and make it impossible to access your flashcards. When you try to open the file, jMemorize will display an error dialog which when extended says something like “ Character reference “&#11″ is an invalid XML character.”

The problem appears to be caused by faulty Java XML parser implementation, which has problems with certain characters that can’t be entered inside of jMemorize – but can be copy’n’pasted from other programs into jMemorize, most often from Adobe Acrobat Reader.

There is a simple way to fix the lesson file. When compression is enabled, lesson are basically zip-files. Uncompress the file and inside you will find a ‘lesson.xml’ file. Open that file in a text editor and remove all appearances of the problematic character sequence with an added semicolon. For the example error message given above, this would be “”. Save the xml file and put it back into the zipped file.

On my Windows system I usually do this: I add the file suffix “.zip” to the lesson and then double-click on it to open my WinRar software. I then drag’n’drop the lesson.xml onto a folder. Then I edit the lesson.xml in a text editor and drag’n’drop the file back onto the opened WinRar window, so that the lesson.xml in the zip file gets updated. I close WinRar and remove the suffix and I have a fixed lesson file.

jMemorize will only put the lesson into a zipped file, when compression is enabled in the preferences dialog. If compression is disabled, the .jml file is just the plain text file already, so you can open the .jml directly in your text editor and fix the file without having to handle any zip software.

If you need more help, please open a bug on the jMemorize bug tracker, upload your faulty lesson file and I will take a look myself. Considering over 170,000 downloads this bug doesn’t seem to occur very often. It’s pretty annoying none the less though and I’m sorry for any inconveniences it is causing.