Update for the week ending on Friday, Nov 13, 2026
Refactoring English
- Finished sending out books to early Kickstarter premium backers in US
- Added a survey to the post-purchase email asking how readers discovered the book
Book
- Switched to Courier Prime for inline and block code
- Replaced almost-black colors wth pure black
- Added support to
compare-with-versionto compare the non-PDF version - Added support to
compare-with-versionto show minor color differences - Added a build check to detect code wrapping on fenced code
- Removed figure-number prefixes from image captions
- Reorganized files so that book content is in its own folder
- Previously, the Asciidoc to Markdown compiler was in the same directory
- Fixed a bug in page break detection
- Modify the Markdown to Asciidoc compiler to look for paragraphs ending with a colon and keep the subsequent element on the next page
- Fixed pages where I linked to the same URLs twice on the same page
- It looks weird in footnotes
- Made tables more compact and give them figure-style spacing
- Fixed vertical spacing for code blocks
PicoShare
PicoShare is a minimalist web-based file sharing tool I’m working on. I’m often frustrated that I can’t just send someone a link directly to a file because every file-sharing service tries to re-encode images/video or wrap their own viewer around other files, so I’m making a simple self-hostable tool that lets you upload files and share them with other people.
- Worked on a PR to prevent malicious guests from exceeding guest link limits (open)
- Fixed error reporting on upload persistence failures
- Applied “Parse, Don’t Validate” to
ExpirationTimetype - Refactored code for creating expiration times in tests
- Adjusted the
AGENTS.mdrule to keep struct methods adjacent to their definitions
Weekly Snippets
- Fix HTTP logging diagnostics to stop redacting information
- I didn’t review the AI code closely enough and it had this whole complicated query param redaction logic even though we don’t deal with any sensitive query params
- Improved retries on transient forge API errors
- Increased timeouts on forge API requests from 30s to 5m
NixOS Config
- Upgraded my laptop to NixOS 26.05
- Tried Fluux Messenger XMPP web client (my favorite so far)
- Configured nixbuild bot’s SSH key correctly in my sandbox
- Took a bunch of AI suggestions on simplifying my NixOS setup
- Added a dashboard to track opencode tool use failures
- I want to get better at tracking efficiency of OpenCode sessions, and this seemed like the simplest start
- Trimmed wakatime backup to not hammer full dump API every day
- They sent me an angry email
AI sandbox
- Tried using a Hetzner bare metal server as my primary AI sandbox
- It works pretty well and doesn’t exhaust my CPU/RAM locally
- I’m probably going to switch to a cheaper OVH Cloud option with SSD instead of spinning disks
- Improved Nix flakes for setting up Hetzner server
- Simplified my local sandbox so that there’s a single, permanently mounted directory instead of dynamically adding mounts to the sandbox VM
- Got rid of a few convenience features that were more complexity than they were worth
- Fixed a race condition in sandbox start
- Updated the Forgejo PR skill to keep PRs WIP until all queued work is complete
- Improved the commit message skill to use headings and log the AI models used
- Added skills for different agent reviews, such as Claude Opus, GLM 5.3 flash, Astra
- Fixed a bug in my wakatime backups
- Improved skill injection so it doesn’t restart the sandbox VM
- Tried to prevent the unattended agent from doing busywork tasks while waiting on background jobs
- It was running a bunch of nonsense commands “to pass the time”
Misc
- Posted a thread on Hacker News about converting your family and friends to XMPP/Matrix
- Did monthly bookkeeping
- Added support for real-time transfers to beancount-chase-bank