Projects
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
Web app 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 (9 years and counting), but instead used 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. For the first 3 years and 50 congregations, it didn't even have user login, but registration happened by email and there was a single unauthenticated app instance, into which you could temporarily import your data from QGIS to print the cards. Before territory assignments had built-in support, for over 2 years the app just visualized data from Google Sheets' publish-to-the-web-as-CSV feature. 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 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?
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.
|