A brief and incomplete history of modal text editors

In this post I’m going to talk about some old text editors you probably never heard of, what is modal text editing, and why people like it so much.

Writing a TOTP client in Go

A TOTP1 based 2FA system has two parts. One is a client that generates the TOTP code. The other part is a server. The server verifies the code. If the client and the server-generated codes match, the server allows the inbound user to access the target system. The code usually exp...

Writing a TOTP client in Go

A TOTP based 2FA system has two parts. One is a client that generates the TOTP code. The other part is a server. The server verifies the code. If the client and the server-generated codes match, the server allows the inbound user to access the target system. The code usually expi...

C and C++ Prioritize Performance over Correctness

The meaning of “undefined behavior” has changed significantly since its introduction in the 1980s.

Running commands against every module in a Go multi-module project

I've recently been migrating oapi-codegen to a multi-module project. As part of it I've seen that running an innocuous "test all the packages below this one": go test ./... Does not work any more, as go test will only traverse packages that the current module knows abou...

Slices Package: Clip, Clone, and Compact

Series Here are all the posts in this series about the slices package. Binary Search Clip, Clone, and Compact Compare Contains, Delete, and Equal Introduction In the first post of this series, I discussed the binary search API from the slices package that is now part of the stand...

Interface guards in Go

I love Go’s implicit interfaces. While convenient, they can also introduce subtle bugs unless you’re careful. Types expected to conform to certain interfaces can fluidly add or remove methods. The compiler will only complain if an identifier anticipates an interface,...

Interface guards in Go

I love Go’s implicit interfaces. While convenient, they can also introduce subtle bugs unless you’re careful. Types expected to conform to certain interfaces can fluidly add or remove methods. The compiler will only complain if an identifier anticipates an interface,...

Using the WordStar diamond in 2023

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.

Forward Compatibility and Toolchain Management in Go 1.21

Go 1.21 manages Go toolchains like any other dependency; you will never need to manually download and install a Go toolchain again.