From d4a320fe014ecb648afaf4abfa6b1c8557b99a56 Mon Sep 17 00:00:00 2001
From: Jeff Chen
Date: Sun, 6 Sep 2026 08:05:50 -0600
Subject: [PATCH 1/2] Fix copy typos across site
---
COPYWRITING-ISSUES.md | 9 +++++++++
lib/track/points-calculator/constants.ts | 2 +-
...-Report-2021-USATF-Masters-Championships.md | 2 +-
...et-Report-2022-Atlanta-Track-Club-Meet-1.md | 4 ++--
.../Meet-Report-2022-Berkeley-All-Comers-2.md | 2 +-
.../Meet-Report-2022-Bobcat-Preview.md | 2 +-
...Report-2022-Carnegie-Mellon-Invitational.md | 2 +-
...Report-2022-Mountain-Laurel-Invitational.md | 4 ++--
...Meet-Report-2022-UAB-Vulcan-Invitational.md | 2 +-
...Meet-Report-2022-Vanderbilt-Invitational.md | 2 +-
.../Meet-Report-2023-Big-Sky-Preview.md | 2 +-
.../Meet-Report-2023-Bobcat-PReview.md | 2 +-
.../Meet-Report-2023-Bobcat-Performance.md | 2 +-
.../Meet-Report-2023-Stanford-Invitational.md | 2 +-
...eport-TFCUSA-Club-National-Championships.md | 2 +-
markdown/pages/projects.md | 2 +-
...as-Prime-SP2-Review-Everymans-Superspike.md | 2 +-
...or-Athletes-More-Than-You-Wanted-To-Know.md | 18 +++++++++---------
markdown/posts/August-2021-Review.md | 2 +-
...ally-Fixing-Relative-Imports-with-ESLint.md | 2 +-
markdown/posts/Bitrot.md | 2 +-
markdown/posts/Brick-by-Brick.md | 4 ++--
markdown/posts/COVID-Gym-Risk.md | 2 +-
markdown/posts/ETL-From-Datomic-To-BigQuery.md | 6 +++---
.../Effect-of-Lane-Draw-In-200m-Sprinters.md | 2 +-
markdown/posts/February-2021-Review.md | 2 +-
...How-Much-Do-Genetics-Matter-in-Sprinting.md | 4 ++--
.../Infrastructure-And-Business-Monitoring.md | 2 +-
.../JOTA-Syncing-MFA-App-For-Apple-Devices.md | 2 +-
markdown/posts/July-2020-Review.md | 2 +-
.../Legibility-in-Software-Engineering.md | 2 +-
markdown/posts/Listen-More.md | 2 +-
markdown/posts/March-2021-Review.md | 2 +-
markdown/posts/Markdown-Image-Captions.md | 4 ++--
markdown/posts/May-2021-Review.md | 2 +-
markdown/posts/My-Sleep-Stack.md | 6 +++---
markdown/posts/October-2020-Review.md | 2 +-
.../Postgres-Monotonic-Last-Updated-Columns.md | 2 +-
.../posts/Predicting-100m-From-Practice.md | 4 ++--
.../Principles-For-Athletic-Performance.md | 2 +-
markdown/posts/Rising-Early.md | 2 +-
...quashing-for-EF-Core-6-Migration-Bundles.md | 4 ++--
markdown/posts/September-2021-Review.md | 4 ++--
markdown/posts/Shared-Vulnerability.md | 2 +-
markdown/posts/Some-Notes-On-Solo-Training.md | 2 +-
.../posts/Technical-Interview-Checklist.md | 2 +-
markdown/posts/Tracking-Fly-Times.md | 2 +-
markdown/posts/Two-Meet-Reports.md | 4 ++--
markdown/posts/Unconventional-Productivity.md | 2 +-
...d-Deleting-Entity-Hierarchies-in-EF-Core.md | 4 ++--
pages/projects/track/100m-predictor.tsx | 2 +-
pages/projects/track/points-calculator.tsx | 4 ++--
pages/projects/track/wind-correction.tsx | 2 +-
public/manifest.json | 2 +-
public/resume/index.html | 2 +-
55 files changed, 86 insertions(+), 77 deletions(-)
create mode 100644 COPYWRITING-ISSUES.md
diff --git a/COPYWRITING-ISSUES.md b/COPYWRITING-ISSUES.md
new file mode 100644
index 0000000..2167716
--- /dev/null
+++ b/COPYWRITING-ISSUES.md
@@ -0,0 +1,9 @@
+# Pending copywriting issues
+
+No pending copywriting issues remain from this review.
+
+## Reviewed; no change recommended
+
+1. `markdown/posts/Super-Spikes-New-Balance-Fuelcell-Sigma-SD-X-Impressions.md:30` — “30m flys” is recognizable sprint-training terminology. For a general audience, “30m flying sprints” would be clearer, but the existing wording is not necessarily an error.
+2. `pages/projects/track/100m-predictor.tsx:383` and `lib/track/100m-model.ts:6` — “Log-level regression” accurately describes the model: the logarithm of the outcome is modeled against predictors in their original levels.
+3. `markdown/posts/Volume-Is-All-You-Need-24-25-Recap.md:30` — The parenthetical phrasing is intentional.
diff --git a/lib/track/points-calculator/constants.ts b/lib/track/points-calculator/constants.ts
index a6f599e..19a1240 100644
--- a/lib/track/points-calculator/constants.ts
+++ b/lib/track/points-calculator/constants.ts
@@ -290,7 +290,7 @@ export const eventNames: Record = {
"Road 10kmW": "10km race walk (road)",
DT: "Discus throw",
"100mH": "100m hurdles",
- "4x400m sh": "4x400m Relay (indoor)",
+ "4x400m sh": "4x400m relay (indoor)",
"Dec.": "Decathlon",
"Road 20 km": "20km (road)",
"200m sh": "200m (indoor)",
diff --git a/markdown/meet-reports/Meet-Report-2021-USATF-Masters-Championships.md b/markdown/meet-reports/Meet-Report-2021-USATF-Masters-Championships.md
index 4847b33..b3a0f32 100644
--- a/markdown/meet-reports/Meet-Report-2021-USATF-Masters-Championships.md
+++ b/markdown/meet-reports/Meet-Report-2021-USATF-Masters-Championships.md
@@ -13,7 +13,7 @@ I flew into Des Moines with just one more chance to achieve my season goal: to b
More than any other meet I've raced in recent memory, this meet felt **legit**. The organizers flawlessly handled more than two thousand entrants across more than a thousand different age-group-event pairings—anyone who's ever been to a track meet before can attest to that level of difficulty. Huge props to USATF and Iowa State for putting together such a well-run meet on short notice!
-I was surprised by how many people I recognized at the meet—compatriots I'd shared a track with in both California and Atlanta. But I was more surprised by a couple people recognizing me from this blog! (Hey there, Allesandro and Lemar!) The track community is one of the biggest reasons I love and stay with the sport—I had a great time meeting both fellow post-collegiate athletes and "true" masters competitors.
+I was surprised by how many people I recognized at the meet—compatriots I'd shared a track with in both California and Atlanta. But I was more surprised by a couple people recognizing me from this blog! (Hey there, Alessandro and Lemar!) The track community is one of the biggest reasons I love and stay with the sport—I had a great time meeting both fellow post-collegiate athletes and "true" masters competitors.
Since this was my last meet of the season, I ran a 10-day taper—my last day in the weight room was a week before the race, and I gradually dropped my track volume to about 40-50% of normal. Despite sleeping in a hotel room for consecutive nights, I felt remarkably fresh and loose on Saturday morning.
diff --git a/markdown/meet-reports/Meet-Report-2022-Atlanta-Track-Club-Meet-1.md b/markdown/meet-reports/Meet-Report-2022-Atlanta-Track-Club-Meet-1.md
index 5285a5f..37d125b 100644
--- a/markdown/meet-reports/Meet-Report-2022-Atlanta-Track-Club-Meet-1.md
+++ b/markdown/meet-reports/Meet-Report-2022-Atlanta-Track-Club-Meet-1.md
@@ -21,7 +21,7 @@ This meet only contested the 100m and 400m, so I ran just the 100m. There were t
- [Here's](https://photos.app.goo.gl/BHNjaVDLtJFokv9x7) a slowed down side view of the race.
- I had a pretty strong and smooth start. I've been working a lot on driving my feet back into the track with my first few steps, and I think I executed well on that in this race.
- I was a bit tense as I got upright, and it resulted in being a bit hard for me to hold my form through the race.
-- In particular, it felt like my leg were a little bit behind me towards the end. The video clearly shows my feet rising to my butt.
+- In particular, it felt like my legs were a little bit behind me towards the end. The video clearly shows my feet rising to my butt.
- Overall, I came in 8th place in the prelims out of 13, which let me sneak into the fast finals heat in lane 8.
## 100m finals: 10.71 (-1.3)
@@ -31,7 +31,7 @@ This meet only contested the 100m and 400m, so I ran just the 100m. There were t
- I've never been left behind in the blocks like that before! Pros are pros—but it's amazing to see the difference even in the first two steps.
- My start was also plain bad. I didn't drive back nearly as well as in the prelims, and I ended up getting upright pretty early.
- Upright running felt much better than in the prelims. I did a good job staying relaxed and finished strong.
-- I finished dead last in my heat—interestingly, pretty much everybody had a much better difference betweeen their prelim and final time than me. For example, Samson Colebrooke and Ameer Webb were neck and neck in both prelims and finals, but ran 10.32/10.34 in the prelims and just 10.01/10.04 in the finals!
+- I finished dead last in my heat—interestingly, pretty much everybody had a much better difference between their prelim and final time than me. For example, Samson Colebrooke and Ameer Webb were neck and neck in both prelims and finals, but ran 10.32/10.34 in the prelims and just 10.01/10.04 in the finals!
- 10.71 is a big PR for me from my previous best of 10.79 (+2.9)... and 10.71 (-1.3) translates to 10.63 (0.0)/10.53 (+2.0) so I think I have a lot more in store this season.
Next up for me is the Sewanee Mountain Laurel Twilight Invitational in Sewanee, Tennessee on April 23.
diff --git a/markdown/meet-reports/Meet-Report-2022-Berkeley-All-Comers-2.md b/markdown/meet-reports/Meet-Report-2022-Berkeley-All-Comers-2.md
index 5db839c..21402eb 100644
--- a/markdown/meet-reports/Meet-Report-2022-Berkeley-All-Comers-2.md
+++ b/markdown/meet-reports/Meet-Report-2022-Berkeley-All-Comers-2.md
@@ -18,7 +18,7 @@ I didn't expect much going into this meet: with a rolling schedule, I knew it'd
- I won both my heat and the meet outright.
- I've run three 60s this season and PR'd all three times! This time was with a slight tailwind and adjusts to either a windless [6.90](https://maximmoinat.github.io/windCalculator.html) or [6.93](https://jmureika.lmu.build/track/wind/index.html) depending on the conversion factor you use. Both times are still faster than my old PR.
-- I focused on driving back into the track and having negative foot speed on my first few steps. I think I did this reasonably well, though I defnitely haven't mastered it yet.
+- I focused on driving back into the track and having negative foot speed on my first few steps. I think I did this reasonably well, though I definitely haven't mastered it yet.
- For the first time in a race, I felt like I was forced upright by my speed instead of getting impatient and coming upright early.
- I think I need some more practice starting off a reaction instead of going on my own mark.
diff --git a/markdown/meet-reports/Meet-Report-2022-Bobcat-Preview.md b/markdown/meet-reports/Meet-Report-2022-Bobcat-Preview.md
index 6e7b7f5..01e5395 100644
--- a/markdown/meet-reports/Meet-Report-2022-Bobcat-Preview.md
+++ b/markdown/meet-reports/Meet-Report-2022-Bobcat-Preview.md
@@ -34,6 +34,6 @@ The MSU indoor track is an excellent flat 200 meter track. Importantly for me, i
- I won my heat handily but took second place overall in the meet by two-thousandths of a second.
- I had about 45 minutes between races. I felt pretty fatigued after the 60, all the way up to stepping in the blocks: my heart rate was around 150 at that point.
- Because of that, I executed a conservative race plan: instead of gunning it all the way, I floated down the back stretch and reaccelerated through the second curve.
-- I'm really not used to how sharp indoor curves are. I had major issues staying coordinated on both curves; I had more than one step where my right (ouside) foot landed way to the inside of my center of balance.
+- I'm really not used to how sharp indoor curves are. I had major issues staying coordinated on both curves; I had more than one step where my right (outside) foot landed way to the inside of my center of balance.
This was as good of an opener as I could have hoped for: two heat wins, two indoor PRs, and a clean bill of health. My next meet won't be until next year—likely back in Bozeman for the Bobcat Challenge on 1/13/23.
diff --git a/markdown/meet-reports/Meet-Report-2022-Carnegie-Mellon-Invitational.md b/markdown/meet-reports/Meet-Report-2022-Carnegie-Mellon-Invitational.md
index cec598c..7a06262 100644
--- a/markdown/meet-reports/Meet-Report-2022-Carnegie-Mellon-Invitational.md
+++ b/markdown/meet-reports/Meet-Report-2022-Carnegie-Mellon-Invitational.md
@@ -17,7 +17,7 @@ Meet conditions were... typical for Pittsburgh in March, with temperatures in th
- This was definitely my worst race this year. I was a bit rushed to the starting line as I had too many layers of sweats on, and wasn't as locked in as normal.
- My calves cramped on steps 2 and 3 and stayed aggravated the whole race. This led to me popping up pretty much right away and ruined any chance I had at a great time.
- I suspect that the cramps were a combination of cold weather and a bit of dehydration, but it's becoming something of a recurring pattern for me. I'll have to figure something out soon.
-- Despite the cramps, I managed to win my heat and the meet as a whole. This time converts to a 11.03 in neutral wind conditions—way off my PR and way slower than what my 60m would indicate.
+- Despite the cramps, I managed to win my heat and the meet as a whole. This time converts to an 11.03 in neutral wind conditions—way off my PR and way slower than what my 60m would indicate.
## 200m: 22.24 (-4.3)
diff --git a/markdown/meet-reports/Meet-Report-2022-Mountain-Laurel-Invitational.md b/markdown/meet-reports/Meet-Report-2022-Mountain-Laurel-Invitational.md
index 1677340..6484e5a 100644
--- a/markdown/meet-reports/Meet-Report-2022-Mountain-Laurel-Invitational.md
+++ b/markdown/meet-reports/Meet-Report-2022-Mountain-Laurel-Invitational.md
@@ -32,11 +32,11 @@ The weather was beautiful—my first warm meet of the year—but marred by a nas
## 200m: 21.55 (-2.3)
- [Video](https://youtu.be/XgSnjrlezYM)/[slow-motion](https://photos.app.goo.gl/aErKnUDrwyemk3N46)
-- I only had about 40 minute between events, so after chatting with a couple people, I went straight back into dynamic drills and strides.
+- I only had about 40 minutes between events, so after chatting with a couple people, I went straight back into dynamic drills and strides.
- This time, my heat was (almost) full. I came in with the second-fastest seed time and raced in lane 5.
- After my blocks slipping in warmups, my start wasn't as forceful as it could have been, but I still ate up the stagger on lanes 7 and 8.
- My lower body felt disorganized on the second half of the curve—I had a couple strides where my foot landed at a sharp angle.
- I exited the curve about even with lane 4 (the fastest seed time) but pulled away over the last hundred meters.
- 21.55 is a facility record (previously 22.30) and a 0.3 second PR for me! That wind-adjusts to 21.29 in neutral conditions, so I'm looking forward to see what I can do in the next couple of races.
-Next up for me is either the Tennesse Challenge in Knoxville or the Life U Last Chance in Marietta depending on which meet I can get in to.
+Next up for me is either the Tennessee Challenge in Knoxville or the Life U Last Chance in Marietta depending on which meet I can get into.
diff --git a/markdown/meet-reports/Meet-Report-2022-UAB-Vulcan-Invitational.md b/markdown/meet-reports/Meet-Report-2022-UAB-Vulcan-Invitational.md
index 3d1e3f7..23f90fd 100644
--- a/markdown/meet-reports/Meet-Report-2022-UAB-Vulcan-Invitational.md
+++ b/markdown/meet-reports/Meet-Report-2022-UAB-Vulcan-Invitational.md
@@ -29,6 +29,6 @@ That said, I have a lot to improve on for next time:
- I had an awful start—I haven't done any curved starts yet this year, and barely have any experience at all with banked tracks.
- At least two times, I placed my right foot way too far to the inside, causing me to stumble (and scrape my foot against my left calf).
-- My speed endurance, while surprisingly good for January, isn't where it wil hopefully be by the end of the season. My form broke down in the last 50 meters.
+- My speed endurance, while surprisingly good for January, isn't where it will hopefully be by the end of the season. My form broke down in the last 50 meters.
Overall, I ran surprisingly fast for the time of year—I wasn't expecting any PRs. It's an encouraging start to the season and I'm excited to see what I can do at my next meet!
diff --git a/markdown/meet-reports/Meet-Report-2022-Vanderbilt-Invitational.md b/markdown/meet-reports/Meet-Report-2022-Vanderbilt-Invitational.md
index f9371a6..cf22fde 100644
--- a/markdown/meet-reports/Meet-Report-2022-Vanderbilt-Invitational.md
+++ b/markdown/meet-reports/Meet-Report-2022-Vanderbilt-Invitational.md
@@ -22,4 +22,4 @@ My heat had a lot of fast seed times—only one of them actually delivered. Desp
Unfortunately, I ended up in 10th place, just 0.05 away from making finals. I think that with a second chance, I could have dipped down into the low 6.9s or even the 6.8s.
-This might end up being the last indoor meet I'll run this year—next up for me is either the Berkeley all-comers or the De Anza Invitational in mid-Februrary back in California.
+This might end up being the last indoor meet I'll run this year—next up for me is either the Berkeley all-comers or the De Anza Invitational in mid-February back in California.
diff --git a/markdown/meet-reports/Meet-Report-2023-Big-Sky-Preview.md b/markdown/meet-reports/Meet-Report-2023-Big-Sky-Preview.md
index ef9b8dd..f6a6c30 100644
--- a/markdown/meet-reports/Meet-Report-2023-Big-Sky-Preview.md
+++ b/markdown/meet-reports/Meet-Report-2023-Big-Sky-Preview.md
@@ -20,7 +20,7 @@ MSU has been a fantastic host—I'm grateful to the team for allowing me to comp
- While I was able to stay in the race, I didn't really have a shot at a good time.
- The last 30 meters showed my top speed is improving—I was making up ground on the competitors in front of me.
- 6.98 is the worst time I've run over the past two years... but still is faster than any 60 I ran before then. To have that bad of a stumble and still come out under 7 seconds is encouraging.
-- All that said, this races feels like a missed opportunity. The winner of the meet ran 6.88, and I was clearly in the lead at 10 meters—what could I have done today?
+- All that said, this race feels like a missed opportunity. The winner of the meet ran 6.88, and I was clearly in the lead at 10 meters—what could I have done today?
## 200m: 22.25
diff --git a/markdown/meet-reports/Meet-Report-2023-Bobcat-PReview.md b/markdown/meet-reports/Meet-Report-2023-Bobcat-PReview.md
index 53ae4a8..4517c10 100644
--- a/markdown/meet-reports/Meet-Report-2023-Bobcat-PReview.md
+++ b/markdown/meet-reports/Meet-Report-2023-Bobcat-PReview.md
@@ -1,6 +1,6 @@
---
layout: post
-title: "Meet Report: 2023 Bobcat PReview"
+title: "Meet Report: 2023 Bobcat Preview"
date: "2023-12-16"
author: Jeff Chen
tags: track
diff --git a/markdown/meet-reports/Meet-Report-2023-Bobcat-Performance.md b/markdown/meet-reports/Meet-Report-2023-Bobcat-Performance.md
index d6c0f40..e4c2afb 100644
--- a/markdown/meet-reports/Meet-Report-2023-Bobcat-Performance.md
+++ b/markdown/meet-reports/Meet-Report-2023-Bobcat-Performance.md
@@ -21,7 +21,7 @@ As usual, I raced the 60 and 200 at this meet. This time, I was the fastest seed
## 60m prelims: 6.85
-- 6.85 is a all-conditions lifetime PR for me—besting the [indoor 6.89](https://jeffchen.dev/posts/Meet-Report-2023-Bobcat-Challenge/) I set earlier this year and the [wind-aided 6.88](https://jeffchen.dev/posts/Meet-Report-2022-Berkeley-All-Comers-2/) I ran last Februrary outdoors! It also won me my heat and put me in pole position for the finals.
+- 6.85 is an all-conditions lifetime PR for me—besting the [indoor 6.89](https://jeffchen.dev/posts/Meet-Report-2023-Bobcat-Challenge/) I set earlier this year and the [wind-aided 6.88](https://jeffchen.dev/posts/Meet-Report-2022-Berkeley-All-Comers-2/) I ran last February outdoors! It also won me my heat and put me in pole position for the finals.
- I had a very good block start, probably my best effort in a race so far. This could partially be subjective, as I was flanked by two slower runners, but I felt smoother and stronger than I ever have.
- I successfully came upright somewhere between 20-30m.
- Because I led wire to wire and didn't really feel any athletes the whole race, I was really relaxed at max speed and was able to easily carry that through the line.
diff --git a/markdown/meet-reports/Meet-Report-2023-Stanford-Invitational.md b/markdown/meet-reports/Meet-Report-2023-Stanford-Invitational.md
index df122f1..a6f4342 100644
--- a/markdown/meet-reports/Meet-Report-2023-Stanford-Invitational.md
+++ b/markdown/meet-reports/Meet-Report-2023-Stanford-Invitational.md
@@ -20,7 +20,7 @@ I've also been dealing with a couple injuries over the past month, most recently
- Unfortunately, at max velocity, I didn't have as much bounce as I'm used to. I think this was the back injury limiting my ability to rotate my hips.
Without that, my stride length felt much shorter than usual, and I was left behind.
- I finished 7th in my heat and 34th overall.
-- This is the slowest 100 I ran since my [outdoor opener last year](https://jeffchen.dev/posts/Meet-Report-2022-Carnegie-Mellon-Invitational/), a 11.24 into a -2.9 headwind.
+- This is the slowest 100 I ran since my [outdoor opener last year](https://jeffchen.dev/posts/Meet-Report-2022-Carnegie-Mellon-Invitational/), an 11.24 into a -2.9 headwind.
## 200m: 22.54 (+0.7)
diff --git a/markdown/meet-reports/Meet-Report-TFCUSA-Club-National-Championships.md b/markdown/meet-reports/Meet-Report-TFCUSA-Club-National-Championships.md
index 928696c..5382133 100644
--- a/markdown/meet-reports/Meet-Report-TFCUSA-Club-National-Championships.md
+++ b/markdown/meet-reports/Meet-Report-TFCUSA-Club-National-Championships.md
@@ -8,7 +8,7 @@ tags: track
I drove down to Oxford, Alabama for the TFCUSA Club National Championships. It's primarily a youth meet, but thankfully they had an open section. The meet was well-run, especially given that they were wrangling children as young as 1 year old. I'm definitely encouraged by the track community I've seen since moving to Georgia: everyone I've talked to has been warm, friendly, and obsessed with track!
-The meet wasn't tracking wind information, but there was a medium-strength headwind all day. And it was hot! I brought 5 Gatorades, whcih I thought would be more than enough, but I had to supplement that with lots of water through the day.
+The meet wasn't tracking wind information, but there was a medium-strength headwind all day. And it was hot! I brought 5 Gatorades, which I thought would be more than enough, but I had to supplement that with lots of water through the day.
diff --git a/markdown/pages/projects.md b/markdown/pages/projects.md
index b80ba50..f206bc9 100644
--- a/markdown/pages/projects.md
+++ b/markdown/pages/projects.md
@@ -63,7 +63,7 @@ An iPhone app implementing [contrast limited adaptive histogram equalization (CL
[](https://caretcaret.github.io/espresso/)
-**Espresso** is a simple deep learning framework written the [Halide](http://halide-lang.org/) image proessing language compatible with [Caffe](http://caffe.berkeleyvision.org/) configuration files.
+**Espresso** is a simple deep learning framework written in the [Halide](http://halide-lang.org/) image processing language that is compatible with [Caffe](http://caffe.berkeleyvision.org/) configuration files.
## [threadpool](https://www.github.com/jchen1/threadpool)
diff --git a/markdown/posts/Adidas-Prime-SP2-Review-Everymans-Superspike.md b/markdown/posts/Adidas-Prime-SP2-Review-Everymans-Superspike.md
index 0dc7714..8d4b2e3 100644
--- a/markdown/posts/Adidas-Prime-SP2-Review-Everymans-Superspike.md
+++ b/markdown/posts/Adidas-Prime-SP2-Review-Everymans-Superspike.md
@@ -13,7 +13,7 @@ This year, Adidas entered the superspike game with their Prime SP2. Their athlet
## Fit and feel
-I appreciate Adidas shipping a relatively normal colorway, especially compared to the recent awful [Maxfly]() [colorways](https://static.nike.com/a/images/t_PDP_1280_v1/f_auto,q_auto:eco/f669d845-033c-47a6-b917-89f984ba52d6/air-zoom-maxfly-track-field-sprinting-spikes-C2ZBRP.png).
+I appreciate Adidas shipping a relatively normal colorway, especially compared to the recent awful [Maxfly](https://i.ebayimg.com/images/g/J4MAAOSwbd9isv7e/s-l500.jpg) [colorways](https://static.nike.com/a/images/t_PDP_1280_v1/f_auto,q_auto:eco/f669d845-033c-47a6-b917-89f984ba52d6/air-zoom-maxfly-track-field-sprinting-spikes-C2ZBRP.png).
The Prime SP2s run a half size large: I’m normally a 10.5 in trainers and spikes, but needed to size down to a 10 for these. The spike is comfortable—there’s a noticeable difference between these and Maxflies which make my feet hurt after just a few minutes in them.
diff --git a/markdown/posts/Alpha-GPC-For-Athletes-More-Than-You-Wanted-To-Know.md b/markdown/posts/Alpha-GPC-For-Athletes-More-Than-You-Wanted-To-Know.md
index d01286b..f4f9a30 100644
--- a/markdown/posts/Alpha-GPC-For-Athletes-More-Than-You-Wanted-To-Know.md
+++ b/markdown/posts/Alpha-GPC-For-Athletes-More-Than-You-Wanted-To-Know.md
@@ -19,15 +19,15 @@ how it claims to work: choline becomes acetylcholine which tells muscles to fire
six total studies
-| Study | Date | Hypotheses tested | Significant findings | Notes |
-| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ----------------- | -------------------- | ------------------------------- |
-| [Acute supplementation with alpha-glycerylphosphorylcholine augments growth hormone response to, and peak force production during, resistance exercise](https://jissn.biomedcentral.com/articles/10.1186/1550-2783-5-S1-P15) | 2008 | 6 | 2 | Peak GH, peak BP force |
-| [The effects of alpha-glycerylphosphorylcholine, caffeine or placebo on markers of mood, cognitive function, power, speed, and agility](https://jissn.biomedcentral.com/articles/10.1186/1550-2783-12-S1-P41) | 2015 | 72(\*) | 4 | mulpilicative by groups i guess |
-| [The effect of 6 days of alpha glycerylphosphorylcholine on isometric strength](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4650143/) | 2015 | 2 | 1 | |
-| [Evaluation of the effects of two doses of alpha glycerylphosphorylcholine on physical and psychomotor performance](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5629791/) | 2017 | 2 | 0 | |
-| [EFFECTS OF ALPHA-GLYCERYLPHOSPHORYLCHOLINE ON PHYSICAL PERFORMANCES IN VOLLEYBALL PLAYERS](https://papyrus.bib.umontreal.ca/xmlui/bitstream/handle/1866/21476/StArnaud_Samuel_2018_memoire.pdf?sequence=4&isAllowed=y) | 2018 | 12 | 0 | |
-| [Choline-Based Multi-Ingredient Supplementation Can Improve Explosive Strength during a Fatiguing Task](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8583572/) | 2021 | 7 | 2 | |
-| | | | | |
+| Study | Date | Hypotheses tested | Significant findings | Notes |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ----------------- | -------------------- | -------------------------------- |
+| [Acute supplementation with alpha-glycerylphosphorylcholine augments growth hormone response to, and peak force production during, resistance exercise](https://jissn.biomedcentral.com/articles/10.1186/1550-2783-5-S1-P15) | 2008 | 6 | 2 | Peak GH, peak BP force |
+| [The effects of alpha-glycerylphosphorylcholine, caffeine or placebo on markers of mood, cognitive function, power, speed, and agility](https://jissn.biomedcentral.com/articles/10.1186/1550-2783-12-S1-P41) | 2015 | 72(\*) | 4 | multiplicative by groups i guess |
+| [The effect of 6 days of alpha glycerylphosphorylcholine on isometric strength](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4650143/) | 2015 | 2 | 1 | |
+| [Evaluation of the effects of two doses of alpha glycerylphosphorylcholine on physical and psychomotor performance](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5629791/) | 2017 | 2 | 0 | |
+| [EFFECTS OF ALPHA-GLYCERYLPHOSPHORYLCHOLINE ON PHYSICAL PERFORMANCES IN VOLLEYBALL PLAYERS](https://papyrus.bib.umontreal.ca/xmlui/bitstream/handle/1866/21476/StArnaud_Samuel_2018_memoire.pdf?sequence=4&isAllowed=y) | 2018 | 12 | 0 | |
+| [Choline-Based Multi-Ingredient Supplementation Can Improve Explosive Strength during a Fatiguing Task](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8583572/) | 2021 | 7 | 2 | |
+| | | | | |
https://jissn.biomedcentral.com/articles/10.1186/1550-2783-12-S1-P41
diff --git a/markdown/posts/August-2021-Review.md b/markdown/posts/August-2021-Review.md
index 68e9248..397e9db 100644
--- a/markdown/posts/August-2021-Review.md
+++ b/markdown/posts/August-2021-Review.md
@@ -20,7 +20,7 @@ My time in Montana is coming to an end—I'll be spending the next few days camp
## Track & Fitness
- I'm fully recovered from my hamstring tear! I even managed to get back on the track for some acceleration work.
-- I feel really bouncy—I don't have any numbers, but I'm almost hitting my head against the ten-foot gym ceiling on double-leg veritcal jumps!
+- I feel really bouncy—I don't have any numbers, but I'm almost hitting my head against the ten-foot gym ceiling on double-leg vertical jumps!
- August was a light month for me; I'll be starting preseason training next month when I'm back in Atlanta.
## Projects
diff --git a/markdown/posts/Automatically-Fixing-Relative-Imports-with-ESLint.md b/markdown/posts/Automatically-Fixing-Relative-Imports-with-ESLint.md
index 507a2d9..0fbee8f 100644
--- a/markdown/posts/Automatically-Fixing-Relative-Imports-with-ESLint.md
+++ b/markdown/posts/Automatically-Fixing-Relative-Imports-with-ESLint.md
@@ -120,7 +120,7 @@ function create(context) {
const absoluteImportPath = path.normalize(
path.join(path.dirname(filename), importSource);
);
- const expectedPath = path.relative(baseUrl, absolutePath);
+ const expectedPath = path.relative(baseUrl, absoluteImportPath);
if (importSource !== expectedPath) {
context.report({
diff --git a/markdown/posts/Bitrot.md b/markdown/posts/Bitrot.md
index 59b3f39..3499559 100644
--- a/markdown/posts/Bitrot.md
+++ b/markdown/posts/Bitrot.md
@@ -16,4 +16,4 @@ Why all this headache? I see two reasons: first, as far as I can tell, there's n
The hardest part of a software project usually isn't writing code--it's bootstrapping the project, or installing and managing dependencies, or interpreting arcane build errors. Building competence here is completely orthogonal to computer science or writing code. I think it explains a lot of the variation between (especially newer) software engineers. Obviously, you'll be better at solving immediate non-programming-related issues. Moreover, if you can unblock yourself, your learning curve will be much steeper. You'll develop a can-do mentality which will pay dividends down the line.
-Does software engineering have to be this way? There are lots of promising initiatives: web-based IDEs like [replit](https://replit.com/) make it easier to get started than ever before. Tools like [AWS Lambda](https://aws.amazon.com/lambda/) mean you don't need to understand how to stand up a webserver to write meaningful code. From the other side, [Nix](https://nixos.org/) and [Bazel](https://bazel.build/) are moving closer to truly hermetic builds. Despite this progres, I'm skeptical that we'll fully eliminate the need to dive deep into tubes: [all abstractions are leaky](https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/).
+Does software engineering have to be this way? There are lots of promising initiatives: web-based IDEs like [replit](https://replit.com/) make it easier to get started than ever before. Tools like [AWS Lambda](https://aws.amazon.com/lambda/) mean you don't need to understand how to stand up a webserver to write meaningful code. From the other side, [Nix](https://nixos.org/) and [Bazel](https://bazel.build/) are moving closer to truly hermetic builds. Despite this progress, I'm skeptical that we'll fully eliminate the need to dive deep into tubes: [all abstractions are leaky](https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/).
diff --git a/markdown/posts/Brick-by-Brick.md b/markdown/posts/Brick-by-Brick.md
index b974ba0..0682a73 100644
--- a/markdown/posts/Brick-by-Brick.md
+++ b/markdown/posts/Brick-by-Brick.md
@@ -10,8 +10,8 @@ One thing role-playing games get right about life is the concept of experience p
-Feedback loops in life are, natually, much longer than in a video game that's designed to entertain. While in a single session in most games it's easy to level a skill several times, any single workout—or even a whole month of regular workouts—won't create any visible results. The fundamental model is the same, though: skills tend to build on top of themselves, and it takes consistent effort over time to get better at something.
+Feedback loops in life are, naturally, much longer than in a video game that's designed to entertain. While in a single session in most games it's easy to level a skill several times, any single workout—or even a whole month of regular workouts—won't create any visible results. The fundamental model is the same, though: skills tend to build on top of themselves, and it takes consistent effort over time to get better at something.
-Skills also don't stick in life the way they do in a game. I could log back in to my 15-year-old Runescape account and my character would still be whatever level it was in middle school. But my cooking ability noticably deteriorated after just a few months living with my parents during the pandemic. There's an inherent tradeoff between skills—time spent perfecting my running technique is time I can't spend learning how to bake.
+Skills also don't stick in life the way they do in a game. I could log back in to my 15-year-old Runescape account and my character would still be whatever level it was in middle school. But my cooking ability noticeably deteriorated after just a few months living with my parents during the pandemic. There's an inherent tradeoff between skills—time spent perfecting my running technique is time I can't spend learning how to bake.
That time pressure grows even more when you think about how much time we spend not developing skills. Despite my best efforts, I while away plenty of hours on Reddit or YouTube. Sleep takes up a more than a third of my day. I have to eat, drive to the track, be a person. That's why I think it's best to focus on a couple of keystone skills, while being content with mediocrity in the rest. Personally, I'm focused on fitness (sprinting in particular), and systems thinking—something that's directly applicable to work and, I think, to life in general.
diff --git a/markdown/posts/COVID-Gym-Risk.md b/markdown/posts/COVID-Gym-Risk.md
index 163e419..de92602 100644
--- a/markdown/posts/COVID-Gym-Risk.md
+++ b/markdown/posts/COVID-Gym-Risk.md
@@ -35,7 +35,7 @@ This page is interactive: try estimating risk for your own gym sessions!
- `county_cases_reported` =
- cases in the county during the last `active_infection_days` days
- [In the last 4 weeks of full reporting (9/13 - 10/4), Ada county reported 1686 cases](https://public.tableau.com/profile/central.district.health#!/vizhome/CDHCOVID-19/CDHCOVID-19Information)
-- `county_postivity_rate` =
+- `county_positivity_rate` =
- test positivity rate over the last `active_infection_days`
- `county_population` =
- number of people in the county
diff --git a/markdown/posts/ETL-From-Datomic-To-BigQuery.md b/markdown/posts/ETL-From-Datomic-To-BigQuery.md
index daed275..b0ea4c3 100644
--- a/markdown/posts/ETL-From-Datomic-To-BigQuery.md
+++ b/markdown/posts/ETL-From-Datomic-To-BigQuery.md
@@ -103,7 +103,7 @@ Next, we need a way to transform a Datomic entity into a BigQuery row given its
{:user/id id
:user/name name
:user/apps (map :db/id apps)
- :user/email (:db/id email))})
+ :user/email (:db/id email)})
(defmethod entity->row* :application
[{:app/keys [id answers] :as entity}]
@@ -129,7 +129,7 @@ That's it! To run a single ETL job, all that's left is to run `entity->row` agai
Eventually, we'll outgrow a daily ETL job. With more data, the job will take many hours to complete (or fail!), leaving our data warehouse woefully out of date. Daily jobs also slow down feedback cycles when making changes. Fortunately, Datomic can help us out here!
-Datomic [stores a log](https://docs.datomic.com/on-prem/log.html) of all transaction data in time order. This lets us efficiently ask the question "What changed betweeen `t1` and `t2`?" with [`tx-range`](https://docs.datomic.com/on-prem/clojure/index.html#datomic.api/tx-range). With this primitive, we can upload only those entities that have changed since the last time we ran our ETL job. In fact, we can go one step further: by running our upload function in a tight loop, we can achieve data latency of just a few seconds! Let's sketch it out:
+Datomic [stores a log](https://docs.datomic.com/on-prem/log.html) of all transaction data in time order. This lets us efficiently ask the question "What changed between `t1` and `t2`?" with [`tx-range`](https://docs.datomic.com/on-prem/clojure/index.html#datomic.api/tx-range). With this primitive, we can upload only those entities that have changed since the last time we ran our ETL job. In fact, we can go one step further: by running our upload function in a tight loop, we can achieve data latency of just a few seconds! Let's sketch it out:
```clojure
(defn upload-changed-entities-to-bigquery
@@ -163,4 +163,4 @@ With this last piece, we've built a system that:
- converts entities into well-formed BigQuery rows
- uploads new and changed entities to BigQuery (almost) instantly
-We've also expressed one of our core engineering values - to shorten feedback loops: engineers can see effects of their changes once their code is deployed rather than waiting for a nightly ETL job to run. More imporantly, our data science and product teams can analyze our data **as it's generated**!
+We've also expressed one of our core engineering values - to shorten feedback loops: engineers can see effects of their changes once their code is deployed rather than waiting for a nightly ETL job to run. More importantly, our data science and product teams can analyze our data **as it's generated**!
diff --git a/markdown/posts/Effect-of-Lane-Draw-In-200m-Sprinters.md b/markdown/posts/Effect-of-Lane-Draw-In-200m-Sprinters.md
index 01fdccf..3cc2d3a 100644
--- a/markdown/posts/Effect-of-Lane-Draw-In-200m-Sprinters.md
+++ b/markdown/posts/Effect-of-Lane-Draw-In-200m-Sprinters.md
@@ -9,7 +9,7 @@ heroImage: /images/effect-of-lane-draw-in-200m-sprinters/diff_by_lane.png
**[Want to convert your own times? Try the 200m Lane Draw Converter →](/projects/track/200m-lane-draw/)**
-There's a growing consensus within the sprinting world that 200- and 400-meter sprinters have an advantange in the outer lanes. Famously, Wayde van Niekerk ran his world record 400m out of lane 8, and Karsten Warholm is known for preferring lane 7.
+There's a growing consensus within the sprinting world that 200- and 400-meter sprinters have an advantage in the outer lanes. Famously, Wayde van Niekerk ran his world record 400m out of lane 8, and Karsten Warholm is known for preferring lane 7.
Surprisingly for such a data-driven culture, there's almost nothing in the current literature to back this up. So, using data from Diamond League results from 2015-2021, I estimated the effect of lane assignment on elite male sprinters in the 200m, and found that the advantage per lane was about 0.018 seconds—meaning that **outdoor 200m sprinters in lane 9 have an advantage of 0.14s over those in lane 1**.
diff --git a/markdown/posts/February-2021-Review.md b/markdown/posts/February-2021-Review.md
index 938867e..b4a3717 100644
--- a/markdown/posts/February-2021-Review.md
+++ b/markdown/posts/February-2021-Review.md
@@ -1,6 +1,6 @@
---
layout: post
-title: Februrary 2021 Review
+title: February 2021 Review
date: "2021-02-28"
author: Jeff Chen
tags: review
diff --git a/markdown/posts/How-Much-Do-Genetics-Matter-in-Sprinting.md b/markdown/posts/How-Much-Do-Genetics-Matter-in-Sprinting.md
index 8dd7276..833bf65 100644
--- a/markdown/posts/How-Much-Do-Genetics-Matter-in-Sprinting.md
+++ b/markdown/posts/How-Much-Do-Genetics-Matter-in-Sprinting.md
@@ -28,7 +28,7 @@ Overall, it seems like 577RR and RX athletes appear to be better-suited for spri
The ACE gene encodes the angiotensin-1 converting enzyme. Humans with the ACE-I variant have lower ACE levels than those with the ACE-D variant. I couldn't find any information on how ACE levels might affect sprint performance.
-That said, [a study of British Olympic-standard athletes](https://journals.physiology.org/doi/full/10.1152/jappl.1999.87.4.1313) found that the frequency of ACE-I athletes tended to increase as the athlete's distance increased: 62% of runners competing in the 5k and above had the ACE-I variant, while only 35% of sub-200m sprinters did (compared to 49% in a control group). A [similar study of Russian athletes](https://www.nature.com/articles/5200711) found an excess of ACE-D variants among short-distance athletes compared to a control group and medium- and long-disance athletes. And the [same multi-cohort study from above](https://bmcgenomics.biomedcentral.com/track/pdf/10.1186/s12864-016-2462-3.pdf) found an association between ACE variants and speed, with ACE DD/DI athletes being significantly (p=0.001) faster than ACE II athletes over 200m, and that this association explained 1.48% of sprint time variance.
+That said, [a study of British Olympic-standard athletes](https://journals.physiology.org/doi/full/10.1152/jappl.1999.87.4.1313) found that the frequency of ACE-I athletes tended to increase as the athlete's distance increased: 62% of runners competing in the 5k and above had the ACE-I variant, while only 35% of sub-200m sprinters did (compared to 49% in a control group). A [similar study of Russian athletes](https://www.nature.com/articles/5200711) found an excess of ACE-D variants among short-distance athletes compared to a control group and medium- and long-distance athletes. And the [same multi-cohort study from above](https://bmcgenomics.biomedcentral.com/track/pdf/10.1186/s12864-016-2462-3.pdf) found an association between ACE variants and speed, with ACE DD/DI athletes being significantly (p=0.001) faster than ACE II athletes over 200m, and that this association explained 1.48% of sprint time variance.
I could only find a [single study](https://www.researchgate.net/profile/Douglas-Crews/publication/15384063_Angiotensin_converting_enzyme_insertiondeletion_polymorphism_Association_with_ethnic_origin/links/5aba6f1ca6fdcc0e3d9fe22c/Angiotensin-converting-enzyme-insertion-deletion-polymorphism-Association-with-ethnic-origin.pdf) measuring the prevalence of the ACE genotype across ethnic groups—it found that 24.7% of Caucasians had the ACE II genotype, compared to 82.8% of Samoans and 16.2% of Nigerians.
@@ -44,7 +44,7 @@ Of course, measures like height, BMI, and explosive strength are only weakly cor
## Demographics
-Perhaps unsuprisingly, I couldn't find any research on the demographics of elite sprinters. That said, out of the [152 sprinters](https://en.wikipedia.org/wiki/10-second_barrier) that have broken the 10-second barrier, the vast majority of them have been of West African descent: only three Caucasians and six Asians have broken the 10-second barrier. Certainly, if you go to any track meet in the United States, you'll find that [Asians are wildly under-represented](https://jeffchen.dev/posts/Where-Are-The-Asian-Americans-In-Track/).
+Perhaps unsurprisingly, I couldn't find any research on the demographics of elite sprinters. That said, out of the [152 sprinters](https://en.wikipedia.org/wiki/10-second_barrier) that have broken the 10-second barrier, the vast majority of them have been of West African descent: only three Caucasians and six Asians have broken the 10-second barrier. Certainly, if you go to any track meet in the United States, you'll find that [Asians are wildly under-represented](https://jeffchen.dev/posts/Where-Are-The-Asian-Americans-In-Track/).
While it doesn't seem like an athlete's ethnic group necessarily prevents them from achieving elite status, it's telling just how over-represented West Africans are on the 100m all-time list.
diff --git a/markdown/posts/Infrastructure-And-Business-Monitoring.md b/markdown/posts/Infrastructure-And-Business-Monitoring.md
index 8c5580b..fcc2e25 100644
--- a/markdown/posts/Infrastructure-And-Business-Monitoring.md
+++ b/markdown/posts/Infrastructure-And-Business-Monitoring.md
@@ -22,7 +22,7 @@ At this point, Stairway should focus on developing **business monitoring**. Thes
Business metrics, of course, have downsides compared to infrastructure metrics. The biggest downside is that business metrics aren't specific: when a business alert fires, it's not easily clear what actions an engineer should take to fix them. Often it's necessary to dive into logs or look at infrastructure-level metrics—business metrics should be set up **after** infrastructure metrics.
-Our story has a happy ending—Stairway engineers set up business-level monitors and alerts, they were able to detect and respond to outages much faster. Eventually, Stairway became the next tech decacorn, and everybody lived happily after ever.
+Our story has a happy ending—Stairway engineers set up business-level monitors and alerts, they were able to detect and respond to outages much faster. Eventually, Stairway became the next tech decacorn, and everybody lived happily ever after.
## Recap
diff --git a/markdown/posts/JOTA-Syncing-MFA-App-For-Apple-Devices.md b/markdown/posts/JOTA-Syncing-MFA-App-For-Apple-Devices.md
index d860e49..1fdb3d2 100644
--- a/markdown/posts/JOTA-Syncing-MFA-App-For-Apple-Devices.md
+++ b/markdown/posts/JOTA-Syncing-MFA-App-For-Apple-Devices.md
@@ -15,6 +15,6 @@ The mostly commonly used MFA tool, Google Authenticator, is basically unmaintain
- JOTA supports syncing to all your (Apple) devices with iCloud Keychain. When used in conjunction with a MFA-protected Apple ID, this still fits the factor of "something you have"—you need a device with a valid Apple ID cookie on it, which is itself protected by Apple's separately implemented MFA.
- This means that JOTA has a Mac app! 
-- On mobile, JOTA can also autofill MFA codes without leaving Safari—a much more convienent user flow than seeing the MFA prompt, quitting Safari, opening Google Authenticator, scrolling to the right code, copying it, returning to Safari, pasting it, and finally continuing. 
+- On mobile, JOTA can also autofill MFA codes without leaving Safari—a much more convenient user flow than seeing the MFA prompt, quitting Safari, opening Google Authenticator, scrolling to the right code, copying it, returning to Safari, pasting it, and finally continuing. 
You can download JOTA for mobile devices from the App Store [here](https://apps.apple.com/us/app/jota-easy-2fa/id1478072187), and for Macs [here](/assets/jota-macos.zip). Let me know what you think!
diff --git a/markdown/posts/July-2020-Review.md b/markdown/posts/July-2020-Review.md
index 03c4ad9..1c6016f 100644
--- a/markdown/posts/July-2020-Review.md
+++ b/markdown/posts/July-2020-Review.md
@@ -7,7 +7,7 @@ tags: review
---
- The biggest piece of news for the month: I moved out of SF into my parent's house in Dublin! With coronavirus & related precautions, urban areas no longer have network advantages over suburbs. While Emily and I think about where we want to move long-term (perhaps Denver or New York after coronavirus fades away), we're saving a bundle.
- - We're really grateful to have this option: both that our jobs allow us to work remotely during coronavirus and that my parents are willing & able to house both fo us while we ride out the storm.
+ - We're really grateful to have this option: both that our jobs allow us to work remotely during coronavirus and that my parents are willing & able to house both of us while we ride out the storm.
diff --git a/markdown/posts/Legibility-in-Software-Engineering.md b/markdown/posts/Legibility-in-Software-Engineering.md
index f0c902c..3c9953f 100644
--- a/markdown/posts/Legibility-in-Software-Engineering.md
+++ b/markdown/posts/Legibility-in-Software-Engineering.md
@@ -13,7 +13,7 @@ The central concept in James C. Scott's [Seeing Like a State](https://www.goodre
If you didn't read any of those, here's a brief overview of legibility:
- Premodern states had very little visibility into what was actually going on in their society—how rich a given citizen was, where they lived, how many citizens they even had. It was therefore difficult for states to effectively wage war or collect taxes.
-- To improve their hold on society, states imposed measures like standardizing weights and measures, censuses, permanent last names, and many more—all of these convert complicated and local social practices into unified and legibile ones that can be centrally monitored.
+- To improve their hold on society, states imposed measures like standardizing weights and measures, censuses, permanent last names, and many more—all of these convert complicated and local social practices into unified and legible ones that can be centrally monitored.
- When taken too far, states' attempts to create legibility can cause disaster—like [19th century scientific forestry](https://www.tandfonline.com/doi/abs/10.1080/09505431.2010.519866?journalCode=csac20), the [exceptionally beautiful city of Brasilia](https://slatestarcodex.com/blog_images/state_brasilia1.png), and [the reorganization and collectivization of farms in the USSR which created devastating famine](https://en.wikipedia.org/wiki/Collectivization_in_the_Soviet_Union).
There are clear parallels between legibility in states and legibility in software companies. First and perhaps most obvious are the tools of the program manager, like Gantt charts, sprint points, and code velocity metrics. The program manager creates legibility for themselves and leaders by imposing structure on the development process of individual engineers. Engineers are often treated as interchangeable, chess pieces that can be swapped between tickets depending on priority.
diff --git a/markdown/posts/Listen-More.md b/markdown/posts/Listen-More.md
index 933f313..cc236d2 100644
--- a/markdown/posts/Listen-More.md
+++ b/markdown/posts/Listen-More.md
@@ -18,7 +18,7 @@ Leaders should be quiet instead of loud; they should spend more time listening i
Listening to your people starts by learning about them. I think there are a couple important answers you should know about each report:
-- Does your report process new information quickly or slowly? If they're a slower processor, they may come up with ideas or counterpoints after a meeting has concluded, and you should encourage them to to voice those no matter the timeframe.
+- Does your report process new information quickly or slowly? If they're a slower processor, they may come up with ideas or counterpoints after a meeting has concluded, and you should encourage them to voice those no matter the timeframe.
- Are they comfortable speaking up during meetings? If not, you may need mechanisms to help them get their opinions shared: you could explicitly ask them to share their thoughts during meetings, or follow up afterwards on Slack to get their take.
Here are some other tactics for the listening leader beyond knowing your reports:
diff --git a/markdown/posts/March-2021-Review.md b/markdown/posts/March-2021-Review.md
index 2568ac5..719df8e 100644
--- a/markdown/posts/March-2021-Review.md
+++ b/markdown/posts/March-2021-Review.md
@@ -10,7 +10,7 @@ I'm getting in right at the buzzer here, so no thoughts about the month.
## Goal Tracking
-- 🟢 **Get 1% faster.** I hit PRs in both of my time trials! I managed **10.73** for the 100m and **21.85** for the 200m. I'm **so close** to hitting my goal of being 1% faster (10.69 in the 100m and 21.73 i the 200m), and it's still pretty early in the year.
+- 🟢 **Get 1% faster.** I hit PRs in both of my time trials! I managed **10.73** for the 100m and **21.85** for the 200m. I'm **so close** to hitting my goal of being 1% faster (10.69 in the 100m and 21.73 in the 200m), and it's still pretty early in the year.
- 🟢 **50% less discretionary spending.** My March discretionary spending was **87%** lower than my average monthly spend in 2020. Looking good!
- 🔴**One hour of solitary free time a day.** I did manage my sub-goal from last month of keeping track of my free time. Unfortunately, outside of weekends, I've managed a single hour of free time (maybe two, if you include the hour I'm writing this post in).
- 🟢 **Twice-weekly live conversations with friends.** 4/4 again! I remain surprised at how this goal has gone—maybe I should have been more ambitious.
diff --git a/markdown/posts/Markdown-Image-Captions.md b/markdown/posts/Markdown-Image-Captions.md
index aad9fba..b0e1d78 100644
--- a/markdown/posts/Markdown-Image-Captions.md
+++ b/markdown/posts/Markdown-Image-Captions.md
@@ -60,7 +60,7 @@ Upon encountering an image node, our first step is to extract the caption from t
```javascript
function extractCaption(node) {
const captionRegex = /(\{caption=([^\{\}]+)\})/;
- if (!node.alt || !captionRegex.text(node.alt)) {
+ if (!node.alt || !captionRegex.test(node.alt)) {
return { alt: node.alt };
}
@@ -131,7 +131,7 @@ function replace(source, target) {
function extractCaption(node) {
const captionRegex = /(\{caption=([^\{\}]+)\})/;
- if (!node.alt || !captionRegex.text(node.alt)) {
+ if (!node.alt || !captionRegex.test(node.alt)) {
return { alt: node.alt };
}
diff --git a/markdown/posts/May-2021-Review.md b/markdown/posts/May-2021-Review.md
index f58fc32..e6945c0 100644
--- a/markdown/posts/May-2021-Review.md
+++ b/markdown/posts/May-2021-Review.md
@@ -14,7 +14,7 @@ I'm definitely enjoying the change of environment and pace; hopefully it's not j
- 🟡 **Get 1% faster.** I ran a FAT PR of 10.92 in my first race back, then 10.93 two weeks later. Unfortunately, it looks like Freelap times don't translate to FAT+0.15: the difference seems more like 0.35 seconds. That said, those PRs were set after hard training weeks: I think I have a lot of headroom with a good peaking cycle and some minor technical cleanup.
- 🔴 **50% less discretionary spending.** I expected to go red this month, and did. We're buying lots of furniture, spending time in fancy hotels, and generally making our first month in Atlanta a month to remember. My spending this month was 215% of my average spending from last year.
-- 🟡 **One hour of solitary free time a day.** I'm still not doing a great job of tracking this, but my work-life balance has significantly improved since moving to Atlanta. I don't start my workday until around 11AM, and I've managed to keep a strict end-of-work time of 7PM. That gives me plenty of time to myself on Tuesdays an Thursdays (when I'm not doubling up at the track and gym).
+- 🟡 **One hour of solitary free time a day.** I'm still not doing a great job of tracking this, but my work-life balance has significantly improved since moving to Atlanta. I don't start my workday until around 11AM, and I've managed to keep a strict end-of-work time of 7PM. That gives me plenty of time to myself on Tuesdays and Thursdays (when I'm not doubling up at the track and gym).
- 🟡 **Twice-weekly live conversations with friends.** I haven't really been focusing on this goal. Even so, I managed to hit it every week but this past one. Next month, I'll pay more attention and get this back into the green!
diff --git a/markdown/posts/My-Sleep-Stack.md b/markdown/posts/My-Sleep-Stack.md
index cc124c8..a77c0d7 100644
--- a/markdown/posts/My-Sleep-Stack.md
+++ b/markdown/posts/My-Sleep-Stack.md
@@ -14,11 +14,11 @@ Because sleep is so important, I've assembled a stack of habits and tools for me
## Habits
-- **No caffeine after noon.** Caffeine’s half life is [5 hours](https://www.ncbi.nlm.nih.gov/books/NBK223808/) long. The average espresso shot has [63mg](https://www.consumerreports.org/coffee/is-there-more-caffeine-in-espresso-than-in-coffee/) of caffeine, while doses [as low as 9mg are psychoactive](https://clinicaltrials.gov/ct2/show/NCT00487227). That means it takes your body more than 10 hours to clear a single shot from your system! Given that I tend to sleep around 9-10 every night, I stop all caffiene intake after noon.
-- **Consistent bed and wake time.** [Sleep regularity is associated with stonger academic performance](https://www.nature.com/articles/s41598-017-03171-4). I make sure to sleep and wake within a 30 minute window every weeknight. Although I try to keep my bedtimes consistent on the weekends as well, I'm admittedly much worse at that.
+- **No caffeine after noon.** Caffeine’s half life is [5 hours](https://www.ncbi.nlm.nih.gov/books/NBK223808/) long. The average espresso shot has [63mg](https://www.consumerreports.org/coffee/is-there-more-caffeine-in-espresso-than-in-coffee/) of caffeine, while doses [as low as 9mg are psychoactive](https://clinicaltrials.gov/ct2/show/NCT00487227). That means it takes your body more than 10 hours to clear a single shot from your system! Given that I tend to sleep around 9-10 every night, I stop all caffeine intake after noon.
+- **Consistent bed and wake time.** [Sleep regularity is associated with stronger academic performance](https://www.nature.com/articles/s41598-017-03171-4). I make sure to sleep and wake within a 30 minute window every weeknight. Although I try to keep my bedtimes consistent on the weekends as well, I'm admittedly much worse at that.
- **Nine-hour sleep opportunity.** I'm in bed for at least nine hours a night. Focusing on sleep opportunity instead of time slept helps me break insomniac's anxiety—I can't sleep because I'm worried about not being able to sleep.
- **No NSAIDs or antihistamines at night.** NSAIDs [disrupt sleep](https://www.sciencedirect.com/science/article/abs/pii/0031938494903883). Antihistamines [interfere with deep sleep](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3252975/). Simple enough to avoid both of these before bed.
-- **No devices in bed.** Devices in bed can [affect your circadian cycle](https://www.sleepfoundation.org/how-sleep-works/how-electronics-affect-sleep) and are generally stimulating instead of relaxing. I'm had trouble sticking to this habit, but my sleep quality is demostrably better when I do manage to put away my phone before bed.
+- **No devices in bed.** Devices in bed can [affect your circadian cycle](https://www.sleepfoundation.org/how-sleep-works/how-electronics-affect-sleep) and are generally stimulating instead of relaxing. I'm had trouble sticking to this habit, but my sleep quality is demonstrably better when I do manage to put away my phone before bed.
## Tools
diff --git a/markdown/posts/October-2020-Review.md b/markdown/posts/October-2020-Review.md
index 3e31b13..2595bec 100644
--- a/markdown/posts/October-2020-Review.md
+++ b/markdown/posts/October-2020-Review.md
@@ -75,7 +75,7 @@ This month, I started using [Readwise](https://readwise.io/i/jeff346), which wil
### COVID
-- [Estimating True Infections | COVID-19 Projections Using Machine Learning](https://covid19-projections.com/estimating-true-infections/)"
+- [Estimating True Infections | COVID-19 Projections Using Machine Learning](https://covid19-projections.com/estimating-true-infections/)
- [microCOVID Project](https://www.microcovid.org)
### Other
diff --git a/markdown/posts/Postgres-Monotonic-Last-Updated-Columns.md b/markdown/posts/Postgres-Monotonic-Last-Updated-Columns.md
index a1b03be..1479f62 100644
--- a/markdown/posts/Postgres-Monotonic-Last-Updated-Columns.md
+++ b/markdown/posts/Postgres-Monotonic-Last-Updated-Columns.md
@@ -64,5 +64,5 @@ The 1 microsecond interval ensures that even if `now()` returns a timestamp lowe
we still bump it so that readers of that timestamp can register an updated record.
From the above case: transaction `B` will commit `last_modified_at=2024-01-01T00:00:01.000000Z`, then when transaction A
-commits, it will set `last_modified_at = greatest(2 + inverval '1 microsecond', 2024-01-01T00:00:00.000000Z) = 2024-01-01T10:00:00.000001Z`,
+commits, it will set `last_modified_at = greatest(2 + interval '1 microsecond', 2024-01-01T00:00:00.000000Z) = 2024-01-01T10:00:00.000001Z`,
preserving monotonicity.
diff --git a/markdown/posts/Predicting-100m-From-Practice.md b/markdown/posts/Predicting-100m-From-Practice.md
index f3d59ab..36f7b78 100644
--- a/markdown/posts/Predicting-100m-From-Practice.md
+++ b/markdown/posts/Predicting-100m-From-Practice.md
@@ -31,8 +31,8 @@ I played with many different model types, ranging from simple linear and polynom
The more complex approaches proved to be less accurate and extremely prone to overfitting—with only two input variables and a single output, the relationship between inputs and outputs is necessarily not very complicated.
In the end, I used an exponential regression using 30m block and maximum velocity as inputs, which was calculated by inverting 10m fly times, i.e. `10 / fly_time`.
-This produced an R² of 0.964 and mean squared error of just 0.004. Interestingly, training a regression against each single input (i.e. 30m block and 10m fly) produced R² values of just under 0.9, indicating that even a single
-This had the extra advantage of being extremely simple to port over to Javascript for the [online calulator](/projects/track/100m-predictor).
+This produced an R² of 0.964 and mean squared error of just 0.004. Interestingly, training a regression against each single input (i.e. 30m block and 10m fly) produced R² values of just under 0.9, indicating that both block and fly times have significant predictive power on their own. This is most likely because in practice, acceleration and max velocity are tightly correlated.
+This had the extra advantage of being extremely simple to port over to Javascript for the [online calculator](/projects/track/100m-predictor).
## Future work
diff --git a/markdown/posts/Principles-For-Athletic-Performance.md b/markdown/posts/Principles-For-Athletic-Performance.md
index 5b6affa..bf606f6 100644
--- a/markdown/posts/Principles-For-Athletic-Performance.md
+++ b/markdown/posts/Principles-For-Athletic-Performance.md
@@ -29,7 +29,7 @@ Goals also need to be achievable. We all know the saying "shoot for the moon". I
Ironic, coming from a sprinter.
-Without a coach to keep me in check, I tend to overtrain. One more set, one more rep, why not give it 100% every workout? Because track seasons are long - careers are even longer. The most successful athletes, in any discipline, are those who are able to consistently train year over year, building on their existing fitness. Athletes who overtrain end burnt out or injured - which forces them to spend time rehabilitating their base instead of improving it.
+Without a coach to keep me in check, I tend to overtrain. One more set, one more rep, why not give it 100% every workout? Because track seasons are long - careers are even longer. The most successful athletes, in any discipline, are those who are able to consistently train year over year, building on their existing fitness. Athletes who overtrain end up burnt out or injured - which forces them to spend time rehabilitating their base instead of improving it.
Overtraining has permanent consequences. I've learned this lesson many times over and I have the battle scars to show for it: nasty lumps of scar tissue in my hamstrings, persistent tendonitis in my knees, a shoulder that can dislocate putting on a jacket... the list goes on. These days, I train less than I ever did in college. I stay focused on the long-term - as long as I'm working sustainably, I have many reps, many workouts, many seasons ahead of me.
diff --git a/markdown/posts/Rising-Early.md b/markdown/posts/Rising-Early.md
index 2260a3b..d909e36 100644
--- a/markdown/posts/Rising-Early.md
+++ b/markdown/posts/Rising-Early.md
@@ -30,7 +30,7 @@ Early rising improves my productivity -- but it improves others' impression of m
There's no better way to start the day than warming up on the track as the sun rises.
-
+
## Drawbacks to rising early
diff --git a/markdown/posts/Seamless-Migration-Squashing-for-EF-Core-6-Migration-Bundles.md b/markdown/posts/Seamless-Migration-Squashing-for-EF-Core-6-Migration-Bundles.md
index fd5139c..7ef08fe 100644
--- a/markdown/posts/Seamless-Migration-Squashing-for-EF-Core-6-Migration-Bundles.md
+++ b/markdown/posts/Seamless-Migration-Squashing-for-EF-Core-6-Migration-Bundles.md
@@ -7,9 +7,9 @@ tags: code
heroImage: /images/seamless-migration-squashing-for-ef-core-6-migration-bundles/hero.png
---
-EF Core generates and stores a full snapshot of the database for every migration. For a large data model, like we have at Vesta ([come join us!](https://www.usevesta.com/careers)), every migration adds ~15k LOC. Over time, we end up with more migration than application code—in 10 months, we generated over 2 million(!) lines of migration code.
+EF Core generates and stores a full snapshot of the database for every migration. For a large data model, like we have at Vesta ([come join us!](https://www.usevesta.com/careers)), every migration adds ~15k LOC. Over time, we end up with more migration code than application code—in 10 months, we generated over 2 million(!) lines of migration code.
-All these snapshots significantly impact compile time, and without configuration, makes interacting with the codebase more tedious and slower. These snapshots also aren't useful—after enough time has passed, it becomes prohibitively difficult to actually revert N migrations back.
+All these snapshots significantly impact compile time and, without configuration, make interacting with the codebase more tedious and slower. These snapshots also aren't useful—after enough time has passed, it becomes prohibitively difficult to actually revert N migrations back.
Ideally, we'd be able to "squash" old migrations into one, removing the old snapshots and migration logic while preserving the ability to spin up a fresh database. In the following, I'll describe how we achieved this at Vesta.
diff --git a/markdown/posts/September-2021-Review.md b/markdown/posts/September-2021-Review.md
index 64e6eae..81b27aa 100644
--- a/markdown/posts/September-2021-Review.md
+++ b/markdown/posts/September-2021-Review.md
@@ -8,7 +8,7 @@ tags: 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.
+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, Minneapolis, 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](https://vestatech.io) 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!
@@ -16,7 +16,7 @@ My pre-season training is well underway—my first GPP block finished up this we
## Goal Tracking
-- 🟢 **Get ~1~2% 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.
+- 🟢 **Get ~~1~~2% 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.
diff --git a/markdown/posts/Shared-Vulnerability.md b/markdown/posts/Shared-Vulnerability.md
index 08aa8f9..bb8489a 100644
--- a/markdown/posts/Shared-Vulnerability.md
+++ b/markdown/posts/Shared-Vulnerability.md
@@ -14,7 +14,7 @@ Close bonds can spring from different kinds of shared vulnerability. Most obviou
Maybe you have a coworker you share gossip with. Maybe you find out you both just can't stand how Joey cracks his knuckles every five seconds. Where's the shared vulnerability? Both of you have crossed a line (admittedly, a small line), that could create problems for you if it got out.
-Experiences can create share vulnerability too. Illegal or illegitimate activities, drugs, even drinking together establish shared vulnerability. Mind-altering substances enhance this effect: lowered inhibitions mean you're more likely to share secrets and create other vulnerabilities.
+Experiences can create shared vulnerability too. Illegal or illegitimate activities, drugs, even drinking together establish shared vulnerability. Mind-altering substances enhance this effect: lowered inhibitions mean you're more likely to share secrets and create other vulnerabilities.
Vulnerability can be one-way and still create strong bonds. Consider a typical parent-child relationship. The child has infinite trust for their parent, which stems from the infinite vulnerability they've had since birth. No wonder familial relationships are so strong.
diff --git a/markdown/posts/Some-Notes-On-Solo-Training.md b/markdown/posts/Some-Notes-On-Solo-Training.md
index 786398d..d89a7b2 100644
--- a/markdown/posts/Some-Notes-On-Solo-Training.md
+++ b/markdown/posts/Some-Notes-On-Solo-Training.md
@@ -8,7 +8,7 @@ tags: track
## Be Patient.
-Measureable improvement takes a long time. Don't vaccilate between training methodologies. Instead, commit to a program for at least one full season before making strategic changes.
+Measurable improvement takes a long time. Don't vacillate between training methodologies. Instead, commit to a program for at least one full season before making strategic changes.
Listen to your body—don't risk injury. The best ability is availability. It's better to miss a couple reps at the end of a workout than to pop a hamstring and miss weeks or even months.
diff --git a/markdown/posts/Technical-Interview-Checklist.md b/markdown/posts/Technical-Interview-Checklist.md
index 4ad622a..d7a3f9a 100644
--- a/markdown/posts/Technical-Interview-Checklist.md
+++ b/markdown/posts/Technical-Interview-Checklist.md
@@ -32,7 +32,7 @@ I've interviewed hundreds of engineering candidates across multiple companies. W
- In particular - help candidates with standard library calls. Having the standard library memorized or not isn't good signal.
- Take notes: it's hard to remember what happened in an interview after the fact.
- Try to end on a positive note: if we end in the middle of a section, I like to connect where they are with where I wanted them to go.
-- As you close the question, tie it back back to a real-world problem.
+- As you close the question, tie it back to a real-world problem.
## Closing out
diff --git a/markdown/posts/Tracking-Fly-Times.md b/markdown/posts/Tracking-Fly-Times.md
index 0eb9cd4..095b989 100644
--- a/markdown/posts/Tracking-Fly-Times.md
+++ b/markdown/posts/Tracking-Fly-Times.md
@@ -37,7 +37,7 @@ I don't have enough variance in my data to definitively answer this question. Al

-[This recent Harvard meta-analysis](https://pubmed.ncbi.nlm.nih.gov/34431827/) found that "there is strong evidence that anerobic power as well as jump height are maximal between 13:00 and 19:00". Of the measurements studied, those two are most strongly correlated with sprint performance.
+[This recent Harvard meta-analysis](https://pubmed.ncbi.nlm.nih.gov/34431827/) found that "there is strong evidence that anaerobic power as well as jump height are maximal between 13:00 and 19:00". Of the measurements studied, those two are most strongly correlated with sprint performance.
I don't have enough (or any) afternoon data to confirm this, but there's definitely a correlation between later workouts and faster times for me. In the upcoming season, I may experiment with afternoon workouts, especially on the weekend, to see if I can confirm the meta-analysis any more.
diff --git a/markdown/posts/Two-Meet-Reports.md b/markdown/posts/Two-Meet-Reports.md
index ba1093c..bbe5edd 100644
--- a/markdown/posts/Two-Meet-Reports.md
+++ b/markdown/posts/Two-Meet-Reports.md
@@ -13,7 +13,7 @@ My first official meet in 15 months! It was absolutely phenomenal to compete aga
### [100m: 10.92 (+0.2)](https://photos.app.goo.gl/KFSCgxzWEpB7WUtY8)
-The wind cooperated, turning in or favor right before our race. I was strong out of the blocks and probably had a lead for the first 20 meters. I wasn't patient with my transition, however, and was fully upright before the 30m mark. By 50 meters, I'd lost my lead, and I had to grit through the last 20 meters. All that was enough, however, to run a FAT PR of 10.92!
+The wind cooperated, turning in our favor right before our race. I was strong out of the blocks and probably had a lead for the first 20 meters. I wasn't patient with my transition, however, and was fully upright before the 30m mark. By 50 meters, I'd lost my lead, and I had to grit through the last 20 meters. All that was enough, however, to run a FAT PR of 10.92!
@@ -56,4 +56,4 @@ Overall, although the times weren't what I was looking for, this was a fun meet
## Next up
-I'm running at the [TFCUSA Club National Championships](https://coachoregistration.com/dbi-bin/meetinfopage.pl?Web_Site_Id=al_tfcusa&Meet_Id=tfcclunatc2101&Team_Id=&) in Oxford, Alabama on Saturday, May 22. I'll be competing in the 100m and 200m. It appears to be mostly a youth meet, but there's a a few competitors with sub-11 and sub-22 seed times, so it should be a good time!
+I'm running at the [TFCUSA Club National Championships](https://coachoregistration.com/dbi-bin/meetinfopage.pl?Web_Site_Id=al_tfcusa&Meet_Id=tfcclunatc2101&Team_Id=&) in Oxford, Alabama on Saturday, May 22. I'll be competing in the 100m and 200m. It appears to be mostly a youth meet, but there's a few competitors with sub-11 and sub-22 seed times, so it should be a good time!
diff --git a/markdown/posts/Unconventional-Productivity.md b/markdown/posts/Unconventional-Productivity.md
index 2214ebc..bf48083 100644
--- a/markdown/posts/Unconventional-Productivity.md
+++ b/markdown/posts/Unconventional-Productivity.md
@@ -22,7 +22,7 @@ I think I'm a fairly productive person—I thought it'd be interesting to catego
## Unconventional
- I aggressively multitask—for example, I'm writing this post while at the gym. On my laptop, I'm always juggling between windows and tabs.
-- Similarly, I keep notifications on. I've found that fast response times are more important uninterrupted focus blocks for my current role.
+- Similarly, I keep notifications on. I've found that fast response times are more important than uninterrupted focus blocks for my current role.
- I don't separate my work and personal spaces—I do pretty much everything from my desk.
- I don't listen to music while I work.
- When I do have free time, I rarely force myself to spend time on any particular task. Instead, I prefer to have lots of optionality, and work on what's interesting to me at the time. This could be work, a side project, reading, writing, or even just zoning out on YouTube.
diff --git a/markdown/posts/Visualizing-and-Deleting-Entity-Hierarchies-in-EF-Core.md b/markdown/posts/Visualizing-and-Deleting-Entity-Hierarchies-in-EF-Core.md
index 518fd51..6e6ee56 100644
--- a/markdown/posts/Visualizing-and-Deleting-Entity-Hierarchies-in-EF-Core.md
+++ b/markdown/posts/Visualizing-and-Deleting-Entity-Hierarchies-in-EF-Core.md
@@ -31,7 +31,7 @@ update or delete on table "bar" violates foreign key constraint "fk_foo_bar_bar_
DETAIL: Key (id)=(a15ba931-eb31-412a-aadb-49d699af4435) is still referenced from table "bar".
```
-Of course, you can get around this manually, but this becomes increasingly tedious as your entity relationships scale. A better approach would be to sort our delete operations programatically.
+Of course, you can get around this manually, but this becomes increasingly tedious as your entity relationships scale. A better approach would be to sort our delete operations programmatically.
## Finding dependencies in EF Core
@@ -93,7 +93,7 @@ private static IDictionary<
}
```
-Note that we distinguish between "weak" and normal references. Many of the relationships in our data model are optional, meaning that the foreign key column is nullable. For example, we have a `borrowers` table with a nullable `spouse_id` column that points to another borrower. To delete a borrowers with a spouse, then, we need to null out `spouse_id` before deleting the borrowers:
+Note that we distinguish between "weak" and normal references. Many of the relationships in our data model are optional, meaning that the foreign key column is nullable. For example, we have a `borrowers` table with a nullable `spouse_id` column that points to another borrower. To delete a borrower with a spouse, then, we need to null out `spouse_id` before deleting the borrower:
```sql
UPDATE borrowers SET spouse_id=NULL WHERE tenant_id='test_tenant';
diff --git a/pages/projects/track/100m-predictor.tsx b/pages/projects/track/100m-predictor.tsx
index becf61d..a4f5ca7 100644
--- a/pages/projects/track/100m-predictor.tsx
+++ b/pages/projects/track/100m-predictor.tsx
@@ -414,7 +414,7 @@ export default function Predictor100m({ pages }: PredictorProps) {
target="_blank"
rel="noreferrer"
>
- Moniat, Fabius, and Emanuel (2018)
+ Moinat, Fabius, and Emanuel (2018)
.
diff --git a/pages/projects/track/points-calculator.tsx b/pages/projects/track/points-calculator.tsx
index 7a3600a..90bac33 100644
--- a/pages/projects/track/points-calculator.tsx
+++ b/pages/projects/track/points-calculator.tsx
@@ -131,7 +131,7 @@ function equivalentMark(eventType: string, points: number, gender: string) {
export const metas: Metas = {
title: "World Athletics Points Calculator",
description:
- "Converts athletics marks to World Athletics points and vice versa using equations derived from World Athletics' 2022 scoring tables",
+ "Converts athletics marks to World Athletics points and vice versa using equations derived from World Athletics' 2025 scoring tables",
};
interface PointsCalculatorProps {
@@ -345,7 +345,7 @@ export default function PointsCalculator({ pages }: PointsCalculatorProps) {
Converts athletics marks to World Athletics points and vice versa
- using equations derived from World Athletic's{" "}
+ using equations derived from World Athletics'{" "}
-
Managed a group of engineers across Ladder: mentored and set career goals, gave continuous feedback, ran performance reviews, and advocated to leadership on their behalf
Set technical direction on one of Ladder's product teams by writing tech specs, scoping projects, and reviewing code
Ran Ladder's SWE recruiting program: sourced and interviewed candidates, made hiring decisions, and closed offers. Grew engineering team by 50% in 2021
Managed a group of engineers across Ladder: mentored and set career goals, gave continuous feedback, ran performance reviews, and advocated to leadership on their behalf
Set technical direction on one of Ladder's product teams by writing tech specs, scoping projects, and reviewing code
Ran Ladder's SWE recruiting program: sourced and interviewed candidates, made hiring decisions, and closed offers. Grew the engineering team by 50% in 2021
From 41f381e03502af6321bc144ed452ca233664c90a Mon Sep 17 00:00:00 2001
From: Jeff Chen
Date: Sun, 6 Sep 2026 10:59:42 -0400
Subject: [PATCH 2/2] Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---
markdown/posts/My-Sleep-Stack.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/markdown/posts/My-Sleep-Stack.md b/markdown/posts/My-Sleep-Stack.md
index a77c0d7..4f01e9f 100644
--- a/markdown/posts/My-Sleep-Stack.md
+++ b/markdown/posts/My-Sleep-Stack.md
@@ -18,7 +18,7 @@ Because sleep is so important, I've assembled a stack of habits and tools for me
- **Consistent bed and wake time.** [Sleep regularity is associated with stronger academic performance](https://www.nature.com/articles/s41598-017-03171-4). I make sure to sleep and wake within a 30 minute window every weeknight. Although I try to keep my bedtimes consistent on the weekends as well, I'm admittedly much worse at that.
- **Nine-hour sleep opportunity.** I'm in bed for at least nine hours a night. Focusing on sleep opportunity instead of time slept helps me break insomniac's anxiety—I can't sleep because I'm worried about not being able to sleep.
- **No NSAIDs or antihistamines at night.** NSAIDs [disrupt sleep](https://www.sciencedirect.com/science/article/abs/pii/0031938494903883). Antihistamines [interfere with deep sleep](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3252975/). Simple enough to avoid both of these before bed.
-- **No devices in bed.** Devices in bed can [affect your circadian cycle](https://www.sleepfoundation.org/how-sleep-works/how-electronics-affect-sleep) and are generally stimulating instead of relaxing. I'm had trouble sticking to this habit, but my sleep quality is demonstrably better when I do manage to put away my phone before bed.
+- **No devices in bed.** Devices in bed can [affect your circadian cycle](https://www.sleepfoundation.org/how-sleep-works/how-electronics-affect-sleep) and are generally stimulating instead of relaxing. I've had trouble sticking to this habit, but my sleep quality is demonstrably better when I do manage to put away my phone before bed.
## Tools