Client via Viro via Engify <Nov 2024 – Apr 2025>
This project is under NDA, so what I can share is limited.
I was tasked to help develop a new type of 'person position/state sensor' for the client (who wishes to remain anonymous) based on thermal imaging and a nRF52 microcontroller.
Primarily focusing on the improving the existing software and making it so it can be re-used for different projects. The main project challenges were:
Primarily focusing on the improving the existing software and making it so it can be re-used for different projects. The main project challenges were:
- Working with limited documentation (+ not having access to the engineer(s) who wrote the code)
- Unclear and unsafe code (causing frequent hard to debug failures once they were not just created/tested in isolation)
- Working with not fully validated HW+SW -> debugging often required logic analyzers and close communication with hardware engineers
- I also had input on hardware changes to minimize the power consumption
- I was the only C++ engineer -> was working very independent
- Including:
- Setting up doxygen for documentation
- Improving the build system
- Being more structured/clear
- Being reusable (with git sub-modules)
- Creating a GUI in Qt for testing
- Creating a lot more structure/order within the software.
- Project specifications were not finalized -> I was involved in a lot of discussions about what was actually desired/required and how to achieve that.
New freelance journey!
As you ma have gathered by now, I am about to embark on my freelance (embedded (C++)) software journey!
Want to be one of the first to give me a hand in this? Contact me!
Want to be one of the first to give me a hand in this? Contact me!
Arma 3 management web front-end <May 2023>
Arma 3 is a multi-player military shooter “simulator” (similar-ish to Call of Duty). It allows servers to install mods (short for modifications. Extending the existing game with new maps/models/game types etc).
I setup a server so my friends and I could play together. The problem was that they wanted to play a lot more than I did and kept asking me to change the mods on the server/restart it. Asking them to learn some basic Linux and SSH into my server and fix it themselves wasn't feasible. So I made a web front-end for them to use.
This project effectively had 3 parts:
Plans were made to update the UI to be a lot more user-friendly and prettier to look at, but the friend group stopped playing the game before that happened -> it was never fully updated. It was to be built using the Tailwind CSS framework.
I setup a server so my friends and I could play together. The problem was that they wanted to play a lot more than I did and kept asking me to change the mods on the server/restart it. Asking them to learn some basic Linux and SSH into my server and fix it themselves wasn't feasible. So I made a web front-end for them to use.
This project effectively had 3 parts:
- The actual arma server; which I already scripted together in Bash
- The web front-end (written in Angular 5)
- The web back-end (written in C++)
Plans were made to update the UI to be a lot more user-friendly and prettier to look at, but the friend group stopped playing the game before that happened -> it was never fully updated. It was to be built using the Tailwind CSS framework.
<Mar 2020 - Current>
I self-host a lot of things. Primarily because it is interesting and gives a lot more flexibility/privacy/independence compared to online alternatives. For example, I run:
Most services are accessible through an NGINX reverse-proxy, usually behind an Authelia security layer. I have also hosted various game servers, including a custom web-GUI to change settings and start/stop the game server. This was done so less-Linux-inclined friends can manage the game themselves. This web-GUI uses Angular and WebSockets to communicate with a C++ program that runs on the server.
All these services are running in Docker on my Ubuntu server.
- Prometheus + Grafana for monitoring various statistics
- Matrix (/element) to send private notifications to/from my computers/server/phone
- Gitea server including automated build/deployment
Most services are accessible through an NGINX reverse-proxy, usually behind an Authelia security layer. I have also hosted various game servers, including a custom web-GUI to change settings and start/stop the game server. This was done so less-Linux-inclined friends can manage the game themselves. This web-GUI uses Angular and WebSockets to communicate with a C++ program that runs on the server.
All these services are running in Docker on my Ubuntu server.
My network setup <Mar 2020 - Current>
I have been tinkering with my network ever since I got my own apartment.
It currently uses OPNsense as a modem and 2 OpenWRT routers as WiFi access points (and smart switches). This way I could completely remove the ISP modem making my network a lot more secure/private. VLANs also enforce strict rules segregating private access (e.g. servers) from guest networks.
It currently uses OPNsense as a modem and 2 OpenWRT routers as WiFi access points (and smart switches). This way I could completely remove the ISP modem making my network a lot more secure/private. VLANs also enforce strict rules segregating private access (e.g. servers) from guest networks.
My homelab/server <Mar 2020 - Current>
My current (relevant) server specs are as follows:
This runs all my (web) services (mostly in Docker containers). I also use it as a build server when I am developing on my laptop, so that I limit my battery usage (+ the fans don't sound like they are trying to go into orbit)
NAS:
Pretty much just a box with a bunch of HDDs 2 disks running in RAID1 for important data. The rest are running on mergerFS to have 1 big convenient mount. Storage is exposed via SSH to linux devices and SMB to local windows devices.
My brother also has a disk here; which he backs-up to. I have one in his NAS. I back-up to it via an SSH reverse tunnel (he does not want to open ports).
All my backups are made using BorgBackup.
The plan is to merge these 2 boxes as 1 physical running Proxmox.
- AMD Ryzen 5 5600X
- Nvidia Quadro P620 (unlocked firmware)
- 16 GB RAM
This runs all my (web) services (mostly in Docker containers). I also use it as a build server when I am developing on my laptop, so that I limit my battery usage (+ the fans don't sound like they are trying to go into orbit)
NAS:
- LSI SAS2008 HBA
- 8 GB RAM
Pretty much just a box with a bunch of HDDs 2 disks running in RAID1 for important data. The rest are running on mergerFS to have 1 big convenient mount. Storage is exposed via SSH to linux devices and SMB to local windows devices.
My brother also has a disk here; which he backs-up to. I have one in his NAS. I back-up to it via an SSH reverse tunnel (he does not want to open ports).
All my backups are made using BorgBackup.
The plan is to merge these 2 boxes as 1 physical running Proxmox.
Blood plasma donor <Feb 2019 – Current>
I am currently a (blood) plasma donor, going in for donations every other week.
Blood donor <Apr 2017 – May 2019>
In this period I was a blood donor, going about once per month.
I was forced to take a break because my long-term iron wes getting depleted. After that break I continued as a plasma donor instead.
I was forced to take a break because my long-term iron wes getting depleted. After that break I continued as a plasma donor instead.
Family care <Feb 2023 – Apr 2024>
This project is under NDA, so what I can share is limited.
This period frankly sucked and I was unable to work due to having to help out with caring for my grandmother who had severe dementia, up to her death; and also the care for my dad who had leukemia, up until his death.
GooFra WIZ5500 driver <Jul 2021>
This project is under NDA, so what I can share is limited.
For this project I was called up out of the blue by the engineer at GooFra. He could not figure out how to get the WIZ5500 working.
So I was tasked to make a driver, which he could then use in the existing code-base. Which I did in 2 days (after coming home from my normal job at Prodrive).
So I was tasked to make a driver, which he could then use in the existing code-base. Which I did in 2 days (after coming home from my normal job at Prodrive).
Prodrive <Dec 2017 – Feb 2023>
This project is under NDA, so what I can share is limited.
I worked on the software that is used for the testing of cabinets that were produced by Prodrive.
This software abstracted all the low level functionality of each board into easy to use interfaces, which test engineers would then use to test each pin on every individual board.
This software supports 20+ types of boards and 15+ protocols interconnecting them all.
Each cabinet consists of 4+ racks, each rack of 2-10 boards. Each arbitrary permutation of boards/racks had to be supported.
This project involved a lot of:
This software abstracted all the low level functionality of each board into easy to use interfaces, which test engineers would then use to test each pin on every individual board.
This software supports 20+ types of boards and 15+ protocols interconnecting them all.
Each cabinet consists of 4+ racks, each rack of 2-10 boards. Each arbitrary permutation of boards/racks had to be supported.
This project involved a lot of:
- C++17, including heavy reliance on templating + design patterns
- Making sure that the code base could run on a Windows host, a Linux host and a mix of Linux clients (PowerPC, ARM, FPGA, with mixed endianness)
- Controlling boards/FPGA's through their memory maps
- Extensive integration/regression/unit testing with Catch2
- Embedded Linux development
- Designing/setting up/documenting/maintaining a large project (Documentation in LaTeX)
- Designing/setting up/documenting/maintaining the cross-platform build system (CMake)
- Static analysis (clang-tidy)
GooFra [vacation job + school internship] <Aug 2016 – Sep 2016 and Sep 2016 – Jan 2017>
This project is under NDA, so what I can share is limited.
This internship had to goal of designing a new spectrometer from scratch, powered by an STM32F4 microcontroller. It had to conform to the following requirements:
During the internship I also used Cheat Engine to inject custom LUA code into a proprietary program.
This was to log output values, so we could determine/debug drift over time. It also required a lot of debugging with VisualGDB and a logic analyzer.
The main things I learned during this time were:
- Must have a booloader with USB DFU capabilities so the firmware is user-updatable
- Must support USB TMC communication (with SCPI parser) to control it
- Must have a GUI in LabVIEW
During the internship I also used Cheat Engine to inject custom LUA code into a proprietary program.
This was to log output values, so we could determine/debug drift over time. It also required a lot of debugging with VisualGDB and a logic analyzer.
The main things I learned during this time were:
- Working very independently (I had basically no supervision)
- Communicating that work with technical and non-technical people (1 engineer and 1 sales person)
- Architecting a 'real' C++ project on a microcontroller (rather than a tiny/simple example project required for school)
- PCB design (KiCad)
- Debugging existing hardware/reverse engineering
- Debugging new hardware
Prodrive [school internship] <Sep 2015 – Jan 2016>
This project is under NDA, so what I can share is limited.
This was my first real software job.
My initial task was to convert the Intel hex memory format to a Prodrive internal format, so it can be used with existing software.
Once I finished that I was told to design and create a generic port expander interface + implementation. For use with various I2C port expanders.
After that I was instructed to design and create a tool for FTDI chips. Which sets the USB settings and gives direct access to normally unused pins, so that it can be used as a port expander.
The main Things I learned during this time were:
My initial task was to convert the Intel hex memory format to a Prodrive internal format, so it can be used with existing software.
Once I finished that I was told to design and create a generic port expander interface + implementation. For use with various I2C port expanders.
After that I was instructed to design and create a tool for FTDI chips. Which sets the USB settings and gives direct access to normally unused pins, so that it can be used as a port expander.
The main Things I learned during this time were:
- Working with SVN and Git
- Working with code-reviews; both receiving and giving
- Reading and writing documentation/building on top of existing projects
- Working within a (small) team
HBO Elektrotechniek (ETC) at Zuyd Hogeschool <2013 – 2017>
During this time I studied Electrical Engineering, focusing on digital hardware (FPGAs/microcontrollers etc) and primarily on C++ software.
One notable school project I worked on was the 'Sphero'. A remote-controlled car within a plastic ball, controlled by an arduino.
The project itself was not super demanding, but it did give me some experience working with engineers from a completely different field (mechanical engineering) and working with real-world limitations and setbacks.
One notable school project I worked on was the 'Sphero'. A remote-controlled car within a plastic ball, controlled by an arduino.
The project itself was not super demanding, but it did give me some experience working with engineers from a completely different field (mechanical engineering) and working with real-world limitations and setbacks.
Omnivision [vacation job] <Jul 2015 – Aug 2015>
In this period I worked a vacation job at 'Omnivision Industriële Besturingstechniek'.
Very briefly, I was tasked with creating a GUI for touchscreen devices for use by operators at NedCar. These devices were to monitor, and if needed, manually control the production line.
Very briefly, I was tasked with creating a GUI for touchscreen devices for use by operators at NedCar. These devices were to monitor, and if needed, manually control the production line.
HAVO (N&G) at SG Groenewald <2011 – 2013>
Nothing much to say here, I attended HAVO (N&G profile) at SG Groenewald from 2011 – 2013.
VMBO-T at SG Groenewald <2007 – 2011>
Nothing much to say here, I attended VMBO-T at SG Groenewald from 2007 – 2011.