What I learned getting A/B OTA updates working on real hardware with RAUC and systemd-boot. Covers EFI boot entry failures, custom bootloader handlers, per-slot kernels, atomic ESP writes, and automatic rollback.
Blog
Technical articles on engineering, research, and leadership.
What I learned applying CIS Benchmark controls to an embedded Linux device. Covers kernel hardening, SSH configuration, firewall rules, AppArmor, filesystem restrictions, and CVE management — which controls were worth it and which were not.
Notes from figuring out containerized Yocto builds with KAS. Covers the YAML layering model, commit pinning, sstate-cache economics, and the failures I ran into when builds stopped working.
Debugging Yocto Build Failures: A Field Guide
A running log of Yocto build failures I hit while learning embedded Linux. Each entry: what the error looked like, what caused it, how I fixed it, and what I'd do differently next time.
Designing an Embedded USB Flasher: Initramfs, Partition Layouts, and Zero-Touch Provisioning
What I learned building a USB-to-eMMC flasher for an embedded Linux device. Covers initramfs architecture, WIC partition layouts, storage detection, sparse image writing, post-flash partition expansion, and zero-touch provisioning.
Twelve lessons from maintaining a Playwright end-to-end test suite against a live production SaaS. This article distills what a team learns over time about auth infrastructure, content-based waiting, locator discipline, page object boundaries, CI whitelisting, trace debugging, and the economics of E2E test coverage.