<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Marginalia — ponderance</title><description>Notes from the margins — math, physics, ML, security, homelab, and making things.</description><link>https://ponderance.dev/</link><item><title>The filesystem was the bug</title><link>https://ponderance.dev/marginalia/the-filesystem-was-the-bug/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/the-filesystem-was-the-bug/</guid><description>A null byte in my .env finally made me look at the filesystem under the whole stack: exFAT, fine for six terabytes of write-once movies and quietly hostile to a directory of small databases rewritten every few seconds. Moving just that hot little part off it, without touching the media on the same disk, came down to two traps, a volume rename hiding inside the folder name and Docker&apos;s habit of inventing an empty config directory when you point it at the wrong path.</description><pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate></item><item><title>The socket is root</title><link>https://ponderance.dev/marginalia/the-socket-is-root/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/the-socket-is-root/</guid><description>I wanted a button in my phone app that restarts a wedged container, and the obvious way to build it, handing the app the Docker socket, quietly hands a public-facing web app root on the host. The version I trust instead is built out of refusals: a proxy that forwards only the verbs I name, a write key that never travels with the read key, and a short list of containers the control plane is forbidden from ever touching, starting with its own plumbing.</description><pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Stale, not blank</title><link>https://ponderance.dev/marginalia/stale-not-blank/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/stale-not-blank/</guid><description>My homelab dashboard has one rule that outranks every metric on it: when a source goes down, the card goes stale, not blank. A monitor that wipes itself the moment something breaks is worse than no monitor, because it fails exactly when you need it.</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate></item><item><title>(b,c), chirality, and why the blueprint is the name</title><link>https://ponderance.dev/marginalia/bc-chirality-coxeter-notation/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/bc-chirality-coxeter-notation/</guid><description>The two numbers that pin down a geodesic ball&apos;s size, twist, and handedness, and the moment the blueprint turns out to be the name.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Teaching Home Assistant to watch my 3D printer</title><link>https://ponderance.dev/marginalia/home-assistant-watching-my-3d-printer/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/home-assistant-watching-my-3d-printer/</guid><description>I wanted the house to tell me when a print finished. One line of automation. Getting to that one line was a tour of every place a &apos;simple&apos; integration hides a sharp edge, starting with the discovery that &apos;printing&apos; is spelled running.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>The largest ball I can fold from 1856 sheets</title><link>https://ponderance.dev/marginalia/largest-ball-from-1856-sheets/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/largest-ball-from-1856-sheets/</guid><description>A counting problem that looks like calculus, turns out to be number theory, and quietly charges you quadratically for roundness.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Loeschian numbers and the Eisenstein integers</title><link>https://ponderance.dev/marginalia/loeschian-numbers-eisenstein-integers/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/loeschian-numbers-eisenstein-integers/</guid><description>Why &apos;rounds nicely&apos; secretly depends on the prime factorization of T, a tour down to the Eisenstein integers.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Why a 90-unit Sonobe ball is a pentakis dodecahedron</title><link>https://ponderance.dev/marginalia/ninety-unit-sonobe-pentakis-dodecahedron/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/ninety-unit-sonobe-pentakis-dodecahedron/</guid><description>Each paper unit is one edge of a hidden polyhedron, so the unit count alone tells you the whole shape.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>N = 30T, and why a 180-unit ball won&apos;t round</title><link>https://ponderance.dev/marginalia/thirty-t-why-180-wont-round/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/thirty-t-why-180-wont-round/</guid><description>A short derivation of which unit counts exist, and why 180 folds fine but comes out lumpy.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>What a geodesic actually is</title><link>https://ponderance.dev/marginalia/what-a-geodesic-actually-is/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/what-a-geodesic-actually-is/</guid><description>Buckminster Fuller, virologists, and origami folders are all building the same object, and here&apos;s the great-circle idea that connects them.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>One domain, two systems that trust each other zero</title><link>https://ponderance.dev/marginalia/one-domain-two-systems/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/one-domain-two-systems/</guid><description>My portfolio and my homelab share a single domain and trust each other exactly zero. Keeping that boundary honest, with separate pipelines, no shared credentials, and a hard look at the permissions you can&apos;t actually scope down, is the least flashy work in this series and the part I&apos;d defend hardest.</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>A Durable Object per island</title><link>https://ponderance.dev/marginalia/durable-object-per-island/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/durable-object-per-island/</guid><description>Each island in my little co-op game is its own tiny computer that falls asleep when nobody&apos;s around and wakes up still remembering who was in the room. That sentence is doing a lot of work, and most of it is the word &apos;each&apos;.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate></item><item><title>MQTT is the nervous system my house runs on</title><link>https://ponderance.dev/marginalia/mqtt-nervous-system/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/mqtt-nervous-system/</guid><description>Every smart thing in my house that isn&apos;t a screen talks to exactly one other thing, a message bus. None of them know about each other. They know about the bus, and that&apos;s the whole reason the system can keep growing without turning into a tangle.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Quarantine, don&apos;t trust :latest</title><link>https://ponderance.dev/marginalia/quarantine-dont-trust-latest/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/quarantine-dont-trust-latest/</guid><description>Auto-pulling :latest quietly hands an unattended supply chain the decision of what runs on your box tonight. I pulled that out and put a scan in its place: pull the candidate, scan it twice, and only promote it if it isn&apos;t a known-bad.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate></item><item><title>How a subtitle format chose my whole media pipeline</title><link>https://ponderance.dev/marginalia/subtitle-format-chose-my-pipeline/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/subtitle-format-chose-my-pipeline/</guid><description>A 4K stutter traced all the way back to image-based subtitles being burned into video in real time. Killing that one thing rippled backward through six services, and ended up rewriting what the box is even allowed to download.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>The auth I deliberately didn&apos;t add</title><link>https://ponderance.dev/marginalia/the-auth-i-didnt-add/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/the-auth-i-didnt-add/</guid><description>The reflex advice for any exposed service is &apos;put SSO in front of it.&apos; Twice I started to, and stopped, because the gate would have broken the thing without making it any safer. More auth doesn&apos;t automatically mean more secure, and learning that took unlearning the reflex.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Semantic search over my own photos</title><link>https://ponderance.dev/marginalia/semantic-search-over-my-photos/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/semantic-search-over-my-photos/</guid><description>I can search my self-hosted photo library for &apos;red bicycle in the snow&apos; and it finds the shot, with no caption and no tag. It works because the photo and the words end up in the same space, and the database just measures a distance.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Adversarial evals: what the benchmark doesn&apos;t measure is what the attacker exploits</title><link>https://ponderance.dev/marginalia/adversarial-evals/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/adversarial-evals/</guid><description>A short argument for why capability benchmarks and adversarial red-teaming are measuring different things, and what to do about it.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>A survival game with no HUD</title><link>https://ponderance.dev/marginalia/a-game-with-no-hud/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/a-game-with-no-hud/</guid><description>I&apos;m building a co-op game about cats surviving a city, and the design rule I&apos;m most attached to is that there&apos;s no HUD. If a cat is starving, you find out the way you&apos;d find out about a real cat: it tells you with its body.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate></item><item><title>Knowing what&apos;s playing vs. knowing what the music is doing</title><link>https://ponderance.dev/marginalia/syncing-visuals-to-a-song/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/syncing-visuals-to-a-song/</guid><description>I wanted a visualizer that moved with the song, with bars that land when the song lands. Getting the computer to know what was playing was easy. Getting it to know what the music was doing is the part still open in the repo.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate></item><item><title>A reboot is the one thing I can&apos;t automate</title><link>https://ponderance.dev/marginalia/reboot-i-cant-automate/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/reboot-i-cant-automate/</guid><description>Almost everything on this box self-heals. The reboot stays half-manual, not because it&apos;s hard to script, but because a reboot destroys the one thing that could tell me it worked.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Lagrangian mechanics is just saying δS = 0 and seeing what falls out</title><link>https://ponderance.dev/marginalia/lagrangian-mechanics/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/lagrangian-mechanics/</guid><description>The action principle in one line, then the derivation that shows why Euler-Lagrange is the only equation you need.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>The reverse proxy that ignored my edits</title><link>https://ponderance.dev/marginalia/reverse-proxy-ignored-my-edits/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/reverse-proxy-ignored-my-edits/</guid><description>I changed the config, reloaded, and nothing happened. The file on disk was right. The reload said success. The proxy kept serving the old routes. Three facts that can&apos;t all be true, except they were, and the culprit was an inode.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Your firewall isn&apos;t protecting your containers</title><link>https://ponderance.dev/marginalia/firewall-not-protecting-containers/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/firewall-not-protecting-containers/</guid><description>I had ufw on, default-deny, the whole posture. Docker published a port straight past it, because the two of them are fighting over iptables and Docker writes its rules first. The firewall I trusted was guarding a door the traffic never used.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate></item><item><title>The torrent client with no IP of its own</title><link>https://ponderance.dev/marginalia/torrent-client-with-no-ip/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/torrent-client-with-no-ip/</guid><description>Putting the torrent client inside the VPN container&apos;s network namespace gives you a kill-switch you can&apos;t forget to turn on, and it breaks port mapping in a way that finally taught me what a container&apos;s network identity actually is.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>If gravity switched off for ten seconds</title><link>https://ponderance.dev/marginalia/if-gravity-switched-off-for-ten-seconds/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/if-gravity-switched-off-for-ten-seconds/</guid><description>The solar system would shrug. The ground would not.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Solar panels under another star</title><link>https://ponderance.dev/marginalia/solar-panels-under-another-star/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/solar-panels-under-another-star/</guid><description>A solar panel works around any star, but the &apos;right&apos; panel is a different material for each one.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Why jaggies happen</title><link>https://ponderance.dev/marginalia/why-jaggies-happen-aliasing/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/why-jaggies-happen-aliasing/</guid><description>Jaggies, the backwards-spinning wagon wheel, and shimmering textures are all the same bug: undersampling.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>I wrote a debugger for Brainfuck, and the protocol was the point</title><link>https://ponderance.dev/marginalia/a-debugger-for-brainfuck/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/a-debugger-for-brainfuck/</guid><description>The same Brainfuck project has breakpoints, stepping, a live view of the memory tape, plus red squiggles and formatting as you type. I wrote none of it for a specific editor. I wrote it once, behind two protocols, and the editors showed up for free.</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate></item><item><title>I gave Brainfuck a JIT</title><link>https://ponderance.dev/marginalia/i-gave-brainfuck-a-jit/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/i-gave-brainfuck-a-jit/</guid><description>Brainfuck is a deliberately useless language: eight characters, openly hostile to humans. I wrote it a profiling JIT compiler. I want to explain why that isn&apos;t as stupid as it sounds, though I&apos;ll admit it&apos;s a little stupid.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate></item><item><title>A fly brain on a laptop</title><link>https://ponderance.dev/marginalia/a-fly-brain-on-a-laptop/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/a-fly-brain-on-a-laptop/</guid><description>A complete fruit-fly connectome now runs on a laptop and predicts real behavior, and hints at a non-LLM path to AI.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Parameter count is a bad proxy</title><link>https://ponderance.dev/marginalia/parameter-count-is-a-bad-proxy/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/parameter-count-is-a-bad-proxy/</guid><description>Bigger isn&apos;t better in any simple way: architecture and inference-time compute have made raw parameter count a weak signal.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate></item><item><title>What &apos;repair this mesh&apos; actually means</title><link>https://ponderance.dev/marginalia/what-repair-this-mesh-means/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/what-repair-this-mesh-means/</guid><description>&apos;Repair this STL&apos; sounds like one button. It&apos;s about seven different problems in a trenchcoat, and a 3D printer will faceplant on any one of them. Building the repair tool meant naming all seven.</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Reading my handwriting off a calendar</title><link>https://ponderance.dev/marginalia/reading-handwriting-off-a-calendar/</link><guid isPermaLink="true">https://ponderance.dev/marginalia/reading-handwriting-off-a-calendar/</guid><description>An app that reads handwriting off a photo of a paper calendar and drops the events into my phone. The handwriting was the easy part. The hard part was figuring out which day each scribble belonged to.</description><pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate></item></channel></rss>