RSS Amplifier

Blog

Blog | jackkelly.name

Latest posts on jackkelly.name

jackkelly.nameSource feed ↗10 posts

Live Last read · last published · next check

Written by

Latest posts

Adding Optional Support for pthreads

On one of my projects, I decided I wanted to provide optional support for pthreads, because I wanted portability to dinosaur compilers. Not only did I want pthreads, but I only wanted to use them if <stdatomic.h> was available. This took a bit of finagling to get right, so I’ve written it up here. Per the Autotools Mythbuster , the correct way to indicate optional dependencies is to check for them…

Lambda on Lambda: Serverless Haskell on AWS

Earlier this week, I gave a talk at the Melbourne Compose Group ( mailing list ) about using Haskell to implement AWS Lambda functions. Lambda is AWS’s “function-as-a-service offering”, where your code runs in an isolated “microVM” on AWS-managed infrastructure and you pay only for the resources used while your code runs. As a mature AWS service, Lambda has a lot of features and knobs, and many of…

How Copyover MUD Servers Worked

When I was younger, I played a lot of MUDs (“ Multi-User Dungeons ” — the text-only predecessors of modern MMORPGs, often played over Telnet ). They were great fun, particularly during high school: a lightweight multiplayer game with no client state meant you could log in from any machine in any lab, even Windows shipped a Telnet client in those days, the Telnet protocol was light enough to run on…

NixOS and Actually Portable Executables

I’ve been very impressed by the Cosmopolitan Libc project and the αcτµαlly pδrταblε εxεcµταblε file format that makes it all possible. Building a crazy polyglot binary that works on two architectures and half-a-dozen operating systems is one thing, but Mozilla’s Llamafile project showed that APEs were more than just a cool hack: it’s stunning that I just download a reasonably smart LLM to my…

A Dictionary of Single-Letter Variable Names

Haskell’s expressive type system means that type signatures can carry a lot of information. Haskell’s polymorphism means that you sometimes write functions that work across an enormous range of types, and are left wondering “what do I actually call my variables?”. It is often the case that there’s nothing to say beyond “this variable is a Functor ”, or “this variable is a monadic action”, and so a…

Travel Tip: USB-C Desktop Chargers

I have travelled a lot this year, and after yet another trip where I lugged too many things around, I’ve been thinking about ways to cut back. The classic guide for this is onebag.com , which covers a very interesting mix of techniques and some carefully-chosen lightweight gear that will take you to the farthest corners of the map. Perma-nomad Vitalik Buterin has his own take on living out of a…

I'm Funding Ladybird Because I Can't Fund Firefox

I’ve been meaning to write this one for a while, but the announcement of the Ladybird Browser Initiative makes now a particularly good time. TL;DR: Chrome is eating the web. I have wanted to help fund a serious alternative browser for quite some time, and while Firefox remains the largest potential alternative, Mozilla has never let me. Since I can’t fund Firefox, I’m going to show there’s money…

Why `streaming` Is My Favourite Haskell Streaming Library

It’s really easy to misuse lazy I/O (e.g., hGetContents ) in nontrivial Haskell programs. You can accidentally close a Handle before the computation which reads from it has been forced, and it’s hard to predict exactly when data will be produced or consumed by IO actions. Streaming libraries in Haskell avoid these problems by explicitly interleaving the yielding of data and execution of effects,…

Which Build Tool For A Bootstrappable Project?

I have a nascent side project which is intended to participate in a bootstrap chain . This means it shouldn’t depend on too many things, that the transitive closure of its build dependencies must also be small, and at no point in the process should any build depend on an opaque binary blob. Choices on the language side are pretty constrained. Zig is currently not a candidate (despite the language…

The Road to Amazonka 2.0

Last month, Brendan Hay and I released the 2.0 version of Amazonka , the de facto but unofficial AWS SDK for Haskell. Before that, Amazonka had seen intermittent commits and some pretty major improvements, but hadn’t managed an actual release in about four years. Because of the lack of visible progress, more serious industrial users maintained private forks instead of contributing to the main…