Goodbye, Node.js Buffer
It’s time to move from Buffer to Uint8Array.
Explaining my fast 6502 code generator
To learn how optimizing compilers are made, I built one targeting the 6502 architecture . In a bizarre twist, my compiler generates faster code than GCC, LLVM, and every other compiler I compared it to.
Text Editor Data Structures: Rethinking Undo
Undo and redo have been a staple operation of text editors probably since the first typo was ever made, yet there has not been a lot of innovation around refining the idea of what undo and redo could be. Let’s explore what I mean…
GitHub Renamed Me (2014)
Github Renamed Me - We will change your SSH keys and you will like it
Learnings from fine-tuning LLM on my Telegram messages
For most people I interact with, I’m just another text-based program for the most of the time. If input and output are so simple, could I be replaced by the model? For this to work, the model would need to not only understand my writing style but also know a lot about me. The best source for this is my Telegram…
Committing Without Git
How does git store different versions of a file? What about a commit? Find out creating your own commit without the help of git.
A four year plan for async Rust
Four years ago today, the Rust async/await feature was released in version 1.39.0. The announcement post says that “this work has been a long time in development – the key ideas for zero-cost futures, for example, were first proposed by Aaron Turon and Alex Crichton in 2016”. It’s now been longer since the release of…
No one wants simplicity
We think we do, but in fact every web developer will happily sacrifice simplicity to the first shiny thing promising them relief from the mildest of ailments.
Analyzing multi-gigabyte JSON files locally
I’ve had the pleasure of having had to analyse multi-gigabyte JSON dumps in a project context recently. JSON itself is actually a rather pleasant format to consume, as it’s human-readable and there is a lot of tooling available for it. JQ allows expressing sophisticated processing steps in a single command line, and…
How to make LLMs go fast
Blog about linguistics, programming, and my projects
The Code Review Pyramid (2022)
Table of Contents FAQ When it comes to code reviews, it’s a common phenomenon that there is much focus and long-winded discussions around mundane aspects like code formatting and style, whereas …
Thoughts on what a next Rust compiler would do
In Rust in 2023, @nrc floated an idea of a Rust compiler rewrite. As my hobby is writing Rust compiler frontends (1, 2), I have some (but not very many) thoughts here! The post consists of two parts, covering organizational and technical aspects.
Notes from building a blog in Django
We launched the Datasette Cloud blog today. The Datasette Cloud site itself is a Django app - it uses Django and PostgreSQL to manage accounts, teams and soon billing and payments, then launches dedicated containers running Datasette for each customer.
How to Survive Your Project's First 100k Lines
After many years of development, the Vale compiler just hit its 100,000th line of code.
Bare-Metal Kubernetes, Part I: Talos on Hetzner
I’ve been running a Kubernetes cluster on a mix of virtual and bare metal machines with Hetzner for about a year now, and while the setup has served me well, being a very exploratory exercise at the time it wasn’t very well documented.
Bubble sort in pure CSS
Imagine you are in an interview and you get asked "can you implement bubble sort"...and you answer...
Kubernetes Needs an LTS
There is no denying that containers have taken over the mindset of most modern teams. With containers, comes the need to have orchestration to run those containers and currently there is no real alternative to Kubernetes. Love it or hate it, it has become the standard platform we have largely
How a Zig IDE Could Work
Zig is a very interesting language from an IDE point of view. Some aspects of it are friendly to IDEs, like a very minimal and simple-to-parse syntax (Zig can even be correctly lexed line-by-line, very cool!), the absence of syntactic macros, and ability to do a great deal of semantic analysis on a file-by-file basis…
Unpacking Elixir: Resilience
The nine nines. 99.9999999% of uptime. Whether the AXD301 actually deserves to be held up as a system of nine nines seems debatable. I am not particularly interested in that debate. Erlang has a strong record for reliability and a design intended to help you as a developer and operator achieve your nines. Maybe just…
The Illustrated GPT-2: Visualizing Transformer Language Models (2019)
Discussions: Hacker News (64 points, 3 comments), Reddit r/MachineLearning (219 points, 18 comments) Translations: Simplified Chinese, French, Korean, Russian, Turkish This year, we saw a dazzling application of machine learning. The OpenAI GPT-2 exhibited impressive ability of writing coherent and passionate essays…
GNUStep now has badges
Finally I got around implementing and committing badge support in GNUStep ! I think it is one of the fine additions Apple did to the origina...
Why Async Rust?
Async/await syntax in Rust was initially released to much fanfare and excitement. To quote Hacker News at the time:
Shells are two things
Command languages and scripting languages are and should be different things.
Docker Is Four Things
Docker is not just a way of running programs on Linux without a virtual machine. Docker is 4 things.
The best WebAssembly runtime may be no runtime
When we think “a fast AOT WebAssembly compiler and runtime”, we typically think about V8, Wasmer, WasmEdge or Wasmtime.