I started programming in 2000 and since then I've created tens of projects. Here are some of the more successful side projects that I've worked on. A more comprehensive list can be found under my GitHub profile.
TDD MOOC - free online course about test-driven development
Started: February 2021
I ran my first TDD course at the University of Helsinki in 2009. Years later in 2021, friends at the university were planning to add a TDD course to the curriculum due to requests from the industry. One of them remembered my TDD course and they asked me to redo it as a MOOC (massive open online course). The course has now been running yearly since 2022.
CQRS Hotel - experiment on event sourcing
Started: November 2016
I'm looking into event sourcing and CQRS in hopes of it helping to produce more maintainable designs. Getting a proper touch for the design implications requires developing a non-trivial app. So no to-do list apps; the problem domain here is a hotel reservation system. I've worked on a real such system, which helps to have some perspective on the complexities of the problem domain.
Territory Bro - territory card management
Started: November 2015
Tool for printing congregation territory cards with up-to-date maps. It started as an MVP in a two-day code camp, but quickly tens of congregations around the world started using it. I saved lots of time by not implementing a map editor, but instead using QGIS to directly edit the database. The user guide I wrote after being contacted from Portugal; the first four congregations I could instruct in person. Still 3 years later, registration is by email and there is a single shared instance of the app, without authentication, into which you can temporarily import your data from QGIS for printing cards, hoping no one else is using it at the same time. It puts the M in MVP.
Retrolambda - backport of Java 8's lambdas
Started: July 2013
Deprecated: 2017-2018 (Android)
To be able to use the long-awaited lambda expressions also on older JVMs, I wrote this tool that converts them to anonymous classes which will run on Java 7 and below. It became popular with Android developers, because it took a really long time for Android to start supporting Java 8. Finally in 2017, Android Studio 3.0 added support for lambdas and its documentation has steps for migrating from Retrolambda. In 2018, Android Gradle plugin 3.2 added desugaring Java 8 bytecode in libraries, so Retrolambda should no more be needed.
Jumi Actors - actor library for Java
Started: June 2011
I created this for the needs of Jumi's event-based architecture, but some others have also found it useful. For example some Android developers have used it because of how small a library it is.
Jumi - test runner for JVM
Started: May 2011
I started this project to run tests faster and overcome some limitations of the JUnit test runner (e.g. dynamically discovered tests and stdout/stderr syncing). The goal is to run tests in parallel and reuse the JVM instance to avoid class loading overhead, which especially benefits fast test suites (i.e. under 5 seconds to run all unit tests).
Let's Code - screencasts of TDD in the long run
Started: September 2010
Inspired by James Shore's Let's Play TDD, I've been recording me programming some non-trivial projects. Especially with Jumi I decided to make an experiment of recording all the development that I do on it. I've met a couple of persons who have watched all these videos. Quite mind-boggling, actually; I find even editing them an endless process. I have lots of unedited raw videos on my hard drive. Would somebody like to help with publishing them?
Specsy - testing framework for JVM
Started: June 2010
I wrote my own testing framework for Scala, because specs had too much complexity and bugs to my taste. Later with Specsy 2 I converted it to Java and made it possible to use with virtually any JVM language. The programming model is the same as in GoSpec.
Started: May 2010
I wrote a plugin for using the sbt build tool from within IntelliJ IDEA. Though I stopped using Scala around 2011, the plugin became rather popular, so it was maintained by Jason Zaugg until the same functionality was added to the official Scala plugin in 2017.
GoSpec - testing framework for Go
Started: November 2009
Soon after Go was released, I wrote a BDD-style testing framework to my taste. It incorporated the same isolated execution model which I had earlier proposed for specs 1.6.0. Now superseded by GoConvey which was inspired by GoSpec.
TDD Tutorial - exercise for learning TDD
Started: June 2008
VarjoCafe - lunch menu mashup
Started: August 2005
Offline: September 2022
At the University of Helsinki, UniCafe is responsible for student lunches, but their website is somewhat cumbersome to use (even more so when it was renewed in August 2005), so I created this mashup that shows the lunch menus with better usability. The first version was made in one weekend with PHP, and in 2014 it was rewritten with Clojure when UniCafe's site was renewed drastically (from Web 1.0 to SPA). During all this time, UniCafe has renewed their web site multiple times, taking influence from VarjoCafe, but still (in 2018) hasn't reached the same simplicity and ease of use. What is so difficult about supporting the students' most common use case: which of the few nearby restaurants has the best food today/tomorrow?
Started: February 2003
This was one of the first couple of programs that I've written, during my first year at University. It diffs two or more binary files and lets you merge them.