Jamie Tanna

https://www.jvt.me/kind/articles

74 posts · 10 Votes

Tech 64% · Life 35% · Writing 1%

Subscribe via RSS

  1. Being more explicit with the limited AI usage in my blog posts' content

    I don't want to read lengthy blog posts that have been spat out by a Large Language Model (LLM), because the author hasn't felt they want to write the words to share their point. I'm not going to rehash why that's (generally) a bad thing, as a lot of brilliant writers like Bryan Cantrill have written eloquently on the topic. What is important is that I don't want my readers to feel they're needing to work out what of my content is AI-assisted, and so I want to make it super explicit assisted -…

    0 ▲
  2. Week Notes 26#42

    A busy week catching up on what I'd missed while at Open Source Summit last week Mostly wrote up the main TODOs I had last week, but still need to get a lot of them thought out more and prioritised Haven't got round to my writeup of the conference I've unfortunately come down with a cold - which has got better, and thankfully wasn't COVID - but has dampened the week Got the plumber round to fix up the pipe I'd knicked, and now we've been able to have the heating on which has been nice! Had our…

    0 ▲
  3. Writing to AWS S3 from Fly.io (in Go)

    I'm currently in the process of moving my site's media (under media.jvt.me) from Netlify to AWS S3. The underlying infrastructure for my site that writes this media is hosted on Fly.io, so needs a way to write to S3. I really wanted to avoid long-lived AWS credentials, and fortunately Fly supports OpenID Connect which integrates with AWS' OpenID Connect Federation to allow you to use short-lived OpenID Connect tokens to authenticate as a given IAM role, and then perform any necessary AWS…

    0 ▲
  4. Making an optional, required, status check with GitHub Actions

    Something that I've hit time and time again over the years - but seemingly have never blogument'd - is that when you add a required status check on GitHub (in branch protection or a Ruleset), it needs to report back as successful before you can merge a given Pull Request. This is absolutely reasonable, and I don't think there are many complaints folks would have about this requirement. That is, until you want to consider how to handle checks that you don't necessarily want to run all the time.…

    0 ▲
  5. Reattaching `tmux` to your Xorg session

    It happens infrequently enough to not investigate too much further, but sometimes I'll end up with my Xorg/X11 session crashing, or something else happening which leads to my existing tmux sessions failing to interact with the new X session, with errors like: % gh repo view --web Opening ... in your browser. Error: cannot open display: :0 % xsel xsel: Can't open display: (null) : Connection refused In this case, the existing panes/windows may end up seeing a related error about failing to…

    0 ▲
  6. Adding Pushover notifications to Claude Code

    There are times that you're away from your machine - or you've got so many terminal sessions you've not seen a notification - to say that your agent is waiting for input. Although there are ways to get first-class support for this - for instance Claude Code's Remote Control (which only works if using a Claude Code subscription, i.e. Bedrock users don't get access to it) - I wanted to write a tiny bit of Go code today, and thought I'd hand-roll some notifications. Given the Notification hook,…

    0 ▲
  7. Week Notes 26#41

    A busy but very rewarding week at Open Source Summit (Europe) and the OpenSSF Community Day It was a very social week - I ended up chatting to some folks I've worked with in the Open Source ecosystem, as well as meeting a lot of other big names, which was very cool! I ended up going to all the socials I could do - which was good - and found that I enjoyed a lot of hallway track this time - I ended up bumping into a few folks who I had a number of things to talk about, and Sebastian and I had a…

    0 ▲
  8. Logs as UX

    🤖 This post includes some LLM-derived content 🤖 A few years ago, Ryan wrote about how Bridgy, a service I use a lot, exposes log as the end user UI. This is a post that's stuck with me over the years, especially as someone whose work has generally comprised of building tools for others. I think about this post every so often with how in Renovate, our logs are the interface that users, operators, and support teams get into understanding what's going on under the hood. More generally, I think…

    0 ▲
  9. Minifying JSON with `jq`

    As an improvement to my version with Python or with Ruby, with tools like jq now being widely used, how do we minify a JSON string? Given: { "key": [ 123, 456 ], "key2": "value" } We can override the --indent: % jq --indent 0 . < a.json {"key":[123,456],"key2":"value"}

    0 ▲
  10. Gotcha: GitHub Custom Properties are public

    I was speaking to someone the other day - while I've been at Open Source Summit (Europe) - about the great Custom Properties that GitHub added in ~2023. However, they weren't aware that they're available to anyone with read access to the repo - which means for a public repo, that's everyone! This was something we found at Elastic while we were rolling out something that sounds pretty juicy called security_level. This was a mandatory field across all our repos, which was set to a reasonable…

    0 ▲
  11. Week Notes 26#40

    A chilled journey back home, with a stop-off at Blakeney for a walk with the dogs We bumped into Dougie on the road home which was a nice surprise! Finally looked into a massive papercut I have with my Neovim + Vale setup, where I need to stop Vale and then clear LSP diagnostics, which Claude Sonnet 5 found as an upstream issue in Vale's LSP, which was fixed by the maintainers Was cool to see my post about why I - still - think Renovate is the best tool for the job appear on Lobsters This week…

    0 ▲
  12. A DECADE of writing on this blog

    This year I'm fortunate to be celebrating a few 10th anniversaries. One of the big ones is that this blog is officially 10 years old! This post is the 1285th post I've written on here, and I still love this part of myself. I've written about how it's helped me as someone neurodiverse, some reasons about why I think you should blog and reflecting on hitting 1000 posts (which is even more wild that was 2 years ago!! I swore it was more recent than that), and I've definitely got a number of other…

    0 ▲
  13. Authoring Markdown externally and getting even 'prettier' output in Slack with `md2slack`

    You know what's a little bit sad to think to yourself? Wow, I'm a little bit jealous of how nice that person's Slack message looks And yet, that something I thought to myself last week 😅 I was looking at a colleague's message - which was posted to Slack via Claude - and it had the regular sort of rendered-Markdown that you'd expect from Slack, but inline in the message it had a pretty-rendered table, and a syntax-highlighted code snippet, followed by other bits of text. (Aside: I'm not really a…

    0 ▲
  14. Uploading a large OpenTelemetry trace to a local OTLP/HTTP traces receiver

    🤖 This post includes some LLM-derived content 🤖 I've recently been doing some work with improving the performance of Renovate on larger repositories. To guide this investigation, I'm leveraging our OpenTelemetry support to more meaningfully understand how Renovate operates in parts of the codebase, and hone in on areas of improvement. One of the repositories I'm running these tests is particularly large, and leads to traces of roughly ~30MB in size. When trying to ingest them into my local…

    0 ▲
  15. Week Notes 26#39

    A busy week at work: My anniversary, so I took some time to look back at this last year It was too busy to even get a draft together for This Week in Package Management I've been actioning my plan to proactively give away our Community (OSS) plan and so it's been a nice week digging into who'd get some good benefits from it, and doing some outreach A lovely long weekend in Blakeney with Anna's family We drove across Thursday afternoon (I took a half day), and then I was working from the house…

    0 ▲
  16. Getting a full-width PR review pane on GitHub temporary private forks

    This is the sort of post that will have more preamble than the resulting code, but bear with me. If you're working on security fixes to a project on GitHub, you'll likely be using a temporary private fork to collaborate on. If you do so, as well as things like CI and other GitHub Apps not being enabled on the repo, you'll also find that the PR page doesn't seem to be as responsive as it suggests it will be. For instance: We can see that there's a lot of blank space either side of the PR, which…

    0 ▲
  17. Looking back at my first year as the Renovate Project Lead

    🤖 This post includes some LLM-derived content 🤖 A year ago on Thursday, I logged on for my first day joining Mend to work on Renovate full-time. Similar to what I did after my first 100 days, I thought now would be a good time to recap how this last year has gone. This is also a fun way of doing a public mini performance review! I'd planned to try and land this on my actual anniversary, but I know this is going to be a busy week - as they all seem to be, nowadays - so thought I'd pre-publish it…

    0 ▲
  18. Week Notes 26#38

    A busy week at work: Most importantly, apk add/apt installs are now extracted in Dockerfiles, which is a much-wanted feature! Got some ?? to my 1 year anniversary post Anna's been in London this week, so ?? the fur babies ?? Had an alright massage - a bit disappointing but still much needed Had a nice breakfast at Speciality yesterday with Carol and Alan, and a nice lunch today at The Garage in Chilwell - the Lebanese (Karke) was very good 😋 Doing a clear out of my emails - as Zoho emailed me…

    0 ▲
  19. Updating `apk add` and `apt install` definitions in Dockerfiles with Renovate

    If you're writing Dockerfiles that install packages using system package managers, such as apk or apt, you might be pinning your versions of packages, to make sure that you have more reproducible builds, or if you're on a rolling release distribution like Wolfi and Chainguard Images, you want to make sure you only get package versions you want. When these system package manager versions are pinned, it can then be a little cumbersome to keep them updated in an automated fashion, as most tools…

    0 ▲
  20. Week Notes 26#37

    A busy week getting the house ready for my family over the weekend Was nice to see everyone, and little nephew D Had a nice time with my parents, with a nice walk around Newstead Abbey (seeing much more of the gardens than I have previously) We went to Little John Inn for dinner - getting a little bit lost from the wrong address on the website A very hyperfocus-y week at work A very late night trying to get my blog post (on the back of Michael's recommendation) for staging image rollouts…

    0 ▲
  21. Performing per-environment staged rollouts of dependency updates with Renovate

    🤖 This post includes some LLM-derived content 🤖 In a lot of organisations, you'll find a fairly consistent structure in teams' (GitOps) repositories, where they set up a branch per deployable environment, such as: * dev * staging * prod Within this structure, the approach for releasing upgrades would be to stage/promote upgrades through environments, starting with dev, through staging and up to prod. If you're using Renovate - which I have been recommending long before it became my job - you…

    0 ▲
  22. Week Notes 26#36

    A busy 4 day week On Monday, we had a chill bank holiday with a nice lunch at Mowgli It's been a very busy work week Thursday was releasing a few big bits, and a number of releases to Dev Platform as we closed off different pieces On Friday, with the APK Datasource available, I spent some time looking into solving a much-wanted feature of mine, where Renovate will automagically parse apk adds Was nice to catch up with Rhys after a bit, and then a good catch-up with Michael and Sebastian It's…

    0 ▲
  23. Exporting your chats from Claude.ai

    I'm about to switch subscriptions for one of my Claude accounts, and as part of it, will lose access to any chats I had in the Claude.ai web view (and i.e. on apps, if I used them). Unfortunately there doesn't seem to be any way to export these natively - maybe by design? - but fortunately, at least as of writing, we can take to the trusty Network tab. Open the Network tab Load a chat conversation i.e. https://claude.ai/chat/90000000-0000-0000-0000-000000000009 Search for the conversation ID…

    0 ▲
  24. Week Notes 26#35

    A busy week at work, publishing 10 advisories for Renovate, and working on a number of other bits As GitHub Stacked PRs now support Merge Queues, I've been using them a fair bit this week, mostly simplifying a number of things And it'll be interesting to see how this will help with our next major release Also a very rainy week. A particularly big thunderstorm on Monday led to Morph coming upstairs too - he felt a lot safer, which is good, and Cookie was good with him, but he kept also jumping…

    0 ▲
  25. Determining if your branch is part of a GitHub Stacked PR

    🤖 This post includes some LLM-derived content 🤖 Since the availability of GitHub's Stacked PRs finally landing for repositories that use a Merge Queue, I've been "kicking the tyres" with some of my contributions to Renovate. They're working mostly well so far, but I'm finding it a bit annoying trying to remember if I'm on a branch that's part of a stack. I'd started wiring this into my zsh config, still using Grml's zsh config as a base, and found it was a bit awkward. I decided to outsource it…

    0 ▲
  26. My new workflow for local code review with `tuicr`

    I spend a fair bit of my life reviewing code. Even if you discount the increase in code review that comes from increased usage of the output from Large Language Models, I'm still doing a lot of code review. Not only am I doing internal code review at work, but as a maintainer on Renovate and oapi-codegen, I spend a lot of time reviewing community contributions, as well as those from our collaborators and maintainers. You can see how GitHub breaks this down on my GitHub profile: If you ignore my…

    0 ▲
  27. Updating dependent branches when rebasing, automagically

    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 do a rebase merge, but that's the only way to do a rebase merge with a Merge Queue. Now that GitHub has launched stacked PRs, it's now possible to get…

    0 ▲
  28. Week Notes 26#34

    A busy week at work, juggling a few fairly complex things that have meant I've been a bit brain busy outside of work Wrote a couple of blog posts, Why I still hand write my commit messages being the main one, which got picked up later in the week, and ended up being on the front page of Lobsters for just shy of 48 hours! I also discovered the selfh.st newsletter - thanks for featuring me! GitHub's outage on Monday was pretty counter-productive, and meant a large gap in being able to do anything…

    0 ▲
  29. What commit did I branch off from?

    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" commit. I'd previously look down my commits, work out what the first commit was that didn't look like one of mine on this branch and refer to that SHA.…

    0 ▲
  30. I'm on Fallthrough: A Modest Proposal Proposal

    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 and squeeze it in, and I think if I'd have had one more sleep, I'd have been a bit more alive. Either way, I hope it's a good episode, and I know Kris…

    0 ▲