martyw.dev

Hi, I'm Marty.

Things I make, learn, and think about. I write about software, hardware, AI, gaming, the homestead, and whatever else I'm tinkering with.

Recent posts

All posts →
A single unbroken glowing orange line running diagonally across a dark, textured charcoal surface.

Stable URLs without a redirect table

A short random prefix plus a throwaway slug gives you URLs that survive title changes — no UUID ugliness, no slug-history table. Plus why the collision-retry loop matters more than the keyspace suggests.

A black stylus drawing a flowing orange flourish across a dark surface marked with faint circuit-board patterns.

How this blog gets written

How posts and notes here actually get made — AI-assisted, with a structured pass that flags speculation rather than laundering it as fact.

An exploded view of stacked translucent circuit boards, the top layer glowing orange with intricate traces.

My 2026 Tech Stack

Two years on from the 2024 list. The shipping-code part has changed completely; most of the rest looks the same — and where it doesn't, the reasons are worth knowing.

A glowing line-art house and a key balanced at opposite ends of a horizontal beam, on a dark circuit-board background.

The rent-vs-buy spreadsheet I finally closed

For a couple of years I was sure that renting and tipping the difference into index funds beat buying. Then I bought a smaller, older house on a worse street — and worked out what the spreadsheet had been missing about leverage and tax.

A single orange filament travels left-to-right across a dark backdrop, then fractures at a point into hundreds of fine divergent threads.

Promise.all isn't batching

When parallelising N small queries looks like a fix and is really just self-DoS at a slightly higher concurrency level.

Recent notes

All notes →

Spent the week deciding on a physics engine for the game engine and landed on Rapier. It’s written in Rust and ships to the browser as WASM, which sounds like overkill for a 2D hobby engine until you watch the alternatives fall over.

PhysicsJS was the first I crossed off — last meaningful release was years ago, and I’m not building on something nobody’s touched since the previous decade. Matter.js was the real contender: pure JS, easy to drop in, lovely docs, and a big enough community that every problem I’d hit has already been answered. But the maintenance has gone quiet, and once I started pushing body counts the frame budget got tight in a way I couldn’t profile my way out of.

Rapier wins on the two things I actually care about. It’s fast — the WASM core doesn’t blink at the body counts that made Matter.js sweat — and it’s deterministic across platforms, which matters the moment you think about networking or replays. The cost is a heavier, less JS-native API and a WASM blob to load. Worth it. I’d rather pay that upfront than fight the physics layer every time the simulation needs to grow.

The comments on here are down right now. They run on Cusdis — open-source, on their free hosted tier, and the most lightweight option I could find. I’ve used a few commenting systems over the years — FastComments, Disqus, that lot — and Cusdis was the leanest by a distance: no tracker payload, no account wall, just a textbox. The catch with lightweight-and-free is that when the hosted instance falls over, my comments fall over with it, and there’s nothing to do but wait.

Which is fine. Comments were never the point of this place, and only a handful of posts ever get any. But it’s a tidy illustration of what you sign up for when you lean on someone else’s free service: you’ve outsourced a feature and its uptime. I could write my own in an afternoon — it’s a form, a table, and a bit of moderation — but then the uptime would be mine too, and that’s the part nobody misses until it’s theirs.