Fun with an indecisive AI coding agent
In which I have some fun with Claude Opus 4.6, a seemingly indecisive AI coding agent.
RSS feed for Ben Hoyt's technical writing
In which I have some fun with Claude Opus 4.6, a seemingly indecisive AI coding agent.
Dependencies are a huge supply chain security risk; the more of them you have, and the more often you update, the bigger the attack surface.
Discusses some design choices used in Jubilant: Python subprocess.run to wrap a CLI tool, a code generator to convert Go structs to Python dataclasses, and the use of uv with a simple Makefile to run commands.
Shows how much the performance of Go has improved from version 1.0 through to 1.22 (including PGO) -- in its compiler, runtime, and libraries.
How I solved the One Billion Row Challenge (1BRC) in Go nine times, from a simple unoptimised version that takes 1 minute 45 seconds, to an optimised and parallelised version that takes 3.4 seconds.
How I switched my side project from using Amazon S3 for file hosting to using Tigris (which is built on Fly.io infrastructure). It was a good experience overall, but there were a few quirks.
This is a transcription of Jim Lawless's interview with Ben Hoyt on his Stray Pointers podcast. We discuss Forth, C, CGI, Python, Go, and AWK.
Not technical writing, but Jim Lawless interviewed me on his "Stray Pointers" podcast. We discuss Forth, C, CGI, Python, Go, and AWK.
Describes a simple Markov chain algorithm to generate reasonable-sounding but utterly nonsensical text, and presents some example outputs as well as a Python implementation.
Advice for how to (and how not to) apply for a software engineering job, particularly for the written parts of the interview process. As a bonus, some tips for your resume/CV.
A discussion of the minimal version of Make included in 'The AWK Programming Language', as well as a Python port of the AWK program.
Describes the WordStar diamond, a wonderful set of key bindings from the 1970s, and how you can use it in 2023 on Linux or Windows.
A variable's name is more important than its type, so the name should be more prominent and come first in declarations.
A brief look at the proposed enhancements to the Go standard library HTTP request router, net/http.ServeMux: matching on HTTP method, and supporting wildcards in matched paths.
In which I rewrite my toy pygit client in Go to see how suitable Go is for simple scripts.
Short, meaningful names that take context into account are better than long, verbose names that don't.
An article about lookup tables in Forth that I co-authored with Hans Bezemer (creator of 4tH) when I was 16.
When designing Python packages, decoupling the file structure from the package's API makes your package easier to import and use.
Principles I've found useful for designing good Python library APIs, including structure, naming, error handling, and type annotations.
How I switched hosting my Go-based side projects from Amazon EC2 to Fly.io, significantly simplified deployment, and saved a bit of cash while I was at it.
This article describes GoAWK's code coverage support, which was contributed by Volodymyr Gubarkov.
In 2022, disk I/O is very fast, and not usually the performance bottleneck in programs. This article digs into some numbers.
What our crowdfunding startup microPledge was, why it failed, and what we learned from the process.
Translating Rob Pike's simple and elegant C regex matcher to Go.
How I build my website benhoyt.com with GitHub Pages, Jekyll, a simple HTML+CSS layout, Sublime Text, and Sublime Merge.
Why and how I added proper CSV support to GoAWK, my POSIX-compatible AWK interpreter.
Describes Prig, which is for Processing Records In Go. It's a text processing tool like AWK, but it uses Go as the scripting language.
Shows how much the performance of Go has improved from version 1.2 through to 1.18 -- in its compiler, runtime, and libraries.
How I sped up GoAWK by switching from a tree-walking interpreter to a bytecode compiler and virtual machine interpreter.
A discussion of AWKGo, a simple compiler that translates a useful subset of the AWK text processing language into Go source code.
My re-implementation of the code from the official Go tutorial 'Developing a RESTful API with Go and Gin', using only the standard library, adding tests, and fixing issues.
Simple Lists is a tiny to-do list web application written in Go, with old school server-side rendering and no JavaScript.
A critical but informative look at the new structural pattern matching feature in Python 3.10, with real-world code examples.
An overview of Mugo, a single-pass compiler for a tiny subset of the Go programming language -- just enough to compile itself.
An explanation of how to implement a simple hash table data structure, with code and examples in the C programming language.
Performance comparison of counting and sorting word frequencies in various languages (Python, Go, C++, C, AWK, Forth, Rust, and others).
A vision for the "small web", small software, and small architectures. Also, a bonus rant about microservices.
A look at the new os.ReadDir function and os.DirEntry interface coming in Go 1.16, with a comparison to os.scandir in Python.
An overview of fuzz testing and the go-fuzz tool, as well as a look at the recent draft design for including fuzz testing in the `go` tool (LWN.net).
A look at Sourcegraph, a code search and code intelligence tool (LWN.net).
Compares routing techniques in Go, including five custom approaches and three using third-party routing libraries.
A presentation of the Go draft designs for a filesystem interface and a standard way to embed files in a Go binary (LWN.net).
Talks about the valiant but almost-dead 10-year effort to prevent tracking with the Do Not Track header.
An overview of the new features in Lua 5.4 (LWN.net).
An overview of Hugo, a flexible static website generator written in Go and optimized for speed (LWN.net).
Gives some background, the current state, and potential timeline for including generics in the Go programming language (LWN.net).
Looks at some heavier replacements for Google Analytics, as well as the GoAccess log-based analytics tool (LWN.net).
Discusses what Google Analytics tracks, and presents two lightweight alternatives: GoatCounter and Plausible (LWN.net).
A brief introduction to Go for programmers who haven't used Go before: Why use it? The standard library. And the language itself.
Describes my port of Adrian Siekierka's "Reconstruction of ZZT" to Go, done in a semi-automated way using a Pascal-to-Go converter.