My physics thesis was set in the domain of optical data transmission and was written during my time in the working group for High Frequency Technology in the EE faculty of the TU Dortmund.

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 restored 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 bandwith increases. The goal of the thesis was to evaluate optical filters which affect the signal 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 a non-convex optimization problem.

One of the core problems of the simulations were the optimization of filter coefficients. That optimization problem was high-dimensional and non-convex, so no classic gradient-like algorithms could be used. To solve this, tight limits for the runtime of the simulations were crucial. To fulfill these, great care was taken to ensure the best possible performance. A mixture of NumPy, FFTW, numexpr and other libraries was used.

  • thesis download: pdf


I've written a number of programs that solved problems I encountered. Python and C++ are my main languages of choice, with js, Mathematica and others in between. Technology-wise, I've had great experiences with NumPy, PyQt, SQL, LaTeX.


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

See the Github repo for more info


maja was written to solve a problem. Many developers and normal people visit 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.

See the Github repo for more info

Programming font comparison

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. Amounts to ~1600 combinations

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


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


A LaTeX preprocessor written in Python.


DLA (Diffusion-Limited Aggregation) process inside the browser. A DLA process starts with an initial particle in the center of a discrete 3D grid. Additional 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, which is done and displayed alongside the simulation in a graph.

The simulation is entirely written in fast JavaScript that uses Web Workers to run independant from the visualization. The WebGL output is powered by three.js and the chart is done with highcharts.

ofit: optical filter tool

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.


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


A minimal html countdown timer. Written with React.

Github repo, website: s9w.github.io/timy