Skip to main content

Raymii.org Raymii.org Logo

Quis custodiet ipsos custodes?
Home | About | All pages | Cluster Status | RSS Feed

Hi there!

I'm Remy, a developer from The Netherlands with a focus on C++, C, some C#, Linux and embedded systems.

I currently work on a C++ and Qt stack running on Yocto Linux. It controls hardware, runs the UI and has a few utilities for IoT connectivity and configuration. Technologies I'm fluid in include C, C# & C++, Windows (MFC/Win32), .NET (Core, Xaml, Framework and C++/CLI), Flash, Qt, Ansible, Bash & PowerShell. I was Linux and UNIX sysadmin for over 10 years before I got into development.

To read more or get in touch, click here. This is my personal website, these articles do not reflect or are based on work, opinions or policies of any of my (previous) employers. Any resemblance to reality is pure coincidence.

Latest Items

Fast MQTT logger (to syslog)

25-03-2025 21:33 | Remy van Elst

For almost 5 years I've been using the mqtt-data-logger python script to log all MQTT communication. This script works, but is a bit limited in how it stores logs (files per time it's started) and it often can't keep up with the message rate (tens of thousands per second) of my mqtt brokers. So I've written a new tool in C++ to log all MQTT messages to syslog and optionally to the terminal. Then, via syslog, you can send it to where ever you like, be it a file or an ELK (Logstash/Elasticsearch/Kibana) stack. It even compiles without syslog support, if you only want to log to a file or the terminal. There's a docker image and a docker compose file, so you can easily deploy it wherever you have an MQTT broker running.

Read more...

After 47 years, OpenVMS gets a package manager (VSP)!

17-03-2025 20:33 | Remy van Elst

As of the 18th of February, OpenVMS, known for its stability and high-availability, 47 years old and ported to 4 different CPU architecture, has a package manager! This article shows you how to use the package manager and talks about a few of its quirks. It's an early beta version, and you do notice that when using it. A small list of things I noticed, coming from a Linux (apt/yum/dnf) background: There seems to be no automatic dependency resolution and the dependencies it does list are incomplete. No update management yet, no removal of packages and no support for your own package repository, only the VSI official one. Service startup or login script changes are not done automatically. Packages with multiple installer files fail and require manual intervention. It does correctly identify the architectures, has search support and makes it way easier to install software. The time saved by downloading, manually copying and starting installation is huge, so even this early beta is a very welcome addition to OpenVMS.

Read more...

Safely expose the Kubernetes Dashboard in Traefik k3s via a ServersTransport

11-03-2025 22:11 | Remy van Elst

I'm using the Headlamp dashboard for my high-available local kubernetes cluster because I find that to be faster, more clear and useful than the full blown Kubernetes Dashboard. In my first article I accessed the dashboard via a local port forward. This article documents how to expose the dashboard via an Ingress and some Traefik specific annotations. The dashboard helm chart sets up HTTPS internally, Traefik does not like that by default. Most of the time, all internal cluster communication is insecure (I'm not sure why, seems to be a bad idea). A few of the guides online suggest disabling HTTPS for the dashboard internally or, for the k3s specific case, disabling HTTPS validation entirely. Both of those are too broad for my use case, so I decided to figure out how to make Traefik talk to the kubernetes-dashboard-kong-proxy via https, without disabling certificate validation.

Read more...

My First PCB: Relay AND gate

20-01-2025 03:59 | Remy van Elst

This is the result of my first attempt at learning KiCad during the Christmas break. I love the sound of a relay, so trying out these relay logic gates from the Usagi video and the information here on the MERCIA relay computer on a breadboard was fun, but a bit messy. No transistors or modern components, just relays, push buttons, resistors and LED's to show output. I've always wanted to make my own PCB. These simple relay logic gates are perfect to try out KiCad and actual PCB design, having never done that before. This short post shows you my first PCB, with all the beginner mistakes included.

Read more...

My go-to C++ code for asynchronous work processing on a separate thread

17-12-2024 23:59 | Remy van Elst

You probably recognise this situation. You're working on your code and realise that the thing you're writing might take long, be blocking or is batch-wise. It might be resizing images, calling some API or processing hardware inputs or a stream of incoming messages. These tasks, if not handled efficiently, can halt your application, leaving it unresponsive. To avoid this, one solution is to offload these time-consuming operations to a separate thread, allowing the main application to continue executing without interruptions. In this article, I'll show you how you can implement asynchronous work processing in C++ using a worker thread. This example class is my go-to for this situation and is easily adapted to handle more complex use cases. It has a queue of work items and uses a std::thread, a std::mutex combined with a std::condition_variable to manage work asynchronously, processing items one by one.

Read more...

The Adventure of the Missing Syscall: Error 38

24-10-2024 21:33 | Dr. John Watson

Sherlock Holmes tackles a modern computing dilemma involving a missing system call. In this case, a frustrated developer attempts to port an embedded device running Yocto to a newer version, only to be met with Error 38 due to a missing syscall. Holmes and Watson delve into the intricacies of kernel versions, glibc, and system calls to uncover the truth behind the missing syscall_397 and provide a logical solution.

Read more...

Logging all C++ destructors, poor mans run-time tracing

21-09-2024 23:59 | Remy van Elst

I recently faced a challenging issue with an application that wasn't shutting down correctly, either segfaulting or terminating without an active exception. Running the program via valgrind to check for memory leaks wasn't possible because the program couldn’t perform its cleanup if it didn't shut down correctly. This article covers adding runtime instrumentation provided by gcc to log destructors. This helped me figure out what was still left over from the closed-source framework in use preventing correct shutdowns or causing segfaults. It includes example code, setup instructions and insights into handling shutdown issues in large, multi-threaded codebases.

Read more...

Compiling TETRIS from 1992 on OpenVMS x86 in 2024!

18-08-2024 14:33 | Remy van Elst

Since DECWindows / CDE now works on OpenVMS x86 (from 9.2-3 onwards) there is much fun stuff to do. Back in 2021 I wrote an article on the CDE desktop on Alpha / AXPbox and also an article on how to run CDE on modern linux, since it's still developed. Both articles included a game, GENERIC-TETRIS from 1992, written by Qiang Alex Zhao. After getting the (remote) desktop working I wanted to compile and run Tetris to continue this lineage, from VAX, to Alpha, to Linux/CDE, to x86 VMS. I haven't got an Itanium to run it on, but if anyone has one left willing to send this way, feel free to contact me. This article includes the precompiled tetris binary for OpenVMS x86 and instructions to compile the source. The code required some minor modifications which I'll also cover, but that's not surprising for code that hasn't changed much since 1992 to be compiled in 2024. This article also shows you how to install curl on OpenVMS.

Read more...

OpenVMS x86 E9.2-3 fixes CDE (DECWindows) and adds a Guest Console (no serial port required anymore)

14-08-2024 23:58 | Remy van Elst

I'm a big fan of OpenVMS. You can read all my OpenVMS articles here. Since the licensing changes to the Hobbyist Program, I applied and was included in to the Ambassador Program. A new update of the X86 field test is released and this includes to major changes for hobbyists. One is a new feature, the Guest Console, which makes installing easier by no longer requiring a serial port and fiddling with Putty or your telnet client and the second is a fix to the C/C++ compiler which, (probably by accident), fixes CDE and DECWindows. The Common Desktop Environment (CDE) is still under development and can be installed on Linux quite easily. This post shows the two new features, the Guest Console and CDE working.

Read more...

OpenVMS 9.2 for x86, Getting Started part 1, install guide with VirtualBox

Published: 11-04-2023 22:30 | Last update: 14-08-2024 23:57 | Author: Remy van Elst

OpenVMS on x86 is now available for hobbyists! Almost a year after the official release. This is a part 1 of my getting started guide, showing you how to install OpenVMS on VirtualBox on Windows 10/11. More parts will follow, documenting license installation, network setup, ssh, application installation etc.

Read more...

Create Kubernetes user restricted to one namespace with resource limits

29-07-2024 04:39 | Remy van Elst

This guide shows you how to use Role-based access control (RBAC) to create a user account that only has rights for one specific namespace. I'll also show you how to limit the resource usage of that Namespace. Last but not least, I'll also show you how to create a kubeconfig file for that specific user.

Read more...

View all Items