Have you used Matrix? Do you like it? Trick question, of course you don’t. It seems like nobody likes Matrix, at least not once they’re familiar with its… quirks. It’s frustratingly overengineered, difficult to work with, full of bugs, and its insistence on E2EE makes it hard for nontechnical users to comprehend. For the past several months, I’ve been working on a better solution for federated chat. Chatterbox is a new protocol that, I hope, will make federated chatrooms actually ni...| Adam Nelson
When writing a README for Chatterbox (my attempt at a new federated chat protocol), I wanted to explain all of my design choices. One that quickly gave me trouble was the API’s format: it uses Protobuf over a single WebSocket connection, instead of a REST API. Why did I do it this way? The obvious answer is that it’s just interesting to me. I have a lot of trouble choosing boring technology, because I have to keep the project interesting enough for me to stick to it. I reimplemented somet...| Adam Nelson
I was inspired, after reading the excellent blog post Let Futures Be Futures, by the author’s thought experiment of a language in which all functions are coroutines and this is used to express asynchronicity: async functions can yield a type called Pending when awaiting some async action, while pure, synchronous functions can yield Never, indicating that they never yield at all. The more I thought about this, the more I realized that a strongly-typed language in which every function is a co...| Adam Nelson
tl;dr: Don’t even try online converters. They’ll drop the CJK characters. Just install woff-tools and/or woff2 on your own machine. Most Linux package managers will have them; on Windows, you can use…| Adam Nelson
Consider this Scheme expression, taken from the Rosetta Code example for the Mandelbrot set:| Adam Nelson
Object-oriented programming is out of fashion now, and it has been for a while. Rarely are new programming languages intentionally object-oriented. And there are good reasons for this: OO often requires a lot of boilerplate, it forces code into unnatural object hierarchies, and it encourages hidden mutable state. But, if we made a new statically-typed OO language from scratch in 2021, something in the vein of Java or C#, taking everything we've learned from functional programming and a decade...| Adam Nelson