A few weeks ago I introduced Pure Blog a simple PHP based blogging platform that I've since moved to and I'm very happy. Once Pure Blog was done, I shifted my focus to start improving my commenting system . I ended that post by saying:
At this point it's battle tested and working great. However, there's still some rough edges in the code, and security could definitely be improved. So over the next few weeks I'll be doing that, at which point I'll probably release it to the public so you...

When I was in high school, I used to keep a pencil or pen up my sleeve. I don’t remember anyone else doing it, or why I started. But if I had a pen up my sleeve, I would at least know I had one nearby for when I’d need one. (I may be mis-remembering whether having a pen up my sleeve actually helped me remember one (oh the irony!). I remember a lot of times that I would forget a pen or a pencil. My organisational skills are better now, although still more on the chaotic side than I would like...

We talked a couple issues ago about the application of Linearity of Expectation to building intuition about Copysets , and the ways that we're both constrained and freed by the laws of probability.
Evan recently pointed out a cool paper and writeup to me that can be understood in a similar way.
Here's the problem as he described it to me:
This is a really basic idea: generate unique IDs, in this case, that are going to be embedded in RocksDB SST files. The goal: don't have collis...
Implementing a clear room Z80 / ZX Spectrum emulator with Claude Code
antirez.comAnthropic recently released a blog post with the description of an experiment in which the last version of Opus, the 4.6, was instructed to write a C compiler in Rust, in a “clean room” setup.
The experiment methodology left me dubious about the kind of point they wanted to make. Why not provide the agent with the ISA documentation? Why Rust? Writing a C compiler is exactly a giant graph manipulation exercise: the kind of program that is harder to write in Rust. Also, in a clean room expe...

https://austinhenley.com/blog/dearresearchers.html https://austinhenley.com/blog/dearresearchers.html https://austinhenley.com/blog/dearresearchers.html
As part of writing Logic for Programmers I produced a lot of “chaff”, code samples and sections I wrote up and then threw away. Sometimes I found a better example for the same topic, sometimes I threw the topic away entirely. It felt bad to let everything all rot on my hard drive, so I’m sharing a bunch of chaff for a tool called “Z3”, which has all sorts of uses in software research. As part of writing Logic for Programmers I produced a lot of “chaff”, code samples and sections I...
How fast do browsers correct UTF-16 strings?
lemire.me
JavaScript represents strings using Unicode, like most programming languages today. Each character in a JavaScript string is stored using one or two 16-bit words. The following JavaScript code might surprise some programmers because a single character becomes two 16-bit words.
> t="🧰"
'🧰'
> t.length
2
> t[0]
'\ud83e'
> t[1]
'\uddf0'
The convention is that \uddf0 is the 16-bit value 0xDDF0 also written U+DDF0.
The UTF-16 standard is relatively simple. There are three types of values....

At my workplace, a lot of folks are coming to Go from Python and Kotlin. Both languages have
structured concurrency built into their async runtimes, and people are often surprised that
Go doesn’t. The go statement just launches a goroutine and walks away. There’s no scope
that waits for it, no automatic cancellation if the parent dies, no built-in way to collect
its errors.
This post looks at where the idea of structured concurrency comes from, what it looks like
in Python and Kotlin, an...

Last weekend Clara and I found an NZXT tower by the side of the road for bulk council rubbish collection. I took it home, was attacked by a spider, then pulled the case apart for parts I can use on other projects. But one question remained: does the computer itself work? Let’s find out.
Law and Order DUN DUN.
Initial setup
On Monday evening I removed the motherboard and power supply, cleaned the dirt and leaves out of the CPU heatsink (there was… a lot), then set it all up on the h...
Last week I had the pleasure of meeting Alex Bellos in Oxford. Among other things Bellos writes the Guardian Monday puzzle column . He gave me a copy of his latest book, Puzzle Me Twice , where the obvious answer is not correct. I got more right than wrong, but I hated being wrong. Here is one of those puzzles, Sistery Mystery (page 28), which is a variation of a puzzle from Rob Eastaway . Puzzle 1: Suppose the probability of a girl is 51% independently and uniformly over all children. In...

Intuition breaks down once we’re dealing with the endless. To begin with: Some infinities are bigger than others. The post How Can Infinity Come in Many Sizes? first appeared on Quanta Magazine Intuition breaks down once we’re dealing with the endless. To begin with: Some infinities are bigger than others. The post How Can Infinity Come in Many Sizes? first appeared on Quanta Magazine The post How Can Infinity Come in Many Sizes? first appeared on Quanta Mag...

LOC
Host
HM
ADTs
Match
Cl.
Target
Hirrolot's CoC
src
~70
OCaml
✗
✗
✗
✓
Interpreter
Harrop MiniML
src
~100
OCaml
✗
✗
✗
✗
LLVM → native
Algorithm W
src
~300
Haskell
✓
✗
✗
✗
Type checker only
tomprimozic/type-systems
src
~300
OCaml
✓
✗
✗
✗
Type checker only
lambda-calculus-hs
src
~200–900
Haskell
✗
✓
✓
✓
Interpreter
THIH
sr...
Moon Monday #263: Artemis II, a Canadian capcom, Chandrayaan, and Long March 10
jatan.spaceArtemis II launch delayed again On February 19, NASA successfully fully fueled the SLS rocket and performed a practice countdown test ahead of the upcoming launch of the Artemis II mission to fly four astronauts around the Moon and back. This was a repeat of the February 2 test which hadn’t gone as planned due to excessive hydrogen leaks. This time around the leaks remained under NASA’s deemed allowable limits thanks to new seals installed after the first test. All seemed ...

Last week I read a post by designer and frontend dev, Theodore Soti:
Stop clearing forms with JavaScript.
The browser already knows how.
I still see a lot of apps using custom code to track inputs and reset state.
But for many forms, you can just use the native reset button.
That reset button restores every field to its initial value.
Text inputs. Checkboxes. Radios. Selects. Textareas.
No event listeners.
No state management.
No missed fields and strange edge cases.
...

An upside-down model built by architect Antoni Gaudi, used to determine the shape of arches. Via Data Physicalization . Welcome to the reading list, a weekly roundup of news and links related to buildings, infrastructure, and industrial technology. Roughly 2/3rds of the reading list is paywalled, so for full access become a paid subscriber. Housing A map of how home prices have shifted in the last year. Prices in the midwest and parts of the northeast are up, prices in the south are down. [ X ]...

Recently, I got nerd-sniped by this exchange between Jeff Dean and someone trying to query 3 billion vectors.
I was curious to see if I could implement the optimal map-reduce solution he alludes to in his reply.
A vector is a list/array of floating point numbers of n dimensions, where n is the length of the list. The reason you might perform vector search is to find words or items that are semantically similar to each other, a common pattern in search, recommendations, and generative...
It’s hard to get optimizers right. Even if you build up a painstaking test
suite by hand, you will likely miss corner cases, especially corner cases at
the interactions of multiple components or multiple optimization passes.
I wanted to see if I could write a fuzzer to catch some of these bugs
automatically. But a fuzzer alone isn’t much use without some correctness
oracle—in this case, we want a more interesting bug than accidentally
crashing the optimizer. We want to see if the optimi...
I quit my job at EnterpriseDB hacking on PostgreSQL products last
month to start a company researching and writing about software
infrastructure. I believe there is space for analysis that is more
focused on code than TechCrunch or The Register, more open to covering
corporate software development than LWN.net, and (as much as I love
some of these folks) less biased than VCs writing about their own
investments.
I believe that more than ever there is a need for authentic and
trustworthy analysi...

I've started a new project to collect and document Agentic Engineering Patterns - coding practices and patterns to help get the best results out of this new era of coding agent development we find ourselves entering.
I'm using Agentic Engineering to refer to building software using coding agents - tools like Claude Code and OpenAI Codex, where the defining feature is that they can both generate and execute code - allowing them to test that code and iterate on it independently of turn-by-...
My job has me travel a lot. When I'm in my office I normally have a seven monitor battlestation like this:
[image or embed] — Xe ( @xeiaso.net ) January 26, 2026 at 11:34 PM
So as you can imagine, travel sucks for me because I just constantly run out of screen space. This can be worked around, I minimize things more, I just close them, but you know what is better? Just having another screen.
On a whim, I picked up this 15.6" Innoview portable monitor off of Ama...
For some weird combination of factors, I ended up answering questions to three different people for three entirely unrelated projects, and all three interviews went live around the same time.
I answered a few questions for the Over/Under series run by Hyde . Love the concept, this was a lot of fun.
I also answered a few questions from Kai since he’s running a great series where he asks previous IndieWeb Carnival hosts to share some thoughts about the theme they chose.
And lastly,...

In case you didn't hear, PEP 810 got accepted which means Python 3.15 is going to support lazy imports! One of the selling points of lazy imports is with code that has a CLI so that you only import code as necessary, making the app a bit more snappy at startup. A common example given is when you run --help you probably don't need all modules imported to make that work. But another use case for CLIs and lazy imports is subcommands where each subcommand very likely only needs a subset of modul...
Progress grinds forward as the great filter looms. ...
Read More
Progress grinds forward as the great filter looms. ...
Read More
Progress grinds forward as the great filter looms. ...
... Read More Read More