Raymii.org
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
Finally, run Docker containers natively in Proxmox 9.1 (OCI images)
20-11-2025 22:34 | Remy van ElstProxmox VE is a virtualization platform, like VMWare, but open source, based on Debian. It can run KVM virtual machines and Linux Containers (LXC). I've been using it for over 10 years, the first article I wrote mentioning it was in 2012. At home I have a 2 node Proxmox VE cluster consisting of 2 HP EliteDesk Mini machines, both running with 16 GB RAM and both an NVMe and SATA SSD with ZFS on root (256 GB). It's small enough (physically) and is just enough for my homelab needs specs wise. Proxmox VE 9.1 was released recently and this new version is able to run Docker containers / OCI images natively, no more hacks or VM's required to run docker. This post shows you how to run a simple container from a docker image.
Read more...Bringing a Decade Old Bicycle Navigator Back to Life with Open Source Software (and DOOM)
Published: 25-07-2025 23:37 | Last update: 02-08-2025 21:31 | Author: Remy van ElstI recently found a Navman Bike 1000 in a thrift store for EUR 10. This is a bike computer, a navigation device for cyclists, made by MiTaC, the same company that makes the Mio bike computers. This Navman Bike 1000 is a rebadged Mio Cyclo 200. It's from 2015 and as you might have guessed, no more map updates.
This article shows how I dabbled a bit in reverse engineering, figuring out the device runs Windows CE 6.0 and using Total Commander and NaVeGIS together with Open Street Map to get up to date maps from the OpenFietsMap project, allowing me to use this device for navigation with the most up to date maps. Since it is all open source, even if the current map provider would stop, I can always make my own maps.
Local incremental backups of Google Photos on Ubuntu with gphotos-sync
Published: 24-08-2020 | Last update: 31-05-2025 21:30 | Author: Remy van Elst'Google Photos' no longer syncs with 'Google Drive' or with their 'Backup and Sync' desktop software. There used to be a checkbox to get your 'Google Photos' pictures in 'Google Drive' but that has been disabled. I used that feature together with their 'Backup and Sync' tool to sync all the photos in 'Google Photos' to my local Windows computer. From there I use 'DigiKam' to manage the photos and backup them offline and offsite. Due to Google removing that feature, I had to go find another way to get the pictures out of 'Google Photos', which, after a few months of (automated) use, 'gphotos-sync' on Ubuntu seems to be the best, stable choice. In this guide I'll show you how to setup incremental backups from 'Google Photos' on Ubuntu. My 'DigiKam' database moved over without problems, and now I'm glad I don't have to use Windows for picture managemant anymore.
Read more...High Available Mosquitto MQTT on Kubernetes
14-05-2025 22:11 | Remy van ElstIn this post, we'll walk through a fully declarative, Kubernetes-native setup for running a highly available MQTT broker using Eclipse Mosquitto. This configuration leverages core Kubernetes primitives (Deployments, Services, ConfigMaps, and RBAC), alongside Traefik IngressRouteTCP to expose MQTT traffic externally. It introduces a lightweight, self-healing failover mechanism that automatically reroutes traffic to a secondary broker if the primary becomes unhealthy. The setup also demonstrates internal MQTT bridging, allowing seamless message propagation between brokers. The big advantage over a single Pod deployment (which, in case of node failure, k8s will restart after 5 minutes) is that this setup has a downtime of only 5 seconds and shared state, so all messages will be available on a failover.
Leaf Node Monitoring v2025.01 released with Import/Export and Connectivity Check
19-04-2025 19:04 | Remy van ElstI'm pleased to announce the next version of Leaf Node Monitoring, the simple and easy to use open source site and server monitoring tool. This update adds two features users have requested, plus a couple of small but useful fixes. This post goes over everything that is new in this release.
Read more...Fast MQTT logger (to syslog)
25-03-2025 21:33 | Remy van ElstFor 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.
After 47 years, OpenVMS gets a package manager (VSP)!
17-03-2025 20:33 | Remy van ElstAs 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 ElstI'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.
My First PCB: Relay AND gate
20-01-2025 03:59 | Remy van ElstThis 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 ElstYou 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.
The Adventure of the Missing Syscall: Error 38
24-10-2024 21:33 | Dr. John WatsonSherlock 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.