Index   Software   Fun Stuff   Photos   Writings   Music   Links   About  
Free Software

MMSLIB - A PHP library/class for encoding, decoding and sending MMS
Peffisaur - A Multiuser MMS Weblog Community
MMS Diary - A weblog/diary for mobile phones using MMS as transport
Fractool - Some command line tools for fractal generation
Calvin - A calendar/reminder system
SDL Hacks - Graphical eye candy
JMerlin - A simple handwriting recognition system in Java
XMerlin - A simple handwriting recognition system for X
Mandelbrot explorer - A fractal viewer
Talk to Nisse - A one man chatroom
Zilo - A tiny web server
Tankwar - A battle between two tanks
The Blue Car - A car racing game
Ping - An instant messaging system written in Java
XH - Scheme meets HTML
Barracuda - A graphical interface to BIBTEX


MMSLIB has been a part of the MMS Diary and Peffisaur projects for some time now. Now and then people have been asking me to also include encoding of MMS:es in mmslib and also to release it separately. So I have done just that.

Mmslib is a PHP library for encoding and decoding MMS:es. MMS is short for Multimedia Messaging Service. In short it is the successor of SMS (Short Message Service) with the enhancements that you can not only send text but basically any content type your phone can handle such as images, text, videos, ring signals and audio clips.

With this library you can create messages and add multimedia parts such as JPEG, GIF, AMR, MIDI and so on. Messages received from phones can also be unpacked and attachments can be extracted. The library also contains a limited MMS sending functionality that uses a HTTP service to send SMS:es. You would probably have to change the actual implementation of the SMS sending to fit your way of sending SMS:es (if it is over serial port, to a real SMSC or through some other type of HTTP service). This is all done with the three classes MMSDecoder, MMSEncoder and MMSNotifyer.

For more information about the technical aspects, please see the MMS Diary project.

An example of what can be done with the library can be found in the Peffisaur project which is my little hobby project - A Multiuser MMS Weblog community. Feel free to join if you like. Doesn't cost you anything.

If you want to discuss MMS Diary, Peffisaur or MMS Blogging in general then please visit my forum at

Revision history:

  • mmslib-0.97.tar.gz - An update by Jakub Haton to enable encoding of SMIL messages. Feel free to try it out. It has not been tested by me though.
  • mmslib-0.96.tar.gz - Initial release

Platform: Any platform with a PHP-enabled HTTP server

Requirements: PHP

Download: mmslib-0.96.tar.gz


Peffisaur is the successor to MMS Diary only that it now has support for more users, database support, email support and a more advanced web interface. You can post messages either directly to the site (using the MMSC emulating feature of MMS Diary - this interface is sometimes referred to as MM1) or via your operator's MMSC by sending the MMS to an email address (this interface is sometimes referred to as MM3). The advantage of the direct posting method is that the operator cannot charge anything for it but the traffic costs. The advantage of the email approach is that it is much easier for the users to set up in their phones (they don't have to change any settings - perhaps only add an email address to their phone book for easier sending). Peffisaur users can comment on messages, search for messages and create message collections.

For more information about the technical aspects, please see the MMS Diary project.

A running installation of the Peffisaur can be found at which is my little hobby project - A Multiuser MMS Weblog community. Feel free to join if you like. Doesn't cost you anything.

If you want to discuss MMS Diary, Peffisaur or MMS Blogging in general then please visit my forum at

Revision history:

Platform: Any platform with a PHP-enabled HTTP server

Requirements: PHP (PHP4 >= 4.2), MySQL, Sendmail with Procmail and Apache with mod_rewrite for the server. An MMS phone for you - tentatively with a camera

Download: peffisaur-1.0.tar.gz

MMS Diary

I wanted to be able to post small diary entries to my web page for friends and family to see when I was on vacation by only using my phone (which is an Ericsson T68 with MMS). You can also take pictures and attach by using a Communicam or similar. There are several ways of sending pictures and text from your phone, email is one for instance, but I wanted to try using MMS.

Weblogging (or blogging) like this is becoming more and more popular these days but so far not many have done MMS Blogging except for some services where you have to pay for it. Mine is free of charge of course. Both free as in speech and free as in beer (since it's released as open source under the GPL and you host it yourself on your web server).

It works so that a PHP-script pretends to be an MMS Proxy-Relay (the server that receives MMS:es - an MMS Proxy-Relay is NOT the same as an MMSC since and MMSC is usually thought of as a combination of the MMS Proxy-Relay and the MMS Server) so you set your phone to use that server instead of the one your operator provided you with and then post your MMS:es directly towards that one (see README for more info). This of course has the advantage that you don't have to pay your operator for sending the MMS which is good. The images and texts (and audio clips, midi etc) are then later presented on an HTML-page.

A test example of what the diary might look like can be seen here. A slightly more ambitious try can be found at which is my little hobby project - A Multiuser MMS Weblog community. Feel free to join if you like. Doesn't cost you anything.

This package also contains a PHP-class (MMSDecoder) for decoding binary MMS messages. MMS:es are encoded using a binary format inherited from the WAP world and this file helps you decode binary chunks and extract attachments and so on.

If you want to discuss MMS Diary, Peffisaur or MMS Blogging in general then please visit my forum at

Revision history:

Platform: Any platform with a PHP-enabled HTTP server

Requirements: PHP (PHP4 >= 4.2) for the server. An MMS phone for you - tentatively with a camera

Download: mmsdiary-0.95.tar.gz


One day I decided I wanted to make some wall decorations, mainly because I had a new flat and the walls were far too empty. I decided to make some fractals to put up there. Of course. You'll have to make the software yourself to do it. It's more of an art then to me if you have done everything. So I created some command-line tools to make these images. Then I uploaded the images to Fujifilmnet which is a service to print digital images on photo paper. Then it was only to buy some frames and put it up on the wall

The above is an example of just applying different palettes to the same fractal. The images were generated using this script.

This is an example of first generating one huge fractal using the genfract tool and then split it into 9 smaller ones using the pdlsplit command. This one was not printed using Fujifilmnet. Instead I had help from Peter whose father owns a nice printer.

Platform: Un*x/Linux

Requirements: None really but ppmtogif is a nice complement

Download: fractool-1.0.tar.gz


I have never needed a calendar before but I have discovered lately that sometimes it can be convenient to be reminded of important things like birthdays so I wrote this little calendar/reminder system. You basically enter your todo:s and Calvin will send you an email as a reminder some time before as you specify. Simple but useful.

The web interface is realized with PHP and MySQL and the reminder function is done with a Perl script that runs as a cron job every night

Screenshots: Main Window, Edit Todo Dialog

Platform: Un*x/Linux

Requirements: Perl, PHP, Sendmail (or compatible) and MySQL

Download: calvin_1.0.tar.gz

SDL Hacks

Doing silly graphical hacks has always fascinated me. There is no better way to learn programming than to do mindless things that shows some silly patterns on the screen. You see all the time what you're making and what result your changes make. I wanted to learn the SDL library so I did a few hacks around that

The first one, sdlplate, whose example output can be seen above, shows how a simple operation, when iterated can create complex and beautiful patterns. This is found so often in fractals, nature and all over. Simple things turning into more complex beautiful structures, like small ants turning into a large ant colony. Then, after a while, one realizes of course that the ant itself is quite complicated too but made up of what appears to be simpler building blocks. Recursion...

The other one is the sdlplasma. Everyone has seen the plasma effect in the Fractint program that existed back then in the dark DOS era and still exists today in other forms such as under Linux. Many has also implemented the plasma algorithm, or the Midpoint Displacement algorithm as it is called in other contexts. This is my version of that program. It paints the cloud and then rotates the palette when the user presses a key. Simple and beautiful. Simplicity makes beauty!

Platform: Platforms running SDL, such as Linux but also other closed source, less stable, commercial systems from Redmond

Requirements: SDL

Download: sdlplate, sdlplasma


JMerlin is a simple, small footprint, single character recognition engine. It is the Java ancestor of XMerlin. The way characters are input is different from XMerlin. JMerlin reads input from both stdin and from the mouse.

JMerlin is not supported nor documented any more. It is released under GPL because people wanted the Java implementation as well. Some documentation can be found in my Master's thesis.

Revision history:

Platform: Systems running Java. Tested on i386-linux, arm-linux, and Solaris

Requirements: Java (on Linux if used with VersaPad)

Download: jmerlin-0.91b.tar.gz


XMerlin is a simple, small footprint, single character recognition engine for X11 based web pads and such devices where a regular keyboard is not an option. The way it works is that you write characters in a small window and after recognition the character is sent to the window in focus which could be an editor, web browser or any other window that accepts SendEvents.

The target in this release was to keep it simple and small. Therefore neither the code nor the design of the characters are optimized or tweaked for any particular system. It is left in a rather general but still usable state.

This version was developed during my time as a thesis worker at Ericsson. Thanks goes to my boss for letting me release the code under GPL.

If you are interested in how it works you can read my Master's thesis. It is a bit outdated at the moment but the general idea is still the same.

Please note:XMerlin was written in '98 and since then things have changed a bit in Linux/Unix-land. Many people write to me and complain that it does not compile any longer. Making it compile is simple though. Just make sure you install libx11-dev so that you actually have the required libraries. Modern compilers are also more strict than they used to be. There is a switch statement with an empty default-label that the compiler complains about these days. Simply add a "break;" there and it should compile nicely. Then there are yet more complaints that merlin does not play well with modern window managers, like on the latest Ubuntu. Well, perhaps it does not :) This was made for a barebone system with little resources so complex window managers like the ones Gnome and KDE uses was not intended for Merlin, in fact when Merlin was written people were still using Fvwm and WindowMaker. Fvwm2 worked well last time I tried it and so did WindowMaker - in 1999 or so. Merlin was never meant to be compatible with any future version of windowing systems so please don't be surprised if it does not work on your system. If anyone has a patched Merlin for these issues and would like to contribute it I would gladly put it up on the web page. I no longer maintain this myself so please don't complain too much. One of the reasons I stopped releasing GNU software was because of the fact that too many people started behaving like kids who just wanted things for free. They didn't contribute anything but complaints. Sadly, people are very open to have things handed to them but seldom ready to give.

Known ports:

PVMerlin (a more current version, by Christian Ensel, can be found here)
Wittawat Yamwong and Christian Ensel has ported Merlin to the Pocket Viewer

Agenda Merlin (or this place)
Enzo Dari together with Brian Webb has ported Merlin to the Agenda PDA. An open source PDA.

David Lott has ported Merlin to the Nintendo DS

Platform: Systems running X. Tested on i386-linux, arm-linux, and Solaris

Requirements: Xlib

Download: xmerlin-0.9_public.tar.gz

Mandelbrot explorer

Fractals are extremely interesting things. Not only are they strikingly beautiful and complex, but this beauty and complexity is often generated by very simple and clean mathematics.

I wrote this program to be able to explore one type of fractals - the Mandelbrot. With Mandelbrot explorer it is possible to zoom into the fractal and explore the endlessly repeating beauty of it.

One can also select what type of calculation to perform, such as fix point arithmetic, 32-bit floating point arithmetic or 64-bit floating point. One can also alter the number of iterations in the calculations.

Platform: Un*x-like systems

Requirements: Qt

Download: mandel.tar.gz

Talk to Nisse

Artificial Intelligence has always fascinated me. Some time ago I wrote this Java chatroom kind-of-thing where you can talk to this guy called Nisse. It is a program very much inspired by the classic Eliza program. Nisse sure is Artificial enough. I don't know about the Intelligence part though.

You can talk to Nisse right now if you want in the Fun stuff section.

Platform: A Java enabled browser

Requirements: Java



In a project we had a small handheld device running linux on a StrongARM CPU. The amount of memory was short so when I needed a small web server on it one could say that Apache was not an option. The solution was to write the simplest possible web server from scratch.

Zilo's features are very limited. It can only serve static pages. It doesn't care about mime types but most browsers can cope with that for well known extensions like gif and jpeg etc.

I'm not claiming that it is better or worse, faster or slower than anything else. It could be made very secure however because of its limitations (I mean the most secure web server is the one which you cannot connect to, right ;-).

Anyway, it could be used as an example if you want to learn some socket programming.

Platform: Un*x-like systems

Requirements: None really

Download: zilo-0.95.tar.gz


Tankwar is a game inspired by a similar game on the Amiga (I don't remember the name). You control a tank and try to hit your opponent before he hits you.

The file contains both a binary and the source code. To compile the code yourself you need DJGPP version 2. The source code is not very beautiful. It was written long ago when I had just started to learn C programming.

Platform: DOS (version 5.0 to Win98 - it works very badly on NT and Windows2000)

Requirements: A friend to play with


The Blue Car

The Blue Car is a game inspired by the great Kickstart game for the C64. You control a tiny blue car (surprise!) and you try to avoid obstacles by adjusting the speed and jumping (!) with your car. It has support for one or two players. It also has a track editor so you can create new tracks.

The file contains both a binary and the source code. To compile the code yourself you need DJGPP version 2. The source code is not very beautiful. It was written long ago when I had just started to learn C programming.

More documentation and more screenshots can be found at

Platform: DOS (version 5.0 to Win98 - it works very badly on NT and Windows2000)

Requirements: Fast reflexes



In a house where we used to live we had a local area network connecting all 6 appartments in the building (everybody had computers). Then there was suddenly a need to communicate to be able to synchronize when playing games for instance.

The environment was mixed, some used Linux and some ran Windows. Since we didn't have a server that was always on and since we were not always connected to the Internet, we couldn't use any of the ICQ solutions that were available at the time. The solution was to write a small and simple instant messaging system. It was named Ping because it constantly sent small requests to see if a client was still online. Other than that it has no resemblance to the well known ping command. It was written in Java 1.1.

Revision history:

  • ping-2.1.tar.gz - Made it compile under higher Java-versions than 1.1. No changes apart from that
  • ping2-0.tar.gz - Initial release (needs Java 1.1)

Platform: Any Java enabled OS

Requirements: You need friends to talk to

Download: ping-2.1.tar.gz


This program is a cgi program that allows you to use the powers of a functional language (Scheme) when writing your HTML documents. It works by reading a special file, usually with the suffix .xh, it interprets the code in that file and outputs the interpreted data as a HTML document.

This program was made for a project in the course "Artificiella Språk och Syntaxanalys" at the Royal Institute of Technology in Stockholm, Sweden. It was made by Magnus Ljung, and Stefan Hellkvist (me).

We have implemented a subset of Scheme (a dialect of Lisp) as the functional language. This subset does not include lists, but it's still very useful. However lists can be implemented using lambda-expressions, and we've done just that. The list package may be downloaded here.

A more practical use would be to make an Apache module of it intead of using CGI. It would not be hard I think but there is no motivation for it at the time.

Update: A patch was made to be able to build XH on systems that use STL (Standard Template Library) which nowadays is the c++-library used on Linux systems. There were also some improvements made to some of the integer manipulation routines. The patch can be downloaded below. Gunzip it and apply the patch by cd-ing to the xh directory and giving the command patch -p1 < xh-stl.diff

Platform: Un*x-like systems

Requirements: Flex, Bison and a CGI-enabled web server

Download: xh.tar.gz  xh-stl.diff.gz


Barracuda is a BibTeX database manager. BibTeX is a program that looks up citation references in a database and then writes them to a file that is used by TeX/LaTeX. Barracuda is used to edit BibTeX database files. It is mostly self explanatory and easy to use but comes with relatively complete HTML documentation.

Together with 3 school mates (Magnus Christensson, Magnus Ljung and Stefan Cronert) we wrote this program in a course at KTH. It also entered a competition held by TrollTech.

Since none of us had the time to maintain it afterwards Barracuda now has a new maintainer and lives its own life out there on the Internet. Last time I checked it was on where you might find a later version.

Note: The version which can be found below does not compile anymore on systems with more modern compilers than we had back then. The quality of the code is sometimes bad and a modern compiler does not agree with it (we discard const in some casts here and there and that is not allowed anymore). Qt, which it is based on, has also changed a bit since then (some constants for keys for instance has moved to a namespace nowadays). So download this only if you know C++ and are willing to spend some time on fixing some minor stuff to make it compile. It is not hard to make it compile though - just many boring little details to take care of. You have been warned.

Platform: Un*x-like systems

Requirements: Bison, Flex and Qt.

Download: barracuda-stable.tar.gz