This page provides a non-exhaustive list of my professional, academic, and personal projects. All my professional projects are closed-source. Most of my academic projects can’t be shared due to honor code regulations. An exception are projects that were suggested individually, and of course projects related to research.


  • automating large-scale PLC programming: designed and implemented PLC Factory (source code), an application that removes a lot of the tedium associated with programming PLCs by dynamically generating files for TIA Portal (Siemens) and EPICS database records; a key component was a custom embedded domain-specific language, which I created (European Spallation Source, summer 2016); a paper is forthcoming
  • machine learning: using a neural network and conformal prediction in order to identify regions with a potentially increased arrhythmia risk (Fraunhofer-Chalmers Research Centre for Industrial Mathematics, autumn 2015 to spring 2016)
  • designing and implementing a framework for parsers of partly unstructured log files that meets soft real-time goals and exploits the power of manycore CPUs; (Jeppesen, summer 2015)
  • designing and prototyping a static analyzer for configuration files, in the context of a greenfield project at Ericsson (Ericsson, via Dfind IT and HiQ, spring 2015)


This is a selection of projects I completed as part of my (formal) education in software engineering and computer science. I also completed a large number of projects in related online courses (MOOCs), but adding those would make this list rather unwieldy.

Independent Project in CS (spring 2016): Cryptographic block ciphers in functional programming languages.

Parallel Functional Programming (spring 2016): fault-tolerant distributed MapReduce, parallelizing a Sudoku Solver (both in Erlang).

Bachelor’s thesis project (spring 2015): Compiling Agda to Fω. Type-theoretic specification of the semantics for compiling Agda to System Fω.

Advanced Functional Programming (spring 2015): Turtle graphics DSL in Haskell; research project: embedded DSL for a fast Fourier transform working on synchronous data flows (Haskell, Feldspar); collaboration with Niklas Logren. This extension was used for Markus Aronsson’s synchronous dataflow extension to Feldspar.

Concurrent Programmming (autumn 2014): concurrent railway simulation (Java), distributed IRC chat server (Erlang)

Programming for Mobile Platforms (summer 2014): wrote ‘WordFinder’, mobile application that is able to look up matching words based on a pattern, e.g. ‘f__b_r’ matches with ‘foobar’, but maybe some other words as well? The app incorporates a third-party API for looking up word definitions, and uses a persistent database. [Android, Java, SQLite]

Programming Language Technology (spring 2014): parser for a large subset of C++, compiler for a C-like language (Haskell, JVM), interpreter for a functional language (Haskell)

Project: Industrial IT and Embedded Systems (spring 2014): building an autonomous miniature vehicle, colloquially referred to as ‘self-driving car’, using OpenCV and OpenDaVINCI; group project, contributed by prototyping and implementing the main algorithms [Python, C++]

Functional Programming (autumn 2013): Blackjack engine, Sudoku solver, Game of the Amazons (all in Haskell), collaboration with Benjamin Liebe. The implementation of the last project is available available on Github.

Project: Software Architecture for Distributed System (autumn 2013): a distributed information retrieval system with the main logic written in Erlang, using an Mnesia database. The frontend was written in HTML/JavaScript; group project, wrote a large part of the backend

Project: Systems Programming (spring 2012): several demos of which a pathfinding routine was arguably the most impressive one, targeting the educational robot Nao; group project, made a significant contribution regarding the design and implementation of algorithms [Python]

Project: Programming (autumn 2012): decision support system, built in Java (GUI and program logic) and MySQL; group project; delivered basically the entire backend


In my spare time, I enjoy tackling problems with a functional programming language, preferably Haskell. One such project, an implementation of the game 2048 in about 90 lines of Haskell, got some attention on Github and Twitter. The full source code is available on Github.

Several other Haskell projects, including some that are larger than my implementation of 2048, are accessible in my Github repository “haskell_playground”. Check out Evil Hangman!

Several smaller programs are described on various blog posts. To access those, please click on the header “index”, and look for the section “implementations”.

Even though the individual tasks were not particularly time consuming, the bulk of my solutions to the entire set of CodingBat exercises quite certainly constituted a larger undertaking. When I published my solutions in both Python and Java, they were the only publicly available complete set of solutions. I decided to publish mine because most solutions I came across online were fairly awkward. Here is the starting page to the Java solutions, and here the starting page to the Python solutions.

2 thoughts on “Projects

  1. Joseph

    Thanks for your solutions. Very helpful.

    I am now looking for a project to practically apply my gradually increasing skills. Are you working on anything I can help you with to learn more? If not, do you know of anyone who is or how I kind find someone to work with?



    1. Gregor Ulm Post author

      What are you interested in building , and in which language?

      You could do a few of the assignments collected on this rather neat page: Also, there are plenty of MOOCs available for people with intermediate skills. For instance, Rice University will do another run of Introduction to Interactive Programming in Python in a few weeks. The assignments in that course will help you solidify your programming skills.


Leave a Reply

Your email address will not be published. Required fields are marked *

Spammer prevention; the answer is an integer: * Time limit is exhausted. Please reload CAPTCHA.