Projects and experience
12urenloop
Currently project manager of the hardware and software stack made for the yearly 12urenloop event.
Also helped deploy (parts of) the system at other *urenloop events.
Past: Gentse 12urenloop 2024, 10urenloop Antwerpen 2024, Gentse 12urenloop 2025.
Upcoming: Pelicano Loop tegen Kinderarmoede 2026, Gentse 12urenloop 2026.
Status: nvt
Technologies: Java, Python, Go, Vue/TS, Godot (simulation), Car batteries, 1km of UTP, DietPI, nRF52832, BLE
Contributions to the D language server (LSP)
Added support for symbols imported from C headers/“modules”.
Issue: serve-d#328
Pull request: DCD#789
Status: Not yet merged, needs one more feature
Technologies: D, LSP
(Zeus WPI) Plant growth time-lapses with EPSON photo scanners
Blog post (dutch): zeus.gent/blog/25-26/hortiroot-intro
Source code: git.zeus.gent/ZeusWPI/hortiroot-scanners
Status: Ready to deploy when we have time™
Technologies: D, Go, Protobuf, C++/Boost/CMake, React/TS, rpi-image-gen, Podman
Guix dlang packaging
Reworked the packaging of the GDC, LDC and DMD D compilers and related tools, fixing various packaging-related bugs.
Pull request: guix#3250
Status: Under review
Technologies: Guix, Guile Scheme, CMake
WHY2025 Badge
Worked on the firmware of the WHY2025 camp badge. Ported MicroPython.
Featuring:
- esp32p4's with memory issues.
- esp-wifi-remote with “Not implemented” issues.
-
Manually throttling upload speed because esp-idf's blocking
send()keeps the buffer ptr around after return until sent. - A win95 inspired operating system powered by the p4's MMU.
- DOOM at 99fps
- Celeste (thanks @L4rs)!
- More apps available from BadgeHub.
(Image from @Flummer under CC-BY-SA-4.0)
Homepage: wiki.why2025.org/Badge
Status: Shipped thousands
Technologies: C, picolibc, FreeRTOS, ESP-IDF, CMake, BuildRoot/QEMU (RISC-V), esp32p4, esp32c6, SDL3, MicroPython
MC
Minecraft tcp server implementation, for interacting with/monitoring real-world systems in 3D.
Might be running locally at the Zeus WPI hackerspace at koin:25565 for interacting with various hackerspace infra.
Unmaintainable as Mojang frequently makes fundamental protocol changes on “patch” versions.
Source code: codeberg.org/jnms/mc
Status: Alpha
Technologies: D, mc-data
Cyber Security Challenge Belgium (CSCBE) 2025
Team: Zeus daemons
Qualifiers: 3rd place
Finals: 3rd place
Technologies: Radare2, GDB, pwntools, Burp Suite, Ghidra, Frida
Dlang nobetterC and upstream patches to the dmd compiler
TODO write-up
Pull requests: github.com/dlang/dmd/pulls?q=author:jnms-me
Status Patches: Merged
Status nobetterC: Prototype
Technologies: D, esp32
Programming in D for the ESP32 & VGA “video card” implementation
TODO write-up
Toolchain (only needed for Xtensa) and examples: github.com/jnms-me/esp-dlang
Video card source code: github.com/ZeusWPI/tscherm
Status: Beta
Technologies: D, ESP-IDF, esp32
Advent of code
I've participated in Advent of Code in 2018, 2019, 2020, 2021, 2022, 2023, 2024.
Solutions: codeberg.org/jnms/aoc
Status: nvt
Technologies: D
FPGA video signal generator
Monochrome+hsync+vsync signal generator that can emit some mathematical patterns. Written in VHDL.
Source code: github.com/jnms-me/Cyclone-II-EP2C5T144-vga
Status: Prototype, abandoned as impractical for text
Technologies: VHDL, FPGA, Altera
Dlang etc.linux.memoryerror
I helped rework D's etc.linux.memoryerror module for “catching” segfaults.
It now re-throws them as Error objects with details: the bad address that was accessed, whether the cause was a stack overflow or null pointer.
All 3 D compilers and many more architectures are now supported.
PR: dmd#20643
Status: Merged
Technologies: D, ucontext, QEMU user mode, x86, x86_64, arm, aarch64, ppc64
OWASP BeNeLux Days 2024
Invited as part of the CSCBE prize for 3rd place.
Took part in a 1-day training from Dr. Philippe De Ryck on hands-on API security.
Technologies: iframes, JWT, CSRF, SSRF
Attempted VSCode D grammar improvements
TODO write-up. TLDW TextMate grammars are horrible context-wise, need semantic highlighting.
Microsoft does it like this: github.com/microsoft/vscode/blob/6ac83c7c7d/extensions/cpp/syntaxes/cpp.tmLanguage.json#L4033
Status: Abandoned
Technologies: VSCode extension development, TextMate grammars
Courses INDI master
- Gevorderde algoritmen (graphs, strings)
- Systeemontwerp (Microservices, Quarkus)
- Beveiliging
- Machinaal leren (SKLearn, Keras)
- Compilers (LLVM, x86_64)
- Computer graphics (C++, OpenGL, Dear ImGui)
- Systeembeheer (Ansible, Kubernetes, Terraform, MinIO, ELK, TICK, MPEG-DASH)
(Zeus WPI) Ledstrip scripting sandbox
Lets users write scripts that use a section of the hackerspace's ledstrip in Lua, Python or brain███.
(The ledstrip features 690 leds and spans the entire space. Scripts could receive messages via HTTP only.)
After rewriting the server, it is now possible to dynamically assign sections to scripts without needing to edit a remote json file and restart the thing. I also added support for states, so that scripts can temporarily take over the entire thing.
I replaced the html form+textarea script editor with an embedded Monaco (the VSCode editor) that connects to a remote Lua language server.
A homegrown bf interpreter and python support via pyd were also added.
Messages can now also be received through the local MQTT broker.
Hosted locally at http://ledstrip in the Zeus WPI hackerspace.
Source code: git.zeus.gent/Kelder/ledstrip_sandbox
Status: Released
Technologies: D, LuaJIT, CPython, Monaco, LSP, Podman multi-arch build, DietPI, rpi_ws281x
Cyber Security Challenge Belgium (CSCBE) 2024
Team: Red goblins
Qualifiers: 2nd place
Finals: 3rd place
Technologies: Radare2, GDB, pwntools, Burp Suite, Ghidra, Frida
Started master programme “Information Engineering Technology”
Univesity: UGent
Remaining courses: Masterproef.
Courses INDI bachelor
- Algoritmen
- Besturingssystemen 2
- Computernetwerken 2
- Discrete Wiskunde
- Gedistribueerde gegevensverwerking (Kafka, Spark, Flink)
- Softwareontwikkeling en beheer (Linux namespaces, Kata, GitLab CI/CD, Kubernetes, Vert.x)
- Wiskunde 2
Summer job
Developed a Java component for automated installation of resource packets using custom manifests.
Company: Amaron - 8755 Ruiselede
Technologies: Java, Kotlin, XML
Courses INDI bachelor
- Gebruikersinterfaces (Angular)
- Gegevensstructuren
- Programmeren in C en C++
- Relationele gegevensbanken (PostgreSQL)
- Softwareontwikkeling (C#)
- Wiskunde 1
Network simulator
A network simulator inspired by GNS3.
Features a custom graph-based query protocol, implemented using a PEG grammar. Starting with a reference or collection, all server-side objects can be queried by calling methods. Methods returning other GraphNodes can be chained using object-oriented dot call syntax. Query handlers are implemented at compile-time using D's metaprogramming.
Nodes are based on templates, and can be:
- QEMU virtual machines. Raw L2 frames are sent over an UDP socket.
-
Docker containers.
The
setnsfunction is used to enter the container network namespace and create and open a tap device. - Built-in devices. Currently hubs and “switches”.
Source code: github.com/jnms-me/netsim-prototype
Status: Prototype
Technologies: D, PEG grammars, QEMU, Docker internals, Linux low-level networking
Started academic bachelor programme “Engineering Technology (Information Engineering Technology)”
Univesity: UGent
Remaining courses: Signalen en systemen, Statistiek en wiskundige dataverwerking.
Summer job
Set up the monitoring of customer installations.
Incoming data was already being stored in an Elasticsearch instance. My task was to build an alerting system and accompanying Grafana dashboards to drill down on issues (python + grafana-lib).
Company: amaron.be - 8755 Ruiselede
Technologies: Elastic stack, Grafana, Python, json-via-email, Mirth Connect
Graduated from professional bachelor programme “Elektronica-ICT”
College: Vives Brugge
Courses Elektronica-ICT
- Bachelorproef ICT
- Besturingssysteem Windows 2 (AD, PowerShell)
- CCNA 4: Connecting networks
- Digitaal systeemontwerp HDL (FPGA, VHDL)
- Digitale signaalverwerking (DSP, Matlab)
- IoT applications (React, BLE)
- IoT devices (C++, Mbed, RTOS concurrency)
- Keuzevak: Artificial intelligence
- Mobile apps (React Native)
- Stage ICT
D community sites status
Hosted at d-status.jnms.be
Source code github.com/jnms-me/d-status
Status: Released
Technologies: Take a guess
Bachelor's dissertation: “Implementatie van een NIDS binnen een ISP omgeving”
Company: Fluvius, 8820 Torhout
Thesis: github.com/jnms-me/so-poc-thesis
Source code: github.com/jnms-me/so-poc
Technologies: Security Onion, Logstash/Elasticsearch/Kibana, TheHive, ntopng, React/JS
Summer job
Order picking
Company: Febelco, 8000 Brugge (again)
Courses Elektronica−ICT
- Besturingssysteem Linux
- Besturingssysteem Windows 1 (AD, PowerShell)
- CCNA 2: Routing and switching essentials
- CCNA 3: Scaling networks
- International Mobility 2 (Berlin)
- Kwaliteits- en veiligheidszorg
- Microcontrollers
- Objectgeoriënteerd programmeren 3 (C++)
- Projectwerk 2 (Unity, LoraWAN)
- Signaalprocessing (DSP, Matlab)
- Software engineering (Ruby)
- Systeembeheer
- Telecommunicatie 1
- Toegepaste ethiek - RZL
- Webapplicaties (PHP)
E-ink weather display
Source code: github.com/jnms-me/eink
Status: Released
Technologies: D, REST
Summer job
Order picking at Febelco, 8000 Brugge
Courses Elektronica−ICT
- CCNA 1: Introduction to networks
- Communicatietechnologie
- Databases (MySQL/MariaDB)
- Digitale technieken
- Elektriciteit 1
- Elektronica 1
- Elektronica 2
- International mobility 1 (Eindhoven)
- Objectgeoriënteerd programmeren 1 (Java)
- Objectgeoriënteerd programmeren 2 (JavaFX)
- Projectwerk 1
- Toegepaste wiskunde 1
- Toegepaste wiskunde 2
- Webtechnologie
Started professional bachelor programme “Elektronica-ICT”
College: Vives Brugge
Graduated high school with programme “Techniek wetenschappen”
School: Immaculata−instituut 8200 Sint−Michiels, Brugge