Blog archive by Mattias Geniar
This is a list of all my blogposts. They range from highly technical to entry level, from Linux to PHP and server management.
2026-06
- Linux debugging tools I use daily
- The backup SSH daemon I run before every do-release-upgrade
- Transcribing my old podcast locally with open-source AI
- AI is a confidence booster
- Configuring Varnish on systemd in 2026: drop-in overrides, not varnish.params
- Debugging cookie stripping in Varnish: client vs backend request in 2026
- The ghost domain problem in DNS, and what we're doing about it
- Reading the Varnish log in 2026: varnishlog -q, -g grouping and the VSL query language
- Varnish in 2026: it's called Vinyl Cache now, and the mental model still holds
- Running HTTP/3 with Caddy in 2026: it just works
- QUIC and HTTP/3 in 2026: from Google experiment to IETF standard
- Lessons learned: don't mix $timeout attributes and properties on queued Laravel jobs
- Serving HTTP/2 and HTTP/3 with Nginx in 2026
- Caching get_certificate lookups in Caddy
- More time to think
2026-04
2026-01
2025-12
2022-09
2020-11
2020-09
2020-07
2020-06
- Adding SWAP to Linux
- How to measure Linux Performance Avoiding Most Typical Mistakes: CPU
- Git commit without the pre-commit hook
- Reading .EML mail files using Mutt on Mac OSX
- Want to improve? Add a delay
- How do we find users for our SaaS?
- Making life easier with cron
- A PHP package to simplify working with percentages
2020-05
- What else can you stuff in a certificate chain?
- MySQL: ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
- Create a date in the future for use in Bash scripts on BSD/Mac OSX
- Dissecting the code responsible for the Bitcoin halving
- Creating a 2-of-3 multisig with raw transactions on EOSIO
- Selecting all checkboxes on a page with the Developer Console
- Bash script to send a push notification when string is found in logs
2020-04
- How I write and curate the cron.weekly newsletter
- Build & test your Laravel project via Bitbucket Pipelines
- Deploying a highly-available K3s with K3sup
- Set up a custom 404 page for static sites with Caddy 2
- Different ways of writing crontab syntax
- Clean up Linux Server Using These Simple Tips
- Someone, somewhere, is trying to break into your app
- Looking for guest-writers on this blog!
- Creators vs Consumers
- Composer require specific version while ignoring package dependencies
- Resources to understanding Bitcoin
- How to run HTTP/3 with Caddy 2
- Migrating to Caddy 2
2020-03
2020-02
2020-01
2019-12
2019-11
- VirtualBox: Failed to open/create the internal network 'HostInterfaceNetworking-en0' (VERR_SUPDRV_COMPONENT_NOT_FOUND)
- Auto-start VirtualBox VMs (headless) after reboot on Mac OSX
- A Caddyfile config example for Laravel
- Remove index.php from the URL in Laravel
- Mac OS: xcrun: error: invalid active developer path, missing xcrun
- How to prevent content-spoofing in Apache's 404 error pages
- Specify a specific SSH private key for git pull/git clone
- Analysing webservers logs locally with goaccess
- A step-by-step guide on migrating from WordPress to Hugo
- How to use ffmpeg to combine multiple videos to one
- Disable HTTP sessions in Laravel to speed up your API
- A fresh new look for this site
- A Linux sysadmin's guide to moving to a new website