The Road to Boost.SML 1.2.0

The Road to Boost.SML 1.2.0: New API and a Type-Name Heisenbug

A warts-and-all account of cutting the Boost.SML 1.2.0 release — four new public APIs, a behavior change rooted in undefined behavior, a type-name Heisenbug that only fired on GCC and MSVC, a dead “Run” button, and the surprisingly deep rabbit hole of making 30 Compiler Explorer links that actually work.

June 1, 2026 · 14 min · Pavel Guzenfeld
Hunting an undocumented AHRS on the serial bus

Which tty Is the AHRS? Hunting an Undocumented Serial Device on a Jetson

A small AHRS was wired to a Jetson over USB, but nobody wrote down which serial port. Here’s how I tracked it down by its protocol instead of its name, fell into the classic dialout permissions trap, and decoded its orientation stream into human-readable numbers.

June 1, 2026 · 12 min · Pavel Guzenfeld
Cleaning Up, Pipelining, and Bake-Testing the STM32H750 Tracker

Cleaning Up, Pipelining, and Bake-Testing the STM32H750 Tracker

A sequel to the first STM32H750 tracker post. After the C++ port was proven in production, I spent a week of evenings cutting dead vendor code, splitting the algorithm out to host for unit tests, wiring the LCD SPI through DMA to let the CPU run the tracker in parallel with the blit, unlocking the camera’s real frame rate, chasing a subtle BB-drift bug back to a too-wide SAD search, and finally building an offline A/B harness that compares SAD, NCC, and MOSSE on four synthetic scenarios so the next tracker port is a data decision, not a vibes one.

April 23, 2026 · 17 min · Pavel Guzenfeld
Building a Template-Matching Tracker on an STM32H750

Building a Template-Matching Tracker on an STM32H750: What Worked, What Didn't

A long, honest retrospective on turning a WeAct STM32H750 board, a cheap OV7725 IR camera, and an Xbox controller into a live template-matching tracker. Every dead end, every wrong assumption, every fix — and what I’d do differently next time.

April 21, 2026 · 23 min · Pavel Guzenfeld
Six Optiver-Style C++ Problems: Order Books, Dijkstra, DP, and Price Alert Router

Six Optiver-Style C++ Problems: Order Books, Dijkstra, DP, and an AoS→SoA Rewrite

Working through six C++ problems modeled on Optiver’s Senior SWE assessment: supermarket checkout simulation, order book matching, dividend pricing, lattice path DP, Dijkstra with K free edges, and a price-alert router built twice — AoS first, then SoA. Every bug, wrong turn, and data structure tradeoff included.

April 12, 2026 · 18 min · Pavel Guzenfeld
DDS Content Filter String Parameters in ROS 2

Why DDS Content Filter Parameters Silently Fail for Strings in ROS 2

DDS content filter parameter substitution (%0, %1) silently fails for string fields in ROS 2 with Fast DDS. The root cause is three layers deep — the DDS SQL grammar requires quoted string literals, but no ROS 2 layer adds the quotes. Here’s how I traced it and where to fix it.

April 4, 2026 · 7 min · Pavel Guzenfeld
Anatomy of Four GStreamer Shared Memory Bugs

Anatomy of Four GStreamer Shared Memory Bugs

Four bugs in GStreamer’s shmsink/shmsrc elements — a race condition, a use-after-free, a wrong-pointer dereference, and a page alignment mismatch. What they have in common, how to find them, and what they teach about writing correct GStreamer elements.

March 24, 2026 · 11 min · Pavel Guzenfeld
Why GStreamer shmsink Always Exits with Code 1

Fixing a GStreamer Bug: Why shmsink Always Exits with Code 1

A 2-line fix for a race condition in GStreamer’s shmsink that causes every pipeline using shared memory to exit with an error. How I found it, proved it, and verified the fix with sanitizers.

March 24, 2026 · 4 min · Pavel Guzenfeld
PX4 Autopilot: A Practitioner's Guide

PX4 Autopilot: A Practitioner's Guide to Troubleshooting, Debugging, Building, and Testing

Everything I learned contributing 6 PRs to PX4-Autopilot in a single session — from Docker-based builds and sanitizer workflows, through uXRCE-DDS session debugging and MAVLink signing analysis, to SITL integration testing. Real bugs, real fixes, real build output.

March 22, 2026 · 14 min · Pavel Guzenfeld
PX4 SITL to Unity in Docker: A 60-Hour Odyssey

Connecting PX4 SITL to a Headless Unity Simulation in Docker: A 60-Hour Debugging Odyssey

A three-day odyssey connecting PX4 flight controller to a GPU-rendered Unity drone simulation running headless inside Docker — through licensing labyrinths, shader abysses, coordinate system riddles, native library dragons, and a TCP protocol twist ending nobody expected.

March 21, 2026 · 10 min · Pavel Guzenfeld