Procedural settlement with OSM buildings, roads, and entities in a headless Unity simulation

Procedural Settlement: Generating 3D Buildings, Roads, and Entities from OpenStreetMap in Unity

How I replaced a proprietary terrain bundle with a fully procedural environment generated from open-source data — hundreds of buildings with window textures from OpenStreetMap, terrain-hugging roads, satellite-driven vegetation, and multiple ground and air entities — all built at runtime in a headless Unity Docker simulation.

April 13, 2026 · 10 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
Scripted Hardware Testing for PX4

Scripted Hardware Testing for PX4 — MAVLink Shell, Docker, and pymavlink

How to script PX4 hardware verification using pymavlink’s SERIAL_CONTROL protocol over a USB connection — download CI firmware, flash from the command line, and run NSH commands programmatically. No QGroundControl required.

April 7, 2026 · 7 min · Pavel Guzenfeld
Satellite imagery comparison: 15m vs 0.13m resolution in headless Unity simulation

The Satellite Tile Hunt: From 15m Blobs to 13cm Resolution in an Air-Gapped Simulation

A practical guide to finding, downloading, and fusing satellite imagery and elevation data for an air-gapped Unity simulation. Covers every free tile provider (ESRI, Bing, Google), every free DTM source (SRTM, Copernicus, Mapzen), how to stitch thousands of tiles into Unity-ready textures, and the dead ends along the way.

April 5, 2026 · 13 min · Pavel Guzenfeld
FPS optimization pipeline for headless Unity simulation

From 21 to 25 FPS: Profiling and Optimizing a Headless Unity Simulation Pipeline

A detailed technical walkthrough of profiling and optimizing a headless Unity simulation from 21 to 25 FPS — covering NVENC GPU encoding, batch camera rendering, GPU instancing, static batching, and the failed URP migration. Every measurement, every dead end, every lesson.

April 4, 2026 · 8 min · Pavel Guzenfeld
Satellite terrain and natural sky in headless Unity simulation

Natural Skies and Satellite Terrain in a Headless Unity Simulation

How I replaced flat brown terrain and solid-color sky in a headless Unity 6 Docker simulation with real satellite imagery, SRTM topography, and a custom panoramic skybox — all fully air-gapped, no runtime network dependency. Includes NVENC GPU encoding, custom shaders, and every dead end along the way.

April 4, 2026 · 12 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
From Magenta to Desert: Fixing Unity Terrain in Docker

From Magenta to Desert: Fixing Cross-Platform Unity Terrain Rendering in Docker

A detailed account of fixing terrain rendering in a headless Unity 6 Docker simulation — from magenta buildings and gray streaming cameras to textured villages with working RTSP feeds. Covers cross-platform asset bundle shader mismatches, runtime material conversion, texture recovery from broken materials, and every dead end along the way.

March 27, 2026 · 12 min · Pavel Guzenfeld
Why You Should Use stableNorm() Instead of norm()

Why You Should Use stableNorm() Instead of norm(): A Lesson from Eigen Code Review

A one-word review comment on my Eigen MR revealed that hand-rolling normalization with .norm() silently breaks on extreme inputs. Eigen already had the fix — I just wasn’t using it.

March 27, 2026 · 5 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