It's becoming very clear now that the things that make code easier for humans to work with are almost exactly the same things that make code easier for agents to work with. Modular boundaries, clear interfaces, good tests, and detailed domain language. If you have well-modularized code, an agent can work on one piece without needing the entire codebase in context. If you have good tests, you…
I've been working on Ossature , a spec-driven harness for LLM-based code generation. You write specifications describing what your software should do, and a build system generates code from them one task at a time, with validation and verification at each step. I wrote more about it on the Ossature blog . To test it on something non-trivial I decided to write a CHIP-8 emulator. CHIP-8 seems…
I've been experimenting with the idea of integrating LLMs with text-adventure and interactive fiction games in a couple of different ways, most are not yet ready (and will probably take a long time for anything useful to come out of them if any) but one area I wanted to share is introducing LLMs at the parser layer of the engine or the VM. From the minimal experience I have with the world of…
I've watched the open source world from a bit of a distance over the last 20 years while learning to code and getting paid doing it (the first project I put out there, BackuPod , was uploaded to SourceForge in 2007, I was a novice Python programmer.) To me it seemed like the conversation at the time was dominated by people like Richard Stallman and his ideas about software freedom. It was all…
The macOS app switcher (Cmd+Tab) is one of those things that's just there and works well enough most of the time. But once you’re juggling a dozen apps, cycling a single list gets slow, and it becomes tedious to keep flipping back and forth between apps just to keep their order as you'd like it to be. The idea of having groups of apps (as rows) in the switcher felt natural to me once I…
I'm thrilled to finally share something I've been working on for months. Sudecku ⊕ is a game that combines the timeless logic of Sudoku with the strategic depth of deck-building. My wife and I enjoy playing Sudoku together, but she recently discovered the world of advanced puzzle variants through the Cracking the Cryptic YouTube channel. Watching Simon and Mark tackle these incredible…
Update: The game is now available ! For the past few months I've been working on an iOS game. It's almost finished now but I still would like to polish some aspects a bit more and look into what's happening with iOS 26 and the new Games app before I publish it, to ensure things works well for everyone. I don't want to give too many details just yet, but I can say it's a…
As I've recently switched to macOS , I decided to configure my system using nix-darwin . I've played around with Nix and NixOS before, and I'm in no way an expert, but I like the idea of declaratively defining my system config. It makes it easier to revert things back to the way they were at a certain point, and to track what sort of changes I've made over the years, aside from…
I've switched to Macbook Pro as my main personal computing device again. The last time I used a Mac OS fulltime for personal computing was around 2012, after which I transitioned to a Thinkpad X1 Carbon. I used Arch Linux with i3 initially, then later Sway, and I was quite satisfied with the setup I had developed over the years. During this period, I've owned two different X1 Carbon…
Yesterday at WWDC 2023 Keynote, Apple unveiled its first "spatial computing" device "Vision Pro". I had never heard of this term before, but apparently it's been defined (since 2003) by Simon Greenwold as "human interaction with a machine in which the machine retains and manipulates referents to real objects and spaces". There's not a lot to say about the technical details yet. I think…
Over the past decade or so in my career, I have come to recognize the importance of writing well. This includes writing better emails, instant messages on IRC/Slack/Teams, documentation, and any other type of writing. I believe that the key to writing effectively is to be able to communicate an idea in a straightforward and precise way. This is something I have noticed in my work as a…
I have recently identified a habit of mine whereby I tend to skip reading introductory chapters of books, at times only resorting to skimming through it in search of salient information. However, I have noticed that when I eventually take the time to read it word for word, it can offer valuable insights and contextual understanding of the material presented. It is, however, essential to exercise…
I found out about the Zettlekasten note taking method in early 2021 and got interested in learning more about it. So I started using it with Emacs using using Org-roam and Deft , and a quick config I threw together. I synced my notes to my Nextcloud instance. After a few months of on-and-off usage, I found that learning how to properly employ Zettlekasten in my daily scenarios required me to go…
Using the term "glitch" when it comes to issues related to software or technology in general is bad journalism. The term is used by journalists, politicians (and unfortunately, technicians and specialists) as a way to gloss over the details of what exactly is the cause of an issue. A simple example to make the point. Suppose you have to make an important phone call one morning at 08:00 exactly but…
Python 3.11 was released a few days ago and as usual, it comes with more than a few new features that make it ever more interesting, from exception groups and fine-grained error locations and tracebacks to TOML parsing support in the standard library and of course the much awaited speedup as part of the faster CPython project .
I found out that the order in which Oud strings are connected to their pegs when replacing the strings is important for a few reasons. It makes the neck look pretty, but more importantly, it makes the tuning more accurate when replacing strings, because it becomes easier to make sure that strings are not touching each other.
For the last couple of days, I've been going through all sorts of nostalgia going over DK EyeWitness CD encyclopedias from the 90s. Although I understood about 15% at best at that time, I distinctly remember spending hours clicking around, watching images, animations, videos, and listening to the fantastic narration in the encyclopedias of Science, and of Space and the Universe.
The following is a summarized excerpt from the Interactive Plots & Non-linearity section of "Scriptwriting for Games" from the International Game Developers Association.
I needed access to some of the endpoints used by an iOS app, which also happened to be terrible. There are a couple of different ways to achieve this, probably the simplest of which is to run a proxy somewhere, and route traffic through it. Today I found out about mitmproxy which makes inspecting web traffic going through it very simple.
Nim provides three essential macros in the built-in macros module that are very helpful when writing or debugging macros. They are: dumpTree , dumpAstGen and expandMacros .
Asserting query counts in Django tests with CaptureQueriesContext is a great way to maintain/optimize code, but it doesn't provide enough context to find what changed when tests fail during a refactor. I found it helpful to capture some lines from the stack trace when each query is being executed and have them accessible during test runs that use CaptureQueriesContext to be logged along…
Polymode is an emacs package that provides a framework to mix multiple major modes together with a few lines of code. This can be useful when working with files that contain multiple programming languages and you'd like major mode to switch based on a matching code block for example.