Programming experience & Portfolio

I have had a passion for programming and all things related to it from a very young age. This page contains information on my capabilities as a programmer and software designer, as well as some of the projects I have been involved in during the last years.

Languages and proficiencies

Extensive experience (multiple bigger projects, including group projects):

Solid background (multiple projects):

Some background (between one and three small projects):

Relevant courses

During my studies I have followed several courses which have improved my abilities as a software engineer. Some examples include.

Projects

I have worked on countless different projects over the last decade and learned a lot from most of them. A few of the more recent projects are listed here.

Visualization of Medical Data

visualization of medical data

As part of the Honors project, a fellow student and myself worked together with the Kempenhaeghe institute for epilepsy and sleep disorders to visualize their medical data. The software was written in C++ and developed using the Qt framework. It was well received and as a result a PhD project was started to develop tools to visualize a much bigger part of their data. A censored screenshot of one of the windows in our toolkit is shown to the right (click to enlarge)

Server monitoring and remote control

web front-end for a server monitoring tool

I take care of the hosting of websites, mail servers and databases for a small group of companies. Being a bit of a security freak, I've had monitoring systems and a thorough backup policy set up from the start. Initially, I used a few Perl scripts to mail me backup reports and inform me when some of the monitoring services had something to report. I have since built a more sophisticated system to not only monitor the different servers and my personal computers, but also remotely control them to initiate updates or turn services on or off.

The system consists of three parts: 1. A Perl module which is attached to different programs running on the different servers. 2. A back-end that communicates with all the modules and collects their data. 3. A web-based front-end that allows me to view the data and control the different servers. The back-end is written in Perl and uses FastCGI to communicate with apache. All communication between the back-end and the modules on the different servers is both compressed and encrypted. The front-end makes heavy use of javascript to format the data and chooses different ways to display it based on its type. Because of this I can quickly add new servers or programs on servers to the system without having to design a new page for the front-end. Finally, the information displayed is updated automatically using websockets which also allows commands to be sent to the servers without reloading the page.

The front-end features a responsive design which works perfectly on anything from a huge 4k screen to a smartphone. It has also been designed to work with touch devices and is lightning fast. A screenshot of the "overview" module for one of the servers is shown to the left. As I said before, I'm not a graphics designer and I tend to prefer a functional design over fancy looks.

Using map deformation to communicate geographic data

using map deformation to visualize dissimilarity data, click for video As part of a project during my PhD I developed an interactive system which encodes dissimilarity data using map deformation. This system was used to demonstrate the use of a new algorithmic technique called "constraint multidimensional scaling" and its use in exploring dissimilarity data. It was used to analyze multivariate socio-economic data from the UK as well as several other complex datasets. Although multiple authors were involved, I was responsible for (among other things) the software development. For those interested in details on the algorithms and visual overlays employed by the system, please refer to the paper: link. The rest may be more interested in the video demonstration which you can view by clicking the picture to the right.

Deferred rendering pipeline

demonstration of deferred rendering

As a hobby project I've been working on a deferred rendering system. As I wanted to learn about all the different technologies behind modern graphics engines, I decided to write this system from scratch using modern OpenGL. It is built on my own scene graph and supports various advanced rendering techniques by combining forward and deferred rendering. Some of its features include: Blinn-Phong Lighting implemented using light volumes and a separate stencil pass in a deferred rendering setup to support a large number of lights at high frame rates, bumb mapping, high dynamic range (HDR), tone mapping, bloom, gamma correction, screen space ambient occlusion (SSAO) and multisample anti-aliasing (MSAA).

The image to the right is a screenshot from one of my earlier tests (before the addition of MSAA and SSAO). The different smaller images of the dragon show the different stages of the rendering pipeline. Due to the use of deferred rendering one can add a hundred more lights without a noticeable change in the framerate.

The NOVA engine

The NOVA engine is my biggest (and still ongoing) project to date. After I achieved my goal of teaching myself about the complexities of a modern graphics engine, I decided to take it one step further. The NOVA engine is a game engine that I have been developing as a hobby project over the last few years. Modern games have turned into highly complex software systems and the engines on which they are built even more so. I have learned, and still am learning, about all the different aspects of these systems.

The current version of the engine uses a entity-component-system architecture (similar to the one used in the Unity engine) to manage the complexity of the game world. Most of its aspects are data-driven to facilitate rapid iterations when designing a game with it. It features a JSON-based language for defining game objects and the components they are comprised of, and uses a home-written Lexer and Parser to interpret this language. The engine also implements its own reflection and introspection system which makes it very easy to bridge the gap between external configuration files and the c++ core.

The rendering engine is based on the pipeline described above and uses mostly the same shaders. However, its core has been rewritten to use OpenSceneGraph which improves the cross platform (and cross videocard) compatibility while reducing maintenance. It also sports an AI system based on Behaviour trees and contains a module to read map information in the Tiled map format.

With more than 200 files and close to 25.000 lines of code (excluding all third party code), the project has really taught me about the importance of managing complexity and writing maintainable code. As of this moment the engine is not ready for the implementation of its first game, but it is getting ever closer... Most importantly, every time I work on it, I learn something new.