Profile Picture

Automatically Fixing Relative Imports with ESLint

I was recently working in a fairly new React/TypeScript codebase that was growing quickly. Because of its rapid growth, it used the default of relative paths for all local imports. This was becoming a problem for developer experience: relative paths make it harder to reorganize files in a codebase, since the developer making that change will also need to update all of that file’s imports.

Absolute imports were the answer—I needed to both set up TypeScript to support them and transform all of the project’s relative imports into absolute ones.

Read More →

September 2021 Review

September was eventful!

I spent the first part of the month camping in Glacier National Park and driving back to Atlanta. Glacier was gorgeous and a great way to end my time in Montana. We drove back through the northern route, stopping in eastern Montana, Mineapolis, Madison, and Louisville. It was definitely strange re-entering civilization after months in sparsely populated Montana.

September 24th was my last day at Ladder. The following Monday I joined Vesta as one of the first handful of software engineers. I’m sad to leave Ladder—I enjoyed my time there, learned a ton, and made a bunch of friends. But I’m super excited to build the foundational pieces of an extremely young company!

My pre-season training is well underway—my first GPP block finished up this week. This season, I’m working with Coach Evan Gregory on both programming and technique. I’ve already learned a ton from him in the short time we’ve been working together, and I’m really excited to see how this season plays out!

Goal Tracking

  • 🟢 Get 12% faster. I’m resetting this goal to be 2% faster than the 10.79 I ran at the end of last season—that’s a goal of 10.57. I doubled my goal mainly because I managed the 10.79 while injuring myself.
  • 🔴 50% less discretionary spending. My discretionary spending was 22% higher than my 2020 average. Camping, a week-long road trip, and some furniture purchasing will do that!
  • 🟡 One hour of solitary free time a day. This has been improving, and I expect it to continue to get better: my work schedule promises to be a lot more flexible with this new gig.
  • 🟡 Twice-weekly live conversations with friends. Although I didn’t manage to do this while traveling, since I’ve returned home to Atlanta I’ve gotten back into the routine.
Read More →

Am I Getting Faster Over Time?

Am I Getting Faster Over Time?

Last winter, I published Temperature and Speed, which looked at the correlation between my 30-meter fly times and the ambient temperature. Since then, I’ve gathered a lot more data: I have 49 Freelap-timed fly workouts and 245 reps across 11 months. I’ve also collected other metrics to help answer some questions I’ve had about speed:

Did I get faster?


There’s a relatively significant negative trend line between time of the year and rep—it sure looks like I got faster, at least at 30-meter flies, over the past year. This definitely wasn’t clear in my day-to-day workouts: my per-workout graph looks really spiky:


The lesson here is to not read too much into individual reps and workouts—zooming out onto the overall trend is better.

Read More →

JOTA: syncing MFA app for Apple devices

JOTA: syncing MFA app for Apple devices

Multi-factor authentication is becoming increasingly prevalent. Many companies’ information security policies require employees to use MFA when available—and it’s just good practice.

Read More →

Postgres 13 Row-Level Security Performance

I’ve recently been looking into various row-level security schemas for Postgres, and came across this excellent article benchmarking a few different architectures for row-level security. That post shows benchmarks for Postgres 10—three major versions ago.

I forked the repo (GitHub), upgraded to Postgres 13, and added a new architecture based on Carl Sverre’s comment to see what’s changed.

I ran each benchmark on a maxed 2019 16” MacBook Pro (2.4 8-core/64GB RAM), with 100 users and 10,000 total items. Notably, all of my results are significantly slower than what the original post achieved—I suspect this comes from running Postgres in Docker on MacOS, which has known disk performance issues.

RLS + ACL column

In this schema, ACLs are stored directly in columns on the secured table. Public items are handled as just another role.

Read More →
← PreviousNext →