Writing software is and has always been an important role in my research in physics and finance, in my side job as freelance software engineer and in my private life. I am proficient in the languages listed below.

I have contributed to a handful of open source projects. Some of my own projects are published under an open source license and presented on this page.

Haskell

After stumbling upon Haskell in 2012 it quickly became my preferred language for everything that cannot be done in a few lines in the shell.

In my opinion there is no better way to write effectful programs than by using a side effect-free functional language: compose in a pure, mathematical manner a value of type Program, which in Haskell is called IO (), and pass it to the runtime.

Buchhaltung

A set of tools for creating a complete ledger of all your bank and savings accounts', credit cards', and other transactions, in a text-based ledger format. Key features:

  • Import transactions via HBCI/OFX interfaces or from CSV files and handle duplicates comfortably.
  • Match transactions to accounts with high accuracy through the use of a Bayes classifier.
  • Manually enter transactions using an intelligent editor which reduces the required effort to a minimum.

More on Github.

Lykah

A static website and blog generator powering johannesgerer.com. It allows you to create websites with the full power and expressivity of Haskell. Its name, Lykah, is Hakyll in reverse because it solves the same problem using quite a different approach.

More on Github.

BlazeT

A true monad (transformer) version of the great blaze libraries. I started this project to be able to make Lykah.

More on Github.

Doi

After I successfully switched my research/citation management from Mendeley to ebib (BibTeX database manager for Emacs), the system still lacked an easy way to download or extract citation information.

doi fills this gap. Given a DOI or URL, it will generate its BibTeX entry (both from the official source and from Bibsonomy) and can download the fulltext PDF, all automatically.

More on Github.

Google Code Jam

This package makes writing concise and fast solutions to Google Code Jam problems easy, including automatic parallelization if possible. The Github repository also contains my Code Jam submissions.

Memis – efficient manual image sorting

In order to make the paperless office feasable, I needed a fast way to categorize and sort the scanned documents. The existing solutions were not satisfactory, which lead to the creation of Memis.

More on Github.

Hax

A library for cash-flow and tax simulations. The type system is used to ensure correctness e.g. of double-entry accounting, and the correct calculation of taxes. The use of Haskell's do-notation and type-classes permit an almost verbatim translation of the tax code into the program.

It currently includes personal income tax (Einkommensteuer), corporate tax (Körperschaftsteuer) and trade/business tax (Gewerbesteuer), but could easily be extended to other legal systems.

More on Github.

C++

What I appreciate about C++ is its expressiveness, while still being close enough to the machine to enable zero-cost abstractions. This makes it suitable for my use case: numerical software.

Fipster

Option pricing software for complex financial options on arbitrary dimensional state space using finite differences. It powers the numerical results published in my paper on American options

  • Expectation based pricing (risk neutral valuation, utility indifference pricing, etc.)
  • Derive optimal/pessimal strategies for decision dependent payoffs (like exercise decisions in American options or optimal hedging decisions)
  • Efficient solver for linear complementary problems
  • Rannacher smoothing
  • Implemented for arbitrary dimensional state space
  • Automatic handling of any combination of boundary conditions
  • Automatic parallelization

More on Github.

Enhance

When writing Fipster (see above) I had to write comparison operator for 20+ classes, which felt very repetitive. Then, I switched from std::map to std::unordered_map, which instead of comparison operators requires completely analogous hash functions for all classes.

To spare myself all this boilerplate I wrote an early version of Enhance. Over the years, Enhance was expanded in functionality, polished and published. Now, it can “enhance” your classes: with a minimum of code and no runtime overhead it will provide you with

  • comparison operators,
  • assignment operators,
  • hash functions,
  • swap functions,
  • serialization,
  • pretty printing,
  • etc.

More on Github.

61 Engine

The 61 Engine is an OpenGL based 3D (hexadecimal for 61) and basic physics (rigid body and gravitation) engine written for simple games and educational purposes. It was one of my first larger projects, started at age 15 with the goal of writing a more realistic version of GTA3. ;-)

More on Github.

Java

“I had a problem so I thought to use Java. Now I have a ProblemFactory
— Cpt. Picard

Portfolio Optimization

My contribution to the winning entry of the Postbank Finance Award 2008.

Unicenta POS — keyboard version

For a client, I changed the Unicenta point of sale software from touchscreen to an entirely keyboard based user interface. It now supports the typical POS keyboards for highest data input speeds.

More on Github.

Fortran

Lattice quantum chromodynamics

For my physics thesis I extended existing Lattice QCD-progams written in Fortran and ran them on a high performance computing cluster.

Miscellaneous

Peekattack.com — P2P video chat platform

Full stack: Streaming Server in Java, Realtime Push Server in C and JavaScript, Flex/ActionScript client, and of course client-side JavaScript

More on Github.

Mathematica

Used for most finance/maths/physics problems during my studies.

More on Github.

C#

Business software, like client-side data entry of invoices and server-side centralized reports.

Perl, PHP, SQL and JavaScript

Many years of web developement

Python

I use python to hack on open-source code bases of programs that I use myself.

Linux and Shell

Since 2012, I am an Arch Linux/Xmonad/emacs power user that switched from Windows 7 and never looked back.

R Statistical Software

Used for statistical analysis in my finance research, e.g. for the results of my paper on ETCs.