Latest posts
- TIL: Symlinking NixOS DotfilesMay 21, 2026Alex Kladov
TIL: Symlinking NixOS Dotfiles May 21, 2026 The standard answer to managing dotfiles on NixOS is home-manager. I’ve never used it, due to two aesthetic and one practical objection: The approach I like is storing dotfiles in the same repository as flake.nix / configuration.nix and symlinking them in place. The problem here is that NixOS seemingly doesn’t have a “native” way to say that /a/b/c shou
- Always Be BlamingMay 18, 2026Alex Kladov
Always Be Blaming May 18, 2026 A few tips on 4D-ing your code comprehension skills. I wrote on the importance of reading code before: Look Out For Bugs My default approach to reading is “predictive”: I don’t actually read the code line by line. Rather, I try to understand the problem that it wants to solve, then imagine my own solution, and read the “diff” between what I have in my mind and what
- Catch Flakes On MainMay 14, 2026Alex Kladov
Catch Flakes On Main May 14, 2026 A small Mechanical Habit today: When using not rocket science rule / merge queue, continue to redundantly run the full test suite on main. Maintain an easily accessible list of recent main failures — these are the flaky tests to eradicate. For an example, see the “Flakes” link on https://devhub.tigerbeetle.com Flaky tests are tests that fail intermittently, once
- Learning Software ArchitectureMay 12, 2026Alex Kladov
Learning Software Architecture May 12, 2026 In reply to an email asking about learning software design skills as a researcher physicist: I was attached to a bioinformatics lab early in my career, so I think I understand what you are talking about, the phenomenon of “scientific code”! My thoughts: First meta observation is that “software design” is something best learned by doing. While I had some
- Steering Zig FmtMay 08, 2026Alex Kladov
Steering Zig Fmt May 8, 2026 Two tips on using zig fmt effectively. Read this if you are writing Zig, or if you are implementing a code formatter. For me, zig fmt is better than any other formatter I used: rustfmt, the one in IntelliJ, deno fmt. zig fmt is steerable. For every syntactic construct, it has several variations for how it might be laid out. The variation used is selected by looking at
- Minimal Viable Zig Error ContextsMay 03, 2026Alex Kladov
Minimal Viable Zig Error Contexts May 3, 2026 fn process_file(io: Io, path: []const u8) !void { errdefer log.err("path={s}", .{path}); const fd = try Io.Dir.cwd().openFile(io, path, .{}); defer fd.close(io); // ... } Out of the box, Zig provides minimal and sufficient facilities for error handling — strongly-typed error codes. Error reporting is left to the user. Idiomatic s
- 256 Lines or Less: Test Case MinimizationApr 20, 2026Alex Kladov
256 Lines or Less: Test Case Minimization Apr 20, 2026 Property Based Testing and fuzzing are a deep and science-intensive topic. There are enough advanced techniques there for a couple of PhDs, a PBT daemon, and a client-server architecture. But I have this weird parlor-trick PBT library, implementable in a couple of hundred lines of code in one sitting. This week I’ve been thinking about a cool
- Consensus Board GameMar 19, 2026Alex Kladov
Consensus Board Game Mar 19, 2026 I have an early adulthood trauma from struggling to understand consensus amidst a myriad of poor explanations. I am overcompensating for that by adding my own attempts to the fray. Today, I want to draw a series of pictures which could be helpful. You can see this post as a set of missing illustrations for Notes on Paxos, or, alternatively, you can view that post
- JJ LSP Follow UpMar 05, 2026Alex Kladov
JJ LSP Follow Up Mar 5, 2026 In Majjit LSP, I described an idea of implementing Magit style UX for jj once and for all, leveraging LSP protocol. I’ve learned today that the upcoming 3.18 version of LSP has a feature to make this massively less hacky: Text Document Content Request LSP can now provide virtual documents, which aren’t actually materialized on disk. So this: can now be such a virtual
- Against Query Based CompilersFeb 25, 2026Alex Kladov
Against Query Based Compilers Feb 25, 2026 Query based compilers are all the rage these days, so it feels only appropriate to chart some treacherous shoals in those waters. A query-based compiler is a straightforward application of the idea of incremental computations to, you guessed it, compiling. A compiler is just a simple text transformation program, implemented as a lot of functions. You cou