Notion Hands You The Token, But Only After You Click
I keep coming back to the same wall. Onboarding to an API does not scale. We have built a generation of tools that are supposed to act on our behalf, that are supposed to wire themselves up to the…
OpenAPI Overlays for Test Fixtures and Mock Generation
Here is a tension I have watched play out on every API team I have ever worked with. The examples in your OpenAPI live a double life. On one hand they are marketing copy — the pretty product with the…
Balancing context size and callable tool metadata with CAP's MCP adapter
CAP supports the Model Context Protocol , and treats it beautifully as "just another protocol". The support comes in the form of the @cap-js/mcp plugin, which has these feature flags : { "cds" : {…
Soft Software Needs Hard Factories
TL;DR: Cheap code
Engineerification
TL;DR: I have bee
AI Agents and Local LLMs
In my last article on AI agents I talked about using Claude Code AI agent. This is an easy-to-set-up commercial solution that gives excellent results. The risk is that the pricing may not remain as…
Reading JPAK
By 2006, TOCA Race Driver 3 was compressing the per-track AI. The racing lines sit inside a pack whose first four bytes are JPAK. There is no public specification. I did not start by guessing the…
String the Atoms with Raku
[412] My response to the
Chromatic Polynomials 04 – My CP Symbolic Math Engine
I debated whether I should write anything about my CP application and came to realize that I need this article to provide context for formulas and scripts in later articles. You might see some large…
Chromatic Polynomials 03 – Expanding the Capabilities
This article outlines modifications that I came up with to expand Chromatic Polynomials into a fully-capable language of logic. Constants instead of variables The traditional Kronecker Delta compares…
ggunzip - Look Back : Yr golygfa o Hescwm Uchaf, rhif 36
Andy and I got together earlier this week to nurdle about some more on our little quest to reimplement gunzip. As we sat down, I genuinely thought we had a tight 45 minutes. I think there is a tight…
23rd August 2026
Hello, Here’s some thoughts on software for August. Bear with me on these broad categories but I think you can group most software projects into one of these groups: art, infrastructure, and…
★ CodeBurn
♠ Previously. CodeBurn shows Gen AI / LLM code usage: where did all the money burning tokens ($$) go? CodeBurn is a free, open-source, local-first tool that tracks AI coding token usage and cost…
Simulador discófilo
La aplicación (o el juego) es un tocadiscos de escritorio, es decir, un reproductor musical que solo permite escuchar álbumes. No canciones sueltas, ni artistas completos, ni radios, ni listas. Hasta…
DEF CON Quantum CTF 2026: the qtris Walkthrough
Four flags hidden in one Quantum Tetris screenshot: PRNG seed recovery, a blind-QC one-time pad, the No-Cloning 0-solve I was the only player to crack, and the Gottesman-Knill design of the one that…
Updating the HDMI-CEC and Onkyo RI to Home Assistant Bridge
A couple years after putting together the HDMI-CEC to Onkyo RI Bridge I decided to give it a bit of an update and subtle name change. There were a couple problems that I wanted to fix: The name was…
Adventures in prefetching
So after reducing the Flash of Unstyled Text caused by the text re-rendering when the custom fonts load, I was still getting some flashing on the “heros” (the post banners with the…
lab
lab web experiments. details table a b c blah blah 1 2 three blah blah 1 2 three 4 5 6 seven blah blah 1 2 5 6 seven details tabs "hi" "bye" "hi" "hi!" "hi" "what's up?" details lazy embed click to…
The TaskGroup that ate your timeout
Cancellation in asyncio is a counter, not a flag — and TaskGroup only knew how to check it for zero - Here is a program that wraps a task group in a half-second timeout, and then does not time out:…
RFC API Problem Project
RFC API Problem RFC API Problem implements RFC 9457 : Problem Details for HTTP APIs. This allows you to produce HTTP error responses that are structured, machine readable, and consistent. Table of…
GSoC 2026 Final Report – Laureen Caliman
Over the summer of 2026, I worked towards bringing the option of playing Vocab-Style puzzles to GNOME Crosswords as part of Google Summer of Code. This entailed adding support to the puzzle library,…
Remember Me: The Case of the Vanishing Feeds
TL;DR: My self-hosted feed reading stack quietly shrank from hundreds of feeds down to 33 over the course of a year, and I didn't notice until my reading list got eerily quiet. The culprit: an…
My Abrobot Bluetooth Proxy for Home Assistant
Just a few days ago this little project was the poor brother of the two projects that succeed it. But hey – things change and this is now a VERY useful tool – I hope you enjoy. The…
Using the Cursor SDK to Build a Project Documenter
I've shared a few posts recently talking about how I'm using Cursor to learn and employ agentic development. Primarily that work has all been done via our Agent view, but this is just one of the…
Silently resolved ambiguity is comprehension debt of intent
In our theory, the development lifecycle is compressed, and the decisions that are made at “transition” points are moved to later. Even “transition” here is a bit nebulous, as stages of the lifecycle…
Announcing Project Glass 2.0
ProjectGlass 2.0 is a search engine I've been building, and it comes down to three things I care about more than anything else: proving it's actually getting better instead of just saying so, staying…
RFC Web Link Project
RFC Web Link RFC Web Link implements RFC 8288 : Web Linking. This allows you to process links via the HTTP link header when processing HTTP responses. For example, the following demonstrates a HTTP…
[Updated] How to write integration tests using Testcontainers in Python
When an application uses external components such as databases or cloud services, it’s important to test how everything works together. That’s where integration tests come in. They help ensure your…
[Updated] How to mock a module import in Python
When writing tests, it is quite common to mock a module. It can be a database, an API, or a cloud service for which you need a testable alternative. One way is to inject a custom module into…
cljrs - first steps
Notes Installs cljrs ( needs Rust to be installed first ) $ cargo install cljrs Start repl $ cljrs repl Run a .cljrs file $ cljrs run somefile.cljrs Start nrepl $ cljrs nrepl Clojurust project…
UPDATED: Export Files From Playlists v3.6
This applet will export copies of the files of the tracks in one or more selected playlists to a single user-selected folder. Also see M3Unify, an app that provides many more options for…
For the Sake of Building?
I noticed this three days ago. I was mid-feature on my Agentic Development Environment Classis when I realized it had crossed a threshold. It could be used to develop itself. Not perfectly, but it…
Emacs startup: Why setq beats setopt, customize-set-variable, and use-package :custom?
Every millisecond counts during Emacs initialization. A potential performance cost in modern Emacs configurations is defaulting to setopt, customize-set-variable, or the use-package :custom keyword…
HTML Preview For Org Mode
Randy Ridenour has an interesting post about previewing an Org file in your browser. If you’re like me your first thought is probably, “That’s easy. Just export the Org file to HTML…
Is this a golden era of itch scratching?
For tech-oriented people, the AI LLMs we're all playing with are a bonanza of itch scratching. Things that previously would have been too big an undertaking to tackle are suddenly easy. I build iOS…
The Same Feature, Twice
The same feature took a weekend on a laptop and a quarter in the product. The model was identical both times. Everything around it was not.
Integer limits huge in Python
import mpmath milinillionthlimit = mpmath.power(2,mpmath.power(10,3003)-1)-1 decillionthlimit = mpmath.power(2,mpmath.power(10,33)-1)-1 mpmath.nstr(mpmath.log10(milinillionthlimit/2) % 3 ,1500) ->…
Java’s String.indexOf can be slow (quadratic)
In Java, you find the location of a substring using indexOf. String haystack = "The quick brown fox jumps over the lazy dog"; String needle = "fox"; int index = haystack.indexOf(needle); Naively, you…
Concurrent Servers: Part 8 - Go
This is part 8 in a series of posts on writing concurrent network servers. In this part, we'll switch to Go and see how it tackles the challenges described earlier in the series. All posts in the…
Markdown your Currency app in version 2.07
Kevin Wells has released a new version of Currency, his application that provides a way to check exchange rates for different currencies, as well as the GDP (gross domestic product) and population…
How to apply CSS only if there are a certain number of nested elements
This week, I had to write CSS for a design where a list of elements got a bit of extra design treatment if there were at least three nested items inside it. <!-- Base design --> <ul…
How to Install DietPi on Raspberry Pi (And Save 77% Storage Space)
Last Updated on 22nd August 2026 by peppe8o tested by peppe8o | DietPi v10.6.2 | RPi 4 B 4GB In this tutorial, I’ll show you how to install DietPi on Raspberry Pi computer boards with…
The Case for a Personal Apple Developer Tier
Something interesting is happening in the app world. With the arrival of more powerful AI, everyone is building their own. We do weekly meetups in the Robot Assistant Field Guide, called…
A Syncthing and SQLite Gotcha
On the rename system call.
Launch: Shoffr MCP server
How we built an MCP server for our guests to book their next Shoffr trip.
Claude helped me
Claude helped me build a thing. There, I’ve admitted it, not that my use of LLMs has ever been a secret. But this was a big thing, a thing I could not have done on my own. I know because I tried,…
Discs
Discs (() => { const theme = localStorage.getItem("theme") ?? (matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"); if (theme === "dark")…
Tech at Shoffr
Engineering principles at Shoffr