Wishlist Endpoint Discovery

Learn how to use the recently-added Tailscale, DNS, and Zeroconf endpoint discovery in Wishlist, our SSH host directory.

Ten Years of “Go: The Good, the Bad, and the Meh”

Ten years ago, I wrote Go: The Good, the Bad, and the Meh. Way back in 2013, it made it to the front page of Hacker News and got over 400 comments on /r/programming. I don’t have analytics from back then, but I suspect it’s one of my more discussed pieces of writing,...

Coroutines for Go

Why we need coroutines for Go, and what they might look like.

Govulncheck v1.0.0 is released!

Version v1.0.0 of golang.org/x/vuln has been released, introducing a new API and other improvements.

Storing Data in Control Flow

Write programs, not simulations of programs.

Polymorphism and other important aspects of inheritance

Introducing `dmd-web`, a web frontend for Dependency Management Data (DMD)

Since starting the project in February, I've been having a great time working on dependency-management-data, a project to make it easier to understand how internal and Open Source dependencies are used in your projects. We've been using it a fair bit at Deliveroo and it's helped...

Ungrammar in Go and resilient parsing

It won't be news to the readers of this blog that I have some interest in compiler front-ends. So when I heard about a new(-ish) DSL for concrete syntax trees (CST), I couldn't resist playing with it a bit. Ungrammar is used in rust-analyzer to define and access a …

Finding bugs with fuzzing

In the thrilling conclusion to our fuzz testing series, we’ll use Go’s fuzzer to find a real bug in our code, and also to verify the fix.

Finding bugs with fuzzing

In the thrilling conclusion to our fuzz testing series, we’ll use Go’s fuzzer to find a real bug in our code, and also to verify the fix.