Learning ESP32: A Voice Activated Timer
We bought Google Home devices a few years ago, and one of the things we use them most for is setting timers for things like cooking and washing. We have a few devices around the house, and for some…
Cockpit: one panel for Joplin
I have written about Cockpit twice - why it exists and how it was built - and never about what it actually does. Since August it has grown from a fork of the Agenda plugin into the panel I run Joplin…
Turning a Lenovo tablet into a home display
I went looking for a digital photo frame and found a Lenovo tablet at the same price. Here's how I turned it into an always-on home display, with a WebView launcher you can use yourself.
Ways with Labels
A few ways to use labels in Home Assistant.
Thirteen Years of json2xml
On July 6, 2013, I published json2xml 0.1 on PyPI. Its job was straightforward: take JSON and turn it into XML. Thirteen years later, that…
Build a Structured Search API with Rails' New HTTP QUERY Method
Rails 8.2 adds routing, request, and test support for HTTP QUERY, the new safe and idempotent verb with a request body. Build a faceted product search endpoint that takes a JSON filter body instead…
Getting started with the Claude Agent SDK and mcp-windbg
Build an autonomous crash triage workflow with the Claude Agent SDK, mcp-windbg, and Markdown history.
Serial Consoles in [yoe]
Embedded work usually means a serial terminal open in another window, and a search for whichever ttyUSB the board landed on today. The latest video shows [yoe] taking over that job: it attaches to…
SIEVE: A Cache Eviction Algorithm Simpler Than LRU
Context Almost every backend service has a cache somewhere. A map in front of a slow query, a layer in front of a third-party API, a CDN in front of everything. Storing things is the easy part. The…
Lessons From Tending A Software Garden
After getting a little inspired to really test out some of the AIDLC, and the idea of software factories I took a dive in with an internal projecct I'm building at Datadog.
RMX: Meet Rio Terminal Multiplexer Protocol
Rio introduces a new protocol that lets an application open real terminal buffers over one connection, so the terminal renders panes natively instead of a multiplexer parsing every byte twice and…
Creating software is an artistic activity
ART, n. “The disposition or modification of things by human skill, to answer the purpose intended. In this sense art stands opposed to nature.” Forgive me a fake quote: “I know how…
tugz: a new deflate library with three applications
I spent a week creating a new deflate implementation from scratch in C named tugz to provide an Info-ZIP -compatible zip program for w64devkit 2.10.1 (released today). I also replaced busybox-w32 ’s…
Songhive — A fully self-hosted and federated music platform
What if your music server had a social network attached, and your social network could play music?
C++26 Ranges: Four New Views
C++20 shipped a powerful ranges library, but the set of view adaptors had some obvious gaps. Want to get the output as a container? No luck. At least C++23 helped with that. Want to iterate over two…
Comparing PHastR and PtrHash
Table of Contents Bucket placement Bumping Query speed Space usage Construction speed Overview Conclusion Ideas for improving PtrHash Levels Sebastiano Vigna just preprinted PHastR (Vigna 2026), a…
QuickCheck: shrinking like tuples, writing like applicative
The QuickCheck documentation for Arbitrary says that There is no generic arbitrary implementation included because we don't know how to make a high-quality one. Though in practice I've found that…
Emacs salmagundi, 2026-10-11
Combining lists of compilation commands To my delight I found that emacs-multi-compile will combine the of all matches compilation commands! I added this to my setup (add-to-list 'multi-compile-alist…
A Week Hacking on Spacefast
A new Spacefast ChatGPT plugin allows seamless integration of spaces, along with enhanced analytics and design system support for effortless publishing.
Factor 0.102 now available
“You don’t want just to develop for ARM, you want to actually use ARM in your day-to-day work on the desktop.” - Linus Torvalds I’m very pleased to announce the release of Factor…
HyperTexting.dev
Introducing @hypertexting.dev - the new home of the HyperTexting CLI and developer documentation. #MakeHypertext
Closures, Objects, Actors, and Picos
Summary: I've been intrigued by closures since I taught introductory computer science from SICP at UC Davis in 1988. This post dives into a little programming language theory to trace a line from…
TypeScript Won. Now It’s Giving Up Its Superpowers.
When you spin up a greenfield project on a Tuesday afternoon, a build step feels like a completely reasonable trade-off. You install a bundler, configure a transpiler, sprinkle in a few…
Designing My Dream Website (Part 6): Reaching the Start Line
Last updated: 1 week ago Since the last update, I have spent the days hacking at my website. I am pleased to know... the thing is up on the Internet. Looking back, it all happened so fast. But then…
How to Make SQL Easier to Understand for Developers
Understand SQL concepts through familiar JavaScript examples.
Localization-first development
Every language you add to your app lets you reach more people – Ulysses, for example, ships in twelve. Yet every language you add complicates your release cycle – every interface change…
Stability Mountains for Varah 7-12
This is in continuation of: Stability Regions for Varah's Formulas Design Notes on System for the Analysis of Order- and Stepsize Changes for Cyclic Composite Multistep Methods Tendler-like…
Pushing GitHub PR events into a running Claude session
TL;DR Claude Code sessions on the web can subscribe to their PRs and get GitHub activity pushed in. I wanted the same in my local sessions. I’ve ended up with a Claude Code channel plugin that…
NoteFlow 2.0: a notes app inside WordPress, rebuilt from the ground up
NoteFlow is a free WordPress plugin that adds a notes app to the admin: folders, checklists, tags, shared notes with live co-editing, and comments and issues on posts inside the editor. Version 2.0…
I got sick of YouTube ads, so I built my own music player
I wanted YMusic's look and no ads, without paying or installing anything. Claude Code, a phone on a cable and one afternoon later, I have a music site I fully control.
58 Days to Merge: Getting Native Delta Lake Into DataFusion Comet
In August, I wrote about what the native Delta read path does: why Comet turned away every Delta table, and how a Delta query can reuse Comet’s parquet scan with deletion vectors (the bitmaps…
No one cares about your reverse-engineered Photoshop clone
PhotocraftA couple of weeks ago, someone released PhotoCraft, an open-source reimplementation of Adobe Photoshop written in Rust.The internet immediately exploded with excitement. People were clai
Building Visual Tools with Antigravity UI Extensions
Learn how to use Antigravity UI Extensions in Google Antigravity 2.22.0 to build two-way visual workspaces right inside the side panel.
Managing multiple Git repos with AI: How I keep up with Fedora's sprawl
No single person can know everything happening in Fedora at any given time. I say this often in our community, half as a warning and half for comfort. For a while, I did not really believe it applied…
Sharing the Technical Details on Genomic Large-language "Toy Model"
This is a follow-up of yesterday’s post titled “High-schooler Builds Test Program to Understand Genomic AI Papers”. I like to share information on how to train and run this program, and some of the…
A week ahead
In AI developer tools, we now count any advantage in “weeks ahead”. If we get a feature out a week ahead of the zeitgeist discovering it, that’s a win. The week is where all the capital comes from.…
Claude Code Cheat Sheet, October 2026: the complete state of play
All of Claude Code v2.1.296 on one page: 120 commands, 33 hooks, 243 settings, 391 environment variables☕ Found this article useful? You can support the blog by buying me a coffee on Ko-fi.
What can you build with the Untold Engine?
The Untold Engine is an open-source 3D engine built with Swift and Metal, designed for creating interactive 3D experiences on macOS, iOS, and Apple Vision Pro. In this video, I'm showcasing a…
Gemini 4 and Rust TUIs
We last looked at Ratatui and VCR back in July. I recently had a need for VCR and it reminded me that Ratatui was something I demo’ed but never really tried to use. With Google Gemini 4 Argon…
Should You Still Learn to Code?
With AI doing so much of the heavy lifting, does it still make sense to learn how to code? Car factories and cameras already ran this experiment, and their history says yes, for a different reason…
Moving Picos from Mesh to Mesh
Summary: Software that can’t leave the machine it was born on isn’t really yours. Version 1.7 of the pico engine lets a pico and its subtree move between engines while its relationships keep working,…
How does one find "signal"?
Something that data scientists are supposed to do but it's hard to even describe.
Faithfully reimplementing an obscure Estonian Flash game for modern browsers: GTA õppesõit
...and then ruining it completely.
Running RAG with a (small) language model in the browser
My blog does semantic search in your browser. Now it also runs a (small) language model in your browser.
Cool tmux trick: scratch popup
One thing I love about the i3 window manager is what’s called the scratchpad. The scratchpad lets me toggle the visibility of a floating window with a hotkey. It’s great for keeping notes…
The Smart Rubyist #1: I prefer to be in the top 10% developers who train AI with new ideas
The Smart Rubyist #1: I prefer to be in the top 10% developers who train AI with new ideas https://x.com/AndyObtiva/status/2109689588474163310?s=20 The Smart Rubyist #1: I prefer to be in the top 10%…
How to Get Started Contributing to Open Source
"I hear, and I forget I see, and I remember I do, and I understand." I was recently asked how to get started contributing to open source. The following is my step-by-step recommendation: Pick an…