Consulting and Experience of Hajo Nils Krabbenhöft

Consulting

My typical rate is €2000 per day. If your project is technologically interesting, I’m happy to do a free initial phone consultation where I can give advice from the top of my mind and where we can explore how I could help to make your project a success.

CTO / Equity

I have the necessary experience and building speed so that I can replace a small development team all by myself. That can greatly reduce the friction, cost and risk for your startup. I also have experience supervising a team, but that usually won’t be necessary during the first year. Later on, I can advise and/or train my replacements. Of course, I can also do deployment, monitoring and performance tuning on the tech side. I am open to reducing my rates in exchange for equity.

Search: Ctrl+F or Cmd+F

This page contains a list of projects I’ve worked on in the past. The list is not exhaustive, so if you’re looking for a specific skill set or practical experience, feel free to just ask me. Since this page is pretty long, I recommend using your browsers search function (Ctrl+F or Cmd+F).

3D Game Engines

In 2002 and 2003 (when GPUs were still becoming more powerful at an incredible rate) I built several 3D engines:

The first one was a portal-based renderer (like the Max Payne 2 engine) for Quake 2 levels. Out of this, I created a small third-person shooter including node-based pathfinding for AI characters.

My second (and way more ambitious) game engine project was the development of a multi-threaded GeoMod engine (like Red Faction) including a terrain renderer. This got me a job offer from a larger Geman game company (which I declined to go on vacation instead).

Throughout the years, I’ve also built many C++, Java, Flash or C#-based game engines for various game jams or hobbyist game projects of friends. Google for me and “Nordic Game Jam” to see some of the games we built.

Please also see Unreal Engine and Unity Engine.

3D Printing

I have access to a 3D printer and I can work with Autodesk 3dsmax to desing the objects to be printed. In the past, I’ve used 3D printing to build a custom dice as a present and also to build custom tripods and calibration objects that I needed for my research on 3D object recognition.

3D Reconstruction

In 2013 I started working on a software toolkit written in C++ to reconstruct 3D geometry out of the perspective parallax shifts between multiple images of the same scene. In the research community, that process is also known as “Structure from Motion”.

AI: Failure Analysis & Data Set Generation

Sadly, most people and companies who do Deep Learning Artificial Intelligence do not understand why their model works or what specifically it does.

I can use stochastical methods to create a simplified human-understandable representation of your AI. That allows your team to better understand how things are working internally. It also allows me to pinpoint the most likely cause of AI failures. Lastly, I can also suggest edge cases where the AI might fail in unexpected ways.

For example, the optical flow algorithms used in autonomous drones currently have problems seeing wires and thin branches and, thus, sometimes crash into them. To help diagnose and quantify the issue, I have prepared a synthetic but photorealistic data set where the AI fails in exactly the way that causes this issue. That allows the AI researchers to quantify their progress towards fixing this “AI bug”.

AI: Image Processing: Style Transfer, Optical Flow, Depth Estimation

I have experience building image processing systems using AI.

For example, one of my startups used AI-driven style transfer to turn photos into artistic t-shirt designs.

I also built my own optical flow AI which – when benchmarked on my proprietary data set of apartment indoor scenes – significantly outperformed the state of the art in recognition quality. This is the kind of AI needed for merging multiple photos into a 3D reconstruction of the scene.

I also built an AI to predict depth borders and use these and other scene hints to suggest a depthmap for a monocular photo. FYI, that’s the kind of algorithm that the iPhone SE 2 uses for background bokeh blur.

AI: Speech Phoneme Recognition and Synthesis

Phonemes are the “sound units” that speech is made out of. Using a dictionary, one can map between phonemes and words.

I built an AI to listen to speech and to transcribe it as a stream of phonemes. When combined with a dictionary, this yields a speech-to-text recognition system.

I also built an AI to intonate a stream of phonemes and emotion markers into spoken audio. When combined with a dictionary, this yields a text-to-speech system.

AI: Deterministic Improvement

It’s a wild west out there with many teams just trying out random stuff in the hopes of building a better AI. I attribute this mostly to the fact that many so-called AI researchers lack mathematical background knowledge.

When provided with an AI model, I can identify failure cases and shortcomings of the model. I can generate data sets to quantify those issues. I can mathematically analyse the loss function used for training to pinpoint those decisions that most likely negatively affected result quality. I can mathematically analyse the network architecture to detect features or situations that are impossible for the AI to correctly handle.

With that analytically gained knowledge, I can typically find flaws in the current AI implementation.

That’s a good thing, because repairing those flaws will then surely improve your AI.

FTP Distribution System

I built an internal distribution system for a photo agency to swiftly send their pictures to partners by uploading the images to FTP servers. The system went live in 2004 and was used until 2009 when I founded spratpix together with their owner. I’m now building and maintaining the SaaS spratshop.com (german only) which includes my FTP distribution system.

FTP to HTTP Gateway

Many image agencies still use FTP for their image uploads and distribution today.

As a result, there was a need for some of my customers to add support for this legacy protocol as well as its newer encrypted variant FTPS to a modern web application.

I built a FTP to HTTP gateway, which one of my companies is offering as a whitelabel service. The way that this works is that the agency connects to a customer-branded FTP server, which in reality is provided by my gateway. My gateway software will then in real-time convert the FTP requests into HTTP requests and forward them to the web-app.

This allows my customer to design a virtual file system and virtual folder structure purely by exposing a HTTP API. Their customers can then work with these virtual folders using FTP.

VNC Capture and Replay

From 2006 to 2010, I built and maintained a proxy server for the VNC remote control protocol that would capture the screen contents and the operator’s keyboard and mouse commands into a logfile. Later, a supervisor could then play back (at increased speed) the whole VNC session to verify that the operator didn’t do anything wrong. This product was used by a german remote-support company to monitor their employees.

VR / Virtual Reality – Cinematic Rendering

The V-Ray renderer is used for Hollywood movies such as Iron Man. I have built a plug-in for V-Ray which enables the user to render a V-Ray scene into a 3D light field suitable for display on a VR headset.

In short, this allows you to export cinema scenes for Oculus Rift at full quality.

VST, RTAS and AU Plugins

Since I’m selling professional audio software, I need to deliver my work as plugins for the common audio workstations. As such, I have years of practical experience developing VST, RTAS and AU plugins. I’m still learning AAX. I also already shipped an RTAS plugin with support for hardware remote controls (such as D-Control) and I’ve worked my way through the page tables documentation.

Ansible

I have plenty of experience setting up and maintaining Ansible deployments. At ImageRights (where I’m CTO), we coordinate 5000+ crawling tasks using Ansible.

App Development: iOS, Android, Linux, Mac, Windows, Consoles, Embedded

I can build iOS, Android, Linux, Mac and Windows apps. That said, it’s been a while since my last Linux GTK application.

  • I have built iOS apps in pure C++ with a custom GUI toolkit called JUCE,
  • I have built iOS apps as HTML5 with a custom WebKit
  • I have built iOS apps in the regular Objective C way with UIKit
  • I have built Android apps with C++ (JUCE again)
  • I have built Android apps in HTML5
  • I have built Android apps using the default Java libraries.
  • I have built Mac applications with C++ (JUCE)
  • I have built Mac applications as HTML5 (WebKit)
  • I have built Mac applications with Cocoa+Carbon.
  • I have built Windows applications with JUCE.
  • I have built Windows applications with MFC.
  • I have built Windows applications with QT.
  • I have built Windows applications with GTK.
  • I have built Windows applications with XAML.
  • I have built Windows applications with HTML5 (Electron).
  • I have built C++ applications for embedded devices.

In case you need cross-platform games, see Unreal Engine or Unity Engine.

Apple Mail.app Plugin

In 2009, I bought my MacBook Pro 17" and it came with the Apple Mail application pre-installed. I liked it mostly, but I was missing the Nostlagy plug-in that I had used in Thunderbird before. So I wrote my own plugin for Mail.app to provide the Nostalgy keyboard shortcuts and GUI for moving mails into folders.

Beat Detection

In 2006, I created a tool to automatically detect the average speed and drum beats in a music track. This was done using moving-window short-time fourier transforms and then using the Viterbi technique to estimate the “musical state” of the track from those FFT values.

BIOS Services / EFI Emulation

In 2009, I managed to write a terminate stay resident EFI emulator which is loaded by the stage 0 bootloader and offers BIOS-level services to the operating system. I integrated my EFI emulator into Chameleon such that my EFI layer could present a virtual NVRAM storage area to Mac OS X running on non-Apple machines.

CEO / CTO / Project Management

I’ve been a freelancer since 2004, a CEO since 2009 and a CTO since 2010. I’ve worked on my own, with local employees, with outsourced employees and in cooperation with other companies / consultants / freelancers. I know how to lead projects through difficult times and ship them.

I’ve been managing the finances of my companies and their products on my own from 2010 to 2013 so I have a general feel of what works.

In 2019, I had my 10-year anniversary as the CEO of a privately owned German company.

Chainer

Chainer is the AI framework that I used for my style transfer -based AI t-shirt startup. To speed up inferrence, I ported some parts of chainer to C++ and optimized them for SSE2 and AVX with the help of Intel VTune Amplifier.

Chat Server

In 2011 (= before the encryption hype started), I wrote a completely encrypted chat server and client for Windows, Mac, iPhone and Linux. The server backend was written in C++ with the boost libraries and used SSL connection hijacking to tunnel through firewalls. While it works OK for me and my friends, this project sadly never got stable enough for a public release.

Content-based Image Retrieval

For my company spratpix, I wrote the AskBubo.com search engine, which will convert images into features, hash them efficiently and then use those hashes for content-based image retrieval. The whole system is implemented as several workflows based on Apache Hadoop, which will create a huge look-up-table stored on HDFS or S3.

AskBubo is actively used (2014) by companies to detect copyright infringement on the internet and to identify duplicates in private image collections.

Later on, this led me to join ImageRights International Inc. as the new CTO, because they needed someone who could build a world-wide crawling and image identification system for their Discovery and Recovery services. The distributed C++ content-based image retrieval database that I built for ImageRights went into production end of 2015 after 2 years of development time and is still providing the foundation of the Discovery service today.

Copy Protection

I developed a custom copy protection for one of my products which is based on RSA (private key + public key) signatures for authenticating a customer’s machine through hardware-locked machine IDs. Later, I extended the copy protection mechanims to also authenticate against USB key drives. The copy protection can detect and prevent binary modifications of the executable through self-reference of the binary and it also provides encrypted storage for proprietary data.

Deployment & Monitoring

I strongly dislike having to get up during the night to fix a server issue. Yet, I still run multiple SaaS companies. How does that fit together?

I’m a big believer in standardizing service deployments, for example using Opscode Chef, Ansible, or Docker. As a result, I can usually just wipe a misbehaving server and do a clean fully automated re-install. That saves me a lot of time.

In addition to that, I setup monit monitoring and syslog streaming to a centralized server for every one of my company deployments. During development of the service executables, I follow the rule that every start should do an error recovery and that permanent state should always be stored in a proper database. Due to that, I can just crash and re-start any process without the risk of data loss. For doing those checks and restarts, I setup monit.

In short, I built everything so that it can restart itself automatically.

Distributed eQTL Management System

For my bachelor’s thesis, I created a distributed system based on Apache Cassandra and the Google Web Toolkit, which would distribute management and processing of expression QTL data over multiple nodes. I used Nginx as the load balancer.

Distributed Locking

For the spratshop product, we needed a way to enforce that cronjobs are only executed mutually exclusive on our server cluster. To solve that problem, I built a small commandline tool which uses ZooKeeper to implement a distributed lock which encloses the cronjob being executed.

Docker

I have plenty of experience in managing linux service deployments with Docker. For example, I run my own private Docker repository and maintain my own pool of Docker images for AI research. These Docker images contain both network services for remote access, as well as data and models for local execution.

I also have experience replacing cloud deployments such as Heroku with Docker images on inexpensive bare metal servers in order to reduce operating costs.

E-Mail to Dropbox Service

Because I really dislike doing it and sometimes forget to store invoices coming in by email into the Dropbox for my tax advisor, I developed a service to automate that. This service is currently not publicly available or being sold, but instead I’m only using it for my own companies.

The service offers a specialized email address that you can forward emails to (for example using Outlook Rules) and you can include a tag and a file extension in the recipient email adress. All files attached to your email using the given file extension are then stored into your Dropbox into a pre-defined folder with the tag given in the recipient email address.

Foreign Software Modification

I’ve had numerous encounters with foreign software for Windows or Mac which behaved in a way that I found inappropriate or annoying. So I learned the skills needed to reverse-engineer and modify such software.

For example the regular german telephone book software from TVG has an incredibly annoying export limit of a maximum of 75 records per file. I needed to export all 300 results and I didn’t want to do that in 4 runs … so I changed the limit.

Fractal Scene Generation

Throughout the years, I’ve built various tools to generate 3D geometry or 3D voxel grids or 3D particle simulations out of mathematical fractals (3D mandelbrot) and cellular automata (game of life + custom rules).

In 2013, I also built a 3D version of the popular “Game of Life” with ruleset editor, grid editor and support for 3D beamers.

Game Boy Advance

For a software development competition, I developed a christmas-themed single-level 2D racing game for Game Boy Advance. Technically, I used the community GCC toolchain, GBAemu for testing and a Visoley flash card for testing on actual hardware.

I also had a lot of fun patching commercial GBA games to make them work like I want ;) Yes I know that’s cheating :p

German Legal Stuff

I’ve been running companies in germany since 2004 and liability-limited ones since 2009. I also did all of the bookkeeping and tax papers (Jahresabschluss + Körperschaftsteuer + Gewerbesteuer + Umsatzsteuer) myself for a year, so I think I have a pretty firm grip on the day-to-day legal suituation of running an incorporated company in germany.

Graphics API Redirection

As a kid, I enjoyed playing japanese video games. Sadly, I never learnt japanese. So I took on the programmer’s way of fixing the problem: I wrote a custom Windows DLL and executable loader which would inject my own set of standard Windows APIs (such as GDI32.dll) into the starting program. That way, all text drawing requests from the japanese game are going into my own software which allows me to send the text on-the fly through the Google Translator and then display the result instead of the original text.

The result? I could play japanese text adventures with the original text being replaced in real-time and in-game with a broken translation from Google…

Hardware Design

I can soldier and design electric circuits and get them produced. I have access to a CNC mill and a 3D printer. I can also program microcontrollers such as the PIC series, for example for building an in-flight stabilization control system for model airplanes.

I have also designed, 3D-printed and assembled prototypes of a Blockchain-like offline device for safekeeping of ownership and medical records. The underlying technology (developed by me) is patent pending as US20190361869A1.

Image Database

From 2007 to 2008 I built the first version of the spratshop image database which was the first product being sold by spratpix, which I founded in 2009. The spratshop image database uses Ruby on Rails for the back-end (along with many custom Java services) and Google Web Toolkit for the front-end.

Being the CTO, I obviously also led development of ImageRights' customer image management systems.

IRC Bot

In 2006 I built a customer IRC chat bot to distribute files to users using the mIRC client. The bot listens in a pre-defined IRC channel and sends private chat messages to users when they enter keywords such as !list and !get <number>.

Lenticular Rendering

You know those images that change when you rotate them?

I built a plugin for V-Ray to produce such images in ultra high quality out of virtual CGI movie environments. My plugin supports all those optical phenomena that are impossible to get right if one prepares the lenticular data by hand, such as refraction, transparency, smoke, or light scattering.

Mac Kernel Drivers

As part of my “Spatial Sound Card” product, I developed a Mac OS X kernel driver in 2012/2013 that creates a virtual sound card which internally processes the audio data with my spatial audio simulation engine before delivering the processed signal to a real sound card for output.

Mail Client with Automation

As I grew more and more disappointed with the overall sluggishness of Google Mail and of Outlook, I decided to write my own email client.

To get an instant display of my INBOX, hajomail consists of a client that will continuously run in the background and synchronize a local database with the server-side gateway. The GUI is based on Google Web Toolkit and WebKit and is only started on-demand.

The server-side is an IMAP client, which will continuously synchronize between its internal database and the IMAP server. To get real-time updates between multiple clients, I wrote said internal database from scratch and implemented real- time messaging and history replication/merge. That way, as soon as an email comes in, all listening computers will be notified immediately.

For the technical side, I used Google Go because its concurrency model was a very good fit for my intended architecture of multiple independent agents, which communicate with each other through messages.

My little info page hajomail.com is still online, but I’ve since given away the source code to a friendly company and I’m not maintaining hajomail anymore. However, the launch of the hajomail beta in Feb 2013 resulted in a job offer from a fortune 500 company (which I turned down to finish university instead).

Massively Multiplayer Online Games

Throughout my bachelors degree from 2007 to 2009, I developed a multi-threaded, multi-server MMORTS (massively multiplayer online realtime strategy game) with pathfinding, a persistent online world and AI takeover (if a player leaves).

The game used a custom network protocol for which I created a helper script to generate the serialization and deserialization code both in C++ (for the server) and in Java (for the client). The game was live in 2009 and my server scaled pretty well to a world map with 20.000 tanks driving around and using real-time path finding.

FYI, I built the protocol-generator for this project years before Google’s Protobuf was first released.

Object Tracking

For my scripting language TenFex I needed the capability to “glue” text translations to moving objects in the underlying scene. To make this possible, I built an object tracker supporting affine translations. I implemented the well-known KLT paper and then built a matrix estimation system on top using RANSAC with statistical priors (to keep movement smooth).

FYI, this was before OpenCV came along. By now, there’s tons of tutorials on how to do that in 3 lines of Python code, but back in the day when I built this, the necessary Python modules did not exist yet.

Online Web Page Editor

We needed a way to quickly modify long sales landing pages and assemble newsletters out of pre-defined blocks for spratpix. So I built a client-side web page editor running as JavaScript inside the web browser which does precisely that: assemble web pages or HTML newsletters out of pre-defined blocks. Basically this is like MadMimi but a lot less polished because it’s only used internally.

Photoshop Plugin

One of the first software development tasks I got payed to do was to create a custom plugin for Adobe Photoshop to integrate my clients proprietary C++ image processing library into Photoshop.

PlayStation 2 OS Modifications

When I got my PS2 I just had to glue in a modchip to get full access to the hardware… And then I used the GCC C compiler and a lot of RISC assembler to create my own modifications to the PlayStation2 operating system. The PS2 was an exceptionally fun target for hardware hacking because it has two processors running different software concurrently and I think they even used slightly different instruction sets.

So here’s what I did: Using the PS2’s main processor, I patched the code running inside the IO co-processor to replace the system restart with my own patched implementation :) Then, I would “reset” the system and start a game, thereby injecting my own OS-level code and system drivers into the IO processor while the game booting on the regular processor doesn’t notice ^^

Have you ever wondered how the internal in-memory data structures for Final Fantasy change as you’re playing it? I did. Did you ever want to see the internal debugging system of Tekken 3? I did. Did you ever want to start PS2 games from a simulated disk driver over your home network? I did. Did you ever want to make your PS2 store it’s save games on a (much faster) FTP file server instead of the slow memory card? I did. Ahh the good times :) I probably spent way too much time on making unofficial PS2 modifications.. but hey, it gave me a pretty solid grasp on embedded systems, hardware-level hacking and OS architecture.

Printer Calibration for Commercial Printing

In 2013, I developed a software to automatically identify the location (or locations) of a pre-defined template on a scanned-in print sheet. For example if you’re mass producing cigarette boxes and you are printing 10 of them onto one sheet, then you can use my tool to identify where those boxes are in the image you get out of the calibration scanner. So using a tool such as mine you can automatically monitor and re-calibrate the ink density across the sheet during production.

Proxy Server

During my time at university, I wrote a custom proxy server running on Heroku which filters retrieves our mensa food plan and re-formats the content into a responsive template suitable for smartphones. I wonder why my university never managed to make their official food page work at least somewhat on smartphones, but creating a proxy seemed to be a faster way to get to my goal then annoying them about it.

I also wrote a proxy server that retrieves a blog or web page and removes all superfluous content (like advertisements) and then reduces formatting to a minimalistic and standardized theme. I used this in the ReadItLater apps I developed for Mac and Android to convert links to articles into a HTML that my Sony PRS-T1 ebook reader could display well.

Real-time Audio Filtering

In 2007, I built a Windows Driver to apply real-time modification to the signal before routing it to applications such as Skype. Apart from the usual “funny effects” like making a voice sound robotic, this also included real-time pitch detection, pitch shifting and spectral modification to make (for example) a female voice sound male.

In 2010 I started research on the real-time audio filtering suite that would later become the “Spatial Audio Designer” product line from “New Audio Technology GmbH”. I did the intial research, mathematical modelling of the problem and also lead the team that does the implementation in vectorized and multi-threaded C++. The SAD (Spatial Audio Designer) engine can do real-time routing and panning of up to 500 channels on a regular workstation (2013 performance level) and can then simulate rooms and the acoustic interaction between directional sound and the ears. The result is that producers can use calibrated headphones to work in a virtual studio with up to 44 virtual speakers and up to 2 virtual subwoofers. The SAD is actively used in production of audiobooks, music and also Hollywood movies.

Reverse Engineering

I reverse engineered the closed-source japanese file-sharing client Winny2 in 2009 and wrote my own C++ client speaking their protocols. Later, I extended my client with a web interface so we could run it on a dedicated server and use it to remotely download files from the Winny2 network through HTTP.

Satellite Data Processing

I know how to obtain, merge, convert, and post-process satellite data to produce surface maps or elevation shading for cartography. I can also combine multiple overlapping satellite images for cloud- and artifact-removal. I can transform satellite data between different coordinate systems or reproject them to reduce distortion, for example if the source images have a high nadir angle.

For an example, see hajo.me/bike-tuscany which I created based on annotations from OpenStreetMap and LANDSAT 8 satellite photos.

Scripting Language / Compiler Design

Somewhere around 2000 I created my first scripting language including parser and interpreter. It even supported calling DLLs. I learned assembler to make that work. In 2004, I built an interpreted scripting language to automate the creation of karaoke effects for Animes out of word timing tables.

From 2005 to 2008, I built and supported a custom scriptiong language for generating visual effects. This scripting language would compile C-like source code into an intermediary bytecode with embedded data, which could than later be run on another machine without needing the source script. This allowed me to distribute the compiled effect files along with my player plugin to users without disclosing how the effects work. I also created an optimized version of the virtual machine, which used the graphics card to improve rendering speed.

Stream Download Proxy

In 2006 I built a small HTTP proxy server which will collect URLs and credentials for all video streams that pass through it so the customer can just browse YouTube (for example) with my proxy turned on and then later decide which of the videos to download as MP4 movies to his hard drive.

Structural Similarity Search

For my master’s thesis, I developed a hashing system for searching for similarities in biomolecules and their movements. The system is based on asynchronous message passing between multiple workers and thus easily scales from one processor to multiple threads on multiple nodes.

Surround Sound Virtualization

As the lead developer behind the Spatial Audio Designer I had to invent and build the audio processing algorithms for surround sound virtualization for headphones.

Later, I was lead developer for Spatial Sound Card and the Spatial Audio Game Engine, where I optimized those algorithms for SSE2 and low CPU usage, to make them suitable for inclusion into games and real-time products.

Fun fact: My software made it to Hollywood. See here at 2:53 the Pro Tools panning plug-in visible on their screen.

TensorFlow

Since I did plenty of AI work, I of course have experience with TensorFlow.

I can design new models, train them, run inference, analyze accuracy, etc. I also have experience with packaging TensorFlow into Docker containers and running inference servers on bare metal and on cloud servers.

User Interface Design

I’ve been building apps for so long that I had to learn how to design a reasonably-looking UI in Photoshop. These days, most of my UI design make it through to the final product.

I can also whip up functional web UI concepts (with static fake data) in a few minutes which allows me to try out many different user interface concepts when building a new website. Together with the Bootstrap 3 CSS toolkit, that allows me to produce a presentable (although generic-looking) GUI very fast.

Unity Engine

The Unity engine is good for mobile games and cross-platform realtime environments that do not require cutting-edge graphics.

For next-gen graphics, I’d suggest the Unreal Engine, that I also have experience with.

For Unity, I can do gameplay programming, AI, pathfinding, performance tuning, bugfixing, custom shaders, custom effects, and build data import or processing pipelines.

I can also help you with porting/optimizing your Unity game for release on handheld consoles.

Unreal Engine

As you can see, I was one of the first people to help fix bugs in the Unreal Engine 4 after it became available: https://github.com/EpicGames/UnrealEngine/pull/9

For one project, I also needed to acquire deep knowledge of the C++ internals of the Unreal Engine renderer, to fix a mobile shader crash bug: https://github.com/EpicGames/UnrealEngine/pull/4121

Before that, I did some work with UE3.

For Unreal Engine, I can do gameplay programming, AI, pathfinding, performance tuning, bugfixing, custom shaders, custom effects, and build data import or processing pipelines.

Video Flow and Cut Detection

In 2006, I also built a software to analyze the (affine) camera movement of videos and to detect scene cuts. This software was used together with my beat detection tool from the same year to fully automatically generate music videos for unknown tracks out of a pool of generic movie stock footage.

Virtual Files and Registry

I just hate it when Windows programs think they are allowed to spam my whole hard drive with their files. So I built a small DLL-injector which replaces the Windows file and registry API with my own variant, thereby redirecting all those pesky paths into one folder. Something very similar is being used by Thinstall to package system-wide installations up for distribution into a single folder.

This also works nicely for presenting virtual files or registry entries to an application. For example, I built a small tool to inject a virtual movie.mkv file into the VLC video player which I could then fill dynamically with data. That way, I can start watching a RAR-compressed movie before the download is finished. By 2013, my approach has become useless here because VLC now supports RAR archives directly.

Web Crawler

In 2014 I started working on a custom web crawler utilizing my AskBubo search technology to identify copyright infringements on a set of high-value pages in near real-time. It went into production in 2016.

Web Development

My companies sell various SaaS products which I’ve mostly built myself. My preferred tools are:

  • Heroku as a platform
  • Hetzner (germany) for high-performance servers
  • Amazon S3 for storage
  • MySQL or PostgreSQL as database
  • Redis or RabbitMQ for task management
  • Java or C++ or Google Go for back-end services with inversion of control: Back-end services connect to HTTPS REST API on front-end
  • Rails for web back-end
  • Google Web Toolkit or AngularJS for JavaScript front-end
  • Bootstrap CSS
  • Mailgun and MadMimi for emails
  • HTTP(s) REST JSON for all APIs

Whole Genome Analysis

During my time at university, I performed a statistical analysis to identify differences in the human genome between affected and unaffected patient groups. We used Affymetrix chips to measure SNPs and I successfully identified a set of SNPs with a high predictive value for a patients tendency to develop Sepsis after severe injuries.

Windows Kernel Drivers

In 2005 and 2006, I built a Windows kernel driver that can be remote-controlled from C# or C++ and allows the developer to present arbitrary data as a virtual folder structure on a virtual hard drive. If you’ve ever used one of those “mount FTP servers as hard drive” tools for Windows, that is precisly what my driver does.

In 2006, I also built a Windows kernel driver that can be used to present arbitrary binary blocks as virtual hard drives and mount their contents as file systems. Think of this as Daemon Tools for virtual hard drives. I think something similar was officially added to Windows 7. A similar technology is also used in VMware to mount their virtual hard drives.

From 2005 to 2006 I also built a Windows kernel driver to monitor a file system for changes in real-time and copy those changes to another PC over the network. This was used in a product very similar to Norton Ghost (= hard drive backup over network). You can imagine this functionality like a one-way Dropbox (PC –> Web only). Yes, I wrote real-time file synchronization software way before Dropbox ;)

In 2007, I built a Windows kernel driver to intercept audio data from the microphone and apply real-time modifications to the audio signal before it reaches applications such as Skype. Our product was a tool to make females sound like a male so they don’t get hit on in online games.

In 2012/2013 I built a Windows kernel driver to intercept outgoing surround audio data and convert it appropriately for Headphone output for the “Spatial Sound Card” suite of applications developed by me.

Workflow Automation

In 2008, my university hired me to write an execution service to integrate command-line tools invoked through SSH or through the ARC grid middleware into the workflow management software Taverna. Later on, I extended this to include the Taverna UseCase repository where users can share automatable recipes for using standard Linux software from within Taverna. At the end of 2008, I did an internship in Geneva to automate their medical image classification software on KnowARC clusters using my plugin for Taverna. Later, I was also invited to present my work in front of an EU research commitee in Brussels.

Other cases of workflow automation are my FTP Distribution System or my E-Mail to Dropbox Gateway.

For my company spratpix, I also built an automated invoicing and payment collection system. In 2014 I built a screenshot taking service to automate more of the internal tasks in one of my other companies. It is still in production use in 2019.

In most cases, I can replace a workflow involving specialist employees with generic tools (like Excel) with a specialized task-oriented tool that enables the use of generic employees. So If you have tasks that occur often and as a result cost much employee time, feel free to ask me about automation possibilities.

Xbox360 Game

After one of the Nordic Game Jams that I participated in with friends, I ported our game “Honeymoon” over to Xbox360 just to learn the process. I had to remove some of our superfluous visual effects (such as the full-screen 720p PNG video of sun rays) because of memory limitations on the Xbox360, but apart from that the game is fully playable with two controllers.

Yacc, Flex, Bison

These are tools used to generate your own scripting language grammar or your own compiler. I used them on various projects such as my two interpreted scripting languages and also for implementing the compilers of my two C-like dialects.