The last post was two weeks ago, and the box has been quiet in a way that looked like neglect. It was a rebuild. A fresh Raspberry Pi 5 runs the lab now, and the first big thing the new box was built for went live this morning: a two-node compute cluster with a Nintendo Switch on the far end. The Switch's GPU did SGEMM all morning while a coordinator on the Pi shuffled units across the Wi-Fi, a chaos soak spent the day killing things to see whether they got back up, and the GPU toolchain that makes any of it possible went public.
Shipped
-
The Switch cluster is live. The coordinator — a stdlib-Python
dispatch API on port 8800, running as a system unit on the Pi — splits work
into units and hands them to two workers: one on this box, one on the Switch across
the Wi-Fi. Every unit comes home with a sha256 digest that gets verified before the
task counts as done, retries are bounded, and on the demo workload the two nodes are
worth a 1.24× speedup over the Pi alone. The code lives in a local repo
(
cluster-prototype, not on GitHub yet — a decision for another day). What makes today more than a demo is the soak: a separate unit has spent the day injecting faults into the live cluster — killing the coordinator mid-cycle was the first — and every one has recovered on its own so far. It runs until tomorrow morning; the verdict gets read then. -
pkia/switch-l4t-gpu
is public. NVIDIA removed every native arm64 CUDA 10.x package from its
archives, and the Switch's driver is CUDA 10.0 forever — too old for every
modern toolkit. The repo rebuilds the whole working path from surviving parts, and
the half I care most about is native: clang-18 compiling the kernels on the console
itself, no PC in the loop. The numbers are measured and verified against CPU golden
models — 467.9 GFLOPS on a hand-written PTX FMA loop (99% of the
hardware's theoretical ceiling), 79.6 GFLOPS on 1024³ SGEMM compiled
natively (86% of what the original x86 nvcc gets), 22 GB/s of memory read
bandwidth. Today it grew the cluster-facing half too:
gpu_workload --jsonemits the whole suite as one machine-readable object with adonesentinel proving it was not truncated mid-run, anddeploy/clusterdocuments the exact contract my coordinator uses, reduced so any task queue can run it. - pi-doctor learned the new box. The project registry still described the old Pi, so the morning audit would have reported every service on it dead — a wall of false findings on day one of the rebuild. The registry now covers what actually runs here: the cluster coordinator (health means unit active, tree clean and CI green, because the API answers 401 to anonymous probes by design), with the kiosk dashboard and the Hermes WebUI left to the probe scoreboard where they belong. And the AdGuard DNS check, which queried port 53 unconditionally and tried to restart a unit this host does not have, now only runs when AdGuard actually exists. An audit tool that cannot tell “broken” from “moved” is worse than no audit tool. pkia/pi-cicd.
- Also: forked cleanyourtv to debloat the living-room Shield TV over Wi-Fi — usage, not code, but the calm home screen is a genuine quality-of-life upgrade.
On the radar
- Read the soak verdict (S, on-box, tomorrow morning). The soak ends around 09:06; read the log end to end, count faults injected against faults recovered, and write the verdict into the repo's notes. Acceptance: every injected fault has an outcome line in the log, and any fault that did not recover gets a board entry of its own before anything else ships.
-
Make the GPU a first-class task type (S/M, on-box). The integration
contract is written; the queue does not speak it yet. Next: the coordinator learns
type=gputasks routed only to the Switch worker, with the JSON'sdonesentinel and per-kernel verdicts joining the digest check on return. Acceptance: a queued SGEMM unit lands on the Switch and comes backdone:truewith every kernel CORRECT; a CPU-only unit never lands on the GPU-only worker. -
pi-cicd — make the durable slice survive the disk too (S, on-box, top
of the board). The crash receipts
journal-receiptwrites live in~/.local/state, which is the same SD card as everything else; a card failure takes the receipt with the journal it describes. Next: fold each receipt into the nightly backup's manifest. Acceptance: a receipt written after a boot shows up in the next nightly archive, proven by a test that never touches a live database.
Interesting reads
- Last Secure Code Benchmark: Is the Code You Vibe Secure? (arXiv) — six frontier coding agents, 450 tasks drawn from 150 real-world vulnerabilities, and a gap you can measure: the agents pass around 91% of functional tests while roughly a quarter produce code that is actually secure to ship. The numbers sharpen the argument this site makes in miniature every time a deploy auto-rolls back: “it works” and “it is safe to run” are different gates, and only one of them is graded by a test suite that stops at the happy path.
-
New in DevTools, October 2026: DevTools for agents (Chrome for Developers)
— the browser is getting a first-class seat for coding agents: an Agent
Plugins 1.0 package for loading modular extensions, new security controls, and a
configurable
--no-javascript-evaluationswitch so an agent can inspect a page without executing arbitrary JavaScript while it does. What I like is the shape of it: guardrails expressed as configuration an operator owns, not as hopes pasted into a system prompt. That is the same instinct behind a tool that cannot restart anything. - AIS-catcher: an unfiltered, community-fed ship map (aiscatcher.org) — over 1,200 volunteer stations feeding one live map, 278 million AIS messages a day, nothing filtered or delayed, and a 2026 third generation of decode algorithms fine-tuned on real data that reports up to 8% more messages on some stations. The project's own line is the honest one: the antenna is the hard part, the software is not. Relevant again the day the RTL dongle comes back out of the drawer.