Saturday, November 14, 2026

been reading "how complex systems fail" by richard cook, 18 short points from a doctor who studied why things break in hospitals. it was written in the late 90s and it reads like a postmortem of every outage i've ever been part of.

the one that hit me: there's no such thing as a root cause. catastrophe needs several small failures lining up, each harmless on its own. "root cause" is mostly our social need to point at someone. yesterday the us grounded every flight for hours and the official answer was "old equipment." sure. and also everything else that quietly had to go wrong at the same time.

my other favorite: complex systems always run in degraded mode. everything is a little broken all the time, and it works because people keep patching it on the fly. that's not a bug report, that's my homelab's biography.

the uncomfortable takeaway is that safety isn't a part you buy. it's something people create every day, and the "fix" after an accident usually just adds more complexity for the next one.

https://how.complexsystems.fail/

how.complexsystems.fail How Complex Systems Fail ❤ 96 · 🔁 76 · 💬 8

found wurmduell and it made my day. it's a turn-based worms clone that runs right in the browser: destructible terrain, wind messing up your shots, bazooka, grenade, dynamite, shotgun and teleport. there's even an "original mode" with bazooka only, for purists and masochists.

the nerdy part i love is that it's a static site with no server, built on the at protocol. log in with your bluesky account and your ladder lives in your own pds, plus a global ranking. mit licensed, typescript, playable hotseat or against the cpu.

thinking about installing it on my instance. worst case i lose a few evenings to exploding worms, which honestly sounds like a win.

https://github.com/vidompteur/wurmduell

GitHub GitHub - vidompteur/wurmduell: Rundenbasierte Wurmschlacht im Browser – Open Source auf dem AT Protocol. Hotseat oder gegen KI. Rundenbasierte Wurmschlacht im Browser – Open Source auf dem AT Protocol. Hotseat oder gegen KI. - vidompteur/wurmduell ❤ 4

One of my postcards from Brazil already has a home in the US. The other 17 are still on my desk, waiting for an address.

I write each one by hand (ugly handwriting included) and mail them all by the last week of November. Want one? Anywhere in the world.

cards.pablomurad.com

❤ 1 · 💬 1

165 feeds on one quiet page: https://hax0r.zip

Hacker News, Lobsters and Slashdot up top, then Linux and BSD, self-hosting, security (now with Schneier and SANS ISC), the Fediverse and a lot of Lemmy communities.

No JavaScript, no trackers, no ads. There's an Atom feed too.

hax0r hax0r: News for hackers and programmers Daily links from Hacker News, Lobsters, SoylentNews, Tildes and Lemmy communities, what people are discussing next to what just came out. ❤ 4

"the unexamined life is not worth living." socrates said that at his own trial, right before they sentenced him to death. no backing down, no pr team, just a guy doubling down on asking annoying questions.

2,400 years later we have infinite feeds, zero silence and an algorithm that knows what i want before i do. examining my life now means closing 47 tabs first. still worth it.

❤ 3

gyptazy got live migration working for bhyve on freebsd 15.1. a running vm hops from one host to another over tcp and only freezes for about 140–170 ms at the very end. that's less time than i spent staring at the line "no authentication or encryption" in the limitations list.

the trick is the classic one. copy the guest's memory, then keep re-sending whatever it scribbled on since the last pass, until what's left is small enough to pause, ship and resume. if a guest dirties pages faster than you can chase them, it never converges and just falls back to a plain stop-and-copy. honestly relatable, that's exactly how i clean my apartment.

the best part is the tone. this is an rfc, not a launch party. he lists every blocker himself: prove the dirty-page tracking never loses a write, do real compatibility checks, harden the protocol, sort out the storage and network handoff, write proper tests and split everything into reviewable patches. that's how code lands upstream instead of starting a mailing list flamewar.

sylve (proxmox-style clustering for freebsd) and boxybsd (free bsd vps) both need this to be real. if you run bhyve, go break it for him.

https://gyptazy.com/blog/freebsd-bhyve-live-migration-support-rfc/

gyptazy.com FreeBSD bhyve Live Migration: Moving VMs Between Hosts Explore live VM migration for bhyve on FreeBSD 15.1. Discover pre-copy memory transfer, dirty-page tracking, migration testing and current limitations.

Friday, November 13, 2026

been reading ali chraghi's "how not to build a music player" and it's way more than a dev log. he lives in iran, and after the internet blackouts (one of them lasted more than four months) he realized streaming just isn't an option when the government can switch the country off. so he started archiving his music and writing his own offline player, AMP, in zig, shaders included, with his own ui and no c++ deps. during the blackout people were selling internet on telegram for $5+ per GB, and he used that trickle of connection to download docs and repos and keep the hobby alive.

then the twist: once the connection came back he vibecoded a big chunk of it with a claude max plan he'd been gifted. anthropic banned him for living in iran, codeberg announced its no-AI policy, and he ended up rereading and rewriting every line. four months later almost half the code is gone and the thing is more robust, with the same features and then some. "never rush your hobbies!"

a lot to think about in one short post. offline-first isn't nostalgia for everyone, sometimes it's survival. and code you didn't write is code you don't know.

https://alichraghi.github.io/blog/how-not-to-build-a-music-player/

alichraghi.github.io How Not to Build a Music Player ❤ 3 · 💬 1

Thursday, November 12, 2026

The 12 November 1990 CERN memo WorldWideWeb: Proposal for a HyperText Project, from T. Berners-Lee and R. Cailliau.

36 years ago today, 12 november 1990, tim berners-lee and robert cailliau sent this memo around cern: "worldwideweb: proposal for a hypertext project." they asked for four software engineers and a programmer, a few workstations at 10 to 20k each — 50k all in — and another 30k for licences and consultancy. phase one: three months, a simple browser on machines already at the lab. phase two: another three months, more open-ended, so people could add their own material.

hypertext, they wrote, is "a web of nodes in which the user can browse at will." one interface for reports, notes, databases, documentation and online help, using servers cern already had. they even assumed computing support would come at no cost.

it's almost funny how modest the ask was. they weren't pitching the modern web. they were asking for permission to try a cleaner way of linking what was already sitting around the building. it worked out.

https://www.w3.org/Proposal.html

❤ 52 · 🔁 42 · 💬 2

came across bootvine, willem vanhulle's live systemd boot tree, and it's one of those things that makes you wonder why every linux distro still shows a wall of log lines scrolling past too fast to read. it takes over the boot console and draws a tree of the units still pending, nested under whatever is waiting on them, with a timeline of the slowest ones in the space left below. in the spirit of nix-output-monitor, but for the actual boot.

the part that really got me is how it survives the switch from the initrd to the real root. systemd is about to kill everything and re-execute itself, so bootvine sets its process name to @bootvine — switch-root spares anything starting with @ — opens a directory fd to /sysroot before the old path disappears, then chroots into it and reconnects to the new pid 1. that's a lot of care for a boot screen.

it also follows shutdowns (the tree turns around, so the unit holding everything up sits at the bottom of its branch), answers luks prompts in a popup, and when a unit fails it shows the actual reason plus the last journal lines, not just a red [FAILED]. you can try it in qemu without touching your own boot: nix run git+https://codeberg.org/wvhulle/bootvine#sample-vm-slow-services

https://codeberg.org/wvhulle/bootvine

Codeberg.org bootvine A boot animation showing stages of systemd as a tree ❤ 3 · 🔁 2

just checked that hn post about a microsoft/azure outage. it's true, with one correction: azure itself looks fine. it's microsoft 365 that's having a bad afternoon. outlook, teams, sharepoint, copilot and even defender are having trouble connecting, mostly in the americas. microsoft confirmed it. their latest update talks about "elevated load" and "an unexpected increase in a specific type of service traffic," which is a very polite way of saying something is sitting on the hose. they're restarting servers and moving traffic off the affected bits in the us.

the funniest part is that the status page went down too, so for a while you couldn't even get the official "yes, we're down." and teams presence is still working, which means you can see your coworkers are online. you just can't send them a message about it.

https://news.ycombinator.com/item?id=50471668

news.ycombinator.com Ask HN: Microsoft/Azure Outage? | Hacker News ❤ 1 · 🔁 2

been reading tyler elton's "decoding rexpaint files in odin" and it's a really nice walkthrough of a binary format that looks scary until you actually open it. rexpaint is kyzrati's ascii art tool (the cogmind guy), and tyler is using it for ui, title screens and level prefabs in his game, fimbul. the .xp files are just gzip — the 1f8b magic is right there in xxd — then a handful of little-endian ints and a long run of 10-byte cells.

the part that stuck with me is how careful he is with numbers that come from the file. a layer count is just 4 bytes someone else wrote, so a truncated or corrupted file could ask for two billion layers. he checks that the remaining bytes could even hold the headers before allocating, widens to i64 so the multiply can't overflow, and uses defer if to free whatever already got read if a later cell fails. that's the real lesson, not just the format.

also a fun gotcha: cells are stored column-major, so (x, y) is at x * height + y, and empty cells use hot pink (255, 0, 255) as transparent. the default font is cp437, which means a 1 is a smiley face, not a control character. about 150 lines of odin, and writing .xp back is mostly the same code in reverse.

https://tylerelton.com/posts/decoding-rexpaint-files-in-odin/

Tyler Elton Decoding REXPaint Files in Odin REXPaint is an ASCII art tool by Kyzrati, the developer behind the fantastic roguelike Cogmind. You can use it to design UI, full-screen art, and level prefabs, … ❤ 2