Writing
Essays, devlogs, and how-tos — the occasional rabbit hole.
Soul System 2.0: a conscience and a notebook for your AI coding sessions
Soul System 2.0 is out — one plain page of rules your AI coding agent reads, four commands with teeth, and a book for humans. The shape left standing after a measurement program tried to kill the rest of it.
On Creativity, Value, and Machines
A position paper. "Can AI be creative?" is malformed — creativity is novelty × value, and AI has made novelty abundant while leaving value scarce. Three "value oracles" make machine creativity sharply domain-dependent.
One plugin, three repos
How RealisticSensors split into a UE5 capture plugin, a Python analysis toolkit (Forge), and a browser viewer (rsviewer) — the dates, the reasons, and what the capture and provider contracts between them buy.
Is my AI memory system obsolete? I sent 104 agents to find out
Six weeks after Soul System 2.0 shipped, I audited it against everything the ecosystem now does for free — built-in AI memory, Obsidian vaults, memory servers. The plumbing is commodity now. The conscience still isn't. And giving the record a graph found two typos in my own files within minutes.
I built the best opponent I could for my AI philosophy. We tied.
I ran the lean system against the best generic CLAUDE.md a careful session can write — real multi-session builds, scoring locked before anything ran. Every quality measure tied. The interesting part is why, and the two things that didn't.
I gave an AI a philosophy, then tried to prove it was useless
I ablated my own AI doctrine layer under equal compute — every apparent win re-run against length-matched filler. Most of it was theatre. What survived is memory of the things the model can't guess.
DSTF: regression testing for behavior that moves
A backend-agnostic harness for regression-testing time-dependent system behavior — five simulators, six tolerance-based comparison modes, and an interactive report that doubles as the authoring surface for acceptance criteria.
Roster Rotation: fair playing time for youth sports, offline and on your phone
A vanilla-JS PWA that generates balanced youth-sports lineups — equal playing time first, with a pure rotation engine, live sideline editing, and an Android wrap from the same source.
Ideas Are Cheap Now
We spent seventy years asking whether machines can be creative. We were arguing about the wrong word.
The same physics on Modelica + Dymola: reaching the full PWR assembly
The third episode of soul-test-netflow — Modelica 4.1 running in Dymola, the mature commercial simulator. The 17×17 PWR fuel assembly that Julia could only extrapolate, completed in 397 seconds end-to-end.
Three walls, one paradigm: the bottlenecks are ecosystem gaps, not the math
The capstone of soul-test-netflow — same nuclear-reactor pin physics, three different software stacks. Each one hit a wall at a different scale. The claim worth staking is that the walls are ecosystem-shaped, not paradigm-shaped.
netflow: hand-rolling a conservation-network solver in Python
The first of three episodes in soul-test-netflow — a domain-agnostic "conservation on a network" solver in pure Python, with nuclear thermal-hydraulics as its first plugin.
Rebuilding netflow on ModelingToolkit: 14× less code, then a compile wall
The Julia / MTK episode of soul-test-netflow — same physics as the Python netflow, on a high-level symbolic modeling library. Matched node-by-node to 25 mK with 14× less code, and stopped short of a full reactor-assembly model when the compile step became the bottleneck.
UE5: Python API
Reusable Python snippets for scripting the Unreal Engine 5 editor — listing assets, creating data assets, and importing files.
Getting Started: Unreal Engine & HoloLens 2
A step-by-step setup guide for building HoloLens 2 augmented-reality projects in Unreal Engine 4.27+.