
nanocode: a 250-line Claude-style coding agent
Inside nanocode, a Claude-style coding agent in ~250 lines. A few tools (read, write, grep, bash) plus an LLM produce surprisingly capable behavior.
RealFlight Bridge: high-fidelity testing for drone flight controllers
Introducing RealFlight Bridge, a Rust library for testing flight control algorithms in the RealFlight simulator. Learn how it enables safe validation of autopilot code before deploying to real hardware.

Behavior trees: simplifying autonomous decision-making
Explore behavior trees, a modular and reactive alternative to finite state machines. Learn how they simplify control logic in autonomous systems like drones.

Affordable flight controllers for Rust development
I explore cost-effective flight controller options for embedded Rust projects. I evaluate four main contenders: Teensy 4.0, SpeedyBee F405, Matek Wing H743 V3, and Holybro Kakute H743.

Implementing a PID controller in Rust
PID controller for drone attitude stabilization in Rust: the equation, the code, the tests, and the unit-mismatch bug that sent my drone haywire.

Flight controller: why Rust?
Why Rust is my pick for a custom drone flight controller: memory safety to prevent mid-flight crashes, the cargo ecosystem, and C-level performance.

Titan Viper first flight: ArduPilot setup for a tiltrotor VTOL
ArduPilot setup for a tiltrotor VTOL: the motor-ordering mistake (numeric vs alphabetic) that flipped my Titan Viper’s first flight, and how to test for it.

Building a Titan Viper: my first 3D-printed VTOL drone
Printing and assembling the Titan Viper, a tilt-tricopter VTOL drone. Parts, build notes, and why I moved from LW-PLA to regular PLA after the first print.

Live streaming video from a drone with Raspberry Pi and GStreamer
Stream live video from a custom drone to QGroundControl using a Raspberry Pi, GStreamer, and a systemd service that auto-starts the pipeline at boot.
Java automatic resource management
You might have seen this example from The Java Tutorials. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class CopyBytes { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("xanadu.txt"); out = new FileOutputStream("outagain.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } Unfortunately, this code has a bug. If an exception is thrown while closing the input stream on line #17, the output stream will not be closed on line #20. ...