Noah Doersing


I'm Noah Doersing, and I’m just about finished studying media informatics (M.Sc.) in Tübingen (still waiting for signatures on my degree). Soon, I'll be looking for a job – hit me up if you’ve got one to spare somewhere in southern Germany!

In my own time, I sometimes (re)tweet things, work on various open-source projects (see below), make generative art (see above), take pictures on my phone and less frequently with proper cameras, or listen to music by independent artists.

On my blog, dubbed Excessively Adequate, I write about programming and adjacent subjects.


Several Markdeep-based "Office Applications"

Morgan McGuire's Markdeep is a JavaScript library that, when included at the bottom of a Markdown file, automatically converts it into HTML when the file is opened it in a web browser. Primarily for the purposes of writing and presenting my Master's thesis, I've built several browser-based tools that postprocess Markdeep's output:

markdeep-slides splits a document into presentation slides, provides presentation controls via keyboard shortcuts, displays presenter notes, supports different themes, and offers PDF export.

markdeep-thesis utilizes Bindery to divide a Markdeep document into pages, with footnotes, a table of contents with page numbers and other affordances. It provides an opinionated stylesheet for (under)graduate theses.

markdeep-diagram-drafting-board provides instant preview for Markdeep's ASCII art diagram functionality.

The diagram drafting board in action.


Satellite imagery like the kind available on Google Maps and competing services can be extremely beautiful and interesting. Built with the goal of powering my Twitter bots @americasquared and @placesfromorbit, the Python-based ærialbot generates a random point within the bounds of a shapefile, grabs satellite imagery of a user-defined area around it at a user-defined scale, stitches the downloaded map tiles together into an image, and optionally tweets it along with geotagging metadata.

I had previously built gomati, a bash script that served as a proof-of-concept for ærialbot.

A sample of the kinds of images @americasquared tweets.

The command-line interface of ærialbot.

Cellular Automata Poster Generator

Stephen Wolfram's elementary cellular automata operate on a one-dimensional list of cells, computing future states of cells based on their neighboring cells. Drawing such states in order from top to bottom yields interesting patters, and with some color, they can make for attractive wall art. I wrote a Python script that, based on a design by Reddit user /u/collatz_conjecture, generates cellular automata posters as PDFs.

Later, I adapted this script to run the Twitter bot @sundryautomata – a sample of its outputs is shown below.

Some of the images generated by @sundryautomata.


I happen to read a bunch online. Unhappy with aspects of existing read-it-later offerings like Instapaper and Pocket, I wrote my own PHP-based tool for keeping a reading list, maintaining a searchable archive along with a list of favorites, and analyzing when, what, and how much I've read in a given time period (turns out the number of articles read per day follows an exponential distribution, for example).

It's been in continuous use since 2013 and I've logged more than 20,000 articles so far while extending it to cover my varying use cases throughout the years.

Handwriting Recognition with SQL

Modern implementations of SQL (with window functions and recursive CTEs) are Turing complete, enabling the formulation of arbitrary programs. To demonstrate this, I've implemented an admittedly-ancient handwriting algorithm in SQL. This work was done as part of Torsten Grust's SQL is a Programming Language seminar at Uni Tübingen.

Apple Photos Export

The macOS variant of Apple's Photos app uses an unencrypted SQLite file as its metadata storage backend. Through reverse-engineering the structure of this database and the associated directory structure in which the photos themselves are located, I was able to write a Python script that exports a Photos library based on a set of conventions I prefer for my personal backups.

I use this tool for exporting photos taken with my iPhone, notably including the video components of live photos.

Minecraft Server Utilities

I intermittently run a local Minecraft server on an old laptop running Ubuntu. For this purpose, I've written a couple of bash scripts that start the server on system boot in a screen session for convenient remote management, keep an up-to-date incremental backup of the world and server files, as well as daily snapshots for nostalgia purposes, with old snapshots optionally being culled whenever disk space runs low.

...and more!

The above is just a selection of stuff I've been working on recently. You can find more, especially older projects and limited-scope utility scripts, on my GitHub account. Maybe there's something that will prove useful for you!


Available upon request until it becomes a bit more impressive – it's really only education and teaching assistance at the Database Systems Research Group at Uni Tübingen so far.


Want to get in touch? Feel free to drop me an email to the address that the following JavaScript snippet evaluates to.

((crypt) => {
    const rot13 = c => {
        c = c.codePointAt(0);
        let d = c + 13;
        if (d > (c <= 90 ? 90 : 122)) {
            d -= 26;
        return String.fromCodePoint(d);
    const backwards = s => s.split("").reverse().join("");
    return backwards(crypt.replace(/[a-z]/gi, rot13));