articles on Jamie Tanna | Software Engineer
https://www.jvt.me/kind/articles/ (RSS)
I'm regularly rewriting my history, often with the lens of improving my commit messages. On the Renovate project, we use a Merge Queue with Squash Merge, which means that if I do want to have atomic commits, I need to split them across PRs, which adds a bit of noise to manage them. Alternatively, I could bypass branch protection requirements to...
Sometimes, you create a branch off another branch, do some work on it, and want to know what the original branch was pointing at. For instance, if you're looking to clean up your Git history, but don't want to rebase off origin/HEAD as you know there are some gnarly conflicts you may have to deal with, you want to know the last known "good"...
In this week's Fallthrough podcast episode, I joined Kris Brandow and Matthew Sanabria to talk about a few things, but mainly the new Go proposal proposal. I don't think this was a particularly good appearance from me - I'd been at GopherCon UK the few days before, and was very noticeably flagging 😅 This was very much on me for agreeing to try...
As I've blogged about before, I've written a tool for improving the experience of working with Renovate's debug logs, providing a more targeted experience for viewing the logs. While there are a few options out there at the moment, including part of our products at Mend, it's also nice having an agnostic tool I can use across different products,...
For over a decade, I've been a proponent of writing detailed Git commit messages. I find it a valuable use of my time, and continue to double down on it, even in a world where you can get a Large Language Model (LLM) to write it for you. In the past, I've written about at least 89 strong feelings I have about Git commits, so I'm naturally biased...
The main thing this week has been GopherCon UK - an expensive week, and unfortunately not as good as previous years - but you can see my writeup for more info On Tuesday night when I got in, I went over to Monohon Ramen which was nice Met some nice folks and had some good chats Went up to Smithfields Market to get a view of the eclipse, but as we...
For the 3rd year running, I've been at GopherCon UK and am surprised to have survived the heat in London - highs of 36 degrees yesterday - but thankfully The Brewery is a lovely and cool event space. I'm writing this on the train home, with a slightly tired voice, and a little tired after a good time - thanks again to the organisers for putting...
🤖 This post includes some LLM-derived content 🤖 In the Renovate project, we use the Merge Queue to merge PRs. If a PR fails its status checks, it will be pulled out of the Merge Queue, and a maintainer will need to re-queue it, if it is a transient error. For those of you unaware, GitHub are having a pretty hard time recently with...
Ditto to last week: still not finished my Canada blog post Was a bit of a busier week with Anna in the office for a good chunk of the week And a pretty intense week at work on top of that 😬 Continuing to try and refine the plan Claude needs to implement for my Micropub rewrite Had a nice weekend down in London for my mum's birthday The a very...
🤖 This post includes some LLM-derived content 🤖 I've been recently thinking about how Open Source maintenance seems to be becoming a little more a slog recently - largely with the increased amount of contributions possible with AI agents - and how it impacts being a maintainer. I'm very fortunate that my literal job is to be an Open...
A busy week at work Got accepted to the Claude for Open Source program I've been looking, again, at rewriting my Micropub endpoint - it's been a long time on my list but I've never sat down with the time to do so - I'd like to get it into a nice place, but the time is always the difficulty. With that in mind, today I've been seeing if Claude can...
🤖 This post includes some LLM-derived content 🤖 I've recently been using the pattern I described to combine Renovate and Vendir to sync files in a number of repos, as a means to track OpenAPI spec dependencies. However, one thing I've found a bit painful is that when using Vendir to track these dependencies, the directory structure...
A busy week before our trip to Canada 🎉 (Full Canada holiday writeup to come) It was very toasty this week As a way to reduce the overall heat, I ended up leaving my PC off while working, and found that worked quite well - but does mean I need to listen to music through my phone, which isn't ideal Sainsburys had the shutters down over their...
(Full Canada holiday writeup to come) Reading: Tiamat's Wrath Leviathan Falls Watched: The Drama (2026) Fantastic Beasts: The Secrets of Dumbledore (2022) Switzerland vs Algeria (World Cup 2026) Canada vs Morocco (World Cup 2026)
(Full Canada holiday writeup to come) Got ~1 hour sleep on the plane, and ~1 hour in the cab home, so didn't get going to pick up Cookie right away from Anna's parents - but after some caffeine I was ready to drive us to pick up Cookie Then Cookie decided to be rather alert during the night, so didn't catch up on sleep particularly well, and then...
Enjoyed the last of the Selkirk Bannock A busy week catching up, dealing with a bit of fallout while I was OOO, picking up a few high-priority bits and doing some product-y evaluation of our backlog Some more good work on rootly-go this week oapi-codegen's now - on main - got initial OpenAPI 3.1 support, which we'll release in a few weeks One...
🤖 This post includes some LLM-derived content 🤖 Let's say that you're trying to determine what percentage of your work is using AI - for instance as part of a performance review - how would you go about doing that? I've written before about how I personally attribute code and content from a Large Language Model. I still very much...
A lovely week in Scotland at No. 2 Braefoot Cottage, which I very much recommend! Was lovely to get more chilled time with my parents, catching up and having some chill time I didn't bing my laptop charger with me by mistake, and fortunately nothing went wrong that needed it! Had some good walks and got some pretty awesome views - and mostly good...
A busy week ahead of a holiday away in Scotland Thinking about pausing my Changelog++ subscription, as right now there's not really much happening Changelog wise, which is a shame A nice dinner at Everyday People with Carol, Alan and Nisha - a bit loud (with it being busier due to Restaurant Week) but good food 😋 A pretty good drive up to...
A nice relaxed Bank Holiday Monday We spent the day mostly trying to hide from the heat - highs of ~32 made it rather toasty Glad I did the decking on Saturday/Sunday, as it was so toasty And playing Clair Obscur: Expedition 33 almost all the day - continuously until the game crashed in the evening 🫣 A pretty busy work week One very good thing...
My friend Alan wrote yesterday in a thread on Bluesky: In my end-of-year review I was described as a 'craft engineer' more than once. I don't disagree with this, but I have to wonder if this approach (one that has been comfortable for me for more than 10 years) is totally incompatible with modern AI tooling and a 'deliver it' mindset in a team? I...
It's heating up this week, and tomorrow is going to be ~33! Spent some time digging into how Renovate's caches work, to write up some more in-depth docs, and learned a number of interesting things I'm looking forward to finish writing up KvK vs 521 was fun We smashed them in prep, but they lasted longer than us for the battle Was interesting...
This week I joined Kris Brandow on the Fallthrough podcast, talking about a mix of things. It was another fun episode, and I'm looking forward to listening back to it to hear about some fo the things we talked about. Hope y'all enjoy it!
In the last month I've found I've been hyper aware of noticing folks writing open-source everywhere I look, which feels like there's something slightly larger at play. Where I've had access and means to, I'll correct references to correctly call it either open source or Open Source as appropriate, but there's a lot out there I don't really have...
A very short workweek, with Bank Holiday Monday, the GitHub Maintainers Summit and Matt's funeral on Thursday Had a chilled Bank Holiday Monday Was nice to be invited to the GitHub Maintainers Summit, and found it a good time! I didn't end up writing many notes that are worth sharing publicly, in particular because there were a number of...
Earlier today I was working with a Yarn codebase for the first time on one of my machines, and I hit an awkward error I'd not seen before: % yarn install yarn install v1.22.22 error Error: Failed to replace env in config: ${NPM_TOKEN} at /usr/lib/node_modules/yarn/lib/util/env-replace.js:19:13 at String.replace () at envReplace...
A fairly busy week at work, and a mix of getting stuff done across the Open Source world In Renovate: Finished off the ability to make it so Renovate only provides updates to Go modules within your go directive, which we've wanted for oapi-codegen - already been very useful! With it being the start of Maintainer Month, I've been thinking about...
In the Go ecosystem, there are two key parts of the go.mod to note (aside from the dependencies themselves) which are the go and toolchain directives. The go directive allows specifying the minimum version of the Go language that needs to be used to work with this module. The toolchain directive allows specifying the minimum version of the Go...
A pretty intense environment this week, so not too much else done outside of work Another episode of Fallthrough - this time a bit more random in what we covered, but good Tried making sweet and spicy Korean chicken - wasn't quite right in terms of measurements (and a little too little gochujang) but was good Listening to How Did This Get Made?'s...
This week I joined Kris Brandow on the Fallthrough podcast, somehow talking about even more topics than last week. This was a fun episode, and one of the alternate titles I'd proposed - on the removal of Claude Opus from GitHub Copilot Pro and maybe no more Claude Code on the Pro plan - was: The Opus was the shareholder value we've delivered...
Last week, I was tagged in a LinkedIn post, where one of the Python Core developers was noting that Astral's setup-uv GitHub Action was not being updated by either Renovate or Dependabot, and a note to users that they would need to manually update. I was a bit surprised about this - as it was the first time I'd heard about it - and this is never...
As I've been working more with Typescript - especially with Renovate - I've been feeling the need to finally invest in getting a debugger set up. Although I've been a fan of either console.logs and/or using OpenTelemetry tracing for debugging how things have been working in the project, there's been a few things this week that would be more...
A 3 day week, with Easter Monday and a recharge day at work A busy week at work, continuing on protecting our users from malicious packages Including a short-term fix using OSV data, and a longer-term solution planned that I'm working through which will provide some strong extension points in the future Some oapi-codegen work Including some...
Something I've been meaning to write about since November 2024 is how to create an external command for diffing between files with git diff. I found that while I was implementing renovate-packagedata-diff that there seemed to be a lack of documentation around how to do it, so it would be worthwhile me blogging about it. (I've since found that...
I work with quite a few OpenAPI specs, and have found it useful to be able to keep an eye on what's changed over time. Although I'm familiar with the YAML (or JSON) representation of a given OpenAPI spec, it's nicer to have a summary that's human-readable. This especially is the case in my work maintaining rootly's Go SDK, where there's a lot of...
Week Notes are later than usual because we were binging Last One Laughing UK, and enjoyed going to bed late with it being a bank holiday A fairly busy week at work, getting some more things in place to block malicious packages from being picked up by Renovate With the end of the tax year coming up, spent some time sorting out ISA allowances,...
A fairly busy week back at work, catching up on what I'd missed, some follow-ups to last week's Trivy supply chain attack, and pushing forward with a number of plans Pretty awful weather this week - storm earlier in the week, and as we went down to London, we had gorgeous sunshine and heavy rain and hail 😬 A good result at the Jam Cafe quiz,...
A nice, mostly restorative, week off for my birthday: Definitely feel a lot more reset, having worked on various bits of life admin, and not doing any Open Source (bar one PR), not doing any tech-related reading or listening (although maybe I lie - it turns out on Monday I did listen to some pods) Was good having a few "admin" days and a few...
As I did an update earlier on my Neovim plugins, I noticed a breaking change from codecompanion.nvim hadn't yet been addressed upstream with mcphub.nvim, but fortunately a couple of options were contributed by the community. Until the PRs are merged, I wanted a way to pull the changes into my local setup with lazy.nvim, so I could continue using...
A busy week trying to close out my ongoing TODOs ahead of being off next week Sorting through ~50 of my raised-but-not-yet-merged PRs on Renovate Clearing out things in my TODO list, some of which needed issues raising and/or thinking about bigger strategy decisions As I've been doing this, I've spent some more of this week doing "big picture...
In the Overcommitted community Discord, we've had some discussion recently about using analytics on our sites. In response to a question about how I use it, and whether it changes my behaviour, I thought I may as well get another blog post out of it! You may also be interested in reading my annual "site in review" posts, which over the years go...
A busy week but less so than last week, thankfully After starting to look into how to sync files with Renovate, I spent a bit of time with Vendir, and after a couple of tweaks, managed to get it sorted + blogged about Got oapi-codegen v2.6.0 out - still a few things we wanted to get in, but didn't get round to them in time for the 7th birthday A...
A number of releases ago, I introduced a JSON Schema for oapi-codegen's configuration file format, to aid with editor-driven autocomplete. It's best if you pin this, so you're not trying to use features that don't yet exist, like so: # yaml-language-server:...
Prompted by Joe and Marcus after my last post about AI, I thought I'd share how I'm currently using locally-hosted Large Language Models (LLMs), as I'd teased it a little bit in the post. The TL;DR is "not that much". Why did I start? Before I get into how I'm using them now, it's worth explaining how I got started using them. In late 2024, some...
For a few years, I've been trying to get a perfect workflow for keeping vendored files in sync between repos. Especially with oapi-codegen, where it's our recommendation to vendor the OpenAPI specification and your generated code, there can be a bit of awkwardness in place to try and keep your copy of some other repo's OpenAPI spec in sync with...
As I've written about before, I'm a self-described "cautious skeptic" of AI and Large Language Models, and I'm trying to do more with AI where makes sense. One thing I've noticed I do differently to other users of AI-generated code is that I work hard to document usage of AI tools much more visibly than other folks, going as far as documenting...
A particularly busy and overwhelming week - juggling what seemed like two dozen things in and out of work Enjoyed my leftover Miss Korea from Sunday night 😋 Got v0.7.0 out for rootly-go, with some future-proof changes that should make it easier for folks in the future Was able to finally speak about oapi-codegen's time in the GitHub Secure Open...
As I recently wrote about, we use GitHub Discussions for triaging user requests in the Renovate project. This process works really well for the maintainers (the team who have final say on new features, and whom have merge rights) and contributors (people who regularly contribute to Renovate's features, fix bugs, improve documentation and help...
Earlier today on Renovate we noticed that our documentation site had not been deploying for a couple of days. The root cause was down to a quirk of GitHub Actions, where a required property isn't actually always enforced to be required 😅 To explain this, let's look at the following composite action: # .github/actions/setup-node/action.yml name:...
As noted in GitHub's post, oapi-codegen was one of the projects taking part in the third GitHub Secure Open Source Fund session. I'd like to take a moment to reflect on the program, and some learnings I've taken from it. One of the quotes I shared at the end of the program summed up my time: Having time dedicated to following best practices has...
With Anna off these couple of weeks, we had Tuesday off together, and although we didn't get to the spa, we had a nice lunch out at Maki & Ramen, and then got some nice chocolates from Chocolate Utopia It was DMD's birthday on Monday, and a bit sad thinking about it, some of the interesting work Andrew Nesbitt is doing that may be things that...
A few weeks ago, I was reading Siddhant Goel's post about 10 years using plain text accounting, and I found it a really interesting read, but decided that this level of tracking was unfortunately not for me (and my ADHD brain. It wasn't until a few weeks later, where I was filling in my first UK self-assessment tax return, that I wondered if...
A busy week at work, with a number of in-flight features and fixes, especially ahead of a Dev Platform release Been a fun week on Kingshot, burning through a lot of things with TC30 and Alliance Mobilization competing with one of the other alliance members Accidentally spent a lot of speedups getting to TC30 (more than I needed) as well as...
This article was originally published on the Mend's HackerNoon blog. It's fairly likely that you've heard the term "AI Agent" or "Agentic" used in the last few months, and for a number of folks, it's possible that you've used an AI Agent before. But do you know how they work, and how straightforward it can be to implement a fairly basic version?...
Roughly 100 days ago, I joined Mend to work on the Renovate project as a maintainer and community manager. In a vague homage to the style of politics' "first hundred days", I'll talk about some things that have happened since I've joined the project, and some of the interesting (and mundane) things I've learned since joining the project. This was...
The Renovate "maintainer dashboard" has been super useful (running locally) to giving me a view of what user-submitted Discussions need a review It's already making it much easier for me to get insight into things, and being able to directly query the data is very handy I'm in the process of writing a blog post about it, and hoping to also get...
🤖 This post includes some LLM-derived content 🤖 Related to my post from last year around doing this on Linux, I've been trying to do the same on my work Mac. As with trying to copy rich text out of the clipboard, it's also painful to copy rich text into the clipboard. With thanks to GPT-4.1 (GitHub Copilot), we worked out the following...
🤖 This post includes some LLM-derived content 🤖 Related to my post from last year around doing this on Linux, I've been trying to do the same on my work Mac. As with trying to copy rich text out of the clipboard, it's also painful to copy rich text into the clipboard. With thanks to GPT-4.1 (GitHub Copilot), we worked out the following...
In the last week, I've been doing some work to sync Renovate's Discussions to a local SQLite database, so I can provide a better query layer for maintainers and contributors to see what's going on. As part of this, I've been sending quite a few API requests to GitHub, and have naturally been eating up a fair bit of my API rate limits. I wanted a...
(Aside: I'm considering moving this into a microsite powered by Evidence, like I do with my Music In Review, where I could graph some of this data more effectively - we'll see if I can get around to doing this, as well as adding previous years of listening data) Listening This year, according to Podcast Addict (the app I use) I listened to ~24.5...
A very cold week, with snow starting on Monday, frozen pipes on Tuesday, and Storm Goretti later in the week We'd planned to have Monday off (as part of a nice 5-day weekend) but didn't realise until last weekend that doggy daycare was open - as we were able to book her in, instead of her usual Tuesday, it meant we could go into town on Monday...
(Note that this is also posted on the Renovate project's Discussions, too) Over the weekend, there has been some good discussion on Hacker News about how the Ghostty project uses GitHub Discussions for triage purposes, and then promotes the feature request/bug reports into Issues when they're triaged effectively. When Mitchell Hashimoto looked to...
A weird week being at work between Christmas and New Year's, but nice that we have a long weekend (Thur -> Mon) following it Work has been busy (for reasons that I'll share at some point soon) and not quite the more chill week we'd hoped Been very chilly this week Now I have a set of the new Pixel Buds Pro 2 - as a present from Anna - I've been...
This page has now moved into the separate "Music in Review" microsite, for 2025.
(Aside: I'm considering moving this into a microsite powered by Evidence, like I do with my Music In Review, where I could graph some of this data more effectively - we'll see if I get round to it by the end of the year!) Commentary As with last year, there's been another significant decline (~20%) in overall hits on my site. Not that this is a...
Took a half day on Monday with Anna's family leaving, so I could help out, and pick up Morph Morph was very screamy when I went to collect him - very surprisingly, considering it was one of his shortest stints there On Monday/Tuesday Morph enjoyed coming upstairs - being very needy - and chilled behind me on my spare desk overlooking the garden...
A busy week ahead of hosting the Dodsons this weekend for Christmas: A lovely weekend hosting the family and catching up We both had Friday off to do the last bits of sorting and tidying and getting bits ready in the house which was very much needed, on top of bits we've been doing on-and-off for a few weeks! Got some lovely gifts from my Secret...
In the run up to Christmas (with Anna's family Christmas next weekend), I've made some good progress with my office to make it "guest ready", and got a few more presents sorted Well, 73 days is my new record for a re-org 😬 A very frustratingly slow haircut, being there for ~90 minutes (almost entirely waiting to be seen) and still not super...
A few weeks ago, I joined the Josh Bressers on the Open Source Security podcast to talk about the joys and difficulties of updating dependencies, and we had a great time. In particular, this focussed on Renovate, given my role as maintainer and community manager on the project, and talking about some of the difficulties of updating dependencies....
At work, fairly busy continuing with OpenTelemetry, and finalising my agentic Renovate blog post My work to block significant levels of scraping on my website seems to have been in vain - so now I'm playing "cat and mouse" Had a nice, chill, weekend Had a nice walk with Carol and Alan this morning - and Cookie's been so sleepy this afternoon...
Monday was very busy for two reasons: The v2 of Shai Hulud (Sha1-Hulud) worm landed, and so spent a fair bit of the day keeping an eye on internal + external discussions Some good discussions were had off the back of the Minimum Release Age work we've done recently But was also sad to not be able to look at how to detect + contain using DMD Made...
Got my post about Open Source and LLMs out, which was good to get it off my mind And was in perfect time for it to be included in Changelog News! Not as much discussion about it, unfortunately Been seeing a lot of Capital One people checking my LinkedIn profile out, what's all that about? 👀 Our Rakki Rakkas order got recognised by my voice 🫣...
On Saturday, I was listening to an episode of Changelog and Friends and Jerod wondered whether Open Source would be needed/used in the world of Large Language Models (LLMs). He's mentioned this before - not necessarily "ooh this is great!" but considering whether that's the trend - so I've been noodling on it in the background for a bit. Then,...
At Batch Bunch, I made some good progress on hacking together an agent for Renovate configuration changes - will see what shape I can get it in and then share it (and a blog post on the Mend blog) As I got home, Cookie was very excited to see me, then proceeded to throw up on me (with excitement) 😅 Came joint 4th with our other team in the...
Just over a month ago, Carol asked at the pub about what our 8 desert island discs would be. After a month of deliberating, tweaking songs and ordering - but most importantly, trying to put down in words (a little) of why these songs make the list - I've finally finished. I found it surprisingly hard to actually describe the songs, without...
Had a great chat with Josh on the Open Source Security podcast, talking about dependency management and some of the complexities that are involved with a project like Renovate A busy work week leading up to the Renovate v42 release, and my first Mend blog post David Flanagan asked if I had a public podcast subscription list, so I thought I may as...
This article was originally published on the Mend blog. Over this last year, we've seen significant attacks like the Shai-Hulud worm, the Nx build system compromise, and secrets being leaked to public GitHub Actions logs via the tj-actions/changed-files compromise, but I could spend the entirety of this article only listing different attacks, let...
A busy work week, in particular continuing towards the next major release of Renovate, this coming Thursday, with a number of things to get in with the release A slow Monday, after the drive, but got my Week Notes published before work A good week for swag! Got my new starter kit from Mend And the earliest delivery of a Hacktoberfest t-shirt,...
A busy, productive, week at work this week, but a couple of slower brain days Was nice to catch up with Nikos and Michael In Kingshot, did well on Eternity's Reach based on a YouTube video shared in the Alliance chat With Anna speaking at Serverless Days in Cardiff, was just Cookie and Morph and I for a couple of days Got my first couple of...
🤖 This post includes some LLM-derived content 🤖 As part of the work we're doing towards the upcoming Renovate 42 to improve minimumReleaseAge support, I thought it would be useful to straightforwardly identify cases where dependencies (or updates to existing dependencies) do not have release timestamps information. For instance, when...
🤖 This post includes some LLM-derived content 🤖 I'm a fan of using Renovate's config.js file format for the global self-hosting configuration. One thing that's always caught me out, compared to the repo-level configuration, is that I don't get IDE autocomplete by default. Today, I ended up sitting down to look at how to get it working...
A cold week, with the boiler replacement: It was a bit more involved than we predicted, so ended up getting a Miss Korea takeaway on Monday, which was very good and accidentally managed to have a good portion of food left over for lunch on Tuesday The house was in a state of disarray Monday to Wednesday, and so Cookie had an extra day at daycare...
It's been pretty chilly this week - especially with the boiler broken - but glad that it's being fixed this week We've also got the electric blanket on the bed now, to cut through the cold I've not yet worked out my "desert island discs" (after the discussion at the pub) but I've: Been replatforming my "music in review" from hosted on my blog to...
With most of my colleagues off for a public holidays, it's been a little quieter at work, but I've managed to still be fairly busy Spent a good chunk of time on the Open Source project, dealing with us hitting the npm registry's size limits for number of package versions, and carrying on with improvements around minimumReleaseAge to secure the...
A pretty busy week, with my last few days before starting my new job 🚀 and trying to get a few things done first Reminding myself how to post my private Week Notes, and did some tweaks to fix up the infra Had a pre-work catch-up with Justin about a couple of bits Gousto was very late on Monday, so ended up having duck pancakes - which I'd...
As part of getting ready for my new job at Mend this week, working on Renovate, I've been thinking a little bit about my workflow. One of the choices the Renovate maintainers made a couple of years ago was that Q&A/feature requests should come through the GitHub Discussions on the project, then will be "promoted" into an Issue that then will get...
A lovely week in sunny Tsilivi in Zakynthos (aka Zante) 🌞 We had such a lovely time, enjoying the sun, reading our books, and swimming in the pool and the sea We had some great food and drink at: Milos pub Arhontikon The food was really good! The portions were incredibly generous 😋 However, the best thing about the restaurant was that I had...
My first between-jobs week: Generally trying to not push myself and give myself some space, given I'd gotten fairly burned out and my brain has been a little mushy Although it'd have been nice to get a load of stuff done, executive dysfunction is a bitch, and I didn't want to overload myself and inevitably make things worse Some absolutely awful...
I'm not particularly jq-savvy, so when I have to play with it, I find it a little difficult at times. (Yes, LLMs make the process a little less painful, as I can outsource some of the thinking to them) Although there are online tools like the JQ Playground, y'all know my thoughts on the fact that you shouldn't use online tools, so I wanted to...
When working with GitHub Actions, you may have encountered a Workflow that pins the digest of the Action being used: steps: - uses: release-drafter/release-drafter@09c613e259eb8d4e7c81c2cb00618eb5fc4575a7 # v5 So how do you go about determining the digest? We definitely don't want to manually update these over time, and so instead want to...
With oapi-codegen, as many other folks in the ecosystem, we've been asked a few times in the past "can you please update this dependency as it has a CVE". I'll generally reach for govulncheck as a way to confirm the impact, given it validates - via static analysis - whether the dependency is actually called as part of your operation (sometimes...
Early in 2024, I hit an issue with Go not allowing me to use go:embed. (Aside: this is one of those posts that has been on the backburner and I'm finally getting around to it given I had a few minutes spare, and I want to test some new functionality in my blog-to-LinkedIn syndication.) I can't remember the full details for what I was exactly...
My last week at Elastic, chilly with the boiler packing in and a nice weekend with my parents: Didn't sleep particularly well on Sunday night, and woke up ~0400 and noticed the WiFi was down 🤔 which was greatly concerning to me But also not great because we're both meant to be working later that day When I woke up later - for the usual start of...
This article was originally published on the Elastic blog. What happens when automation makes a change based on assumptions without confirming the state of the real world? In October 2024, we found out in one of the worst ways possible — our most critical public repositories on GitHub were unintentionally marked as private, resulting in a...
In new job: Announced my new job - that I'm joining Mend to work on Renovate (CLI + Enterprise) 🚀 I was able to get it published just before I left for the pub with C1 folks, but: A GitLab CI bug meant that the "deploy" agent was stuck, which I had to force a stop + unlocking of the deploy queue In the rush, I'd incorrectly copy-pasted some...
I'm very excited to announce that in September, I'll be joining Mend to work on the Mend Renovate CLI (the Open Source project commonly known as "Renovate") 🚀 Readers of my blog will be unsurprised that I was ecstatic to get the opportunity to join the team working on Renovate - Renovate is a project I've been working with for about ~6 years,...
I've written before about why I love Renovate for dependency management and some lessons learned self hosting Renovate. One thing I've not yet shared are some top tips for running Renovate "at scale" that I've found useful, in my own personal capacity. This post is primarily aimed to folks who operate Renovate as-a-service for other parts of...
The weather's back to being chilly 🥶 On a dog walk with Cookie, I noticed that the leaves have started falling and being particularly crunchy - autumn is almost here 😅 Made some efforts to try and improve my LinkedIn cross-posting but it turns out none of the platforms do what I need, so I'm going to have to build it myself Tried out Pipedream...
The weather's back to being chilly 🥶 On a dog walk with Cookie, I noticed that the leaves have started falling and being particularly crunchy - autumn is almost here 😅 Made some efforts to try and improve my LinkedIn cross-posting but it turns out none of the platforms do what I need, so I'm going to have to build it myself Tried out Pipedream...
A fairly busy week with GopherCon UK: Had a nice lunch with Anna's parents on Monday as they brought Cookie back - including opening up the Costco margarita mix 🍸 (which we've been continuing on this week) Absolutely shattered this weekend after a good few - but tiring - days at GopherCon UK Cookie's been very cute this weekend 🥰 Getting some...
Starting this post as I'm on the way home from a great few days at GopherCon UK, I had a great time. This year's GopherCon UK was a little different than last year's given this year there were "tutorials" as a third session type. GopherCon UK runs both "workshops" and "tutorials" - the former is a pre-conference, all-day training, whereas...
I've recently started to use vale for providing some editing improvements on my writing - I'll write up about that at a later point. As part of using Vale, I've had a few cases where Vale has been very angry with some of the pre-written content I'm amending, or on new content. In some of these cases, I'll disable Vale's language server i.e....
As I'd noted in Creating cross-compiled Docker images from Go binaries, I've been doing some work recently for container image builds. As I'm putting the finishing touches to my talk at GopherCon UK for the end of this week, I'm creating a pre-built container to simplify setup. However, to debug this issue with go install, I found that I needed...
A big week - some big decisions to make, the main one of which is that I'm leaving Elastic 👀 There'll be more details coming soon, but: I'm leaving Elastic, with my last day on 2025-09-05 I'm very excited for my next gig I've got a good ~20 days between jobs to recharge, which I'm very much looking forward to I handed in my notice on Thursday +...
A busy week with my workshop at Manchester Gophers and Anna's family staying for a long weekend: A busy week doing some final prep for my workshop at Manchester Gophers Had a panic in Wednesday after archiving my return train ticket, but blogumented a way around it Had a good catch-up with Chris Was a very close train on the way back on the...
In a couple of weeks I'm speaking at GopherCon UK 2025, where I'll be facilitating a tutorial What story does your dependency tree tell you about your organisation?. (This would also be described as a "workshop", but GopherCon UK runs both "workshops" and "tutorials" - the former is a pre-conference, all-day training, whereas "tutorials" are...
Last night I clicked "mark as used" on one of my tickets in The Trainline app. It was for the first part of a set of advance single tickets, and I wanted to remove the first leg of the journey from the app, so I only had the next day's tickets in the app. I clicked through the warning to say "you can't undo this", not realising until immediately...
When you're working with SQLite, it's possible that you're using the Write Ahead Log (WAL) to improve performance of the database. As part of this, you may notice that your SQLite database goes from a single-file database like dmd.db to a multi-file setup: % ls -lrt dmd.db* ........................ 577536 Jul 29 11:47 dmd.db...
The Eton Mess doughnuts at Lidl are very nice 😋 (and expectedly sweet) After last week's "format SQL code blocks inside Markdown files", I've now got my SQL files generally being auto-formatted which is nice Was fun to be on #define this week - did better than I thought, was a fairly good guest, and was good on a re-listen, too Had a good pub...
This week I was very excited to be on Changelog + Friends for a Changelog++ subscribers edition of #define, the gameshow all about words. I wasn't quite sure I'd be very good at it, and I think I'll leave y'all listeners to work out if you feel that held true 😅 But most importantly, I had a blast, and it was nice to meet some other Changelog++...
Last week I joined Kris Brandow, Matthew Sanabria and Steve Klabnik on the Fallthrough podcast to talk about versioning. This was a fun episode - some really interesting threads, tangents, I felt I was much better than I felt I was last week, and I'm amazed that we didn't even go into i.e. HTTP APIs and how you version them, which I thought we...
Got my hair cut - felt very much needed, as it was getting a lil' unruly, and it's nicer for the video podcasts I've been on recently A busy-ish week at work: Lots of Decision Doc + Design Doc writing And bits of playing around with Argo Workflows Fallthrough was fun this week - I was much more prepared and also less brain fuzzy, and generally...
Last week I joined Kris Brandow, Matthew Sanabria and Steve Klabnik on the Fallthrough podcast to talk about REST, Hypermedia and more. This was a good episode, and really schooled me on a number of things - Kris and Steve had a wealth of knowledge to share, and if Steve didn't have to drop for a meeting, I feel this episode could've been 10...
Although I felt rested after holiday, this week back at work has been busy with a few things going on and definitely felt my mind being distracted and low energy - didn't feel to be the best guest host on Fallthrough this week, which I'm a bit disappointed by Been a fairly toasty week again 🥵 Was nice to have Sarah here this weekend At...
At Elastic, we're using Renovate (as it's the best) to keep a number of internal and external dependencies up-to-date across a lot of repositories in the organisation. As part of the hundreds of repositories using Renovate, we have a number of big multi-team monorepos. For these repos, we're using the default configuration from Renovate, and then...
I had a fairly chilled (but toasty) start to the week Had Take a Moment playing a lot this week 🎶 A very bad night with foxes 😠 Found Morph in the garage, who seems to be enjoying the cool temperature in there, as well as being very naughty because he's not meant to be in there 😅 Spent ages looking for my notebook (which I've been planning for...
An intense last week of work - before our week off - and a reminder of how much I/we need time off: TV got fixed 🚀 nice to have full audio back Realised that despite having a 4K TV for ~a year, we'd not upgraded our Netflix to 4K 😅 Our other streaming services all seem to be upgraded, at least, just not Netflix Found Pokerogue and am very...
This week, I've setting up a GitHub Actions Workflow which will: Look at modified file(s) on the PR Look up the owner of the files (based on an external HTTP API, using a GitHub Actions Secret) Comment back onto the PR to indicate that ownership On a private repo (that will never need to run on a public repo) This looked something like: on: ...
This last week I've been doing a few bits of working with secrets - some of which I've needed to store in local environment variables, or pass as arguments to commands, and I've been going in and scrubbing my ~/.zsh_history after the fact, to make sure the secrets don't retain in my history, on disk. However, I wondered if there was a way to...
A very hot week 🥵 Given the fair's at Woodthorpe Park, I've been taking Cookie to Forest Rec (after dropping Anna at the tram) which has been nice Some mixed nights' sleep: one night we had awful shrieking foxes it's been super hot this week so been hard to stay cool one night - as I was reading - Morph started yeowling, and I was worried it was...
Took Cookie to the vets on Monday - for a checkup and to get her tick removed - and she was good But as we got her vaccine boosters, she's unable to go to daycare for a couple of weeks A good Batch Bunch Got a few bits done, including updating my PR to add known Identifiers to endoflife.date Very good cupcakes 😋 And nice to see Louise, too! Got...
Already June 😳 Had a great time chatting with Tessa on 99 Dev Problems on Monday An end-of-last-week conversation led to significant impact this week, but also led to a conversation that hopefully helps reduce pressure for the foreseeable On Saturday we went to see The Book of Mormon at the Theatre Royal Was really fun! Didn't have many...
Folks familiar with me and my blog will know I'm one of the Core Maintainers for oapi-codegen, and am a big fan of generating code from schemas (in a "design first" manner). When I'm not documenting things with OpenAPI, I'll be documenting things with JSON Schema. Today I was discussing with a colleague how to generate Go code from JSON Schema,...
I've recently been doing some work to improve the way a couple of Go services have their container images built, so they can be built by humans on either Intel or ARM based machines, and pushed to our container registry which will then be pulled by Intel-based infrastructure. Additionally, I'm doing some work at the moment that requires pushing...
A lovely Monday at Cowley Manor Experimental Was a nice break from Cookie, until a dog barking and whining in a room a couple of doors down, very much not appreciating being left on its own We chilled by the pool, reading our books and generally had a chilled day Had a nice lunch with Anna's parents when they dropped off Cookie Going out in the...
When working with Renovate, I heavily recommend having the Dependency Dashboard enabled. It's a great way to get a central view of all the in-flight, pending or ignored dependency updates, and provides great insight into what's going on under the hood. It even provides a list of "detected dependencies", so you don't have to use something like...
As part of Accessing your Renovate Dependency Dashboard, without GitHub/GitLab Issues enabled, I've been trying to represent a Dependency Dashboard based on Renovate's Report functionality. As I wanted to explore a few more interesting scenarios, I wanted to see how I could get a Report based on i.e. Renovate's Dependency Dashboard or Backstage's...
When working with (Docker/OCI) container images, it's a good best practice to pin your digests. For instance, instead of: FROM ghcr.io/renovatebot/base-image:9.70.8 We should instead reference the exact digest of this image's layer, to provide a (more) reproducible build: FROM...
A delayed week notes this week, as we were away for the long weekend: Had a random nosebleed on Monday, which wasn't great, and ended up significantly waking me up, so I was up from ~0400, and carefully showering later in the day seemed to trigger it again, so ended up having to be super careful all day Cleaned up and blogged about my library for...
Something I come up against, every so often, is trying to explain the difference between Renovate's depNames and packageNames. Looking back at previous times I've looked at this, I seem to have had mixed answers to this question, and so I thought this was the right time to sit down and get my mental model correctly. For instance, looking back at...
This is a copy of a guest post I wrote for opensource.org, as part of 2025's Maintainer Month. Happy Maintainer Month 👋🏼 My name's Jamie Tanna and I've been contributing to Open Source for >11 years, which extends to before my professional career began. As with many others, my first foray into Open Source was a few spelling and grammar fixes,...
As part of writing Taking more control over your Cobra CLI documentation, I needed to include a fenced code block which had a fenced code block inside it. Doing some searching around, it appears that it's possible to increment the number of backticks surrounding a code block to wrap it correctly. I.e. the inner-most code block needs to have three...
Prompted by some discussions I've had recently around documenting Cobra CLIs, I realised that in November 2023 I wrote a library, cobra-doc-template and somehow I ended up not writing a blog post about it (how?? 😅) - so here it is! Inbuilt to Cobra is functionality to generate documentation from your CLI, which is a really great starting point...
Every so often I hit a repo that requires Git commit signing, and I groan. As I hit it again recently, and wondered how to get it set up, I thought I'd write it up as a form of blogumentation. As I noted in 89 things I know about Git commits: If I have to sign my commits, SSH key signing makes it almost not awful So the option I will always want...
Accidentally got Copilot enabled while writing these and it's been interesting trying to see it predicting somewhat correctly some of the things I Was going to say It was Elastic's Engineering All Hands this week - which I didn't go to due to the dire state of the US, and not feeling safe getting there/back - so a very quiet week at home for me...
Renovate's debug logs I spend a lot of my time working through Renovate's debug logs. This may be through Running Renovate in a number of places, such as at work (Elastic), or during my work on dependency-management-data, of which the best data can be collected through renovate-graph, a wrapper on top of Renovate. Sometimes it's a case of trying...
Note that this is a copy of the announcement on GitHub. Maintainer Month 2025 + a recap of the last year Hey folks! As you may be aware, May is Maintainer Month, which makes it a great time to think about how you're using Open Source. The Open Source we consume (and build) is never done in a vacuum - there are tonnes of people (maintainers and...
Yesterday I was working with a codebase which uses a gradle.properties, and for ✨ reasons ✨ I need to overwrite a given property, without modifying the codebase. This is something that the docs indicate is a common need: This feature is useful when you don’t have admin rights to a continuous integration server, and you need to set property values...
Earlier today, a conversation on Open Source Pledge Slack came up with Chad Whitacre around LinkedIn visibility/connection settings, and making it possible to "Follow" someone, without connecting. I set this up a couple of years ago with LinkedIn's "Creator Mode", and have appreciated that it allows folks to follow me, without me needing to have...
I've got a number of secrets I need to move across two Vault instances, which could be done manually, but I wanted to try and simplify with a lil' bit of automation. As a starting point, I asked GPT-4o (via Copilot) which set me on the right track of being able to vault kv put ... @file.json, if the file.json is correctly set up. With this in...
A busy-ish week at work, with the bank holiday, and finishing off things ahead of everyone else going to Elastic's Engineering All Hands Tried Nandos x Fanta which was nice but didn't get too much of the flavour Done some more good work on oapi-codegen, getting to the point that I'm nearing getting the next release out Although I'm still fighting...
As part of working to fix a bug with oapi-codegen today, I've been trying to work out how to call the String() method on a type, if it's set, without needing to use Reflection. To start with, we're trying to covert a UUID type (from Google's UUID library) to a string, from the following generated code: // via github.com/google/uuid type UUID =...
When using Renovate to update digests of packages on GitHub, you'll notice that you'll see a PR with a header like: This PR contains the following updates: Package Type Update Change actions/setup-go action digest 0aaccfd -> d35c59a This is already useful, but can be a little awkward as you probably want to go and check in on what's changed...
Tough going back to a 5 day week, but at least it's a long weekend! Had my first Lidl trip in weeks which was weird but nice Enjoying the Straight Shot Quads mode in Apex Legends Spent a good chunk of time fighting pylsp for some work stuff I was doing (on a poor brain day) and converting a Ruby script to Python (even though I dislike Python,...
As has been noted before, oapi-codegen doesn't (yet) support OpenAPI 3.1. So how do you end up working with an API that's producing an OpenAPI 3.1 spec? This weekend, I've been migrating dependency-management-data to use the new V1 API for endoflife.date, which now requires OpenAPI 3.1. I started setting myself about to downgrade the spec from...
Had an afternoon trip to Mcarthur Glen on Bank Holiday Monday - was a pretty rainy drive, but nice to get out and got the car washed One night my phone was on such low battery that - even though it was on wireless charge - when I ~10 minutes later restarted my Headspace, it then decided to die 😅 My "Daylist" Spotify playlist has been very good...
Today I've been working with some (internal) cross-compiled Docker images, while responding to an internal incident. As part of this, we followed some documentation (I had written a few weeks ago) around how to build an image ad-hoc, and noticed that the images weren't correctly working - a colleague using an ARM Mac wasn't able to correctly...
Today I've been doing an Open Source day on oapi-codegen - thanks to my employer Elastic, who gives me 4 hours a month that I can work on the project in-hours - and have been doing some work towards the OpenAPI validation middleware for net/http-compatible servers. One of the main things we try and do for the top-level module is have 0...
A fairly productive Batch Bunch, and nice to see folks Almost entirely SSH'd into my desktop - doing some work on trying to provide a better way to visualise the usage of a given dependency, based on some work Paddle have done Did some prep for my DMD talk on Thursday Fixed an issue with oapi-codegen within ~30 minutes of it being raised (as an...
As someone with someone with ADHD, I find that introducing context switching for my "muscle memory" to be a little jarring, and is why I've found in the past that using something "with Vim keybindings" to be not-quite-the-same as actual Vim/Neovim. I'll also find that when writing longer docs or messages, I'll lean on using Neovim (for the...
Roughly 18 months I joined Elastic and started working on Engineering Productivity for the first time in my career. This is a role I've been gravitating towards throughout my career and has been something I've done unofficially several times, so it's been very enjoyable working on it as part of my "day job". For the last ~12 months I've been in...
Was nice to have a day to focus on oapi-codegen on Monday (time leftover from Jan/Feb) Focussed on the middleware repos, and an issue that some teams at work need solving, but took a bit of time to get there as I needed to look into a few things But need to have a follow-up day soon, as I still didn't get round to actually solving the one thing I...
One thing I've been building for a few years is renovate-graph, a lightweight shim on top of Renovate (aka Mend Renovate CLI) to extract package data from repositories, primarily for use with dependency-management-data. For the most part, you can use vanilla Renovate for this functionality, but renovate-graph gives you some better defaults if you...
As mentioned in Using Renovate to manage updates to golangci-lint versions I very much recommend using Renovate to update your golangci-lint versions. With the release of golangci-lint v2 a couple of weeks ago, consumers need to perform a one-time migration of their configuration. (I'd meant to post this last week, but yay ADHD, I forgot 🫣)...
A couple of weeks ago, I joined the lovely Kris Brandow and Ian Wester-Lopshire on the Fallthrough podcast to talk some more about API design. As I mentioned in I'm on Fallthrough: An Exploration of APIs, Versioning, & HTTP this was a planned follow-up, as we didn't quite chat through everything we'd planned to. And in a similar vein, we're also...
Confirmed that I'll be speaking at Golang Birmingham which has restarted 👏🏼 Enjoyed attending Developers Developers Developers Some very good demos - in particular Lu Wilson's incredibly enthralling and chaotic (positive) Nice to meet some new folks On the way, made a start writing a "things I've learned working in Engineering Productivity"...
A busy week back to work: Lots of things to catch up on Been feeling the 'whelms, and had some weird concentration towards the end of the week Definitely been feeling the obligations (in and out of work) Ended up working on something that was super valuable, causing a lot of toil, but not necessarily the time to do it, as I couldn't concentrate...
I've been working with Hashicorp Vault a fair bit over the years, and with one Vault instance I use, it requires login via a GitHub token. When logging in, it defaults to requiring this to be interactive: $ vault login -method github GitHub Personal Access Token (will be hidden): This is a bit of a pain, as then I need to go and fetch my GitHub...
Let's say that we have the following query: select package_name, version, count(*), group_concat(distinct owner) as owners from renovate left join owners on renovate.platform = owners.platform and renovate.organisation = owners.organisation and renovate.repo = owners.repo where package_name like 'github.com/oapi-codegen/%' group by ...
As I've written about before, I'm a big fan of Renovate. Recently at Elastic, we've been using the excellent Chainguard Images to provide zero CVE base image containers, and using Renovate to update those base images as Chainguard ship new updates. Once we'd set up Renovate to update our base image updates, my colleague Mattias did some great...
A very restorative week off in Wales Had a very restorative week off, being a bit more chilled Managed to very intentionally switch off Didn't read any tech posts, touch LinkedIn, listen to any podcasts, or think about work or side projects (aside from a couple of random thoughts I pushed out) On our last day, I did get an issue raised for...
My Fallthrough API episode came out, and we've got some follow-ups planned 👀 A tough final week of work before next week's holidays Ahead of being on holiday, there were quite a few things I needed to look into, close off and otherwise hand over But also being on call (with the 12 hour shifts) and a busy week of stuff going on meant I didn't...
Earlier this year, I was invited to join the wonderful Fallthrough podcast to talk about APIs, which would be my first appearance on Fallthrough. As noted in I'm on Fallthrough: Patching Problems with Persnickety Proxies Purveyed by Paternalistic Princes, the episode on APIs was planned to come out around now, but my second appearance came out...
Definitely felt a notable improvement in mood given the nicer weather And I feel like my Dad, quite liking having the windows open for fresh air 🫣 Apex Legends' new Relic Weapons LTM has been a lot of fun, and moreso than last season's takeover (thankfully moved over to an LTM, because the community have been very whiny) One day, playing Apex...
A bit of a busy week: Was nice to chat with Tessa Kriesel on Monday, about one of her current clients, but also some more general chat Had a nice catch up with the Capital One folks on Wednesday My post Some useful SQL(ite) tips I've learned appeared on /r/SQLite and Hacker News this week, unexpectedly, but seems to have been interesting to...
Tonight I've added a new couple of RSS feeds to my website - one for my /salary/ page and one for my /now page - for two pages that folks may want to keep an eye on more easily. Because it was a little awkward to set up the feeds, I ended up wanting to write it up as a form of blogumentation. To start with, we need to modify our Hugo config to...
As I've written about before, I'm a big fan of Renovate. This last week, I've properly got stuck into Renovate's new Custom Datasources functionality, which have been great. Sebastian has written about them in the past and I'd recommend reading it for the full background on what Custom Datasources are and why they're great. Similar to my post...
Appeared in A Semana Go and Architecture Nugget, and saw some traffic via Twitch, too Booked a week away for my birthday 🚀 Upgraded my GPU - went from my Titan X (Pascal) (that I bought with my starting bonus at Capital One) and upgraded to an AMD 7900 XTX (NITRO+ AMD Radeon™ RX 7900 XTX Vapor-X 24GB) Was a little bit worried that it was a scam...
While at State of Open Con, I had a great evening out with Andy Williams, and one of the topics we discussed at length was Open Source software funding. Realising that I actually had a number of ideas around how to approach this - in particular from a product point of view - I thought it's worth writing up my thoughts, and get some wider...
Last week I was invited to join the wonderful Fallthrough podcast as a guest host, on a more time sensitive episode discussing the recent backdoor discovered in the Go module proxy, and the episode has just shipped, with a very good title! This was actually my second episode with Fallthrough, but the first one that's published - there's an...
A slow start to the week, recovering from being flu-y, and a couple of podcasts: Monday off sick again, and feeling a lot better Did end up hacking up jvt.me.nvim (off the back of dmd.nvim) as a way to more easily autocomplete links to my posts (as I share them a lot!) Went back to work on Tuesday, at not quite 100% (given there's a fair bit of...
After publishing Go 1.24's go tool is one of the best additions to the ecosystem in years a couple of weeks ago, a few commenters pointed me to the other massive thing that was coming in the Go 1.24 release: the omitzero JSON struct tag, and I was pretty gutted to realise I'd missed it in the release notes. As someone who enjoys capitalising on...
These Week Notes almost weren't going to get written tonight - I've been recovering from pretty bad flu, and have been intentionally off my laptop/etc I'll be doing a full write-up about State of Open Con, which was the main event this week, in the coming days (I thought I'd have it done by now, but flu 🤒) but the top things to share right now:...
I had originally intended to write this on Sunday, to coincide with the two year anniversary since the first commit to dependency-management-data (DMD), but haven't had a chance to, with being this week at the excellent State of Open Con - more on that in a separate post I'm still writing. I wanted to make sure I followed last year's post and do...
Another week of more changes at work, a viral blog post, appearing on Fallthrough and finalising my talk for State of Open Con: Wrote Go 1.24's go tool is one of the best additions to the ecosystem in years, and it went fairly viral I intentionally wrote it as something to be shared + discussed wider, so am appreciative of folks enjoying it +...
For those that aren't aware, one of the big changes in February's upcoming Go 1.24 release is the new go tool command, and tool directive in the go.mod to manage any tools your project uses. I'm incredibly excited about this, and in my opinion, this is one of the best changes we've had in recent years in the ecosystem as a whole. I've been...
A somewhat mixed week: The expiry of the domain go.opencensus.io led to some widespread chaos across the Go community this week This week, I've had Don't Panik - CloZee Remix and Polarised - Koven on remix a lot I've made some very good progress with a Charm-based TUI for tailing my Matomo stats, which has been very good and has made a big...
I've recently noticed that i.e. on Slack, if I right click a channel and click "Copy name", and then paste that into a Slack message, I get the name of the channel, but if I paste it into GitHub or Google Docs, I get a rich text link, with the name of the channel, and a link to the channel. This is really nice behaviour, but with the way my team...
On my first day back in the office, I noticed something odd with my zsh setup, where new terminal sessions weren't having their history saved 🤔 Interestingly, my dotfiles specify the HISTSIZE variable to a reasonably high amount, but it seems to not be working: export HISTSIZE=30000 I've also since reproduced it on my other machines, so I think...
Batch Bunch on Monday was good 🚀 Was good to see folks, and there seemed to be some work done which was good it was a bit noisier than I'd expected in Dice Cup so a little harder to hear Ended up making a good bit of progress on looking into using ObservableHQ for DMD visualisation Started playing around with writing a Matomo plugin, so I can...
If you're building Docker containers which reference a private Go module, you'll likely need to work out a way to pass in credentials, so you don't have to build on your host machine. I first encountered this last March and as I've hit it again today, I thought I'm make sure I write it up as a form of blogumentation. This could be done by using a...
The first full week back after the holidays 🥱 Nice to meet up with Riz at Dice Cup to sus it out ahead of Batch Bunch (tomorrow) Had a nice roast today at the Larch Farm 😋 and made better by Cookie being very good while we were out, maybe because she had Morph keeping her company 🥰 Booked my ticket + hotel for GopherCon UK Started prepping my...
As noted previously, my team practices asynchronous, always-updating standups through GitHub Discussions. As it's performance management season, I'm looking back at what I've done over the last few months, and wanted to get a view of all the standup updates I've made, having spent far too long trying to do it manually, and then pop them into a...
New Year's Eve, and a quiet couple of days back at work Wasn't able to get my perfect pizza early in the week so ended up making a spicy-and-sweet gochujang based sauce for a drizzle but didn't end up really working so well, as it was a bit too subtle, but was nice The Lidl gu-knock offs are pretty nice - the S'mores were 😋 A nice New Year's Eve...
In 2024, I listened to 82938.88 minutes (1382.31 hours, 57.6 days) of music on Spotify. Breakdown of listening over the months Each month, how much music did I listen to? Of that, what was taken up by that month's top 50 songs, or top 10 artists? What about how much of that month was listening to songs that are in the top 100 songs over the year?...
Earlier today, I was trying to work out if I had sufficient privileges to make some changes on a repository. Without access to the Settings panel as a non-Admin on the repo made it a little difficult, so I went looking for API access, and it turns out there are some good APIs for checking collaborator access, such as Get repository permissions...
(I'm trying a slightly different order for these this year) Commentary In a similar vein to what I wrote last year: I noticed that there was a trend downwards towards the end of the year, but am putting it down to maybe a bit more around folks using things like blocklists for common analytics platforms like Matomo that I use. I've noticed that...
Before Anna's family left on Monday, we did a big fry-up to keep people going, which was nice Went to pick up Morph from his holiday at the cattery and as we were going through Hyson Green, thought we'd pick up a pizza Morph was very meowy when we arrived at the cattery, and was then extra meowy when he got home 😻 On Christmas Eve morning, we...
A four day week (with the last Shut it Down Day at Elastic) and hosting Christmas celebrations for Anna's family over the weekend: Definitely feeling the end of the year burnout, counting down the hours for the end of the year (which isn't a place I'm particularly happy with being) and not feeling the festive cheer (more than normal, at least)...
Since reddit attempted to destroy all goodwill in the community with their changes to the API, I've been using the mobile web view, rather than their crappy mobile app. (I did stop using reddit a lot, especially around the API changes, but unfortunately still use it a little, and moreso after leaving Twitter) Recently, I've noticed that they've...
A good week at work on a hackathon, towards providing a similar "Open Source Dependency Dashboard" similar to Microsoft folks mentioned on the CHAOSS podcast We've made good progress towards adding a CI check that scans for dependency changes - via renovate-packagedata-diff - that then links out to an internal dashboard that provides...
In Utilising Renovate's local platform to make renovate-graph more efficient I mentioned that you can take advantage of Renovate's local platform to run against a local directory. During a hackathon week at work, I've recently been using renovate-graph --platform local alongside my new renovate-packagedata-diff tool to provide a diff of...
As I wrote about in You should listen to The Changelog I've been listening to The Changelog for ~8 years. I love the overarching podcast, Changelog Interviews, and I've really enjoyed the new Changelog and Friends podcast. But more than that, I've thoroughly enjoyed the quality of the network as a whole, including podcasts I regularly listen to...
A nice catch-up with Mihaela Did some wiki'ing for Star Trek: Generations (the game), which was fun reminiscing My blog post about Cobra + OTel was on Golang Weekly 🚀 A bit more Ring Fit, although not every day A bit of a stressful week, but looking forward to my hackathon week starting tomorrow Was our Decemberfest celebration at work, which...
Over the last couple of years, I've been working with Renovate's package data dumps, as part of renovate-graph and work towards dependency-management-data. These data dumps are either via renovate-graph, or from the debug logs, or using the experimental reportTypes and consist of a (large) JSON blob that contains information about the packages...
I've recently spent some time working towards presenting some of the findings from dependency-management-data at work, which has required writing some fun queries, and then using Google Sheets to better visualise that data. Not only have I taken advantage of some fairly straightforward queries, written off-the-cuff, or relied upon some...
A very busy week at work, getting back into Ring Fit and getting on top of my office, ahead of guests staying over the next few weeks I've managed to nudge myself into getting back into Ring Fit Did some good workouts Monday-Thursday, took a day off on Friday, and then this weekend's been busy so hadn't had a chance to work out any more Finding...
I was chuffed today to hear that I was one of the winners of October's round of the Engineering Monthly Award Recognition programme at Elastic 🚀 This is a monthly process where engineering leads across the organisation vote based on nominations, and through a mix of nominations in recent months as well as in October, I'm a winner this month....
In my recent post Lessons learned adding OpenTelemetry to a (Cobra) command-line Go tool, I wrote about how you can wire in OpenTelemetry to a command-line tool built with Cobra. In it, I noted that to do so, you can use the PersistentPreRunE and PersistentPostRunE. However, this morning my colleague Mario made me aware that it turns out this...
A busy week in all senses: It's been hecking cold this week - we had some significant snow on Monday night that impacted Anna's work trip to Birmingham on Wednesday, and left the week as mostly indoors - although this weekend it's been back to ~15 degrees Cookie's done very well not being walked Tue -> Sat, and we're very impressed, but she was...
As I noted earlier today, I love the way my team does standups in an asynchronous, and always-updating manner. As I've started to keep a single comment on GitHub Discussions up-to-date - be that for my daily team standup updates, or my on-call handover notes - I've been spending a lot of time re-opening the Discussion page, finding my last...
There are several things I really love about working in my team at Elastic, but one of the things I really enjoy is how we run our standups in my team. Working in a globally distributed, asynchronous-first team with team members across three continents, and ~8 timezones is that, as noted in Making it easier to schedule cross-timezones, with the...
If you're self-hosting Renovate, you're generally going to be out-of-date compared to the upstream project's releases. This isn't just because it takes time to update, but because Renovate as a project is constantly shipping 🚀🚀🚀 I've found it's more noticeable when you're running Mend Renovate Community/Enterprise Edition, which purposefully...
A busy week of on-call (and some high priority work to support on Thursday) With Changelog doing a merch sale, I ended up getting some new swag, especially as the Maintainer, Maintainer, Maintainer Ended up missing an incident page (that was fortunately autoresolved) as my do-not-disturb setup on Android/PagerDuty wasn't correctly set up 😬 A...
In an effort to better understand + instrument tools I work on (both in and out of work) I've recently been introducing OpenTelemetry support to Dependency Management Data. This is something that I've been meaning to do for a while, and as part of looking to do some telemetry setup for a CLI at work (which also uses Cobra under the hood) I wanted...
A busy week at work with post-incident follow-ups and an incredible downer in the US Elections. Got a haircut ahead of the few big meetings this week And somehow ended up stepping on one of my hairs, which was painful, hard to find and definitely a "huh, how could that even happen" but 🤷🏼 The build-up for the week led to Wednesday, where I was...
When working with package data dumps from Renovate - regardless of the source - it can be interesting to see which packages haven't found updates. This can be worked out using the skipReason JSON field, for instance with the below renovate-graph output: { "metadata": { "renovate": { "major": 38, "platform": "github", "version": "38.130.2" ...
A spicy week at work (for many reasons) and overworking: Couldn't sleep very well on Monday night, as on Tuesday I had a couple of big things at work the next day - a big meeting to present Open Source usage to leadership, and a possibly spicy change - and when I woke up in the night it took a while to get back to sleep .. and it turns out the...
Today I've been looking at how to calculate the number of seconds/minutes/hours between two datetimes. As this is both for me, and for other humans to read, I wanted to provide both the raw number, and a Xhours Yminutes view, too. I couldn't find an online calculator that would allow me to use an ISO8601 datetime, so spent ~10 minutes doing it...
Circles - Yoe Mase was been very much on repeat, such as 🔥 new release Realised the heated floor in the loft room has been on - accidentally - for a couple of weeks 🫣 Accidentally spilled some tea on Cookie as she ran past me up the stairs 🫣🥺 She was OK, but soggy and smelled of tea for a few hours, even after we dried her off Started digging...
A busy week at work An interesting OpenUK meetup this week around whether Open Source can be a business Announced our next OpenUK meetup, all about the IndieWeb 🎉 Very frustrating losing all my desktop (+ work) tabs - but managed to work out why Created my /slashes page Cat Snack Bar's new "merge" game has been fun, but I'm finding I'm already...
Over the last week, I've upgraded my various (Arch btw) Linux machines' versions of Firefox Nightly to their latest - largely due to the announced zero-day - and have noticed that on each and every device it's ended up losing all my settings and open tabs. As someone with ADHD I (like to think that I?) manage my active TODO list with browser...
Last week I found out that Robb Knight has a site called called Slash Pages, which details common top-level URLs that are found at /. I'd found out about this as someone had started contributing a /salary page section, and looking at both my own site, and the list of pages that have already been collected, I thought I'd create my own /slashes...
For some GitHub insights for work, I had it in my head to re-investigate SteamPipe, but as I started working with it I remembered that unfortunately it doesn't quite do I what I want and how I'd want it to work, so needed to implement it using the plain GitHub APIs Had a fun (sarcasm) game of Apex Legends where I ended up playing with the same...
As I write this post, I'm sitting on the train home from OggCamp 2024. It's been a good weekend - I've met some nice people, caught up with folks I've known for years, had some great food, listened to some great talks, and learned some cool new things. Telegram chat Something nice that the organisers did this year was to have a Telegram group for...
Over the last month or so, there have been a couple of posts around how to manage local configuration (aka "dotfiles") - Better Dotfiles (discussion on Hacker News) and Managing dotfiles with chezmoi (discussion on Lobsters) - and it's made me reflect on my own usage. Instead of replying on those discussion threads, I thought I'd take a second to...
A busy-ish week back at work again Phaeleh's new album dropped, although I didn't realise it was an EP, not a full album. Still good though! Spent Wednesday afternoon down at DTX London Spoke about dependency-management-data, and was cool that it was recorded Nice to chat to the Mend folks about dependency-management-data, Renovate and more Kinda...
Over the last ~8 years in my career, I've worked on teams who do Agile, and who are actually agile. Although there has been some overlap, I've found that for the most part, teams who are actually trying hard to follow the frameworks or methodologies have ended up being less effective at shipping at pace, compared to their counterparts who are a...
Something I have to do every so often is convert one of my talks from their web form in Reveal.js to a PDF. Ahead of speaking at DTX London tomorrow, I'm preparing a PDF as well as the web URL, and I've yet again forgotten how to do it, as it's just-infrequent-enough that I've not got it in my memory banks. This is the perfect opportunity to...
Yesterday I was working with one of my colleagues, who had an issue in one of their Git repos where a symbolic link (symlink) wasn't resolving correctly. The problem This turned out to be due to how MacOSX will by default set core.symlinks=false, as a security measure (via). This means that when a symbolic link is part of a cloned / pull'd repo,...
In Managing your Go tool versions with go.mod and a tools.go, I mentioned how you can use a tools.go to track any dependencies your project needs for i.e. linting or go generates. This is a very useful pattern and until the proposal to add a // tool directive in go.mod lands, is in my opinion the best way to do this, which is also why it's our...
A lovely, wholesome, few days in Wells-next-the-Sea: We stayed at the very nice A Room in the Park It was a very good week weather wise, and we didn't have any rain until the last morning, and even then it was fairly light thankfully Walked a lot, between ~10-18k steps each day Had to buy a new coat, as we realised part way through the journey...
A busy week ahead of a week off: A very busy on-call week, as well as trying to close things off before holiday I ended up getting my first page (at Elastic) and realised that my PagerDuty setup did not have the "do not disturb" bypass on 🫣 Fortunately I was at my desk, in a meeting, and noticed an alert in my emails I'd also frontloaded all my...
This afternoon, I had a great conversation with Kin Lane, aka the API Evangelist, about API Versioning on the API Evangelist Conversation podcast. I've followed Kin's blog for years now - who manages to put out almost double the content I'm able to, which is a good goal to strive for! - and have learned a tonne from Kin's work over the years. So...
Last year I wrote about how you can use Renovate's local platform to make renovate-graph more efficient, which has been very useful for work I've been doing with dependency-management-data. What I didn't do was also write about how you're able to use Renovate'slocal platform to test out new Renovate configuration. As I've recently been doing a...
We generally build APIs for automated integrations, not for humans to read them. Although you as a human will look at the raw API request/response formats at some point, the ideal case is that you'll only be doing this as a much smaller percentage of the time that the API is called. So something that slightly annoys me is seeing APIs which always...
A fairly busy week, and Stanley came to stay for the weekend: Very cool to see Jane Wickline joining the SNL cast - very deserved! The Big TDM game mode in Apex Legends was super fun, with fully kitted out weapons, and an abundance of care package weapons but sad it left after only one day of being able to play it Had some cold days this week,...
GitHub has the concept of nested teams to make it possible to say manage hierarchical access in your organisation. This can be really useful for indicating cases where i.e. you would expect all of your engineering team to be able to access specific repositories, instead of providing read-only access to all organisational members, or to be able to...
You know it's not a great start to your week when, after a long weekend, you set your work laptop running through updates and it crashes part-way through the install process. After a reboot, it ends up not even detecting Arch's install, and only allows you to reboot into the BIOS 😅 So I started frantically searching around "how to recover a...
A short week ahead of Cat's wedding 🥰 Cookie didn't make it to daycare on Monday as she was poorly, but was luckily better by the end of the week Got a soft block from Swyx because I called out his use of a slur on his alt 🤷🏼 Had a good quarterly conversation with Nassim, and feeling positive about my steps towards Principal in the future 🤞🏼...
As I've mentioned before, the fact that it's September means that it's almost October, and October primarily means one thing for me: Hacktoberfest 🎃👕👚🎽 Two years ago, the precursor to dependency-management-data was created as part of the blog post Analysing our dependency trees to determine where we should send Open Source contributions for...
A four day week that felt like a five day week 🫣 Had a nice couple of hours in town on Bank Holiday Monday, and doing a bit of shopping Went for lunch at Itsu, which was nice Got a DoughNotts on the way home 😋 When we got home, Cookie wedged herself between us so cutely and tightly, making sure she could be close to us both 🥰 Was cool to be a...
Last night I noticed that it's not possible to use semantic-release to publish 0.x.y releases (aka "initial development versions") of packages. What surprised me was that this isn't even configurable behind a switch - like how go-semantic-release does it - but that you're just not able to do this at all, and instead have to make use of Semantic...
Heading home from Dave and Faye's on Monday, a day off on Tuesday, and then a three-day week leading onto a Bank Holiday weekend: Had a fairly good journey back, albeit we had a lot of traffic towards the latter end of the journey, but gave us a chance to swap drivers Had a nice lunch at the 68 Cafe, with some very nice cakes to takeaway 😋...
A busy week with a few days of work, GopherCon UK, and then a (long) weekend up North with Anna's family: Cookie was rather worried by the thunderstorms 🥺 but she was OK in the end This week was my first anniversary at Elastic 🎉 A busy-ish start to the week, ahead of a few days of time off, and Ellie's couple of weeks off, so both trying to get...
It was my first GopherCon, and I had a great time. There were some great talks, great people, great food, some great swag and a very perfectly chosen hotel! I'd wanted to go last year, but it was my first week at Elastic, and I don't think it would've been a good look 🫣 You'll notice that this blog post isn't as heavy as some of my previous...
I've written before about my usage of the BSPWM tiling window manager, which goes hand in hand with Simple X HotKey Daemon (SXHKD). I noticed earlier that while trying to set a SXHKD binding, I suddenly stopped being able to trigger the creation of a window via the keybinding. For instance, with the following binding: super + shift + d # Next...
I've written before about my usage of the BSPWM tiling window manager. One thing I've recently been looking at doing setting up a "scratch pad" style setup to launch my local SQL workflow so I can query my local instance of data from dependency-management-data, especially for ad-hoc requests at work. To do this, I wanted to: Create a new terminal...
As you may have noticed - unless you're an RSS-only reader, in which case, you may want to click through to see this page - I recently revamped my site design. As part of this, one of the things I needed to do was to make sure that the new design worked on the various pages and blog posts I have on my site. Given I've got well over 1000 blog...
Finalised my site's new CSS, which I'm pretty happy with so far My episode of Go Time came out Was a good listen, and hope others enjoy it - so far it's had ~14k listens I spent a few days refreshing my feeds, waiting for it to drop, only for it to appear during the 45 minutes I was particularly busy at work 🫣 Not such a big problem to not have...
I'm very excited to announce I'm on my first episode of the ever awesome Go Time podcast, on today's episode, OpenAPI + API Design. As I mentioned in Learning a new language, or how I gained familiarity with Go I started regularly listening to Go Time as I started to learn Go when I joined Deliveroo, and it's been part of my regular rotation each...
It's been just over four years since my last significant site redesign, and today I'm releasing a new site update. This isn't as significant an update, and retains the layout that I've been using since then, but replaces a lot of the theming. In recent years I've been deprioritising my personal website (and the many IndieWeb-y things I want to do...
Over the last couple of days I've been - after a long hiatus - making some tweaks to my Hugo site's theme. I've hit an issue on both my laptop and (newly fresh installed Arch) PC, so it's worth writing it as a form of blogumentation. I was finding that modifications to any SCSS files didn't trigger a rebuild of them 🤔 One thing very weird, is...
A warm week An expensive week: Bought a new fan for my office - the Dyson tower fan I won at Capital One in ~2018 has been feeling lacking in comparison to the Meaco fans we've had from Costco, and after a toasty couple of days decided to splurge on another, and it's made an incredible difference already Bought a new mouse, as my MX Master 2 has...
I've been trying to call a Google Cloud Run Job with the following arguments: [[{"platform":"...","organisation":"...","repo":"..."}]] I've done this with the following invocation: job_name="..." region="..." project="..." event='[[{"platform":"...","organisation":"...","repo":"..."}]]' gcloud run jobs execute $job_name --region $region...
I've previously written about Spotless being great. I've recently started working with some codebases that use Gradle Dependency Verification which produces an XML file used for ensuring that the files downloaded by each user of the project are the same, to i.e. reduce risk of malicious artifacts being added to the build. The...
There are a number of somewhat esoteric errors you can hit when trying to execute another binary, and as I hit one today that took a bit of thinking, I decided to write it up as a form of blogumentation. exec: {...} exec format error - the executable you're trying to run is for a different CPU architecture We see this, for instance, when trying...
Still a bit sleepy on Monday from my longest drive so far A busy week working towards the Renovate rollout in the next week and a bit, writing lots of (IMO good) documentation, and working to make sure we have the right monitoring and alerting 🤞🏼 Met Carol for dinner at Rudy's for a nice catchup and great pizza 🍕😋 It must've been a graduation...
Almost 2 years ago (!) I built renovate-graph, a tool to extract the dependency trees for a given repository, which under the hood uses Renovate. I've been getting tonnes of value from it as part of how it fits into the wider dependency-management-data ecosystem, and providing more actionable data for understanding how you use internal and...
Over the last week - pretty much since working on how you can use Open Policy Agent and Dependency Management Data to query EndOfLife.date data for internal packages, I've been working on a significant rework of how dependency-management-data performs Policy evaluations. I've just released this, as v0.102.0, and am very chuffed with the release...
Related to a comment on Lobsters about Git history, I posted my own blog post, which then led to a number of sites (including some Telegram groups and Unsupervised Learning issue 441) which has ended up in roughly ~4k hits I remember waking up one day this week knowing that Cookie had been the little spoon, curled up into my arm 🥰 At work, I've...
In the process of migrating from the Mend-hosted SAAS platform to a Self-Hosted deployment of Mend Renovate Community Edition, we've noticed that PRs raised by the SAAS platform, were not being updated by the Self-Hosted app. This is down to the way that Renovate tries to not overwrite any changes that (usually a human) has pushed to one of its...
If you're building on Buildkite, sometimes you may encounter a time where you're contributing from a fork, but CI isn't running (often by design). So how do you get your build to start running, without pushing it to a branch instead? If you don't have access to the ability to click the New Build button in the Buildkite UI, you're unfortunately...
Returning to work to ~220 emails, and a 99+ notification badge on Slack 😅 Was a busy Monday prepping for a meeting later that day, and catching up on the important things And then another day to finally make my way through the most important ones, and completely down to normal levels of notifications by the end of Wednesday Had a good hour with...
With thanks to botsin.space, I've now got a Mastodon account for dependency-management-data! I'm still planning on having most of the interesting blogging and discussing going via my blog, but I may also reblog myself (MFW) for anyone following the bot. For the most part, this is going to be an alternative to the fancy Slack notifications that...
When working with dependency-management-data, one of the great things it can do is provide insight to how close/far past the end-of-life date of upstream projects your dependencies are. This data is provided through the excellent EndOfLife.date, and dependency-management-data wires this data in for dependencies it can understand are i.e. Python,...
This is an article that's been swimming around in my head for ~5 weeks now, and may become a "living post" that I keep updated over time. In no particular order, some things I've learned about Git commits and commit history, over the last 12 years. This is a mix of experience in companies with teams of 2-12 people, as well as in Open Source...
On Sunday night I released v0.100.0 of dependency-management-data, a huge release in a few ways. First of all, it is in name a very large numerical release milestone to hit, and incidentally release number 158, and corresponded with me hitting post number 1000 on my blog. Secondly, it introduces a much revised model for consuming and interacting...
A lovely and very restorative week off for Anna's birthday We didn't get as much done around the house as we'd hoped, but we ended up really switching off and having a lot of nice time on the sofa together with a mix of fur babies Got a lot of Ratchet and Clank and New Amsterdam in Finally got around to some work I've been doing with Speakeasy...
This is my one thousandth blog post. That is absolutely wild. I remember reading Lorna Mitchell's post about hitting 1000 blog posts a few years back, and being wowed by that, and wondering if I'd ever get there. I've been working towards this since my first official blog post to this site, Hacktoberfest 2016. This was the first blog post on what...
I think it's been sufficiently long since Terence wrote his blog post that I can not-so-shamelessly steal the idea. (Aside: I was originally going to post this the same week, but never got around to it) Similar to Terence, I'd love to hear a bit more about you, the readers - I have analytics on my blog (as you can see with my annual Site in...
A very busy week of on-call and trying to deliver the first key Renovate milestone at work, ahead of next week off for Anna's birthday: Probably our busiest host-of-the-week/on-call shift since the start, and a lot of stuff going on to deal with, as well as also trying to get some stuff with Renovate sorted before Friday to make sure that the...
As noted in Dependency Management Data's web application can now be deployed as a single static binary, Dependency Management Data's web application has recently added a lightweight embedded web browser to enable running as a single static binary. Last week I learned about sql-studio from Laravel News on my Google News feed and have really been...