Welcome to my home page
This is the place where I publish articles about my findings and progress in the awesome world of technology and beyond! Also, check out my projects or get in touch.
My latest articles //
Detecting Docker image version tag updates easily
This article explains how to use my open-source Docker Tag Monitor website to determine how frequently the maintainers of a Docker image rebuild specific image version tags. It also explains why the image rebuild frequency matters when choosing the best (base) image. Introduction Before I discuss the solution, the Docker Tag Monitor tool, let’s first understand the underlying problems. Background:…
Next-Gen calendar sync for Outlook and Google
Having multiple calendars that are not synchronized often causes scheduling issues. To solve this problem, I built a completely new Next-Gen Microsoft Power Automate flow that synchronizes Outlook with Outlook, Outlook with Google, or Google with Google calendars. The flow is free and open-source. Here I explain how it works and how to set it up. Introduction If you have…
Go vs Python performance benchmark of a REST backend
This article benchmarks the performance of two different Python frameworks (Django, FastAPI) and a Go framework (Pocketbase), when making GET requests that serialize 20 simple JSON objects from a relational database (SQLite, PostgreSQL). The results show that Go/Pocketbase is only about twice as fast as Python/FastAPI, which is surprising, given that Go is generally considered to be much faster than…
Docker optimization guide: the 12 best tips to optimize Docker image security
This article introduces 12 tips to optimize your Docker image security. For each tip, it explains the underlying attack vector, and one or more mitigation approaches. Tips include avoiding leaking of build secrets, running as non-root user, or how to make sure to use the most recent dependencies and updates. Originally posted on 2022-02-20, updated on 2024-06-12. Introduction When you…
Docker optimization guide: 8 tricks to optimize your Docker image size
This article introduces several tricks that you can apply at build-time, to reduce the size of your Docker images, including the use of a small base image, multi-stage builds, consolidation of RUN statements, avoiding separate chown/chmod commands, or using the slim toolkit. Originally posted on 2022-02-06, updated on 2024-06-11. Introduction Docker has become a commodity to package and distribute (backend)…
Docker optimization guide: optimize build speed in CI pipelines
This article offers several tips for tweaking the build speed of Docker images in CI pipelines. I explain multiple caching-tricks offered by BuildKit, Docker’s integrated image build engine. I also elaborate on how the .dockerignore file and extra arguments to package managers such as apt can speed up your image builds. Originally posted on 2022-01-23, updated on 2024-06-10. Introduction As…
Docker optimization guide: the 5 best tips to optimize Docker development speed
This article presents 5 tips that improve the speed of building Docker images locally. It focuses on two problems: iterating on your unfinished Dockerfile (where you still figure out configuration options and which packages to install), and iterating on your code (assuming a finished Dockerfile). I discuss tricks such as using BuildKit’s caching features, the .dockerignore file, or tweaking the…
Fixing the past – 17 common Git problems with solutions
This article presents 17 common Git problems that can happen when working in Git, with recipes for how to recover from them. It is very common to accidentally make mistakes when working with Git. Maybe you created commits in the wrong branch, or your commit history has become a mess. Fortunately, almost everything can be fixed afterwards. Almost all these…
The ultimate Git guide for developers
This Git guide is for software developers who already know the most basic Git commands. After reading it, you can confidently clean the past commit history with an interactive rebase, revert commits, reset branches, merge branches, force push, or recover orphaned commits. This guide only contains the most necessary bits, to avoid mental overload. Introduction Almost every software developer today…
Benchmark series part 3: Automated hardware benchmarks in Kubernetes
I present my own hardware benchmark automation framework that creates a Kubernetes cluster with different VM types of your choice, schedules a containerized benchmark container on each node, and collects+processes the result. The framework is open source and available on GitHub. I also provide hints for how to visualize the results. Introduction A hardware benchmark answers the question: “Given a…