Claude Code features from an NDC Oslo 2026 talk, checked against seven months of my own usage

Claude Code Features I Had Not Tried: What Stuck, What Did Not

A talk at NDC Oslo 2026 walks through about 40 Claude Code features most people never use. I checked them against seven months of my own prompt history, ran the testable ones headless, and tried some interactive ones by hand. Ctrl+G and rewind stuck, /focus did not, and a permissions.deny rule on .env let a shell glob read the file anyway.

October 31, 2026 · 6 min · Pavel Guzenfeld
unique_ptr with an empty lambda deleter stays 8 bytes; a function-pointer deleter doubles it to 16

A unique_ptr With a Custom Deleter That Costs Zero Bytes

Wrapping a C handle in unique_ptr with a function-pointer deleter doubles the pointer to 16 bytes. Putting the function into the deleter type instead, with an alias template over decltype of a static lambda, brings it back to 8. Sizes checked on GCC 14.2, GCC 16.2, Clang 22.1 and MSVC 19.44, with live Godbolt sessions.

October 20, 2026 · 4 min · Pavel Guzenfeld
Running AddressSanitizer on a dlopened GStreamer plugin with LD_PRELOAD of libasan

ASan on a GStreamer Plugin When the Host Binary Has No ASan

You built your GStreamer plugin with -fsanitize=address and gst-launch-1.0 says the element doesn’t exist. The runtime has to be in the process before anything else. One LD_PRELOAD fixes it, and one repeated -D flag quietly turns ASan off in colcon builds.

October 20, 2026 · 6 min · Pavel Guzenfeld
Building a {}{}{} format string at compile time with a loop, ranges, and an index_sequence fold

Building a "{}{}{}" Format String at Compile Time, Three Ways

A variadic concat(args…) that builds its own “{}{}{}” pattern at compile time, written three ways: a plain loop, a ranges pipeline, and an index_sequence with a comma fold. fmt 12 and std::format both still check the generated pattern at compile time, but only if it is static constexpr. Verified on GCC 14.2, GCC 16.2, Clang 22.1 and MSVC 19.44.

October 20, 2026 · 5 min · Pavel Guzenfeld
Converting a GStreamer buffer PTS plus base_time into a std::chrono::steady_clock time point

From GStreamer PTS to std::chrono::steady_clock

A buffer’s PTS is running time, not wall time. Add the pipeline’s base time and you get the clock time the frame was captured at. With the monotonic system clock that is a std::chrono::steady_clock time point you can compare to IMU or telemetry timestamps directly.

October 20, 2026 · 7 min · Pavel Guzenfeld
Measuring GStreamer latency to an intermediate checkpoint with the latency tracer and a decoupled tee tap

GStreamer Latency to a Midpoint, Not Just the Sink

The latency tracer measures source to sink. To measure source to some point in the middle, hang a fakesink off a tee. Without queues on both branches the slow branch leaks into your number, or hangs the pipeline. Measured on GStreamer 1.24 in Docker.

October 20, 2026 · 7 min · Pavel Guzenfeld
Mounting a Google Drive folder on Linux with rclone mount and a systemd user service

Mounting a Google Drive Folder on Linux with rclone and a systemd User Service

A Google Drive folder that shows up as a normal directory every time I log in, using rclone mount, FUSE and a systemd user service. No root, no fstab, and a unit file that passes systemd-analyze verify.

October 20, 2026 · 5 min · Pavel Guzenfeld
Terminal stack rebuilt from scratch: wezterm, zsh, starship prompt, fzf and zoxide

Rebuilding My Terminal From Scratch — wezterm, zsh, starship, fzf, zoxide

Two days of rebuilding my shell setup on Ubuntu — the tools, the zshrc, the gotchas (fdfind/batcat names, starship install path, losing a zshrc to a bad paste) and the drills I used to make it stick.

October 20, 2026 · 5 min · Pavel Guzenfeld
Same-host ROS 2 Jazzy latency for 1 KB to 4 MB messages: Fast DDS UDP, SHM and data-sharing vs Cyclone DDS with iceoryx

ROS 2 Shared Memory, Measured: Fast DDS SHM and Data-Sharing vs Cyclone DDS + iceoryx

I benchmarked same-host ROS 2 Jazzy pub/sub latency for 1 KB, 1 MB and 4 MB messages across six transport setups. Cyclone DDS + iceoryx with loaned messages moved 4 MB at an 83 µs median. Getting there took two settings nobody turns on by default, and the Fast DDS defaults fall over above 512 KB.

October 20, 2026 · 12 min · Pavel Guzenfeld
A bump arena allocates a frame of 1000 objects about 10x faster than malloc and free

ZII and Arena Allocators in C++: Zero Is Initialization, Benchmarked

ZII designs every type so all-zero bytes is a valid default, and pairs it with arenas that free a whole group at once. RAII ties cleanup to each object. Here is how the two differ, where ZII falls short, a 20-line arena, and a nanobench run of 1000 allocations per frame: arena, std::pmr, malloc, calloc and new, with a live Godbolt session. Plus a struct-of-arrays layout, a Cortex-A78AE run, and the Jetson Orin GPU, then one CPU+GPU frame that uses all of it: 3.3x faster per frame.

October 20, 2026 · 27 min · Pavel Guzenfeld