Software Tools Round Up 2024

Having had the need to do an OS reinstall or two lately, I’ve taken the opportunity to swap in a number of new tools and retire old tools. Unlike in my younger days when I would devote the time to survey every tool mentioned on Hacker News starting from time immemorial, the only tools that come into my awareness these days are the ones that people made a point to tell me about, or tools I found after getting fed up with a specific pain point and searched the web for a solution. All of which is to say, I’m not exactly Mr. Current Affairs. mad fish willy

Still, maybe you will discover something of use.

Continue Reading

Bash/Shell Substitution Cheat Sheet (Command vs. Process Substitution vs. Redirection etc.)

The premise of Unix is that everything is a file. Such simplicity. Yet somehow when it comes time to write the script to glue everything together, the number of concepts involved explodes:

  1. Pipes (cmd | …)
  2. Redirection (< some.file)
  3. Command substitution ($(cmd))
  4. Process substitution (<(cmd))
  5. Here docs (<<EOF … EOF)
  6. Here strings (<<<foo)

What gives?

Continue Reading

Rolling your own GitOps: DNS Zone files

I like to self-host my own infrastructure. You have full control. You learn a lot. It is also not hard to get started.

Managing your infrastructure though, wow, what a pain. Take DNS. To make a simple DNS record change first I have to edit the zone file, which is manual, but feels technical in a good way, like I am in control. Unfortunately the process only gets more tedious from there. First I commit the change and push it up. Then I SSH into my server and pull down the changes. Then I rebuild the Docker image. Then I kill the running container and start a new container with the new image. Then I SSH into the other server–you always need redundancy with DNS–and repeat the same steps again.

So tedious. Compare all that with a hosted DNS service, where you log into the web interface, tweak the record, and… that’s it.

Maybe there is a way we can have the best of both worlds. GitOps would be a good fit here. Like what if all you had to do was edit the zone file and commit the change, then let every step after that be handled automatically. You know, it probably wouldn’t be that hard…

system diagram

Continue Reading

How to host your transactional email for free

engineer with server

Everyone knows that if you want to send transactional1 email you should use a dedicated service like Twilio Sendgrid, Mailgun,2 or Amazon Simple Email Service (SES). First, they’ll scale. Second, they take care of all the details you’d rather not have to think about. At the other extreme–when you’re launching the proverbial weekend project–you can plug in your Gmail account credentials and call it done.

I am not here to dissuade you from the received wisdom of the internet.

Still, in my contrarian nature3 I feel compelled to point out a middle option: you can run your own MTA (specifically an email relay). It may not be a better option for the typical app, but it offers some advantages4 all the same. This post is not about selling you on self-hosting. What it is about is showing you how much simpler it is to self-host a transactional email server than most people imagine.

Continue Reading

Banish the word “nitpick” from code reviews

coworker nitpicking work

If there were a competition for who leaves the most pull request (PR) comments during code review, yours truly would be the winner.1 Some of those comments are spotting immediate bugs or asking clarifying questions. Just as commonly however, the comments are optional naming suggestions2, discussion starters, and even–gasp–style feedback.

I have to bring all this up because–sometimes when people advocate for “no nitpick” reviews what they really want is a culture where PR review feedback is exclusively on function, with readability improvements considered out-of-bounds. That couldn’t be further from the truth for what I am about to advocate. With bona fides out of the way…

Don’t use the word “nit” in your code reviews. Don’t let your teammates use it either.

Continue Reading