Setting up a Git Bash alias in Windows
Here's a quick tutorial on how to work around an annoying issue on Windows. Suppose that I have Git Bash installed on Windows that I got with my install of Git, and that I like to use to run various…
Phantom tokens: JWTs & sessions combined
Jwt should not be persisted
Seeing MCP
I am talking to a number of folks about documenting their MCP servers. Others about discovering them. Others about governing them. Generally, we are mostly talking about being able to just see the…
Optimizing Echo-TTS: CPU Beats GPU
Eight optimization attempts on Echo-TTS CPU inference, the five that worked, quality evaluation with voice cloning, and how the optimized CPU path ended up faster than the GPU hybrid.
RubyLLM 1.15: Image Editing, Cost Tracking and Less Tool Boilerplate
RubyLLM 1.15 adds image editing, cost tracking, inferred tool parameters, additive callbacks, and Rails fixes.
When fewer commits don’t mean less work
I have been vibe coding a lot. Like, a lot a lot…. and it’s been leaving me feeling a bit conflicted. I’ve been committing hard, and feeling tremendously productive. But I also get this weird flash…
Source Code Is the New Assembly
In The Last Programming Language Might Not Be for Humans, I argued that if AI becomes the primary author of code, the source language has to bend around that author. In What Comes After the Last…
Stop Fearing OOP: A Simple Guide to Ruby Classes for Beginners
The Blueprint and the House: Ruby Classes and Objects Explained
Writing a blog post without a screen
This text below post is presented verbatim, as it was typed with only a keyboard: without a display or any assistive technology. Typos are left in. The "Notes after writing" and "My writing setup"…
Teaching libuv's UDP Stack New Tricks
Extending libuv's uv_udp_t with ECN, PMTUD, pktinfo, and GSO/GRO support for QUIC and beyond.
Mizar: the first usable proof assistant for mathematics
In two recent blogposts I have outlined the history of our field, one on the history of proof assistants and another specifically about earlier work on the formalisation of mathematics by machine.…
Lua Tables: The Configuration Format That Admits What It Is
1993, PUC-Rio Tecgraf: Ierusalimschy, de Figueiredo and Celes merged DEL and Sol into Lua, originally as a portable configuration language for Petrobras. Lua's table is array, hash, record, object…
MIDI TO JAVASCRIPT [updates]
MIDI to JavaScript Converter
Winding Number Paper Accepted to SIGGRAPH 2026
We are happy to share that the paper The Antipodal Method: Fast, Accurate, and Robust 3D Generalized Winding Numbers has been accepted to SIGGRAPH 2026. This is joint work between Université de…
How to Build Your Own Software Factory
A field guide to making coding agents useful without pretending the agent is the whole factory.
A just wrapper for tmux and global recipes
A small zsh function on top of just that renames tmux windows, falls back to a global justfile, and shows project + global recipes in one fuzzy picker.
#496 – FFmpeg: The Incredible Technology Behind Video on the Internet
Jean-Baptiste Kempf is lead developer of VLC and president of VideoLAN. Kieran Kunhya is a longtime FFmpeg contributor, codec engineer, and the person behind the now-infamous FFmpeg account on X.…
Article previews in RSS
Since about three years past time immemorial, the RSS feed for this site has been very anaemic. It had article titles and dates, and that was it. Many readers have requested that I include the full…
Build a Real-Time Voice Interview Coach with TypeScript and LiveKit
Do you struggle with interviews? You're not alone! You can have the best interview notes in the world, but when you start having that vocal conversation, you might end up a deer in the…
Transcript for FFmpeg: The Incredible Technology Behind Video on the Internet | Lex Fridman Podcast #496
This is a transcript of Lex Fridman Podcast #496 with FFmpeg & VLC. The timestamps in the transcript are clickable links that take you directly to that point in the main video. Please note that…
SQLAlchemy 2 In Practice - Chapter 7: Asynchronous SQLAlchemy
This is the seventh chapter of my SQLAlchemy 2 in Practice book. If you'd like to support my work, I encourage you to buy this book, either directly from my store or on Amazon. Thank you! Starting…
5 May 2026 Artifact Wave
Here is what we got as new Jetpack artifacts this week!
QRV v0.34–v0.40: Taskman Moves to User Mode
Since the project began, taskman has run in S-mode — the RISC-V supervisor mode, shared with the kernel. It was kerlinked into the kernel address space at boot, called kernel functions by name, and…
Installing Qt metatypes files
If you have been on invent.kde.org lately you might have seen some merge requests about “Install Qt metatypes” and wondered what that’s all about. When defining QML types in C++ the buildsytem tries…
I Deleted Most Of My Release Manager
Photo by Oleg Solodkov on Unsplash I wrote Release Manager because I needed something to build, sign, notarise, package, and ship every Jorvik app from one window. I wrote it in Swift because Swift…
A Simple Script
Utilities Are Good For You Every week, I participate in Winlink Wednesday. I do my check-ins with pat. Once a month, they as for a weather snapshot to go with the check-in. This isn’t…
Checking multiplication overflow
Suppose that x is a variable of an unsigned type. In C/C++, it could be of type size_t for example. You have an expression like 6 * x and you want to know whether 6 * x overflows. That is, you want…
Mypy 2.0 Relased
hljs.configure({languages:["python","bash"]});hljs.highlightAll(); We’ve just uploaded mypy 2.0.0 to the Python Package Index ( PyPI ). Mypy is a static type checker for Python. This release includes…
When Equivalent Weights Train Differently
Why coordinate-level optimizers can behave differently on weights that represent the same model, and how quotient-aware updates remove the hidden gauge.
What we want out of software
The best software engineers are endlessly curious about how things work in a way that can bewilder other brain orientations. Once upon a time I attended a DEFCON talk given by an engineer who found…
Git out
On May 23, 2011, I bought Building Java Programs 2nd edition from bokkilden.no to learn how to program. A week later, product.support@pearsoned.com emailed me a password I had registered an account…
Shuffler
Need to randomize things? I did too. Here's a tool that's helpful to me and might be helpful to you. 🔷 These tools aren't server-side, so they probably won't work without JavaScript enabled. Shuffle…
Waterfall 2.0
Waterfall 2.0 - The Quiet Return of the Methodology We Micked Open any AI-coding repo on GitHub today and count the markdown files. Then count the lines of code. The ratio has been climbing for two…
Testing the width of a page on a mobile device using Playwright
Create a new browser context with a narrow screen, then get `document.body.scrollWidth` to get the width of the displayed page.
Playdate (PD) Dev Series 2: About JustOne
Developing for the Playdate part 2
Rails Security, AI, and IBB
For quite a few years the Rails project has been working with the Internet Bug Bounty (IBB). The IBB is an organization that awarded cash to security researchers that reported issues to OSS projects…
New Logic for Programmers (and the future of this newsletter)
So first the immediate news: I just released version 0.14 of Logic for Programmers! This release is pretty similar to 0.13. There are a few rewrites but the vast majority of the changes are layout,…
Python 3.15
Python 3.15 beta 1 is out! This is a really impactful release, with some really big additions. A new lazy import system, a powerful sampling profiler, not one but two new builtins, the usual…
Make a SwiftUI Toolbar Customizable
By customizable I mean letting the people using your app add, remove, and move toolbar items. Making a customizable toolbar in a SwiftUI app requires you to do the following: Give the .toolbar…
I built a colleague who lives in my terminal
A couple of months ago I moved to a new team at work. The team had been running for a while before I joined, and there was a lot of context I didn't have — issues, discussions, strategy docs, repos…
Bamboo Weekly #169: Press freedom
Get better at: handling multiple files, multi-indexes, pivot tables, and plotting with Plotly.
Bringing the Agent Loop to the Web
Demystify AI agents by exploring the case for moving the loop to the browser. Learn how client-side orchestration enables tight UI integration and data control.
Question: How to avoid killing an i3 scratchpad window
Answer It’s kinda complicated. i3 exposes a scratchpad_state on every node, but it is not relevant for the node you initially check. The window node of the application you are targetting. Today…
How do bitwidths actually work in Verilog?
This post introduces a project that Gabriel Desfrene did in my group as an intern last summer. Gabriel will present his project in a paper coauthored with my PhD students Quentin Corradi and Michalis…
Shipyrd now works with Honeybadger, Rollbar, and AppSignal
Shipyrd started as a Kamal-first tool. You'd add the shipyrd-gem hook to your deploy.yml, and Kamal would ping Shipyrd at the start and end of each deploy.At the end of the day, though, Shipyrd…
Sampling and Sample Size: How Much Data Do You Really Need?
In this article: How to Choose Who to Measure: Types of Sampling Sample Size: The Math Behind the Estimation Let’s Calculate It in R and Python From Estimation to A/B Testing Sampling Error vs…
Making wl_shm fast
While most new applications use the GPU for rendering to achieve better performance and battery life, there are some new applications and a lot of older applications that still use CPU rendering.…
Migrating my website from Hugo to Astro
Migrating this site from Hugo to Astro on Cloudflare, a real-world agentic coding project
How I Rebuilt My Personal Site with Claude
I had 40 screenshots saved, three false starts, and 20 years of content with no coherent structure. I used Claude Cowork, Claude Design, and Claude Code to rebuild the whole thing. Here's how each…