Introducing nvim-beads: Manage beads in neovim

A few days ago my co-worker Bob turned me on to Beads. Beads is a step up from things like PLAN.md when managing work for coding agents, because it provides more structure, is easy for agents to parse, and provides things like progress tracking for multi-agent workflows.

I was intrigued by the setup because it seemed like a way to improve my agent’s ability to work autonomously, but I needed a way to try it out without stepping on top of some complex multi-person projects at work. I decided to use bd and a coding agent to implement a neovim plugin for managing beads.

Read more →

Podcasting is dominated by warm applesauce

The end of podcasting as a viable cottage industry really does seem to be here now, and the end of podcasting as a culture-moving media format has arrived. Amy Poehler won the first podcasting Golden Globe for a “hang out and promote my new project” podcast. Most celebrity podcasts are this way. Even the ones that ostensibly have a theme: Smartless is barely anything anymore. They’re warm applesauce, and they dominate the format to the point that ad revenue is draining away from a lot of better shows.

Read more →

All the data had nowhere to go

Pablo Torre is on episode 506 of TrueAnon1, which is mostly about the NBA-adjacent poker fixing scandals, but touches on sports betting. The fact that data collection is not a neutral activity comes up repeatedly.

Player performance is monitored and measured for non-nefarious reasons: players and teams both benefit from better understanding of strengths and weaknesses in different ways. Pablo makes the case that the mere existence of this data - the predominance of statistical analysis in front offices and the advanced stats published by the leagues - changed the culture of American sports in negative ways. Rationalization of athletic performance led fans to believe the could get some edge (alpha in the financier’s language), and sports gambling was the natural outlet for this.

Read more →

Finding “Just Fine”

I’ve had a record player for at least 20 years. For the last 10 or so it was an Audio Technica LP120, which is on the upper end of ’non-audiophile’ turntables. Swappable cartridges, tons of tracking force adjustments, speed adjustments and strobes to check for accuracy. Direct drive. I ended upgrading the cartridge at some point. I loved that turntable, and it was darn reliable.

I did manage to fry it on 220v here in Singapore, despite the fact that it advertised compatibility with 220v. After it broke, it didn’t take me long to find a successor: an Audio Technica LP70X, which is in many ways the opposite: Fixed cartridge, no tracking force adjustment or speed adjustment. Belt driven.

Read more →

LLMs are great at box diagrams

I love diagram languages like mermaid.js and PlantUML because the text format that backs the diagram can be tweaked, takes up very little space in storage, and can be re-rendered at various resolutions any time you need. They’re great! I hate writing them. Mermaid has a different syntax for every diagram type, and they’re hard to remember. PlantUML is more consistent, though not totally, and in my experience can be quite verbose.

Read more →

Ten years of joeblu.com

I’ve had this domain, this site for 10 years. Running on Hugo the whole time. There are only a few things here, but it’s no big deal. There are very few things I have on the internet that have been live that whole time and are still a going concern:

  • this site
  • gmail
  • Facebook
  • Instagram

Only one of those gives me real control of what I put out here, with no rules but my own and the law. It’s a blessing to still be able to do that in 2025 - give anyone the power to publish anything.

Read more →

What was WTF with Marc Maron?

I first met Marc Maron in 2010 at a comedy festival in Southern California. WTF was less than a year old, and most of the guests thus far were “alternative comedians”. All podcasts back then were either tech-focused or comedy-focused, particularly LA alternative comedy. I found the tech ones interminably boring, but alternative comedy was really important to me and I was hooked on WTF.

I was in the back of a van with Maron and Maria Bamford (in hindsight, insane situation) as we drove around Lake Arrowhead for half an hour. Marc bored into me for at least half the time, asking me about what made me move to California, my ethnic background and family history in the US, opinions on late night shows. It was more intense than any first date conversation, and I was flattered by the attention. Still, I doubt it’s an encounter he’d remember. He’d been doing his radio show for years, meeting hundreds of new people a year between that and standup sets. I think he’s just that way - curious about every person and what drives them.

Read more →

hugo-editor: A Claude experiment

I write and publish this blog with Hugo, a static site builder that uses YAML for its posts. It’s also what we use to build the Grafana docs site, so I use it often. For the past few years I’ve been using vim to write posts. The final site content is copied onto a server after it’s built.

I have an SSH client on my phone, so I can theoretically write posts from anywhere. However, using a text editor over SSH on a phone leaves a lot to be desired. There are also iOS git clients like Working Copy, but they can’t run a script to verify my builds. Before publishing, I need a separate step, and it’s not part of my writing workflow.

Read more →

Why would you use .gitkeep?

I’ve been using Git for 9 years now, and today was the first time I knowingly encountered a file named .gitkeep in a diff. “What’s the point of this empty file?”, I thought. Quickly realizing that the idea is to track an empty directory, I started to wonder “Why would you want to make sure a directory exists when there’s nothing to put there?” and I started seeing blog posts about preparing for future changes that will add files to the directory or making sure your team has a consistent directory structure.

Read more →

Think big, build small

I’ve been at a few software organizations navigating the transition from small company to established businesses with big customers. At that point, duplication starts to become a cost, and consistency and stability in the product becomes more important than earlier in the business cycle. This is when everything starts getting “platformized” and standardized: application platforms, app development frameworks, managed job queues, data pipelines. These all have the chance to be transformative for your company from a dev experience and cost control perspective. They also routinely get mired in endless migration timelines, and never being “ready enough” for big systems to transition to the platforms.

Read more →