Portfolio and (non-Minecraft) project history
There is a lot of stuff still missing from here. I'm trying to update this page when I finish a project, but when is something finished right?

R&D / SQA Engineer Summer Job

An SQA system with VisualSVN, Jenkins, Parasoft C++Test, & Python.

A high level overview
A more detailed view of the SVN-Jenkins relationship

After finishing the follow up of my Bachelor's Thesis project, I was asked to (attempt to) setup an SQA server. This system would use Jenkins to automatically run Parasoft CppTest.

First I made the Jenkins 'build' script in Batch, but I kept running into issues, so moved to Python. This allowed for much more flexibility, so a Python module was developed. This means most of the common functionality could be shared between different jobs without losing configurability.

The static analysis plugins in Jenkis are able to parse the Parasoft Report, and the email plugin could be made to get data from it. This meant emails send out (when there are Parasoft warnings) contain references to the file, line number, revision number and likely culprit.

Eventually the project scope was extended to include a hardware testing setup. This involved programming a board and running a python unit test module. The major issue with this is that it's not possible to specify what programmer device the programming CLI tool should use. To remedy this, I extended the Python module to include an API to a third party Device Manager (DevManView) that has a CLI. This allows a Jenkins job to make sure it's talking to a specific piece of hardware.

Another interesting item was VisualSVN. Internally E.D.&A. was using SVN on file based repositories instead of using a repository server. This was a problem for Jenkins, which refused to clone repositories on a network share. After some research I proposed VisualSVN Server, since it's easy to manage and allows for domain user integration and repository replication.

SVN is also used for select clients to share documentation and libraries or application code. With VisualSVN this was all integrated into one smooth setup. Because of security concerns and company policy a secondary instance was setup on an externally accessible VM, with it's own list of (non-domain) users. Because of the replication capability, internal developers can use the same repository server for both internal and external repositories.

This project was considered a complete success by the project managers, some of the developers may be less enthusiastic when they look at their email in the morning to find a list of violations :-)

Update: I helped them move the setup to permanent (and stable) Windows Server machine. The SVN server was separated out to make it less dependant on system load when a Jenkins job is running. The schematic has been updated.

Bachelors Thesis

Android on iMX6ul

My bachelors thesis is with E.D.&A., the details are not publicly available but it's about running Android on OEM embedded platform powered by an iMX6ul.

Update: This project was extended as part of my summer student job.

It became clear that, even though running Android is possible on the platform, it is not fast enough for commercial applications.

The Beer Archive

I've become a hobby brewer with a website!

The website was made as part of a school project, its a Docker composition with

  • Nginx
  • PostgreSQL
  • LetsEncrypt (although that's not running in production since I have a wildcard cert)
  • Flask (python 3)

The site is meant to be easily forkable and near instant deployable.

It features a full user management system, markdown enabled posts, email notifications, ...

Every beer/brew/batch is its own little micro-blog, with a main page and posts. This allows for follow-up that's easily visible. There are also separate pages, such as the ToS or the homepage.

The website. Source on Github.

KUL To iCal

Properly export your KU Loket roster to an iCal file.

I made this page because the existing tools became useless after the KU Loket roster layout changed. All the existing tools used HTML parsing to figure out the roster, and thus the slightest changes rendered them useless.

My version uses an (internal) json API to retrieve data, that you then paste in a textbox. (Due to cross site scripting protection I can't pull it directly, security is important!)

The script is entirely in JavaScript in the client browser, and thus no data is ever send to the server. (Another thing I disliked about the existing pages.)

KUL To iCal


A simple, private, expendable url shortener service.

I needed dynamic QR codes. The existing solutions are sometimes rather expensive or limited, so I made my own. It is a simple, PHP-MySQL bases system with an HTTP/REST API.

The "users" (or rather API keys) are just added by hand via PhpMyAdmin.


ESP8266 Breakouts v2

Front of PCB
Back of PCB

The full schema.

Based on an existing ESP Altium library and custom parts, all available on Github.

This PCB includes:

  • Space for the ESP-12-E. (ESP-12, ESP-12-F, or ESP-14 should also work)
  • Breadboard friendly spaced headers for all 'usefull' pins.
  • Headers (on top) for UART.
  • Headers (on top) for Flash Quad-SPI.
  • All the required pull resistors and filter capacitors. (smd or through-hole elcos)
  • reset switch.
  • programming switch (GPIO 0), also has an extra LED.
  • WS2812 RGB LED (GPIO15), with Dout pin also broken out. (Pick between 5v and 3v3.)
  • 5v to 3v3 regulator.
  • 7 x 5 Prototype area with GND, 5V, and 3v3 rails and GPIO4, 5, 12, 13, and 14 pins.
  • Silkscreen for all of it.
  • Solder bridge for GPIO16 and reset. (For MicroPython's Deep Sleep)

Digital Systems 2: FPGA-Z

An FPGA based Z-Machine implementation, written in VHDL, made for Basys3.

The Z-Machine is a virtual machine for text based adventure games.

Too much work to finish for the school project, and lack of interest to finish. I ended up reusing a lot of the code for a mini-casino (it just has roulette and high-low) and it was more then enough to get a good grade.

All source material is on Github.

Project 2: SmartAlarmClock

A Raspberry Pi Zero based 'smart' alarm clock.

Image of the prototype

It uses your Google Calendar to get your earliest appointment and your preferences to pick an ideal wake up time. We learned a lot about Python and Linux Kernel Modules.

This project ended up taking more time then we had, our PCB's arrived 2 days after the presentation (due to some issues with DHL), so we never assembled the final version. The presentation used the prototype shown above.

The accompanying report (in Dutch) is available here.

All source material and more pictures for this project are on Github.

There is also a (Dutch) website we made (it was a requirement for the course), available here.

Project 1: ModernMasterMind

A clone of the game Mastermind that uses a 96 RGB LED display to display the board.

Image of RIOT board and my own PCB side by side

It runs on a combination of an ATMega128A and a Beck IPC SC12. The SC12 provides the (Ethernet based) web-interface and game logic. The ATMega drives the WS2812 LEDs and LCD. They communicate via shared Dual Port RAM.

This setup is based on a development board called RIOT made by MGM and [dp]. The hardware largely remained the same, though I did redesign the PCB.

One of the hardest things about this project was the old hardware. The SC12 was more then 15 years old when I started. Since its a 16 bit DOS like system, most compilers for it run on 16 bit DOS systems. 64 bit Windows doesn't support 16 bit apps anymore. I tried a few things, including DOSBOX but ended up making a build script that uploads my code to my old Linux server, compiles it via an SSH session, and then uploads the result to the SC12 via FTP, then it reboots the SC12 via Telnet.

The accompanying report (in Dutch) is available here.

All source material and more pictures for this project are on Github.

There is also a (Dutch) website I made for my HTML+CSS+JS course, available here.


An assembler/IDE for 8051 asm files, written in Java.

It can compile and decompile to and from hex files, while showing you the steps in between to allow easy debugging.

I made this program because there are no programs with a modern, not cluttered, interface that met my needs. I needed the assembler to flawlessly read files written for Rigel51, as many of the files used in my school where written with that program.

The entire project, including a .jar release is available on GitHub.

This project also can upload the compiled hex files to the XC888 via serial (or usb-serial) cross platform.