TIL: Running OpenClaw in Docker
Laid Off as an Engineering Leader at Meta to Doing an MBA in Solopreneurship
Is ChatGPT becoming a commodity? A software engineer’s buyer’s guide to AI tools
The open-source format for guiding any coding agent consistently
A Docker-powered RAG system for your private codebase and docs
A minimalist cross-platform system to manage your entire productivity workflow
Compress images in bulk directly on your device with WebAssembly
Convert your Android device into a wireless webcam for Windows
Transform any Figma design system into a maintainable React codebase
VAIDAS: Real-Time ADAS Inference on VAI Architecture
🛂 Beginner-Friendly Guide ‘Divide an Array Into Subarrays With Minimum Cost II’ - Problem 3013 (C++, Python, JavaScript)
No Redis Required: Zero-Config Job Queue for Bun
My stumbles to my presentation page
Biohack Your Health: Building a Science-Backed Supplement Advisor with Qdrant & PubMed 🧪
Mastering Design Patterns in Go Network Programming: A Practical Guide
From Blood Test to Doctor’s Appointment: Building an Autonomous Health Agent with LangGraph and GPT-4
Understanding schemas and data modelling on Power BI
The Mayflies at 3 AM
How to Structure a SwiftUI Project in 2026
Anthropic’s New Strategy: Making AI 7000x Dumber for Safety
roberto bot
💬 Defeating a 40-year-old copy protection dongle
💬 TIL: Apple Broke Time Machine Again on Tahoe
🔥 I taught my neighbor to keep the volume down
🔥 Apple I Advertisement (1976)
💬 Adventure Game Studio: OSS software for creating adventure games
🔥 FOSDEM 2026 – Open-Source Conference in Brussels – Day#1 Recap
🔥 Netbird – Open Source Zero Trust Networking
🔥 What I learned building an opinionated and minimal coding agent
💬 The Book of PF, 4th edition
🔥 List animals until failure
Ode to the AA Battery
Recapping My 5 Year Old Studio Monitors
Migrating 13,000 Comments from Drupal to Hugo
Raspberry Pi Pico Mini Rack GPS Clock
Local Email Debugging with Mailpit
Raspberry Pi is cheaper than a Mini PC again (that’s not good)
Testing the Mono Gateway, a custom-built 10 Gbps Router
Dell’s version of the DGX Spark fixes pain points
NIST was 5 μs off UTC after last week’s power cut
Big GPUs don’t need big PCs
1.5 TB of VRAM on Mac Studio - RDMA over Thunderbolt 5
CM0 - a new Raspberry Pi you can’t buy
Benchmarking NVENC video transcoding on the Pi
The DC-ROMA II is the fastest RISC-V laptop and is odd
The RAM Shortage Comes for Us All
Why doesn’t Apple make a standalone Touch ID?
Nvidia Graphics Cards work on Pi 5 and Rockchip
Air Lab is the Flipper Zero of air quality monitors
How does AI impact skill formation?
You have to know how to drive the car
How I estimate work as a staff software engineer
I’m addicted to being useful
Crypto grifters are recruiting open-source AI developers
The Dictator’s Handbook and the politics of technical competence
2025 was an excellent year for this blog
Grok is enabling mass sexual harassment on Twitter
Software engineers should be a little bit cynical
You can’t design software you don’t work on
Nobody knows how large software products work
AI detection tools cannot prove that text is AI-generated
How good engineers write bad code at big companies
Becoming unblockable
Why it takes months to tell if new AI models are good
Only three kinds of AI products actually work
Writing for AIs is a good way to reach more humans
To get better at technical writing, lower your expectations
Is it worrying that 95% of AI enterprise projects fail?
Why do AI models use so many em-dashes?
Kimwolf Botnet Lurking in Corporate, Govt. Networks
Patch Tuesday, January 2026 Edition
Who Benefited from the Aisuru and Kimwolf Botnets?
The Kimwolf Botnet is Stalking Your Local Network
Happy 16th Birthday, KrebsOnSecurity.com!
Dismantling Defenses: Trump 2.0 Cyber Year in Review
Most Parked Domains Now Serving Malicious Content
Microsoft Patch Tuesday, December 2025 Edition
Drones to Diplomas: How Russia’s Largest Private University is Linked to a $25M Essay Mill
SMS Phishers Pivot to Points, Taxes, Fake Retailers
Apple Reports Record-Breaking Revenue and Profit for Q1 FY26
Lego Group and Crocs Enter Multi-Year Global Partnership
‘Backseat Software’
Let’s Keep an Eye on Apple’s Own iOS Adoption Numbers
Box Office Expectations for ‘Melania’
Amazon’s Spending on ‘Melania’ Is a Barely Concealed Bribe
Kickstarter for Ollie’s Arcade Expansion
Comparing the Classic and Unified Views in iOS 26’s Phone App
Aeronaut 1.0
Bruce Springsteen: ‘Streets of Minneapolis’
★ Politics and the English Language, January 2026 Edition
Tim Cook Wrote a Memo on the ‘Events in Minneapolis’
Meta’s Response to Reuters Report on ‘Romance AI Chatbots’ for Teenagers
Court Filing Claims Zuckerberg Blocked Curbs at Meta on Sex-Talking Chatbots for Minors
‘The Secret Fear of the Morally Depraved’
‘A CEO, Captured’
‘Aside From That, Mr. Cook, What Did You Think of the Movie?’
‘Whatever’
Clawdbot Is Now Moltbot
★ The Names They Call Themselves
On Being A Canadian In America In 2026
Pebble Round 2 - The Most Stylish Pebble Ever
Pebble Relaunch - Year One Done!
Pebble Watch Software Is Now 100% Open Source + Tick Talk #4 - PT2 Demos!
Pebble, Rebble, and a Path Forward
The new Pebble app is live on iOS and Android
How To Build A Smartwatch: Software - Setting Expectations & Roadmap
(re)Introducing the Pebble Appstore
Quick P2D production update
Pebble 2 Duo is in mass production!
Pebble Time 2* Design Reveal
July Pebble Update
Quick Pebble Project Update
Core 2 Duo - Beta Test Signup!
How To Build A Smartwatch: Picking A Chip
My new podcast: Tick Talk + Core 2 Duo demo
Gratitude and FAQ
Introducing two new Pebble watches!
Apple restricts Pebble from being awesome with iPhones
Automatic programming
Don’t fall into the anti-AI hype
Reflections on AI at the end of 2025
Scaling HNSWs
AI is different
Coding with LLMs in the summer of 2025 (an update)
Human coders are still better than LLMs
What I learned during the license switch
Redis is open source again
Reproducing Hacker News writing style fingerprinting
Vector Sets are part of Redis
AI is useless, but it is our best bet for the future
Big LLMs weights are a piece of history
Reasoning models are just LLMs
We are destroying software
From where I left
Playing audio files in a Pi Pico without a DAC
First Token Cutoff LLM sampling
Translating blog posts with GPT-4, or: on hope and fear
LLMs and Programming in the first days of 2024
You Don’t Understand Things Better, You Just Feel Smarter
Everyone’s okay with their AI, just not yours
LLM Adblockers are coming!
How to Preserve Your Writing for a Hundred Years
We use Chatbots to hide our UI problems
Stop Consuming Spam at the First Sign
We Were Never Good Programmers
Just Get a Better Job
Boredom is the Gatekeeper
What should you write about on your blog?
I can’t upgrade to Windows 11, now leave me alone
It’s cheaper to buy a new printer every month
We are always fighting about things we agree on
What’s the name of that Website?
No I don’t want to turn on Windows Backup with One Drive
A new iPhone, a new Pixel, a new Phone
And 18 very popular NPM Packages are compromised
Och, The True AI Scotsman
Reclaiming Your Memory in the Age of Distraction
The Problem with Vibed PRs
Notes on blog future-proofing:
Writing my own static site generator:
How to write your own website:
The horsehead nebula (2026):
You should start a blog:
Pluralistic: Threads’ margin is the Eurostack’s opportunity (30 Jan 2026)
Pluralistic: Disenshittification Nation (29 Jan 2026)
Pluralistic: Carney isn’t a hero (and that’s OK) (27 Jan 2026)
Pluralistic: Trump and the unmighty dollar (26 Jan 2026)
Pluralistic: The petty (but undeniable) delights of cultivating unoptimizability as a habit (22 Jan 2026)
Pluralistic: Google’s AI pricing plan (21 Jan 2026)
Pluralistic: AI is how bosses wage war on “professions” (20 Jan 2026)
Pluralistic: Social media without socializing (19 Jan 2026)
Pluralistic: The world needs an Ireland for disenshittification (17 Jan 2026)
Pluralistic: Catch this! (16 Jan 2026)
Vanguard - The Government Project to get British Businesses to use the Internet
Book Review: With the End in Mind - Dying, Death and Wisdom in an Age of Denial by Kathryn Mannix ★★★⯪☆
Theatre Review: The Hitchhiker’s Guide to The Galaxy - Immersive Experience ★★★⯪☆
Book Review: The Players Act 1 by Amy Sparkes ★★⯪☆☆
Are there any open APIs left?
Book Review: Doppelganger - A Trip Into the Mirror World by Naomi Klein ★★★★☆
Do savings accounts really lose money to inflation?
Book Review: Human Rites by Juno Dawson ★★★☆☆
Installing and Updating Filezilla from a Zip File on Pop_OS / Ubuntu
Book Review: Surely You Can’t Be Serious - The True Story of Airplane! ★★⯪☆☆
Removing “/Subtype /Watermark” images from a PDF using Linux
Book Review: Exterminate/Regenerate - The Story of Doctor Who by John Higgs ★★★★☆
Discovering My Talk
Book Review: Sky Daddy by Kate Folk ★★★⯪☆
Book Review: Sublimation by Isabel J. Kim ★★★★★
Review: Lander 23 by Punchdrunk ★★★⯪☆
Should HTML’s code blocks be translated?
Book Review: Rabbit Test and Other Stories by Samantha Mills ★★★★☆
Responsible Disclosure: Chimoney Android App and KYCaid
Book Review: Under the Eye of the Big Bird - Hiromi Kawakami ★★★★☆
Don’t Trip[wire] Yourself: Testing Error Recovery in Zig
Finding and Fixing Ghostty’s Largest Memory Leak
Ghostty Is Now Non-Profit
Vibing a Non-Trivial Ghostty Feature
Zig Builds Are Getting Faster
Libghostty Is Coming
You Have to Feel It
Advice for Tech Non-Profits
We Rewrote the Ghostty GTK Application
“As Code”
Welcoming Ghostty Subsystem Maintainers
Ghostty: Reflecting on Reaching 1.0
Ghostty 1.0 is Coming
Pledging $300,000 to the Zig Software Foundation
Tagged Union Subsets with Comptime in Zig
Conditionally Disabling Code with Comptime in Zig
Joining Polar as an Advisor
Ghostty Devlog 006
Ghostty Devlog 005
Grapheme Clusters and Terminal Emulators
Why read novels?
Good if make prior after data instead of before
Why the chicken crossed the road, according to various entities
Underrated reasons to be thankful V
Make product worse, get money
Dating: A mysterious constellation of facts
Pointing machines, population pyramids, post office scandal, type species, and horse urine
Will the explainer post go extinct?
Y’all are over-complicating these AI-risk arguments
Shoes, Algernon, Pangea, and Sea Peoples
Dear PendingKetchup
You can try to like stuff
I guess I was wrong about AI persuasion
Futarchy’s fundamental flaw — the market — the blog post
Heritability puzzlers
New colors without shooting lasers into your eyes
My 9-week unprocessed food self-experiment
Links for July
Do blue-blocking glasses improve sleep?
Scribble-based forecasting and AI 2027
Early Linux package manager history and patching upstream source releases
Making a FreeBSD system have a serial console on its second serial port
Why I’m ignoring pretty much all new Python packaging tools
Why Linux wound up with system package managers
The two subtypes of one sort of package managers, the “program manager”
Forcing a Go generic type to be a pointer type (and some challenges)
Scraping the FreeBSD ‘mpd5’ daemon to obtain L2TP VPN usage data
Printing things in colour is not simple
Understanding query_response in Prometheus Blackbox’s tcp prober
Pitfalls in using Prometheus Blackbox to monitor external SMTP
What ZFS people usually mean when they talk about “ZFS metadata”
The long painful history of (re)using login to log people in
TCP, UDP, and listening only on a specific IP address
Single sign on systems versus X.509 certificates for the web
People cannot “just pay attention” to (boring, routine) things
Systemd-networkd and giving your virtual devices alternate names
TCP and UDP and implicit “standard” elements of things
Linux network interface names have a length limit, and Netplan
Safely querying Spamhaus DNSBLs in Exim
Something you don’t want to do when using Spamhaus’s DQS with Exim
Backfilling Discord forum channels with the power of terrible code
Tormentmaxxing ‘simple requests’
I made a simple agent for PR reviews. Don’t use it.
Git’s HTTP server side design does not scale
Arcane Cheese with Doomtrain Extreme
New AI slop signal: code blocks with weird indentation
Valve is about to win the console generation
Immutable by Design: The Deep Tech Behind Tigris Bucket Forking
Using Assisted-by commit footers instead of banning AI tools
Why not store the SAFEARRAY reference count as a hidden allocation next to the SAFEARRAY?
How can I retain access to the data in a SAFEARRAY after my method returns?
Why did I lose the data even though I called SafeArrayAddRef?
A digression on the design and implementation of SafeArrayAddRef and extending APIs in general
What’s the difference between SafeArrayAccessData and SafeArrayAddRef?
C++ has scope_exit for running code at scope exit. C# says “We have scope_exit at home.”
A simple helper function for attaching a progress handler to a Windows Runtime IAsyncActionWithProgress or IAsyncOperationWithProgress
On the proper usage of a custom Win32 dialog class
Microspeak: On fire, putting out fires
What was the secret sauce that allows for a faster restart of Windows 95 if you hold the shift key?
Notes on the Intel 8086 processor’s arithmetic-logic unit
Conditions in the Intel 8087 floating-point chip’s microcode
The stack circuitry of the Intel 8087 floating point chip, reverse-engineered
Unusual circuits in the Intel 386’s standard cell logic
Solving the NYTimes Pips puzzle with a constraint solver
A Navajo weaving of an integrated circuit: the 555 timer
Why do people keep writing about the imaginary compound Cr2Gr2Te6?
Here be dragons: Preventing static damage, latchup, and metastability in the 386
A CT scanner reveals surprises inside the 386 processor’s ceramic package
How to reverse engineer an analog chip: the TDA7000 FM radio receiver
Reverse engineering the mysterious Up-Data Link Test Set from Apollo
Inside the Apollo “8-Ball” FDAI (Flight Director / Attitude Indicator)
Reverse engineering the 386 processor’s prefetch queue circuitry
The absurdly complicated circuitry for the 386 processor’s registers
A tricky Commodore PET repair: tracking down 6 1/2 bad chips
Notes on the Pentium’s microcode circuitry
A USB interface to the “Mother of All Demos” keyset
The Pentium contains a complicated circuit to multiply by three
The origin and unexpected evolution of the word “mainframe”
Interesting BiCMOS circuits in the Pentium, reverse-engineered
Pi: The Minimal Agent Within OpenClaw
Colin and Earendil
Agent Psychosis: Are We Going Insane?
Porting MiniJinja to Go With an Agent
Advent of Slop: A Guest Post by Claude
A Year Of Vibes
What Actually Is Claude Code’s Plan Mode?
Skills vs Dynamic MCP Loadouts
Let’s Destroy The European Union!
LLM APIs are a Synchronization Problem
The UK paid £4.1 million for a bookmarks site
Using the M1 MacBook Air in 2026
Getting Rails’ ActiveStorage blob IDs from file URLs
Why AI browsers haven’t taken off
Slack is extorting us with a $195k/yr bill increase
Here’s how I got full admin rights in a Replit clone
How to generate OpenGraph images with Astro and Satori
How to use Satori with your Tailwind config
Introducing RSC Explorer
Hire Me in Japan
How to Fix Any Bug
Where It’s at://
Open Social
A Lean Syntax Primer
Beyond Booleans
The Math Is Haunted
Suppressions of Suppressions
I’m Doing a Little Consulting
How Imports Work in RSC
RSC for LISP Developers
Progressive JSON
Why Does RSC Integrate with a Bundler?
One Roundtrip Per Navigation
Static as a Server
RSC for Astro Developers
Functional HTML
What Does “use client” Do?
Scam Telegram: Uncovering a network of groups spreading crypto drainers
Why you should self-host your (vibecoded) app
Switching to Claude Code + VSCode inside Docker
Everyone knows your location, Part 2: try it yourself and share the results
Github scam investigation: Thousands of “mods” and “cracks” stealing your data
Everyone knows your location: tracking myself down through in-app ads
$2m laundered: the YouTube crypto tutorials’ huge scam (investigation)
I made a Chrome extension to help avoid playing cheaters in chess
How I created an Ethereum Proof-of-Stake demo entirely with AI
Why I created Ethereum Proof of Stake demo
AGI, ASI, A*I – Do we have all we need to get there?
Bridging secrets is hard
Fortunes and Geometric Means
Proving you know a product
How to prove you know a discrete logarithm
Mills ratio and tail thickness
Sigmas and Student
Stylometry
Two cheers for ugly code
Prime gaps and Gapcoin
Prime clusters and Riecoin
Efficiently testing multiple primes at once
Tighter bounds in the prime number theorem
Efficiently computing multiple modular inverses at once
The middle binomial coefficient
Combining in-shuffles and out-shuffles
Primecoin primality test
Bi-twin prime chains
Prime chains
Compressing a set of hash values
Writing an LLM from scratch, part 24 – the transcript hack
Writing an LLM from scratch, part 25 – instruction fine-tuning
Writing an LLM from scratch, part 26 – evaluating the fine-tuned model
Writing an LLM from scratch, part 27 – what’s left, and what’s next?
Why smart instruction-following makes prompt injection easier
Writing an LLM from scratch, part 28 – training a base model from scratch on an RTX 3090
Writing an LLM from scratch, part 29 – using DistributedDataParallel to train a base model from scratch in the cloud
Writing an LLM from scratch, part 30 – digging into the LLM-as-a-judge results
Writing an LLM from scratch, part 31 – the models are now on Hugging Face
Getting a custom PyTorch LLM onto the Hugging Face Hub (Transformers: AutoModel, pipeline, and Trainer)
make.ts
Considering Strictly Monotonic Time
Vibecoding #2
Memory Safety Is …
The Second Great Error Model Convergence
Parsing Advances
Newtype Index Pattern In Zig
Static Allocation For Compilers
Do Not Optimize Away
Mechanical Habits
The Affordability Curse
The Era of Step-on-a-Rake Capitalism
The No. 1 Rule for Understanding Trump
The Disturbing Rise of MAGA Maoism
Something Alarming Is Happening to the Job Market
A Trade War With China Is a Very Bad Idea
Trump Is Burning Down the House
There Is Only One Way to Make Sense of the Tariffs
The Story of the Gilded Age Wasn’t Wealth. It Was Corruption.
The Political Fight of the Century
How the British Broke Their Own Economy
DOGE’s Reign of Ineptitude
How COVID Pushed a Generation of Young People to the Right
Why Tom Brady Could Be Worth $375 Million in the Booth
America’s ‘Marriage Material’ Shortage
Is Moderate Drinking Okay?
The Anti-Social Century
The Most Important Breakthroughs of 2024
A Mysterious Health Wave Is Breaking Out Across the U.S.
RFK Jr. Is a Bellwether
Notes from January 2026
An LLM that’s 7500× stupider
A mental math heuristic to convert between Fahrenheit and Celsius
I set all 376 Vim options and I’m still a fool
Notes from “On Writing Well”
Notes from December 2025
Prediction: Mastodon will outlive Bluesky
Notes from “Bad Company: Private Equity and the Death of the American Dream”
How I implemented relative imports with Pyodide
I made a little audio speed calculator
Why I Still Write Code as an Engineering Manager
Life Happens at 1x Speed
Creating Your Own Opportunities
A Year of Writing for Myself (That 230,000+ People Read)
The Strange Case of Engineers Who Dismiss AI
AI Can Write Your Code. It Can’t Do Your Job.
What Actually Makes You Senior
“ChatGPT said this” Is Lazy
Stop Avoiding Politics
The Management Skill Nobody Talks About
Alarm is sacred, must not fail, but iOS 26 is wicked
Examples are the best documentation
Benjamin Button Reviews macOS
AI is not another abstraction because god plays dice
Finland is a high-context society that loves defaults
AI is impressive because we’ve failed at semantic web and personal computing
Thank you Google for breaking my YouTube addiction
But what if I really want a faster horse?
How to play Half Life 1 and 2 on M-chip Macs
Knight Ride: a game about rogue (chess) knight
Don’t make it “like Google”
Why I prefer to git stage outside of the editor or the terminal
They made computers behave like annoying salesmen
YouTube picks, December 2024
How to make forbidden changes to SQLite tables
I wish your bespoke React-Tailwind-etc static site generator had RSS
How to build and publish multi-platform Rust binaries via Github actions
How do you do, fellow web developers? A growing disconnect.
Jupyter notebooks as e2e tests
Lesser-known science fiction movies
Your Life is the Sum Total of 2,000 Mondays
Why Intelligence Is a Terrible Proxy for Wisdom
Claude Code Won’t Fix Your Life
The Discourse is a Distributed Denial-of-Service Attack
How to Debug Your Life
Failure vs. Success is the Wrong Frame.
A Metabolic Workspace
Barbarossa: How Hitler Lost the War - By Jonathan Dimbleby
1929 - By Andrew Ross Sorkin
The Case for Blogging in the Ruins
The Rime of the Ancient Maintainer
Why My Newsletter Costs $2.50
Comfort Food for the Thinking Class: The Great Intellectual Stagnation
My Year in Review
Podcasting Could Use a Good Asteroid
2025 in Review
Thank you
When compilers surprise you
Switching it up a bit
Clever memory tricks
When SIMD Fails: Floating Point Associativity
SIMD City: Auto-vectorisation
Chasing your tail
Partial inlining
Inlining - the ultimate optimisation
Calling all arguments
Aliasing
When LICM fails us
Loop-Invariant Code Motion
Unswitching loops for fun and profit
Pop goes the…population count?
Unrolling loops
Induction variables and loops
Going loopy
Multiplying our way out of division
Is everyone in your Signal groups named something like “E” or “🥑”? Nicknames can help!
Jeffrey Epstein Bought Books About Pedophilia, Woody Allen, and Trump
How to easily dig through the Epstein files yourself
I spoke about ICEBlock and Trump’s app censorship on the kill switch podcast
Practical Defenses Against Technofascism
In war-torn Portland? Watch me speak at BSidesPDX!
ICEBlock handled my vulnerability report in the worst possible way
Unfortunately, the ICEBlock app is activism theater
“We are currently clean on OPSEC”: The Signalgate Saga
Going to DEFCON? See my talk, “We are currently clean on OPSEC”: The Signalgate Saga
Using Signal groups for activism
TeleMessage Explorer: a new open source research tool
TeleMessage customers include DC Police, Andreessen Horowitz, JP Morgan, and hundreds more
DDoSecrets publishes 410 GB of heap dumps, hacked from TeleMessage’s archive server
How the knock-off Signal app used by Trump officials got hacked in 20 minutes
Will AI Make Package Managers Redundant?
Zig and the M×N Supply Chain Problem
The Dependency Layer in Digital Sovereignty
The C-Shaped Hole in Package Management
Introducing Package Chaos Monkey
PkgFed: ActivityPub for Package Releases
Rewriting git-pkgs in Go
Package Management is a Wicked Problem
A Protocol for Package Management
An AI Skill for Skeptical Dependency Management
Reading List for 01/31/2026
On Technologies vs. Commodities
Reading List 01/24/26
Do Commodities Get Cheaper Over Time?
Reading List 01/17/2026
The Surprisingly Long Life of the Vacuum Tube
Reading List 1/10/2026
How Did TVs Get So Cheap?
Reading List 01/03/2026
Should US homebuilders emulate Sweden?
How Accurate Are Learning Curves?
Reading List 12/20/25
How Bell Labs Won Its First Nobel Prize
Reading List 12/13/2025
Stagnant Construction Productivity Is a Worldwide Problem
Reading List 12/06/2025
Reading List 11/29/25
How a Government Think Tank Trained The First Generation of US Software Developers
Reading List 11/22/25
How ASML Got EUV
Slide Away
Minus World
They Were Robbed
Splitting Machines
A Number Of Surprising Importance
The Accidental Blockbuster
A Complex Case For Empathy
Convoy Steamroller
Beyond The Last Minute
Collecting The Carts
QuickQWERTY 1.2.1
Attention Media ≠ Social Media
Nested Code Fences in Markdown
Minimal GitHub Workflow
Three Inverse Laws of Robotics
Writing First, Tooling Second
A4 Paper Stories
Circular Recursive Negating Acronyms
Ideas
Now
My Coding Adventures in 2025
Nerd Quiz #3
Mark V. Shaney Junior 0.2.0
Fed 24 Years of My Blog Posts to a Markov Model
Mark V. Shaney Junior 0.1.0
Fizz Buzz in CSS
CSS Fizz Buzz with Ordered List
CSS Fizz Buzz
Emacs Info Expressions
Triangle-Free Cayley Graph
Solving Systems of Equations Faster
Survival Analysis of the Supreme Court
ACX 2025 Prediction Contest Retrospective
You Need A Kitchen Slide Rule
Disaster Costs, 1900–2024
Updated LLM Benchmark (Gemini 3 Flash)
Go in 9×9 is Awesome
Military Standard on Software Control Levels
Packaging Perl and Shell for NixOS Deployment
Deprecate Like You Mean It
Advent of Code in Dialog
Transparent Leadership Beats Servant Leadership
Feynman vs. Computer
Renewing GPG Subkeys in 2025
Software Never Fails
Questions for Cloudflare
What Killed Perl?
Arrival Radar
Advent of Code on the Z-machine
Refinement without Specification
My Gripes with Prolog
The Liskov Substitution Principle does more than you think
Some Fun Software Facts
One more week to the Logic for Programmers Food Drive
Get Logic for Programmers 50% off & Support Chicago Foodbanks
I’m taking a break
Modal editing is a weird historical contingency we have through sheer happenstance
The Phase Change
Three ways formally verified code can go wrong in practice
New Blog Post: “ A Very Early History of Algebraic Data Types”
Many Hard Leetcode Problems are Easy Constraint Problems
The Angels and Demons of Nondeterminism
Logical Duals in Software Engineering
Sapir-Whorf does not apply to Programming Languages
Software books I wish I could read
2000 words about arrays and tables
Programming Language Escape Hatches
Maybe writing speed actually is a bottleneck for programming
Logic for Programmers Turns One
Hiring scouts to help me find guests
What I’ve been reading recently - Jan 10, 2026
Adam Marblestone – AI is missing something fundamental about the brain
An audio version of my blog post, Thoughts on AI progress (Dec 2025)
Sarah Paine – Why Russia Lost the Cold War
Thoughts on AI progress (Dec 2025)
Podcast Strategy Doc (December 2025)
Ilya Sutskever – We’re moving from the age of scaling to the age of research
RL is even more information inefficient than you thought
Satya Nadella — How Microsoft is preparing for AGI
Sarah Paine – How Russia sabotaged China’s rise
Thoughts on the AI buildout
Andrej Karpathy — AGI is still a decade away
Nick Lane – Life as we know it is chemically inevitable
Some thoughts on the Sutton interview
On The Vital Question by Nick Lane
Richard Sutton – Father of RL thinks LLMs are a dead end
Fully autonomous robots are much closer than you think – Sergey Levine
How Hitler almost starved Britain – Sarah Paine
Evolution designed us to die fast; we can change that — Jacob Kimmel
Some Data Should Be Code
Letting Claude Play Text Adventures
There Is No New Aesthetics
1Password Dependency Breaks Syntax Highlighting
Using the Brother DS-640 Scanner on NixOS
Books I Enjoyed in 2025
Coarse is Better
I Wish People Were More Public
Ad-Hoc Emacs Packages with Nix
Linux on the Fujitsu Lifebook U729
Agda on NixOS
Adding Planets to Celestia on macOS
Notes on Managing ADHD
Inboxes are Underrated
You Can Choose Tools That Make You Happy
Two Years of Rust
My Backup Infrastructure, 2025 Edition
We Live In a Golden Age of Interoperability
Domain-Agnostic and Domain-Specific Tools
Premium: The Hater’s Guide to Oracle
Premium: The AI Bubble Is A Time Bomb
Premium: This Is Worse Than The Dot Com Bubble
2025, A Retrospective
The Enshittifinancial Crisis
Premium - How The AI Bubble Bursts In 2026
Premium: Mythbusters - AI Edition
NVIDIA Isn’t Enron - So What Is It?
Premium: The Ways The AI Bubble Might Burst
Premium: The Hater’s Guide To NVIDIA
Premium: The Hater’s Guide To The AI Bubble Vol. 2
Exclusive: Here’s How Much OpenAI Spends On Inference and Its Revenue Share With Microsoft
Premium: OpenAI Burned $4.1 Billion More Than We Knew - Where Is Its Money Going?
Big Tech Needs $2 Trillion In AI Revenue By 2030 or They Wasted Their Capex
This Is How Much Anthropic and Cursor Spend On Amazon Web Services
MORE ENTICING THAN EVER: THE HYPNOVERSE
Someone At YouTube Needs Glasses: The Prophecy Has Been Fulfilled
I Finally Fixed My Locales In Arch Linux (Yes I Am Smart)
Golang’s encoding/XML is broken and no one seems to care
Adventures in Podcasting
Someone At YouTube Needs Glasses
Arch Linux on Surface Book 1
HP LaserJet 1200 on Linux
iptsd prevents hibernation
Introducing: Bean Simulator 2025
Nano Banana Pro is the best AI image generator, with caveats
Nano Banana can be prompt engineered for extremely nuanced AI image generation
Claude Haiku 4.5 does not appreciate my attempts to jailbreak it
Can modern LLMs actually count the number of b’s in “blueberry”?
LLMs can now identify public figures in images
Predicting Average IMDb Movie Ratings Using Text Embeddings of Movie Metadata
As an Experienced LLM User, I Actually Don’t Use Generative LLMs Often
The Best Way to Use Text Embeddings Portably is With Parquet and Polars
Can LLMs write better code if you keep asking them to “write better code”?
Generating Distinct AI Voice Performances By Prompt Engineering GPT-4o
The Importance of Diversity
Will I ever own a zettaflop?
The Coming War on Car Ownership
how do I stop participating?
you have three minutes to escape the perpetual underclass
Anthropic is making a huge mistake
Five years of tinygrad
The opinion that pisses everyone off
Computer Use Models
Bikeshedding, or why I want to build a laptop
Superlinear Returns
How to Do Great Work
How to Get New Ideas
The Need to Read
What You (Want to)* Want
Alien Truth
What I’ve Learned from Users
Heresy
Putting Ideas into Words
Is There Such a Thing as Good Taste?
Beyond Smart
Weird Languages
How to Work Hard
A Project of One’s Own
Fierce Nerds
Crazy New Ideas
An NFT That Saves Lives
The Real Reason to End the Death Penalty
How People Get Rich Now
Write Simply
This Week on The Analog Antiquarian
Omikron: The Nomad Soul
Homeworld
Huge for the Holidays: Epic Interactive Fiction of the Millennial Period
Mr. Roberts Goes to Hollywood, Part 2: The Producer
Mr Roberts Goes to Hollywood, Part 1: A Digital Anvil
The Space Sim’s Last Hurrah
A Looking Glass Half Empty, Part 2: A Series of Unfortunate Events
A Looking Glass Half Empty, Part 1: Just Lookin’ for a Hit
DOS Game Club
The Don’t “Contact Us” Page
You Can Just Say No to the Data
CTA Hierarchy in the Wild
New Year, New Website — Same Old Me
Easy Measures Doing, Simple Measures Understanding
In The Beginning There Was Slop
The AI Security Shakedown
A Letter of Feedback To Anyone Who Makes Software I Use
Creating “Edit” Links That Open Plain-Text Source Files in a Native App
To Make Software Is To Translate Human Intent Into Computational Precision
What happened to Packard Bell?
Gateway announces merger with eMachines, 1/30/2004
JTS: short-lived maker of 90s hard drives
What happened to Geocities
What happened to Sun Microsystems
Nvidia’s IPO on January 22, 1999
Why Intel stopped making motherboards
Transmeta Crusoe CPU
What happened to Blackberry?
Year 2038 problem
remotely unlocking an encrypted hard disk
pre-commit hooks are fundamentally broken
i’m just having fun
what is a build system, anyway?
I want a better build executor
I want a better action graph serialization
negative build dependencies
brownouts reveal system boundaries
the terminal of the future
build system tradeoffs
the core of rust
how to communicate with intent
an engineer’s perspective on hiring
you are in a box
constrained languages are easier to optimize
sorry for the rss screwup
operators, not users and programmers
complected and orthogonal persistence
how i write blog posts
how i use my terminal
Code like a surgeon
AI as teleportation
Enough AI copilots! We need AI HUDs
Is chat a good UI for AI? A Socratic dialogue
Stevens: a hackable AI assistant using a single SQLite table and a handful of cron jobs
Avoid the nightmare bicycle
AI-generated tools can make programming more fun
Your pie doesn’t need to be original (unless you claim it so)
7 books that stood the test of time in 2023
Codifying a ChatGPT workflow into a malleable GUI
Malleable software in the age of LLMs
Finding a broken trace on my old Mac with the help of its ROM diagnostics
Debugging BeagleBoard USB boot with a sniffer: fixing omap_loader on modern PCs
An update about the hidden Performa 550 recovery partition
Finding a 27-year-old easter egg in the Power Mac G3 ROM
Modifying an HDMI dummy plug’s EDID using a Raspberry Pi
Please don’t ship heavy, fragile vintage computers. They will be destroyed.
How I fixed the infamous Basilisk II Windows “Black Screen” bug in 2013
Apple’s long-lost hidden recovery partition from 1994 has been found
The gooey rubber that’s slowly ruining old hard drives
The invalid 68030 instruction that accidentally allowed the Mac Classic II to successfully boot up
Leaking the phone number of any Google user
Disclosing YouTube Creator Emails for a $20k Bounty
Leaking the email of any YouTube user for $10,000
Decoding Google: Converting a Black Box to a White Box
Compiling Scheme to WebAssembly
Summary of reading: October - December 2025
Plugins case study: mdBook preprocessors
Notes on the WASM Basic C ABI
A Brief History of Sega Enterprises
The Olivetti Company
The Osborne Computer Corporation
The History of Xerox
SRI & ARC
The QNX Operating System
Upgrading a Macintosh Classic II
The Story of Creative Technology
Cirrus Logic
The History of Windows XP
The History of Acer
Tandy Corporation, Part 4
Tandy Corporation, Part 3
The Tandy Corporation, Part 2
The Tandy Corporation, Part 1
The History of R2E and the Micral
Intel: Stumbling in the Spotlight
Intel: Winning and Losing
Chipzilla eats an Apple
Intel and the New Millennium
Is QSpy still cool? Let’s play QuakeWorld!
Building a 1997 Quake PC: Benchmarking GLquake
Building a 1997 Quake PC: Benchmarking Vquake
Building a 1997 Quake PC: Benchmarking Quake
Building a 1997 Quake PC!
Why WinQuake exists and how it works
Quake Engine Indicators
How quake.exe got its TCP/IP stack
Building my childhood dream PC
Why fastDoom is fast
Watching sunsets
SNES: Sprites and backgrounds rendering
How the SNES Graphics System works
Carving the Super Nintendo Video System
Inside the Super Nintendo cartridges
The evolution of the Super Nintendo motherboard
The hearts of the Super Nintendo
How the DevTeam conquered the iPhone
Why Android developers no longer need Windows USB drivers
How Apple’s Pro Display XDR takes Thunderbolt 3 to its limit
Hands-on with two Apple Network Server prototype ROMs
Stewart Cheifet has died
A Christmas 2007 video present from Old VCR with Jack Tramiel et al
The Texas Instruments CC-40 invades Gopherspace (plus TI-74 BASICALC)
Oblast: a better Blasto game for the Commodore 64
Rebecca Heineman has died
When UPS charged me a $684 tariff on $355 of vintage computer parts
They call it Mister Pibb (again)
The Apple Network Server MacOS ROMs have resurfaced
Back to the Southern Hemisphere Commodore 128DCR
The end of AOL dialup
Refurb weekend: Silicon Graphics Indigo² IMPACT 10000
Microsoft makes 6502 BASIC open source
Reverse-engineering Roadsearch Plus, or, roadgeeking with an 8-bit CPU
A real PowerBook: the Macintosh Application Environment on a PA-RISC laptop
So I saw this headline
Refurb weekend: Gremlin Blasto arcade board
See Jane 128 by Arktronics run (featuring Magic Desk, 3-Plus-1 and the Thomson MO5)
There’s not much point in buying Commodore
RIP Bill Atkinson
World’s Cheapest ARM Debugger is Actually RISC-V
MicroAlloc
Hosting a WebSite on a Disposable Vape
Making PCBs
J-Link RTT for the Masses
MicroPPPID
Pottery Is Great
About
Claude, Teach Me Something
What Every Argument About Sideloading Gets Wrong
On Async Rust
Stop Using (only) GitHub Releases
The Great Pendulum
NFTs, How Do They Work?
They Are Just Links
How to Delete All your Tweets
The Apps That Are Listening to You
An Analysis of Privacy on the App Store
Rondetafeloverleg Tweede Kamer over Solvinity: Position paper
Dashboard totale Amerikaanse afhankelijkheden
Europe’s executives need to skill up to solve our total US cloud dependency
AWS and Microsoft are selling much more than cloud services
Unsigned char std::basic_string<> in C++
The European Cloud Situation at the end of 2025
Cloud Overview
Nationaal Agentschap Baanbrekende Innovatie, in EU of niet?
Keynote opening Digital Commons EDIC: Moving beyond the Digital Uncommons
Makelaarstaal over onze belastinggeheimen
TU Delft lecture: Security of Science
Hello Europe, Joe Biden is gone
Het Nerdvote Effect
Restzetels en voorkeursstemmen
Cloud Kootwijk: Alles hangt af van de verkiezingen
The AI-collapse pre-mortem
Ga niet kapot aan je eigen overheid
Data, experts en politiek: een ongemakkelijke combinatie
Symposium toezicht AIVD en MIVD 29 September & Rowin Jansen
Data en de Democratische Rechtsorde
semaglutide-has-changed-the-world
chewier-foods-for-children
solving-macro
whats-wrong-with-a-for-loop
my-rustfmt-toml
git-collapse-commits
levers-in-the-brain
how-side-effects-work-in-fp
four-issues-facing-fp
automated-testing-in-bevy
a-hackers-case-for-crypto
Astral Codex Ten
ACXD
faq
anime-recommendations
Rust
writing-advice
cool-stickers
cool-people
impro-by-keith-johnstone
The Postcard and the Thing Itself (On Falling in Love with Ideas)
The Mirror With No Reflection
Consumerism: The First Universal Religion Humans Actually Practice
What If We Made Advertising Illegal?
The Antiportfolio: Counter-advice for Aspiring Artists
Your Teenage Self is Not a Bug, It’s a Feature
Why I Make Smart Devices Dumber: A Privacy Advocate’s Reflection
The Attention Wars: Why Creative Time Is Now Contraband
AI ‘Street Photography’ Isn’t Photography: What We Lose by Simulating Experience
Beyond Borgmann: Single-Task Tools and the Future of Meaningful Technology
The Productivity Paradox: Why Doing More Leads to Less
In Praise of Inconvenience: The Hidden Costs of a Convenient World
The Tapestry of Influence: The Inspirations That Shape Us
Being a Bridge Person
The Art of Deliberate Friction-Building
Time Machine inside a FreeBSD jail
Installing Void Linux on ZFS with Hibernation Support
Why I (still) love Linux
Static Web Hosting on the Intel N150: FreeBSD, SmartOS, NetBSD, OpenBSD and Linux Compared
Self-hosting your Mastodon media with SeaweedFS
The Email They Shouldn’t Have Read
FreeBSD vs. SmartOS: Who’s Faster for Jails, Zones, and bhyve VMs?
Introducing the illumos Cafe: Another Cozy Corner for OS Diversity
Make Your Own Backup System – Part 2: Forging the FreeBSD Backup Stronghold
New Article on BSD Cafe Journal: WordPress on FreeBSD with BastilleBSD
Make Your Own Backup System – Part 1: Strategy Before Scripts
How to install FreeBSD on providers that don’t support it with mfsBSD
Vibe Coding Will Rob Us of Our Freedom
The Day GlusterFS Tried to Kill My Career
The Server That Wasn’t Meant to Exist
Make Your Own Internet Presence with NetBSD and a 1 euro VPS – Part 1: Your Blog
Launching BSSG - My Journey from Dynamic CMS to Bash Static Site Generator
OSDay 2025 - Why Choose to Use the BSDs in 2025
Caching snac Proxied Media with Nginx
Rust RPN Calculator
Exploring Rust Traits
Using Virtual Environments in Python
Stop Using DRM on your Books
Adding Mastodon Comments to your Blog
How Do You Prove Humanity?
On the Importance of Hard Work
Using Gamepads and Joysticks in JavaScript
Websockets: Writing the Server
Websockets: Writing the Client
Intro to WebSockets
Writing a NodeJS webserver
Transforming numbers
Writing a jQuery plugin to create scrolling regions in HTML
HTML canvas scratcher revisited
Computing π with Chudnovsky and GMP
Object Pools
Image Processing Convolutions
Drag and Drop
JavaScript inheritance with Prototypes
About Paris
Bolted Down
Signal to Noise
The Chair
AUC
Events
Secret Lab
West Coast Space Centre
Writing
Yarn Spinner
Posts
We Made a Game About a 1993 Hint Line
State of Play: How Australian States Are (Not) Governing AI
Why We Don’t Use AI
Australia’s AI Safety Institute: Lessons from the UK and US
We released Yarn Spinner 3.1
Space News, December 2025
Slop for the People
Australia’s social media ban… A looming implementation disaster
How to create a tool library in Airtable
Using Roam Highlighter with Logseq
Tracking LinkedIn profile analytics with Airtable
Pulling the plug on Roamflow
Task Management in Roam Research
Journal Prompts in Roam Research
Rebuilding my website with NextJS, Chakra UI and Airtable
Annual Review 2020
50 days of meditation
Favorite Books of 2019
The Year of the 3D Printed Miniature (And Other Lies We Tell Ourselves)
SQLite for a REST API Database?
Making RSS More Fun
I broke and fixed my Ghost blog
Greenland is a beautiful nightmare
FYI: Broadcom is ruining Bitnami containers
What Does a Post-Google Internet Look Like
What Would a Kubernetes 2.0 Look Like
Simple Python Script for FTP Uploads
Write your own Ghost Theme
TIL Simple Merge of two CSVs with Python
GitHub Copilot for Vim Review
Slack: The Art of Being Busy Without Getting Anything Done
How to get a DID on iOS easily
Help Me Help You, Maintainers
What Makes the Intro to Crafting Interpreters so Good?
How to Get Meaningful Feedback on Your Design Document
The Software Essays that Shaped Me
Adam Gordon Bell on Attracting Customers through Blogging
Reader Feedback about my Chapter List
Underused Techniques for Effective Emails
How to Write Compelling Software Release Announcements
How to Write Blog Posts that Developers Read
HN Popularity Contest
How to Write Useful Commit Messages
Can You Spot the Passive Voice?
Can You Spot the Passive Voice?
Passive Voice Considered Harmful
Rules for Writing Software Tutorials
Sample Blog Editing Notes
Getting Forked by Microsoft
Kubernetes Generated Secret
Cross Compiling Docker Images
Laine Cloud
Alfrodull
Ubiquiti And VPN Clients
Common S3 Static Website Problems
UCNB
The Department of War Directory
The Department of War Just Shot the Accountants and Opted for Speed
It only took 20 years, but the Strategic Management Society now Believes the Lean Startup is a Strategy
How to Sell to the Dept of War – The 2025 PEO Directory – Now with 500 more names
No Science, No Startups: The Innovation Engine We’re Switching Off
When Sh!t Hits the Fan – Founders in a Crisis
How To Sell to the Dept of War – The 2025 PEO Directory
Blind to Disruption – The CEOs Who Missed the Future
Why Investors Don’t Care About Your Business
Lean Launchpad at Stanford – 2025
Hacking for Defense @ Stanford 2025 – Lessons Learned Presentations
Teaching National Security Policy with AI
How the United States Gave Up Being a Science Superpower
How the U.S. Became A Science Superpower
Quantum Computing – An Update
How Saboteurs Threaten Innovation–and What to Do About It
What Does Product Market Fit Sound Like? This.
How To Find Your Customer In the Dept of Defense – The Directory of DoD Program Executive Offices
Security Clearances at the Speed of Startups
Why Large Organizations Struggle With Disruption, and What to Do About It
Sorry for marking all the posts as unread
A multi-entry CFG design conundrum
The GDB JIT interface
Load and store forwarding in the Toy Optimizer
ZJIT is now available in Ruby 4.0
How to annotate JITed code for perf/samply
A catalog of side effects
Walking around the compiler
Linear scan with lifetime holes
Liveness analysis with Datalog
Linear scan register allocation on SSA
I built a timer I can’t fail to set
Free software scares normal people
Objectivity is superstition
Chat is a bad UI pattern for development tools
Data Center Monitoring
Artificial Intelligence
Maritime Marketplace
Secure File Transfer
Atomic Design in 1998
Resource Management
Weekly Update 488
Weekly Update 487
Weekly Update 486
Who Decides Who Doesn’t Deserve Privacy?
Weekly Update 485
Weekly Update 484
Weekly Update 483
Weekly Update 482
Processing 630 Million More Pwned Passwords, Courtesy of the FBI
Weekly Update 481
Why Does Have I Been Pwned Contain “Fake” Email Addresses?
Weekly Update 480
Weekly Update 479
Weekly Update 478
Weekly Update 477
Things that work (for me)
Discovery and AI
Grow slowly, stay small
Messing with bots
Aggressive bots ruined my weekend
Attending MicroConf Europe 2025
Smartphones and being present
PIRACYKILLS
Miscellaneous updates
Slow social media
LLMs are a 400-year-long confidence trick
Things that made me think: Cycle time, learning theory, and build chain security
Does my toaster love me?
Things that made me think: Digital gardening, web degradation, and digital ghosts
Optimising for trust
Things that made me think: Enshittification, apathy, and discrimination
The sound of inevitability
Saying the quiet part out loud
Cull your dependencies
Does the software industry learn?
Should we welcome or fear the Metaverse?
DORA? I barely know her!
Staying in one place doesn’t mean standing still
Make yourself a happy place in your inbox - a mindfulness tip for your working day
Twitter network graphing with Gephi
XTC discusses Basecamp’s Shape-Up
The Temple of Fail
“Efficiency” is bad for your health, and your learning
Offline knowledge, buses, and note-taking
Setting up a bottom-end Chromebook for development
How I Reversed Amazon’s Kindle Web Obfuscation Because Their App Sucked
Building The Language Model Nobody Asked For
Defeating DevTools Detection
Attacking a stack based JavaScript virtual machine
Recursive vs Linear JSVM Disassembly
A Clever (but not so good) Scraper Protection
Try-Catch Control Flow Obfuscation
Overview of JavaScript Virtualization Obfuscation
Javascript obfuscation tricks
Branch Encryption
Cloning your Discord friends with Large Language Models
Two kinds of AI users are emerging. The gap between them is astonishing.
Turns out I was wrong about TDD
Why sandboxing coding agents is harder than you think
The Coming AI Compute Crunch
Which programming languages are most token-efficient?
I ported Photoshop 1.0 to C# in 30 minutes
Why I’m building my own CLIs for agents
Travel agents took 10 years to collapse. Developers are 3 years in.
Are we dismissing AI spend before the 6x lands?
Minification isn’t obfuscation - Claude Code proves it
AI agents are starting to eat SaaS
Has the cost of building software just dropped 90%?
Are we in a GPT-4-style leap that evals can’t see?
I Finally Found a Use for IPv6
How I use Claude Code to manage sysadmin tasks
Could Excel agents unlock $1T in economic value?
Are we really repeating the telecoms crash with AI datacenters?
A non-technical CFO is shipping better code than the agencies he hired
Tracking MCP Server Growth
Notes from MCP Dev Summit Europe: Where the Protocol Is Headed
Testing Opus 4.5 For C Programming
Hot reloading is better than SwiftUI previews
I Made A Real-Time Build Visualizer
A Fast, Growable Array With Stable Pointers in C
Type Safe Generic Data Structures in C
A New Sudoku Layout With 81 Uniquely Shaped Cells
Learn Shader Programming with Rick and Morty
Why Swift’s Type Checker Is So Slow
Making a 3D Modeler, in C, in a Week
Good Ideas in Computer Science
Aperiodic Tilings V: the Refinable Frontier
Brute-forcing Langley’s geometry problem with field extensions
In which I have Opinions about parsing and grammars
Policy of transience
Iconography of the PuTTY tools
Git without a forge
XOR
Post-quantum public-key encryption: what’s it all about?
Separation of concerns in a bug tracker
Possibly all the ways to get loop-finding in graphs wrong
Code review antipatterns
Symbiosisware
Beyond “Beyond the wall”
Beyond the wall: working with aperiodic tilings using finite-state transducers
Writing commit messages
I hate bubblesort
Stop helping!
Philosophy of coroutines
Writing custom C++20 coroutine systems
Workarounds for C11 _Generic
Manufacturing as Maintenance
LLM Memory
Claude Code
Solution-space Taste
Sorting Algorithm: The Game
Typo Minimizing Keyboard
The Curve is Bending
Graph Search Algorithm: The Game
Rohit Chess
AI software I’m surprised doesn’t exist yet
Technocapital
Writing a good design document
Design Patterns
How to write complex software
Bureaulogy
A peasant’s plight
Every Man his own API
Culture is a set of social Schelling points
Portals are Undertheorized
Binary IQ
I know your secret
Text is king
How to be less awkward
The drug that taught me how much I should suffer
Secrets of the ancient memelords
You say potato, I say leprosy
The Decline of Deviance
Bamboozle me, daddy
Thank you for being annoying
Blog Extravaganza 2025: the winners
Use this magic bullet to shoot yourself in the foot
Bag of words, have mercy on us
Do conversations end when people want them to?
Revenge of the Blockheads
Underrated ideas in psychology, vol. III
Face it: you’re a crazy person
Three Dumb Studies for your consideration
The Second Annual Blog Post Competition, Extravaganza, and Jamboree
New paradigm for psychology just dropped
28 slightly rude notes on writing
I know you don’t want them to want AI, but…
Vibe Coding: Empowering and Imprisoning
They have to be able to talk about us without us
What about “Nothing about us without us?”
How the hell are you supposed to have a career in tech in 2026?
500,000 tech workers have been laid off since ChatGPT was released
How Markdown took over the world
How to know if that job will crush your soul
Wikipedia at 25: What the web can be
Codeless: From idea to software
Why We Speak
A Codeless Ecosystem, or hacking beyond vibe coding
Fav tech museums
The Clock
The primitive tortureboard
The new homepage
The day Return became Enter
Frame of preference
Steve Jobs, Jef Raskin, and the first great war for your thumbs
A hacker’s guide to bending the universe
In the footsteps of Robert Moses
Seesaws for giants
The hardest working font in Manhattan
Coding Agent VMs on NixOS with microvm.nix
Can I finally start using Wayland in 2026?
Self-hosting my photos with Immich
My impressions of the MacBook Pro M4
NixCon 2025 Trip Report 🐝
Bye Intel, hi AMD! I’m done after 2 dead Intels
Secret Management on NixOS with sops-nix
Development shells with Nix: four quick examples
Migrating my NAS from CoreOS/Flatcar Linux to NixOS
How I like to install NixOS (declaratively)
My 2025 high-end Linux PC 🐧
In praise of grobi for auto-configuring X11 monitors
Intel 9 285K on ASUS Z890: not stable!
Tips to debug hanging Go programs
Go Protobuf: The new Opaque API
How to Add a Quick Interactive Map to your Website
A Year In Review: Flask in 2025
CSRF Protection without Tokens or Hidden Form Fields
How to Securely Store Secrets in Environment Variables
Python 3.14 Is Here. How Fast Is It?
Benchmarking MicroPython
Why Generative AI Coding Tools and Agents Do Not Work For Me
Create a React + Flask Project in 2025
Font Ligatures for your Code Editor and Terminal
A Review of The Quick Python Book, Fourth Edition
How I replaced Baremetrics and ChartMogul with Rake
How to Implement API Key Authentication in Rails Without Devise
How to Generate Secure License Keys in 2026
How to Build a Webhook System in Rails Using Sidekiq
How to License and Distribute a Private Node Module
How to License and Distribute an Electron App
That Time I Told My Wife I Wanted to Quit My Job
From Side-Project to Full-Time: 5 Things I’ve Learned in 5 Years
How to Implement TOTP 2FA in Rails using ROTP
Good SaaS Products Are Like UNIX Tools
How to License and Distribute a Private Docker Image
How to License and Distribute a Private Ruby Gem
What is a Perpetual Software License?
I Quit!
Announcing License Key Authentication
How to Safely Change the Argument Signature of a Sidekiq Job
How to Use Hexadecimal Ed25519 Public Keys in Node.js
Why Freemium Pricing Is So Popular
Announcing Cryptographic License Files
Upgrading Your Keygen API Integration From v1.0 to v1.1
Not here
How did IRC ping timeouts end up in a lawsuit?
Where are we on X Chat security?
Investigating a forged PDF
Cordoomceps - replacing an Amiga’s brain with Doom
Secure boot certificate rollover is real but probably won’t hurt you
Why is there no consistent single signon API flow?
My a11y journey
Locally hosting an internet-connected server
How Twitter could (somewhat) fix their encrypted DMs
Twitter’s new encrypted DMs aren’t better than the old ones
Failing upwards: the Twitter encrypted DM failure
The GPU, not the TPM, is the root of hardware DRM
When should we require that firmware be free?
Android privacy improvements break key attestation
What the fuck is an SBAT and why does everyone suddenly care
Client-side filtering of private data is a bad idea
SSH agent extensions as an arbitrary RPC mechanism
Digital forgeries are hard
Debugging an odd inability to stream video
the essence of frigidity
air traffic control: the IBM 9020
Flock and Urban Surveillance
speed reading (the meaning of language)
RuBee
memories of .us
the steorn orbo
The Ascent to Sandia Crest II
The Ascent to Sandia Crest
T-carrier