Abstract Nonsense

A place for musings, observations, design notes, code snippets - my thought gists.

The Outsider by Albert Camus

Just finished The Outsider by Albert Camus (also known as The Stranger). Reading it felt like walking through an impressionist painting. Finishing it, one is left with a slightly blurred picture of a life — bleak yet nostalgic, emotionally distant yet resoundingly poignant.

One feels as much an Outsider to the book as the protagonist himself.

Some highlights:

  • New word learnt: “lading”: put cargo onboard a ship
  • Wine with lunch! How quintessentially French…
  • Trams everywhere! A halcyon stalwart construction of bygone days

Despite the surrealism, everything feels strangely real - detached, yet vivid. The first-person voice and inner monologue makes everything feel in equal parts clear and blurry. I don’t know how much the various English translations differ, but this edition felt super crisp and readable. I was expecting it to be a more ponderous read, but the langauge was fresh and crisp.

Reading it in the autumn made me think

Existentialism is to falling leaves as a book is to trees — both are susurrations of impermanence; one traces the shedding of meaning, the other preserves. What is lost and what remains.

Structured outputs from LLMs

This is more of a “to-do” than anything, but I really love the idea of inference-time next-token probability-distribution hacking to enforce structured outputs. There’s this neat Python library outlines that I’d love to explore in more depth - it even supports context-free grammars for output guiding!

To uv or not to uv

uv is a blazing fast Python package manager that aims to displace pip. It’s a really slick tool that lets you go from git clone to executing code with all the dependencies seamlessly. All the standard accolades apply: written in Rust, beautiful terminal UI, well thought-out user ergonomics … all written by Astral, the same company that gave the Python community ruff.

But what makes it so damn fast? Under the rusty hood, the magic is even more impressive. Charlie Marsh, the project lead, presented at Jane Street and revealed some of the inner workings. The whole talk is super interesting, but some standout highlights are:

  1. uv has it’s own SAT solver implementation to resolve dependency package versions much faster than e.g. pip or conda. (@16:09)
  2. Interesting tricks around implementing efficient representations of dependency metadata in Rust data structures to allow super-fast solves. The team effectively wrote their own package version number parser and represented them cleverly inside a single u64 to enable fast dependency comparisons as scalar integer comparisons. (@25:47)
  3. Some very clever usage of HTTP Range Requests to heuristically slice into compressed PyPi .zip package archives to parse package metadata from package registries, without having to retrieve the entire .zip from PyPi first. (@31:42)
  4. A very clever cache design to enable super fast ephemeral Python venv creation, with some Rust zero-copy serialisation magic. (@34:49, @37:27)

So, to uv or not to uv? I’d definitely give uv a try - it really makes Python feel like magic.

Inverse UMAP transforms

TIL that the dimensionality reduction algorithm UMAP1 has support for inverse transforms!

Naturally, these are lossy inverses, but being able to generate novel examples of, for example, handwritten digits (yep, classic MNIST once again) is exceedingly cool.

The example images of handwritten digits here are sampled from the compressed planar space, and “inverted” into the original “image space”.

On a related note, the whole explanatory article for UMAP is a beautiful work of exposition, full of rich ideas that make one ponder deeply. I only wish I understood everything in here end-to-end.


  1. See also Week 21 from the microblog. ↩︎

Irregular Expressions

Someone at work asked if it’s possible to validate credit card numbers with the Luhn algorithm in regex.

Technically, a regular language could recognise valid fixed-length credit card numbers by brute-force enumerating all possible sequences. But as a more general solution, I don’t think DFAs can support the modular arithmetic required for arbitrary sequence lengths…

Possible or not, I feel incredibly nerd sniped.