I'm on Fallthrough: APIs: Design Imperfectly, Improve Relentlessly (2 mins read).

Announcing my appearance as a guest co-host on Fallthrough, talking about APIs and how to build them.
I'm on Fallthrough: APIs: Design Imperfectly, Improve Relentlessly (2 mins read).

Announcing my appearance as a guest co-host on Fallthrough, talking about APIs and how to build them.
Logging into Hashicorp Vault via a GitHub token in the environment (1 mins read).
How to more easily log into Vault with a GitHub token, without having to enter it interactively.
Performing group_concat queries over distinct values, with a custom delimiter, with SQLite (2 mins read).

How to avoid SQLite's DISTINCT aggregates must have exactly one argument error when performing a group_concat(distinct ...) with a custom delimiter.
Updating apk add definitions in Dockerfiles (3 mins read).

How to use Renovate's Custom Regex manager to extract apk add definitions in a Dockerfile, to allow managing (un)pinned packages.
I'm on Fallthrough: An Exploration of APIs, Versioning, & HTTP (1 mins read).

Announcing my appearance as a guest on Fallthrough, talking about APIs, versioning, documentation, and more.
Creating single-purpose RSS feeds with Hugo (2 mins read).

How to create a new RSS feed in Hugo for a single page's updates.
Creating a test harness for validating Renovate Custom Datasource configuration (4 mins read).

How to set up a test harness to make it eaiser to modify scary looking JSONata transformations in your Renovate configuration.
Product requirements for a "fund your dependency tree" service (12 mins read).
Thinking about what functionality I would want as a funder, or a fundee, for a "fund your dependency tree" service.
I'm on Fallthrough: Patching Problems with Persnickety Proxies Purveyed by Paternalistic Princes (2 mins read).

Announcing my appearance as a guest host on Fallthrough, discussing the Go module proxy, pondering 'is Go dead?' and whether the Go team at Google have our best interests at heart.
Go 1.24's omitzero is another one of the best additions to the ecosystem in years (4 mins read).

Why I'm very excited about the JSON tag, omitzero, landing in Go 1.24.
Celebrating dependency-management-data's second birthday (7 mins read).

Reflecting on the last year of the project.
Go 1.24's go tool is one of the best additions to the ecosystem in years (8 mins read).

Why I'm very excited about go tool landing in Go 1.24.
Getting access to rich-text data from the clipboard (on Linux) (1 mins read).
How to use xclip to retrieve rich-text output from the clipboard.
Why is zsh no longer storing history? (1 mins read).
Spoiler: you may be missing both HISTSIZE and SAVEHIST variables.
Accessing private Go modules in a Docker container (3 mins read).

How to use a Personal Access Token or SSH to access a private Go module, from a Docker container.
Getting all comments from a given user on a GitHub Discussion (2 mins read).

How to use the GitHub GraphQL API to retrieve all comments from top-level or reply comments on a GitHub Discussion.
What level of access do I have on that GitHub repository? (2 mins read).

How to check, via the GitHub API, what access a given user has on a repository.
Blocking 'Similar' and 'Because you like ...' suggestions on reddit with uBlock Origin (1 mins read).

How to use uBlock Origin to remove reddit's suggestions in your home feed.
You can now resolve remote presets when using Renovate's local platform in renovate-graph (2 mins read).

Announcing a new release of renovate-graph, which can now follow github> and local> presets.
Some mixed thoughts on The Changelog Podcast Universe (3 mins read).

Some reflections on the bittersweet news about the The Changelog Podcast Universe.
Creating renovate-packagedata-diff to diff Renovate package data dumps (3 mins read).

Announcing the release of renovate-packagedata-diff which makes it possible to provide a semantic diff between different Renovate package data dumps.
Some useful SQL(ite) tips I've learned (5 mins read).

A collection of SQLite snippets I've picked up recently to improve my queries.
I'm a recipient of the 2024 October Engineering Monthly Award Recognition at Elastic (1 mins read).

Announcing winning the 2024 October Engineering Monthly Award Recognition at Elastic.
Gotcha: PersistentPostRunE only runs on successful commands in Cobra (3 mins read).

A possible gotcha when using Cobra to perform cleanup in a PersistentPostRunE.
Creating a Neovim plugin for my standup updates (3 mins read).

Documenting some of my thoughts about writing a (Python) Neovim plugin.
The joy of an asynchronous, always updating standup (5 mins read).

Describing how my team does standups across a globally distributed team.
Creating a private mirror of the Renovate docs (5 mins read).

How to set up a copy of Renovate's documentation, pinned to an older version, for your organisation.
Lessons learned adding OpenTelemetry to a (Cobra) command-line Go tool (10 mins read).

Some reflections on what I've found good and not so good about instrumenting a command-line tool with OpenTelemetry.
Summarising the skipReasons for Renovate data exports (2 mins read).

How to work out what skipReasons you have for your Renovate package data.
How to diff two datetimes (1 mins read).
How to get the number of seconds, minutes, and a human-readable time comparison between two datetimes.
Why has Firefox 133 lost all my tabs? (2 mins read).

Recounting an issue I'm seeing with Firefox 133 where it creates a new profile, and how to resolve it.
Creating a /slashes page (1 mins read).
Creating a collection of all the /slash pages I have across my site.
OggCamp 2024 (14 mins read).

A recap of this weekend's OggCamp 2024 conference.
How I manage my dotfiles (8 mins read).
A deep dive into how managing my dotfiles has (not) evolved over the last 10 years.
Don't do Agile, be agile (13 mins read).

Why you should ditch the framework and just vibe.
Converting a Reveal.js slide deck to PDF (1 mins read).

How to convert a Reveal.js slide deck to a PDF, using Decktape.
Getting symlinks to work with a git clone on Mac (2 mins read).

How to restore symlinks in a previously cloned repository, where core.symlinks=false.
Using a separate Go module for your tools.go (2 mins read).

How to use the tools.go pattern to source-track your Go tool dependencies, but without polluting your top-level go.mod.
I'm on API Evangelist Conversation (1 mins read).

Announcing a podcast appearance with Kin Lane about API Versioning.
Utilising Renovate's local platform to test more easily (4 mins read).

How to use Renovate's local platform for validating configuration changes more easily.
Don't pretty print your API's JSON response body (3 mins read).
Why pretty-printing JSON responses in your APIs is a waste of resources, and you should stop it.
Nested teams in GitHub don't give you the control you think they do (2 mins read).

Some pain points when using nested teams on GitHub.
Forcing pacman to perform post-upgrade tasks if it's failed part way through (2 mins read).
How I ended up recovering from my Arch Linux upgrade crashing part way through the post-upgrade hooks.
How to use Dependency Management Data to discover which dependencies are participating in Hacktoberfest (3 mins read).

Detailing how you could use dependency-management-data to gain insight into which dependencies you use are participating in Hacktoberfest.
You're not mature enough to release your first version as v1 (12 mins read).
Why you should never release your first iteration of a project as your v1.0.0, but it should instead by v0.1.0.
GopherCon UK 2024 (22 mins read).

A writeup of the GopherCon UK 2024 conference.
Gotcha: SXHKD doesn't like comments (in bindings) (1 mins read).
Why your SXHKD bindings may be silently ignored
How to get the next window created set to floating in BSPWM (1 mins read).

How to tell BSPWM that the next window created should be floating.
Creating a /typography page (2 mins read).
Creating a page for viewing different types of content and how they display on my site.
I'm on Go Time! (3 mins read).

Announcing my first podcast appearance on Go Time, talking about OpenAPI, oapi-codegen, versioning, and some fun Unpopular Opinions.