RSSAmplifier

Blog

On the Web on joe blubaugh

Recent content in On the Web on joe blubaugh

/RSS feed ↗53 posts

Latest posts

Succeeding with remote software engineers in Asia

I live in Singapore, and I’ve spent 6 years I’ve been here working remotely for companies where most employees aren’t located in Asia. Grafana is globally distributed, but the distribution is extremely lumpy - ask any of our APAC engineering colleagues. I like Brendan Gregg’s piece 3 years of Extremely Remote Work very much, but it largely covers the challenge of being a…

We lost the ability to write online

Here are some slop “signs” that I find triggering: Quietly Load-bearing Not one. Not two. Just three phrases destroying the flow of all online writing. They’re all over the internet now! You see this most when there’s pressure for volume. Instagram and LinkedIn posts, high-volume, low-quality sites like The Verge. Outside of the headlines, I think people barely read these things anyway. But…

DICOM is a disaster for patients

I recently had a few different scans of my body and brain done. Hooray for turning 40! At each imaging center I was given a USB drive “with my images on them.” It turns out those images are in a format called DICOM, and they usually come bundled with some kind of viewer application. These things are a disaster! When you open them, you get to input a password made wholly of…

My AI coding setup today

My AI coding setup has been evolving the last few months. Here are some things I’ve tried and moved on from: Gas Town . It’s just too much to wrap my head around right now. Pi and custom harnesses . I’m not at the stage where I need to deeply customize my workflow, starting from zero. I’m also not at the stage where I’m frequently switching models for different tasks.…

Zen: A Browser You Can Love

Everyone is putting AI in their browsers now. Good (maybe even great!) browsers have been discontinued so users can focus on AI. I’m not opposed to using AI agents for all sorts of things , but I don’t feel comfortable giving it nigh-unfettered access to the web. I’m not ready to let LLMs take on life-altering responsibilities like booking flights, looking at my banking sites, or…

Multi-agent coding and the resurgence of the terminal

All of the exciting AI coding is happening in terminals. Codex is good, the various VSCode forks are good, but if you’re doing multi-agent orchestration you’re generally using terminal UIs, roped together with Gastown , agent-deck , OpenClaw , lemonaid , or something else. It’s gratifying, as someone who never left the terminal for a “grown up” IDE, to see how small…

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…

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.…

All the data had nowhere to go

Pablo Torre is on episode 506 of TrueAnon 1 , 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…

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.…

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…

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.…

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…

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.…

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…

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…

Our Furtive Encrypted Future

By 2030, real encryption may be illegal in the European Union . Heck, Spain wants to ban end-to-end encryption entirely It’s already under attack in the UK . Be sure that the USA and China will be nipping at their heels. Because mathematics are mathematics, there’s not actual safe way to provide lawful government access to encrypted communications. If the government has a key, at some…

American schools should all have uniforms

I love fashion as a means of self-expression. Getting creative with pieces found in thrift stores and flea markets was a big part of my 20s. I’ve been thinking a lot recently about fashion in a school context and its effects on children. My daughters are in their early years of school. Even in preschool here in Singapore, kids wear a school uniform. It’s usually simple - a polo shirt…

Loog Piano: My review

I bought two of the original Loog guitars, little 3-string acoustic guitars intended for new learners and especially children. There’s a lot to like about them: they’re inexpensive, cute, and have surprisingly good sound and volume. The larger one gives a tenor guitar sort of sound that’s pleasant, and the smaller one is ukulele-ish. The kids are getting old enough to be into…

What's a "thunk"?

I remember when everyone started talking about using “thunks” in Redux to execute code without blocking the UI. And I remember getting tripped up on the word “thunk”. What’s a “thunk”? Why are we calling it that? The term “thunk” goes all the way back to ALGOL 60 ! It’s a play on “think”, because the ALGOL compiler needed to…

jq -n \-\-argjson

jq , a tool for manipulating JSON data, is one of the easiest most powerful ways to work with JSON text values in a terminal. I use it frequently. Mostly, I use it to extract values from HTTP responses: $ http get https://api.github.com/repos/grafana/grafana | jq '{ name: .name, stars: .stargazers_count }' { 'name' : 'grafana' , 'stars' : 65313 } The other day I wanted to use jq to combine the…

Don't use mocks

Writing good unit tests is made much easier by dependency injection . This lets you separate your code’s behavior from that of your dependencies: type MyType struct { dep1 DependencyOne dep2 DependencyTwo } func GoodConstructor ( dep1 DependencyOne , dep2 DependencyTwo ) * MyType { return & MyType { dep1 : dep1 , dep2 : dep2 , } } func BadConstructor () * MyType { return & MyType { dep1 :…

Supreme Court DoS attack

In the latest edition of Casey Newton’s newsletter, Platformer, he makes the case for why the plaintiffs in Gonzalez vs Google botched their oral arguments . The mechanism is fascinating: [H]ow many … lawyers were conflicted out of representing Gonzalez. Platforms pay so many high-powered lawyers at so many DC firms that plaintiffs had to recruit an 80-year-old man who once argued a…

Looking in Go's Mirror: How and When to use `reflect`

This article was originally published on gopheradvent.com Go’s static typing is a headline feature of the language. It prevents whole classes of bugs, makes code easier to navigate and refactor, and makes it easier for linters to analyze. But there are times when it’s very constricting. What if we’re reading JSON files from disk with unknown structure? We can’t define a…

What is software for?

In the last blog , I wrote a few things that software is for: putting people on the moon safely deploying airbags making my bank account add up making sure Mom gets my texts video editing and animation drawing in 10 million colors ebikes But it’s also used for: surveilling protesters bombing weddings tracking Uyghurs helping Nazis track Jewish people We often fail to reckon with this as an…

Code is not Prose

Once a month or so, this idea comes rambling out of the programming community 1 : Software is prose. It is written to communicate ideas to others, it has the interesting side effect that it can be transformed into something a computer can execute. - Chet Hendrickson This sounds nice on paper. It makes for a good conference talk about how to structure software, how to design programming languages,…

Nasty refactorings with go.mod replace

At work I’ve been building a new program on top of an SDK that’s under very active development. After about 6 weeks without updating the version, the SDK had deleted some code I was using and had a ton of breaking changes. If I’d simply updated the library, my entire program would fail to build, and it also wouldn’t be clear how to get it back to a good state. Following in…

Caroline Ellison is not a sympathetic figure

I recently read this Washington Post Article ( archive.org ) titled Caroline Ellison wanted to make a difference. Now she’s facing prison. After the first read-through I was incredulous at the sympathetic presentation in the biography. It reads like a resume, like a “it all spun out of control!” story about someone who got in over her head. I tweeted : Lol how do you get such a…

Unmarshaling JSON in Go: The weird parts

Quick, what does this program print? package main import ( 'encoding/json' 'fmt' ) func main () { content := []byte( `{ 'fieldone':'zero', 'field_one':'one', 'fiELD_one':'two', 'field_One':'three', 'field2':123 }` ) type d0 struct { Fieldone string Field1 string Field_One string } type d1 struct { Fieldone string `json:'field_one'` Field1 string `json:'fiELD_one'` Field_One string…

Evaluating New Tools

I was reading about Phoenix today, looking at guides and documentation. It’s great to see in a guide when it’s easy to quickly set up a project, that makes it fun to get started and explore. The most exciting thing about Phoenix is that “reactivity”, or live updates, are a core part of the system, not an add-on. Nowadays I find any software without reactive updates…

Podcasts At the End of the Indie Web

There’s been a lot of restrospecting lately, lamenting the loss of the “indie web” and its subsumption by content platforms like Facebook, Instagram, Reddit and Twitter. (I’ve always wondered where Tumblr fit in - more indie than any of these, but still - owned by Yahoo!). A few casualties that fell by the wayside: blogs, web comics, and independent, topic specific forums.…

GitHub Squash Merges are a Menace

I love squash merging . I think it’s the simplest way to maintain a legible commit history on main , a shared dev branch, etc. It’s easy for most people to follow, and it doesn’t require you to be too Big Brained about git. GitHub even provides a convenient interface for doing this, right in the pull request UI ! But GitHub’s squash merge workflow undermines the biggest…

How We Do Our Best Work

Dan Luu tweeted about some great work interns that he has mentored accomplished at Twitter: One intern did https://t.co/nsFW20j9Hm and another did interesting data analysis then built a working prototype for across the fleet profiling that others were able to use to find real inefficiencies. Those are things that could go into a staff promo packet as a major project. — Dan Luu (@danluu) August 31,…

Thoughts on OKRs

OKRs are one of those business ideas that are just simple enough to be dangerous. You think you understand it in a day, and you can see where your company is falling short: lacking focus and underdelivering. You see how clear, measurable goals could improve the situation. Here’s the one sentence version: You set objectives , and for each objective come up with several key results that you…

You Should Squash Merge to main

Every so often I’ll see a meme on Twitter like: and it makes me so mad. For good reason! OSS project repositories that support merge commits to main are usually littered with useless comments like: “Merge change from $USER, $PR”. It makes the commit history on main utterly useless and you get to check the various feature branches in a never ending snake of commits to find out…

Why I (Still) Use Vim

Every so often I wonder if I’m making trouble for myself by doing all of my typing in vim. Writing for this blog, writing engineering plans and design documents, and writing code. There are tools that are made especially for doing these jobs, and vim certainly doesn’t have any facility for making diagrams. All vim can really do is edit a bunch of bytes, trying to represent them as…

My Country, Tis of Thee

I’ve spent a lot of time the last 3 years watching Umberto Eco’s sign’s of Ur-Facism manifest, and manifest, and manifest. I’ve seen a lot of things that I was raised to believe wouldn’t couldn’t happen here happen in sequence, with frightening speed. Out-of-control (willfully so) police beating and gassing people in the street, night after night after night.…

Font Measurements

TLDR; I learned a bunch about rendering fonts and I thought it would be interesting to read about them from a programmer’s perspective. I gained a ton of empathy for type design and type-setting developers, as they work with a dizzying variety of screen resolutions, font styles, and a wide variety of device speeds to produce type that looks as good as it possibly can under harsh conditions.…

Influence

I got an email from an old co-worker the other day: I was thinking about you and how you are a person I see as not being particularly embroiled in office politics, but also as having a lot of influence and knowing how and where to leverage it. I was curious if you had any words of advice for how you got to that place. Of course I was happy to hear that I come off this way, and as I thought about…

Lucky

We went through layoffs at work recently. Like a lot of companies, the belt is tightening, and the bathtub drain is getting blugged. I’m lucky to have not been laid off. Lucky again - this is the third “surprise” layoff where I’ve kept my job. I’m batting 1.000 but I know my number has to come up sometime. I graduated from college in 2009, 9 months into the Great…

Fast is a Feature

We all use dozens of pieces of software a day - email clients, web browser, email clients inside web browsers. Cameras and chat, digital art tools and spreadsheets. We switch between them dozens of times, and when we really get into a task, when can sometimes achieve a state of flow , a state of satisfying and effective effort that lets us accomplish more than we thought and enjoy it all the way.…

Beef Barley Mushroom Soup

This is adapted from Tom Lacalamita’s Pressure Cookers for Dummies , but you should use the Serious Eats method of browning stew beef in one large piece, then cubing it before cooking, for better results. Ingredients 1/2 lb stew meat 3 carrots, thinly sliced 3 stalks of celery, sliced 1/2 lb of mixed mushrooms, trimmed and quartered 1 cup barley 2 or 3 bay leaves 8 cups of liquid, stock…

Ricotta Chicken

The secret here is that you can replace the Butter in Butter Chicken with just about any high-fat dairy product. Ricotta, sour cream, greek yogurt will all work. They change the flavor of the dish, but they’re all good variations. This is adapted from a recipe in Tom Lacalamita’s Pressure Cookers for Dummies Ingredients 1.5 lbs chicken, cubed 1 onion, minced 1 Tbsp minced ginger 2 tsp…

Pressure Cooker Red Beans and Rice

Red beans and rice is simple, fast and good. Use a good hot sauce, use more seasoning than you think you’ll need. This recipe scales well - 2 or 3 cups of beans will fill most normal pressure cookers. Ingredients 2 cups of red beans 1 large onion 1 head garlic 1 cup chopped celery 1 cup chopped carrots 1 14.5 oz can of diced tomatoes 2 tsp hot sauce 2 or 3 bay leaves 1 smoked ham hock or 3…

Michelada

Originally from Ever in Transit , this is the best tasting version of the drink to me. I like to use the tomato juice from a can of peeled plum tomatoes. I use the whole tomatoes to make sauce, and keep the juice to make two micheladas with. Ingredients Lager beer Tomato Juice 3-4 splashes Tapatio splash of worcestershire sauce splash of soy sauce juice of one lime or lemon

Roberta's Pizza Dough

Originally from the NYT , makes enough for two pizzas. Ingredients 306 grams of flour (50/50 00 and bread, or 100% AP) 2 grams of active dry yeast 4 grams olive oil 8 grams of fine sea salt 200 g of tap water Steps Combine flour and salt in mixing bowl Combine water, oil, and yeast in mixing cup. Add to dry ingredients and knead until incorporated. Let rest 15 minutes. Knead dough about 3 minutes.…

Persimmon Roses

My wife found this recipe on tastemade.com . These are fatty, sweet, and delicious. Great brunch food. Makes 4 roses. Ingredients 2 persimmons 1 sheet of puff pastry 1/4 of a wedge of brie 4 slices of prosciutto Equipment Muffin tin Steps Cut the persimmons in half from the top, then cut the tops off of each half. Slice the halves from the bottom to the top, 1/8" or less thick. Split each slice of…

Garage Shelves

I started taking paternity leave on my first daughter’s due date. (Un?)fortunately, she was born late, and I found myself with both a lot of free time, and a lot of pent-up anticipatory energy. My workshop was a bit of a mess, since I’d acquired more tools - including a heavy miter saw and grinder. My mother-in-law was staying with us and helping with chores, so I decided to focus on…

Guitar Shelf

I have a lot of guitars and ukuleles, and I was also feeling like I hadn’t played them enough. When we moved at one point, I sold all my guitars but one, but that honeslty didn’t last too long. Now that I own a home, it was high time to build myself a real place to keep them. Keeping instruments close at hand reduces my barriers to practice and play. Approach I bought some shelf…

Workbench

Every workshop needs a good work bench. A good bench is stable and flat, letting you estimate the flatness of your workpiece, and with plenty of space to hold the work and clamp it down. You can buy nice workbenches for many hundreds of dollars, and then you can buy nice clamps for many more. I wanted to use this project as a learning experience, though. So I spent my time researching table plans,…