buenomini

systems-programming

15 postsAll tags

Hiding IPs from my own relay is harder than it sounds2026-08I wanted my relay to never see IPs. I ended up changing the sentence instead. TrueSeal delivery guarantees2026-08My sync library promised every message arrives. It does, sometimes twice, and I changed my mind about who should deal with that. Membership without a server2026-08A group of devices with nobody in charge of who's in it, and the three ways that went wrong. Messages from the future2026-07My sync protocol keeps messages it can't read yet, so anyone could fill a device's inbox with junk labelled version 99. Noise protocol its not concurrent2026-07Two goroutines, one cipher state, and a non concurrent safe library. 2 day debug session2026-05It works on my machine, at its finest. The spectrum of error handling2026-04Result types, panics and assertions are for different situations, and most codebases blur them together. Block vs stream ciphers2026-01Fixed-size blocks or a keystream: the two ways ciphers process data, and why I picked ChaCha20 for my key-value store. Edge-triggered vs level-triggered epoll2026-01The two epoll notification modes, why edge-triggered is the tricky one, and which one I'm using. IPC vs RPC2025-12Both let processes talk to each other. IPC makes you deal with the sockets, RPC hides them behind function calls. Wire protocol framing (and why it prevents attacks)2025-12How to tell where one message ends and the next begins, and why getting it wrong opens you up to buffer overflows and DoS attacks. Why your web service doesn't need Rust (probably)2025-12I don't like Java and I love Zig and Rust, and none of that matters when network latency is 10,000x bigger than your FFI overhead. Stack vs heap memory in Zig2025-11Where your data lives in Zig, how the stack and the heap differ, and the use-after-free bug that taught me why it matters. The Zig hashmap gotcha: it doesn't copy your data2025-11Zig's HashMap keeps pointers to your keys and values instead of copying them, which is a use-after-free waiting to happen. String vs &str in Rust2025-11Rust's two string types, when to use each, and what the difference has to do with memory.