My PDF Resume Script

Edit 2022-01-19: I’ve since moved the script to a public repo. Also, I’ve reformatted my resume to make it a bit shorter, so here’s a more recent PDF version. I only want to have one canonical resume, and I want to keep it on my personal website. That makes it trivial to update, and anyone with the link can see the latest version at all times. But unfortunately very few job application systems will accept a link to a resume.

Working with MusicBrainz Name Data

Since leaving my job last October I’ve been working on various personal projects for fun and learning. One of those is a music player1 written entirely in Rust, including a web-based frontend using Seed, which is an Elm-like frontend framework in Rust. I’d like to write some other posts about that as well, but today let’s talk about artist names, specifically how these are represented in the MusicBrainz data. I have a lot of Japanese music2, and one of the main reasons I don’t like any of the music players I’ve tried so far3 is their handling of non-Latin script names and titles.

What Do I Want from My Next Job?

I’m currently enjoying being unemployed, and I won’t be looking for a new position until some time in 2022, but I’ve been thinking about what I want from next position. There are many things I’d like, but what are my priorities? Update 2022: The more I’ve thought about this the more I’ve realized that I can achieve my goal of working less by aiming for higher compensaion now in order to be able work less in the future.

Let the Funemployment Begin

Today was my last day at ActiveState. I enjoyed my nearly five years there (starting in February of 2017), but for a variety of reasons I decided to leave. I’m in the very fortunate position of being able to be jobless for a while, I’m not planning to look for anything new until January of 2022 at the earliest. I have some programming projects of my own that I plan to work on, and I’ll post about them here if they turn into anything interesting.

Writing a Postgres SQL Pretty Printer in Rust: Part 2

It’s been a few weeks since my last post on this project. I was distracted by Go reflection and security issues with Perl IP address modules. But now I can get back to my Postgres SQL pretty printer project1. One of the challenges for this project has been figuring out the best way to test it. I tried a standard unit test approach before giving up and settling on integration testing instead, so in this post I’ll talk about what I tried and what I ended up with.

API Design and the Recent IP Address Module Issues

Earlier this week, I wrote about security issues in Perl IP address distros. I started thinking about why these issues showed up in so many distros, which got me thinking about how an API can make these types of problems harder or easier. Specifically, I’d like to talk about Data::Validate::IP. Let’s look at two functions exported by this module, is_ipv4 and is_private_ipv4. On the surface, these sure look like they’re the same general thing.

Security Issues in Perl IP Address distros

Edit on 2021-03-29 21:40(ish) UTC: Added Net-Subnet (appears unaffected) and reordered the details to match the list at the top of the post. Edit on 2021-03-30 14:50(ish) UTC: Added Net-Works (appears unaffected). Edit on 2021-03-30 15:40(ish) UTC: Added Net-CIDR (some functions are affected). Edit on 2021-03-31 01:05(ish) UTC: Added Net-IPv4Addr (affected). Edit on 2021-04-05 01:21(ish) UTC: Net-CIDR-Lite 0.22 contains a remediation. Edit on 2021-04-05 19:30(ish) UTC: Net-IPAddress-Util 5.000 contains a remediation.

Down the Golang nil Rabbit Hole

Edit 2021-03-30: Jeremy Mikkola wrote about some closely related topics back in 2017. Edit 2021-03-31: Chris Siebenmann wrote a response to this post that explains exactly how interface values that are nil are typed. It’s more complicated than I thought! I’m not sure I have another Rust & Postgres blog post in me right now, so let’s learn something about Go instead. Recently I decided I wanted to add a --unique flag to omegasort.

Writing a Postgres SQL Pretty Printer in Rust: Part 1.5

Last week I wrote the first post in this series, where I introduced the project and wrote about generating Rust code for the parsed Postgres AST. I also wrote about the need for wrapper enums in the generated code, but I don’t think I went into enough detail, based on questions and discussions I had after I shared that post in /r/rust. So this week I will go into more detail on exactly why I had to do this.

Writing a Postgres SQL Pretty Printer in Rust: Part 1

This is the first of a planned series of blog posts about my pg-pretty project. I’ll cover some things I’ve learned about Rust and Postgres SQL, as well as some things I still don’t know. Series Links Part 1: Introduction to the project and generating Rust with Perl Part 1.5: More about enum wrappers and Serde’s externally tagged enum representation Part 2: How I’m testing the pretty printer and how I generate tests from the Postgres docs Why?