Posts
2024
Hue Engine: Reversing the PWM functions
Hue Engine: Dumping the PWM data
Hue Engine: Basic reconnaissance
Project intro: Reversing Philips Hue light driver
Rooting Hue Bridge with firmware 1967054020
Proper ZFS setup for peace of mind
Running postfix as send-only on Alpine Linux
Putting a piglet picture on my Alarmo
From zero to radio amateur license in Switzerland
Safely aborting long running shell scripts
Grub 2.12 broke my secureboot setup (again)
How to ditch grub for UEFI (secure)booting
Deep dive into Fibonacci computation in Ruby
Quickfixing the Jekyll SEO plugin (to ingest page description)
Easily hosting GIT repos on forgejo
Adding a layer indicator light to Svalboard
The One True Way™ to handle temporary files
Serving CA certificates on the cheap
2023
Extracting data from Goethe Zertifikat B1 Wortliste pdf
How to recover deleted files from Google Drive
A love letter to the DataHand class of keyboards
Running traefik in a less braindead way
Implementing toy RSA in Ruby, on a dare
Installing Podman on Alpine Linux
Project intro: Going Cloud Native for internal services
Running one's own root Certificate Authority in 2023
Upgrading grub on my alpine with secureboot setup
How to avoid having ssh mangle spaces in command-line args
Parallelize batch runs with style
How to split a big XCI/NSP file to store it on a FAT32
Parallelize YouTube downloads
Making SVD-Loader for Ghidra play nice with RP2040
Nerdsniped: clang++-13 infinite loop bug
IPv6 Unique Local Addresses (ULA) for the win
Three common Regular Expression gotchas
2022
Fixing IPv6 on UniFi guest wireless network
Setting Xorg screen layout by display serial numbers
Moving away from Autodesk Fusion 360... to where?
Understanding the Nintendo Switch secure boot vulnerabilities
Improving physical security at a hotel
How to run an unattended install of Alpine Linux
Tinyrenderer in Elixir (part of it, anyway)
Traveling 20+ years back in time
Generating birthday party invitations
How to install low dependency Let's Encrypt client
Upgrading SSL (TLS) on Kerio Workspace 2.1.4
Three commands to make serial console awesome
Replacing pkexec with sudo
Configuring IPv6 on EdgeRouter for Fiber7 and PiHole
Fixing memif's poor performance in a VPP tutorial
BEAMitude: What if GenServer.call times out?
Getting Erlang's observer working on Alpine Linux
2021
Rethinking number formatting
How to call renameat2 syscall in Ruby
Controlling fan speed the right way
Loadtesting EdgeRouter 4 in more depth
Making AlpineLinux load ZFS keys for all pools on startup
Reversing Yamaha SR-C20A [by Michael Obst]
Engineering a better Anagrammer, part II
Fixing grub 2.06 "error: verification requested but nobody cares"
Engineering a better Anagrammer, part I
Beating procrastination with these 4 simple (but hard) techniques
Arbitrary workflows with GitHub Actions for fun and pages
Loadtesting bunch of routers
Succeeding at a network loadtest
Failing at a network loadtest (for now)
Graphviz plugin for Jekyll
Adding capacity to an existing ext3-on-luks-on-LVM-on-raid1 setup
Making an iOS custom dialer app with Shortcuts and elm-spa
How cryptocurrencies keep going to the moon
6 burning questions for the self-proclaimed blockchain singularity (dfinity)
Putting an old digital clock (with an outdoor thermometer) on steroids
Yamaha YAS-207 vs. Shairport Sync over TOSLINK
Yamaha YAS-207's Minimal Client (and a Soundbar Fake)
Yamaha YAS-207's Bluetooth protocol reversed
Yamaha YAS-207's Bluetooth protocol: first real progress
Streaming Bluetooth Capture Data to Wireshark without Btsnoop Net Support Enabled
Yamaha YAS-207's Bluetooth protocol: basic recon
Reversing the Yamaha YAS-207 infrared remote protocol
Multi-weekend project intro: Putting the fear of AirPlay into Yamaha YAS-207 soundbar
Comparison of USB Bluetooth adapters in Linux
The evolution of (my) note taking
Urbit :: the good, the bad, and the insane
How to make a USB cable for APC Smart-UPS SC450RMI1U
Setting up secure boot with fully encrypted filesystems on Alpine Linux
Fixing IKEA Trofast lid with a simple 3d model
2020
Cracking the three.js object fitting (to camera) nut
3D printed curtain holder
Fixing an umbrella with 3D printing
Designing a curtain rod holder for 3D printing in Fusion 360
Designing a 3d-printed anti-gravity pen holder
2017
Designing a towel rack for 3D printing in Fusion 360
Designing a 3d printed vegetable peeler hook
2008
Wordpress leading whitespace fix
How to setup passwordless disk encryption in Debian Etch
A HTTP(S) healthcheck script
Why I LOVE Apache httpd hooks and pools
A simple Ruby-based HTTP request tracer
2006
GeoIP update client + server
Apache patch to optionally disable Partial Content
How to hunt for kernel memory leaks
Master's Thesis
Diplomová práce
Spec.rb, a saner alternative to Markdown
2005
Guard free space and status of your RAID devices
Eicar and Gtube are your friends
How to prevent hotlinking without mod_rewrite
My email address
Conway's Game of Life redefined
On file change run...
2000
Test page