Toni Ruottu's Project Log

2011 What is "cloud"? is the title of a paper we are working on with Eemil Lagerspetz and Sasu Tarkoma. The paper discusses software engineering terms used in cloud projects.
Bee Swarm MapReduce is a distributed computation platform we built together with Konrad Markus and Sampo Savolainen. It mimes Google MapReduce, but the worker nodes run in web browsers.
2010 BrowserSocket is a research prototype we developed together with Konrad Markus, to experiment with browser-to-browser communication. The prototype is a Firefox extension that provides an API that untrusted web pages can use to run WebSocket servers.
Nmap security scanner uses scripts to extend the scanner beyond basic functionalities. The so called Nmap Scripting Engine (NSE) scripts are written in Lua programming language. I've written some NSE scripts to exercise with basic network programming. Some of my scripts made it to the official nmap source tree and are shipped with the latest version of nmap. The scripts I have written include scripts for listing files available at the root of a gopher system, showing hard disk temperatures as listed by hddtemp service, querying Quake3 style discovery services for game servers, as well as some scripts for analysing NetBus, an old Windows trojan horse that seems to also run on Linux systems that have the Wine environment installed. Also, nping-brute, epmd-info, quake3-info, http-cors, openlookup-info and bitcoinrpc-info.
js0 is a public wiki I am running to gather short pieces of javascript that their authors wish release under the cc0 license, which is essentially public domain. We needed a place for publishing/hosting some of the minor things we ended up writing as side products of our everyday work. Some of the first pieces published through the site included my portable sendAsBinary, used on Google Chrome to emulate the API that Firefox provided for sending binary data over HTTP POST. Konrad Markus shortly joined with some code for base64 encoding and XML-RPC. Setting up the js0 site also brought me some useful experience about Amazon cloud offerings.
Developing Peer-To-Peer Web Applications is my Master's thesis. It is about Peerscape, and some applications we wrote to validate the peer-to-peer web aspect in Peerscape, while I was working at HIIT. The applications discussed include a simple chatroom, bittorrent tracker and index, a flower game, and some of the tools we used for developing web applications for the platform. Some of the more theoretical parts of the thesis discus data protection schemes used in GNUnet, Freenet, Persona, and Peerscape.
Raker is a small concept game we developed together with Martti Rannanjärvi for the Google Chrome webstore. In Raker the player controls a cyan ball character. The target is to move all leaves into a compost before the time runs out. The player has two means of moving leaves. Raking is efficient on small amount of leaves and short distances. Picking the leaves up and carrying them works better for larger amount of leaves and greater distances.
DarkWebSocketTerminal is a dark websocket terminal, a single html file that provides netcat like functionality for conversing with a WebSocket server. I wrote it to ease studying websocket behaviour in browser, but also to ease debugging websocket servers. Later I turned it into a "packaged app" for Google Chrome web browser.
2009 OpenFilepad (originally QFriendsLOL) is a simple PyQt application that enables friends to exchange files using OpenLookup v2. Our team consisting of three members started the project during a QT codecamp course arranged at the University of Helsinki, fall 2009.
Simple IBAN Tool is a command line tool that gets an IBAN as input and produces analysis of it as output. Main use for the tool is validating IBAN's for typos. Ubuntu was missing such a tool so I started writing one in Haskell and registered the project at Launchpad to allow co-operation.
Kunquat is a music sequencer similar to tracker programs. Some of its distinctive features will include high time resolution, flexible tuning configuration and composition of interactive music. I participate in an ongoing work shop which attempts to turn the current prototype into a usable free software product.
Collaborative Flower Garden is a small game I wrote for Peerscape. Peerscape users and groups can have their own flower gardens, that they can work on together with their friends in real-time. There are three different kinds of flowers available for planting. There is also a flower eater that eats unwanted flowers.
2008 Implications of a Trust-To-Trust Design, a seminar paper written for a course at the university.
Bonmap is a Python script that uses Avahi Bonjour implementation to produce an xml file similar to the xml files produced by Nmap the portscanner. The bonjour advertisements can then be used together with tools that understand the concept of a port scan. To give an example the service discovery results can be viewed in Zenmap, the graphical user interface included in official nmap releases. The tools was created in hopes ot would inspire nmap developers to further explore the similarities between port scanning and service discovery, and posibilities how one of them can benefit from the other.
Cheepmemo is a web service for creating simple web pages. I wrote it in Python for Google App Engine environment. Contents of the web page are stored in the url. Removing "read-only" option from the url brings the source code to an input box where it can be edited. Saving changes creates a new web page and so does clicking on "done" when one is done with editing. Cheepmemo does not need user accounts as no content ever changes. Every possible web page exists in the system and there is exactly one copy of every possible web page. However, operation is limited by maximum length of url set be external environments. Services like Tinyurl can be used to alleviate the situation in some cases.
Framedelivery is a web applications which can be used to create large amounts of web frames. I wrote it in Python for Google App Engine environment. It works both, as a piece of art, and as a benchmark for web browsers ability to handle web frames.
Progress Quest is a simple Windows game. I did some Ubuntu integration work for the game. My work includes Ubuntu packaging which makes use of Wine environment allowing the Windows executable to run on Ubuntu. My work also includes a man-page, a custom svg icon for use with Ubuntu, and the magic for loading a saved game by double clicking on the save file. I also created some end user documentation for people running the game on Ubuntu. After uploading the package revu reviewing unit I had to go trough some major byrocracy to find out whether or not a proprietary Windows software was considered suitable for the official Multiverse repository. The package got in and is now available for automatic install for most Ubuntu system. The package got some users to believe that the game had been ported to Ubuntu. I'd personally argue that proper support for the product is more important than the actual format of some executable.
2007 Malbolge Survival Kit (MSK) is a compilation of essential tools for Malbolge programming language. Malbolge is supposed to be the hardest programming language there is. It sounded interresting so I wanted to try it out, but there was no Ubuntu package available so I decided to create one. Packaging unmaintained software is not considered a good practice so I had to create an upstream project. MSK is that project. The original Malbolge interpreter and specification were already public domain, so I could use those. I picked some well known malbolge applications and asked the original authors to make those public domain as well. After clearing the rights I created a project on Launchpad where I'd host everything in a bzr repository and do source releases as tar balls to allow other operating environments package those instead of going for the development code. I created a deb package, posted it to REVU and got it into Ubuntu universe.

While I was creating the project I made some small improvements to the original interpreter that was written in C. Among them was the support for running Malbolge-scripts. Later I decided to rewrite the interpreter entirely in Python. The reasons were various. The original interpreter had some incompatibilities with the specification. I further wanted the source code to be easier for anyone to dive into. Finally, writing the interpreter in Python also reduced the need to test the software for multiple platforms. At the 2008 EuroPython conference in Vilnius I met Andrew Durdin who took a look at my Python source code. During a PyPy development sprint held at the end of the conference he ported my interpreter to Reduced Python (RPython). RPython is a subset of Python that can be compiled into native binaries. His fork of the interpreter is hosted separately in PyPy source code repositories.
Peerscape is a p2p social network. It is somewhat similar to Facebook, but runs entirely on computers of the end-users. The practical side is that no-one owns the network so, instead of negotiating with the monopolists, a third party can just go on and develop it further or customise the client for their customers. While working at Helsinki Institute of Information Technology HIIT, I was part of the team that designed Peerscape and wrote the initial implementation. The networking core is written in Python. Web technologies and java-script are used for the user interface, but also to gain free sandboxing.
Crash-only Components in Self-healing Systems, a seminar paper written for a course at the university.
2006 Freedesktop.org, Clipboard Specification is a document helping desktop software authors to develop software with common consisten clipboard behaviour. One of my friends told me he was unwilling to use free software mainly because behaviour of the clipboard was too inconsistent. I started researching the issue to find an explanation. It turned out that while Freedesktop.org had a specification, not everyone followed it. Also the specification itself did not cover everyting it ought. At this point I felt it was my responsibility to write a new one, and so I did. After all bugging different projects about not following the specification would make no sense, while the specification was clearly incomplete.

So I went trought the original specification with magnifying glass. Discussed it with everyone close to me and wrote a new one. Once I managed to write a new one, I posted it for review to the X Developer Group (xdg) mailing list to receive feed back from a wide range of software developers with different backgrounds. I got feed back and worked trough all the issues until I received no further complaints. I sent the specification to be published, but Freedesktop.org was undergoing some major clean up operations and it's "official" publication was delayd. Instead the Freedesktop.org folks told me to refer to the version I had posted on their mailing list, while I was communicating it to the upstream free software developers.
Varain was a software engineering project at University of Helsinki. Our goal was to create a patch that would add proof of concept localized resource reservation protocol (lrsvp) support to the KOM RSVP Engine. We based our work on earlier work done by Adrien Bauffe and did only some minor modifications to make his code run. Our team consisted of Marko Kankaanniemi, Pekka Lampila, Antti Viita, and me. I worked as the project leader for the group.
libextractor is a GNU library for extracting keywords from data. It ships with a command line tool called extract. The command line tool takes any file as input and produces keywords in case it finds any. I wrote plugins to extract keywords from a few music file formats. Some of these formats are used by tracker software that many demo and game musicians use (xm, it, s3m). Some are used to store music from NES gaming console games (nsf, nsfe) and Commodore 64 games (sid).
apt/GNUnet was my project proposal for Kesäkoodi, which is Finnish national equivalent for Google Summer of Code. The idea was to write a GNUnet backend for Debian project's Advanced Packaging Tool, allowing Debian and it's derivatives to make use of GNUnet's security and load balancing features in their software delivery. My proposal was chosen among the eight finalists, but the competition was hard and for my part the finals didn't go so well. Once I got over the initial disapointment, I had to admit the chosen projects were simply golden.
Studying, testing and discussing GNUnet left it's mark on me and when I had to decide the subject for my Bachelor's thesis I would have been a fool to choose some other topic. Thus I made my bachelor's thesis about GNUnet. The thesis itself is in Finnish. The thesis is mostly an exercise that forces students to read, figure out and write, so there is not that much to see anyway.
2005 wget is a command line tool for downloading files. I prototyped the possibility to use wget for downloading files from GNUnet, provided that a GNUnet router would be running on the same host. GNUnet is a p2p network, so people would usually run a router on their end host anyway. Adding wget support for GNUnet downloads was considered a good idea by both projects, as this would bring two GNU projects closer to each other. Lack of time on behalf of wget maintainers and on going rapid development of GNUnet however, made inclusion of this feature into mainline wget unfeasible, as the wget code would then have required on going maintenance to stay compatible with GNUnet.
2004 mi2svg is a map conversion tool that was created as a side product of Nikar (see below). It is a perl script that converts MapInfo Interchange Format (mif) maps to Scalable Vector Graphics (svg). The existing converters were unsuitable as the project had a requirement to retain coordinates from the original objects trough conversion. In addition mi2svg is able to turn MapInfo database entries into svg object class names which allow simple css-styling based on the corresponding metadata. My employer granted me permission to publish the tool under GNU GPL license. Thus I moved on to develop mi2svg separately. It is currently hosted at Launchpad.

I used gettext for the user interface and made the project available for translation at Launchpad. The user interface has been since translated into English, Bulgarian, Czech, Finnish, German, Hebrew, Hungarian, Slovenian, Spanish and Swedish. I started developing mi2svg on Debian, so I decided to make an installable deb-package out of it. Much later, after becomming an Ubuntu user, I sent it to Ubuntu REVU for review. After some major polishing it was deemed suitable for inclusion to Ubuntu. The package is now part of Ubuntu Universe repository and maintained by Ubuntu's Masters Of The Universe (MOTU) team.
Nikar is a web based geographical nomenclature research tool that I created while working at the Research Institute for the Languages of Finland. The underlying MySQL-database contains names for stones, forests, lakes, etc. and the server side php web interface enables a researcher to browse the data by restricting selected data with a search term or by clicking on a specific instance of data. Locations of the selected names are displayed on an svg map. The service supports three simultaneous selections that may be used to study degree of interserction between different names.
2003 MenuetOS Unicode Project was a reckless effort to internationalize Menuet operating system. For a long time I had admired the power assembly programmers were rumoured to wield. When I discovered MenuetOS, a modern desktop operating system written in 32-bit Flat Assembler (FASM) assembly, I knew I just had to get my hands dirty and contribute to it in a way or another. Members of the developer community were located all around the world. Menuet, being English-only, seemed to divide the community into multiple small fragments.

While I was looking at Menuet, my friend Tomi Jylhä-Ollila had been figuring out how one could use Unicode with the console integrated into Linux. He had all the Unicode experience needed, so I teamed up with him to create initial Unicode support for Menuet. The original plan was to replace the Menuet kernel functions for printing ASCII text with functions for printing utf-8 text. Later on, having a separate library for handling Unicode text seemed more feasible.

Before the project started Tomi had created a suitable font in SBF format. SBF fonts however take lots of disk space and Menuet was distributed as a live floppy disk. Failing to find a simple binary font format I designed a new one, MenuetOS Binary Font (MBF). The actual coding work was mostly done as pair programming by me and Tomi. I wrote most of the assembly code, while Tomi wrote Coconut, a font converter that would convert his SBF font to MBF format. Menuet main developer Ville Turjanmaa helped me with my coding problems and Menuet developer Jarek Pelczar kindly translated SBF specifications for us from Polish to English.

As far as I know our code never made it to the mainline distribution. Instead Mr. Turjanmaa rewrote Menuet for 64-bit CPU architecture and turned it into a proprietary project. I was happy to complete an actual project with an assembly language. My admiration towards assembly programming was gone, but the project worked as an exercise regarding what computers actually do. A few years later I received an email from developer's of Kolibri, a 32-bit Menuet spin-off, regarding the Unicode stuff we wrote. I hope they are able to make some use of our work, but I haven't been following the project very closely.
Ctttb is a tic-tac-toe game where the human player faces an invincible artificial intelligence (AI). Actually it is not that intelligent as the game contains zero lines of turing complete program code. Instead every possible state of the game are hand written web pages (some basic tools like cp and vim were used to alleviate the pain). Human player does a "move" by clicking on a link that takes her to a new web page displaying AI's counter move alongside confirmation of his move.
2002 It seems I didn't get lots of computing stuff done during my military service.
2001 ClearIt is a simple game I wrote with Qbasic in co-operation with Tomi Jylhä-Ollila. The game rules were taken from Ari Fernelius's Amiga game "GREED", which Tomi had been playing earlier. Project goal being this well defined, writing the software was rather straight forward and left us with lots of time for designing various details and polishing the final product. In the end, lack of free Quick Basic compiler restricted us from actually releasing the game. Later on this realization added up to the reasons moving us towards free software platforms. We never went on to rewrite the game for a free platform, but someone else did. The version of Greed currently present on recent Ubuntu systems (open a terminal window, type greed, and press return) was originally written back in 1989.
2000 Rastgam was a simple graphical prototype inspired by Sid Meier's Civilization. I wrote it in Qbasic, designed a text based file format for storing the game graphics and drew the game character with a text editor. Actually I drew 22 versions of the character, as I wanted to have the tile size configurable from 1x1 to 22x22 pixels. It never turned out to be a game, but you could move the character around with keyboard and the character would refuse to move into the ocean. After immediate feedback from my little brother I added the option for moving around diagonally.
1999 An untitled worm game written in Qbasic. The game objects were drawn using background colors of the DOS terminal. I also created a level editor enabling one of my visually talented friends to create levels for the game. The level editor included an algorithm to detect the most obvious traps where a player would be unable to fetch apples without immediately loosing the game.