Esko Luontola
2022-12-07 14:45 EET


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.

sbt plugin for IntelliJ IDEA - tool integration

Started: May 2010
Deprecated: 2017

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
Deprecated: 2014

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
Superseded: 2021

After about one year of using TDD and arriving at specification-style, I wrote this tutorial to help others learn TDD. I have also used it at the 2009 TDD course at the University of Helsinki. In 2021 I rewrote it in JavaScript for the TDD MOOC.

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?

Corruption Corrector - file combining tool

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.