My thesis was written at the faculty of electrical engineering at TU Dortmund. It's about the correction of errors during optical signal transmission.

When digital data is transferred with fiber optic cables, the signal suffers distortions from external influences. These distortions must be corrected before the digital information can be reconstructed from the optical signal. Traditionally that correction is done with electronic filters that digitize the optical signal and use methods of digital signal processing.

These electronic filters have a number of disadvantages which limit the increasing demand for bandwidth increases. The goal of the thesis was to evaluate optical filters which process the signal purely in the optical domain. In theory, these could have significant advantages over electronic filters.

To compare different filter designs and evaluate their performance under realistic conditions that make the results applicable in real-world use, a high-performance simulation and analysis framework was written. That made it possible to use realistic distortion models, comparison of a large number of different designs and an exhaustive optimization of the underlying non-convex optimization problem. Uses NumPy, FFTW and numexpr libraries among others.

thesis pdf (in German)


rift (Recursively Include Text Files)(2020)

This little program recursively replaces include statements in text files with the contents of that file. It was written as a Markdown helper but is completely format-agnostic.

Operates in the working directory. The output directory as well as the regular expression of the input statement and other things can be controled with command line parameters (see GitHub readme).

GitHub repo

MCC (memory cloud chamber)(2019)

Like many people I've heard the tales about cosmic rays flipping memory bits. There's ECC memory to protect against bit flips, but I decided to actually look for memory flips in my (non-ECC) systems.

MCC is a c++ console program that allocates a part of the main memory, fills it with zeros and periodically checks wether they're still unchanged. Any potential bit flips are recorded on a json file. The memory is dynamically de- and reallocated to affect the running system as little as possible.

Results: After letting it run for about 3000 GB-hours on two machines I didn't catch a single bit flip. Comparing with the available literature on the matter, it seems obvious that bit flips might happen, but they're rare and caused by hardware defects rather than cosmic radiation. More details in the GitHub readme.

GitHub repo


Lets you stalk your colleagues svn submissions. It scans new svn commits for criteria specified in a json file. When something matches, a little notification pops up. Written in Python with the help of pyqt.

GitHub repo


headcache is a note-taking program written in Python and PyQt. It reads notes in the form of markdown files from the working directory. These notes are split into parts that can be searched instantly and are rendered as html preview.

It was designed to have a minimal and intuitive interface for quick navigation and instant search as well as rendered markdown preview

GitHub repo

ofit: optical filter tool(2017)

A Python program I wrote during my thesis. With ofit you can chain arbitrary components of optical filters together, calculate the transfer matrix and draw the resulting design with TikZ.

GitHub Repo


Many developers and normal people visit sites like Hacker News, Stack Exchange or Reddit (or even 4chan) daily to keep up to date. This can't easily be automated like RSS feeds from a blog, since only a tiny fraction of the many posts is relevant.

With maja, you can define minimum scores, specific keywords and other criteria for each of the sites. Matching posts get fetched in regular intervals, stored in a SQLite database and presented on a simple web interface. This approach is much more time-efficient and will catch things even if you are away for longer periods of time.

GitHub repo

Programming font comparison(2016)

A webbased tool that compares about 50 different programming fonts. Every font is used with a range of font sizes, color themes, renderer and anti-alias settings.

The screenshots are taken in the Sublime Text editor. The process to capture the screenshots is automated with an autohotkey script which itself reads commands from a python-generated file. Imagemagick is used to extract the relevant part from the screenshots. The website is built with React.js

3D DLA(2015)

Simulation of a 3D DLA process inside the browser. DLAs can be simulated with a boolean grid that starts with all zeros and a one in the middle. Particles spawn at some distance from the center and random walk until they are right next to another particle. The structure grows in a crystal-like way and can be used to calculate the fractal dimension.

The app contains both an asynchronous visualization and computation of a DLA process in javascript as well as a real-time computation of the fractal dimension. The WebGL output is powered by three.js and the chart is done with highcharts.


A fast parallel C++ program for solving the 2D Ising Model. Implements Metropolis and Swendsen-Wang algorithms.


A LaTeX preprocessor written in Python.

GitHub Repo


A web-app for spaced repetition learning. 100% clientside; UI done with React, data stored in local storage and sync over Dropbox.

GitHub repo