Moar Running

Cold Weather Running

This year I was a big wimp, and mainly ran on a treadmill during the colder winter/spring months. The company I was working for at the beginning of the year offered a small stipend to use for fitness-related expenses, so I renewed my membership to the Worthington location of Snap Fitness. Treadmill running is boring as heck, but I found it preferable to the cold/dark. Sadly, my Lung Plus is collecting dust.

VO₂ Max Test

After the training season last year, I found out that the Exercise Science Lab at OSU offers performance testing. Months later, in February of this year, I was finally able to go in for the test. While I was interested in my VO₂ max, I specifically wanted to know my max heart rate, as I would base my upcoming training off that value. I had done an “at home” max HR test (sequential hill sprints, measure HR at the end of the third one), but it seemed low based on most age-based calculators. The test itself was interesting; I got hooked up using the standard heart rate chest strap and respiratory mask, then ran on a treadmill for a while. They increased the speed until I hit 8.5 mph, and then started cranking the incline. What I didn’t realize was that the test ends whenever you want it to. Basically, when you think you can’t go any more, you tap out. Of course, after the fact, you second-guess yourself, and wonder if you couldn’t have kept going for a bit longer. Regardless, my max HR came in at 160 (which is about 12% lower than my age-based calculation), and VO₂ max was 58.2. This was super helpful for targeting an aerobic heart rate during this year’s training season.

2023 Marathon Training

This year I’m using the 55-70 miles per week plan detailed in Advanced Marathoning. I specifically upped my milage in April/May in order to be able to start this plan safely. For the most part, it has been going OK — I did have to visit a PT in order to resolve some IT band pain, which caused me to downgrade about a week and a half’s worth of training in June. Comparing with my speed/heart rate from runs last year, there doesn’t seem to be a marked improvement, even though I’m running about 33% more. I will say that this volume is pushing the limit of what I’m able to integrate into my life, as I’m averaging 10 miles per day at this point, while trying to be a (present) parent and work a full-time job. The mid-week long runs usually have me questioning my sanity.

All that being said, I have plans to run two races this season. I signed up for Chicago — it’ll be my first out of town race. The plan is to take the family and do some tourist stuff, then run the race and head home that same day. My goal this year is fairly conservative — to be able to stick to last year’s target pace and hit 3:10, which is a Boston-qualifying time for my age. In the event that I fail spectacularly, I have a backup in the Columbus marathon, which will be a week later. I haven’t run marathons that close together before; in 2020 I ran two races two weeks apart, so we’ll see how I feel after a single week’s worth of recovery.


2022 Columbus Marathon Recap

Another year, another marathon retrospective! I started training this year using the lowest milage plan from Advanced Marathoning by Pete Pfitzinger and Scott Douglas. It had slightly more milage overall than the “advanced” plan from Hal Higdon, whose plans I’d followed exclusively up until now. It was pretty enjoyable, and the only deviations I made were due to catching COVID (!) about a month and a half before the race. Really, that was the only hiccup in my training, as you might expect. My kids came down with it from school, and it spread rapidly through the house. I never tested positive, but was down for the count with a high fever and lethargy, so not sure what else it could have been. I missed about a week of training, including one of my scheduled 20 mile runs, unfortunately. Getting back into easy running was concerning, as my heart rate (as reported by the optical sensor on my watch) was 20-30 bpm higher than normal. I ended up staying conservative in my return to training, as well as buying a chest strap HR sensor for more accurate readings. It took two weeks for me to get back to “normal,” but didn’t miss any other long runs, so felt I had a reasonable chance of still being able to race.

I thought I was relatively safe from sickness after that, but two weeks prior to the race, my twins came down with colds. Vigorous hand washing saved me from infection, thankfully. Then, the week before the race, my oldest daughter came back from a school-organized overnight camp with a stomach bug. My wife proceeded to get sick the day before the race, and my youngest daughter the day of. I was up at 4AM on race day cleaning up barf. Amazingly, I was still unscathed, aside from running (ha!) on terrible sleep.

Otherwise, race day was mostly uneventful. Traffic to the starting area was terrible, as usual. I made it out of the parking garage with about a half hour to spare, and thought I’d take my own advice from last year and use a porta-potty, but the lines were so long and slow that I didn’t have time. There were signs advertising “restrooms are in the starting corrals!” But that was a lie. So I just held it for three hours! I didn’t even really have enough time for a proper warm up — I was still fiddling with the fit of my shoes when the starting gun went off.

My race was not very strategic — I mainly went by “feel”, even though I was wearing my HR chest strap. I didn’t do enough training at race pace to have a good sense of how fast I could/should go. I was definitely running faster than most of my training runs, and I was breathing hard, but the pace felt sustainable. Fortunately my target pace (7:15/mi) was conservative enough such that my endurance was sufficient. I tried to pair up with other runners who were also trying to hold a similar pace, and ran for a few miles with another guy around my age, but ended up dropping him even before the halfway point. The rest of the race was a solo effort.

One last-minute change to my plan was bringing along my own gel packets. I watched a video of Floris Gierman’s Chicago Marathon experience, and noted that he brought quite a few gels. I felt like I would definitely need them, as there are only two nutrition stations along the Columbus course, but I didn’t know how to carry them. On my long runs during training, I would usually only bring two gels, which fit neatly into a side pocket on my water flask. Well, I ended up just shoving them in my pockets — I ate one in my car before the start, then put one in each pocket of my shorts, and carried a third. The additional weight in my shorts ended up not being that big of an annoyance, even though I’d never done it before, so I’ll probably adopt that strategy again in the future. In total I consumed five gels; four of my own, and one from a course nutrition station. My one regret was that I didn’t take the last gel packet; I was having a hard time getting them down by that point in the race and didn’t think I could choke it down. The volunteer handing out the flavor I wanted was offering two, and I thought “no way I can eat those!” so just skipped. I think if I would have taken 15 seconds to eat that last gel, I would have done better for the last few miles.

Even after experiencing cramps in the last mile last year, I never really investigated ways to replenish electrolytes during the race. Of course the same thing happened this year. One amusing thing was being encouraged by another runner during the last stretch to the finish. My hamstrings were on the verge of seizing up; “I can’t push it too hard, I’m cramping up!” I told him. “So am I!” he yelled as he passed me, then continued to yell “Ow! Damn!” as he kept on going.

My finish — in the yellow jersey

On the whole, I was pretty satisfied with this year’s race. My official time was 3:12:54, more than 5 minutes faster than last year. Even with catching COVID, I felt a lot stronger, especially just after finishing — last year I was barely able to hobble to my car; this year I was even able to walk the dog with my family later in the day. I still have the goal of a sub-3:00 race though, so there’ll definitely be more running adventures in my future.


Building a custom Apple keyboard

Over time, I’ve slowly become a bit of a keyboard nerd. When I put together my very first PC as a teenager, I ended up buying an IBM Model M keyboard from a friend’s dad. At the time, I didn’t know that it would eventually rise to legendary status among keyboard enthusiasts — I just knew I liked the heft and the satisfying sound of the keys being pressed. That Model M stayed with me for years and years, but fell into disuse. For a decent chunk of my professional life, I used Apple’s modern chiclet-style keyboards; at the time, I liked the short key travel and the extra space separating the keys. Eventually I started working from home more often, and so needed to have two setups for my laptop. At the office, I used quieter keyboards, but at home I dug the Model M back out. I found someone on eBay who sold me a cable that converted the PS/2 output into USB, suitable for use by a modern computer. And I started to really enjoy using the old clunker. When you type on a keyboard all day, it turns out that the type of keyboard makes a big difference (see what I did there?).

When I switched jobs in 2015, I decided that I needed a better keyboard “for the office.” From various parts of the internet, I had heard about the Happy Hacking Keyboard, and was intrigued by the 60% size and Topre keyswitches. I bought one, loved it, and have been using it off and on ever since. With that experience in mind, when I switched jobs last year I thought I would continue the “new job == new keyboard” tradition, and built a custom split keyboard from Keebio, the Quefrency. I wasn’t sure what to expect, having never built my own keyboard before, but the hotswap keyswitch sockets made it incredibly easy to put together. No soldering was required; it was basically about the easiest possible way to get into the DIY keyboard hobby.

Well, I haven’t switched jobs again, but I recently got the itch to build another keyboard. I was trolling the internets, as one does, and saw examples of vintage Apple Extended Keyboards hacked down to 60% size. My interest was immediately piqued. My keyboard collection at this point included boards with buckling spring switches, Topre switches, and Cherry switches. I had been wanting to make a board that used ALPS style switches, but hadn’t been able to find suitable keycaps. Unfortunately, most enthusiasts these days use Cherry-compatible key switches, and therefore most custom keycap sets are for Cherry switches only. ALPS switches have a different stem shape, and are incompatible. I guess I theoretically knew that it was possible to harvest keycaps from older keyboards, but it never quite clicked until I saw examples of repurposed Apple keycaps online. Since didn’t want to destroy a working keyboard, I found a listing on eBay for just a set of Apple Extended Keyboard II keycaps. I’m assuming that they were salvaged from a dead board, so I don’t have “ruining vintage computer equipment” on my conscience.

The various example keyboards I saw were based off a custom PCB called Alps64, which is made by a keyboard enthusiast named hasu. While it doesn’t seem like a full-time, professional operation, hasu does take orders for Alps64 boards. The only slight problem was that hasu lives in Japan, and Japan Post has suspended service to the USA due to COVID, so I had to pony up some extra cash for a botique shipping company. Fortunately, since the Alps64 is a standard 60% size, it can fit any number of existing cases. I got a generic case made out of black anodized aluminum.

With the PCB and layout plate obtained, I had to decide exactly what switches I wanted. I decided that I wanted to buy new switches, rather than salvage them from an existing keyboard. To that end, I bought ALPS-compatible Matias quiet click switches. Since real ALPS aren’t made anymore, these Matias switches (clones, basically) are the next best thing. The quiet click switches are tactile, with a satisfying bump. The clicky switches seemed too loud to me, and I want to be able to use keyboards that aren’t too annoying in an office setting. Matias will sell you a switch tester with free shipping, if you would like to test each type in person.

With all the parts on hand, next came assembly. In contrast to my previous board which used hot-swappable sockets, this keyboard required some soldering. The PCB came with resistors that needed to be soldered, in addition to each switch. One very cool extra that was included with the Alps64 was a small tool that helps bend the leads on the resistors so that they fit perfectly in the board. Connecting all the resistors and switches was more tedious than difficult, as there was no delicate soldering required. Screwing the PCB into the bottom case completed the build.

tool to help bend resistor lead wires
This included tool was super handy. I love it!
resistors getting soldered to alps64 PCB
Soldering all the resistors is still a bit tedious, though.

The only slightly tricky thing I had trouble with was seating the keycaps that required stabilizers. Since I didn’t remove the caps from an existing keyboard, I wasn’t able to observe how they were originally placed. The space bar was especially annoying, I tried placing the stabilizer in various orientations before I found a photo of the correct one. Also, the keycaps required more force than I expected in order to firmly seat them on each switch stem. I had each keycap in place, then realized that I needed to push harder on each one in order to get them really on there.

in the process of installing keycaps
Easy caps are in place.
example of AEKII spacebar stabilizers
The stabilizers for the space bar should look like this.
keycaps installed
Finally got all the caps put on correctly.

Since the Alps64 board is only 60%, it’s missing lots of keys that a full-sized keyboard would have — most notably the escape key. Fortunately there is an incredibly user friendly firmware editor which allows you to create multiple “layers” on your keyboard. For example, in my default layer, all keys are taken at face value, but if I hold the right control key, a second layer is activated, which maps backtick to escape, WASD to arrow keys, 1-9 to function keys, etc. So you can basically customize the layout completely.

the completed keyboard
The completed keyboard.

I really like this keyboard so far. The Matias quiet click switches are very satisfying, and the weight of the aluminum case gives some heft which is missing from my Quefrency and HHKB. The classic Apple font on the keycaps is also delightfully nostalgic. It also is totally fine driving my Linux box — the command key acts like super. The only downside was the cost; I paid over $200 for the various parts, which is not cheap. Fortunately (for me, at least) I was able to expense my company to cover the costs. For that small intersection of people between keyboard nerds and Mac users, I can definitely recommend building off an Alps64.


2021 Retrospective

Well, 2022 is nigh. Been seeing a lot of “end of the year” posts, so figured I’d write my own. Unfortunately, my memory is completely shot, and I also don’t write in a diary or journal, so this entry’ll probably be a bit on the short side.

First thing that comes to mind is that we collectively suffered thorugh an entire year of COVID. I have been permanently working from home since March of 2020, so my own daily routine hasn’t changed much. I roll out of bed and downstairs to my “office” for a commute. Vigilance in my own social circle relaxed somewhat with the arrival of vaccines, although for indoor gatherings (church and stuff) we all still wear masks. I got my own set of shots (Pfizer) in April, which was a bit of a relief. All three kids got theirs as well, when they were able. My immediate family has stayed COVID free this year, which I chalk down to both precaution and luck. I don’t really foresee the pandemic getting any better in the new year, as cases are rising, and folks around here are basically pretending it doesn’t exist.

While I continue to work from home, the kids have actually started going to in-person school this year. We kept the twins out of preschool last year, so this is their first public school experience. Fortunately, there’s not as much contention about making the kids wear masks in our district — meaning that they all are wearing them. I don’t think I’d feel safe, otherwise. Even with the masks, we’ve gotten quite a few notices of COVID transmission in our oldest’s classroom, and the kids still bring home more conventional sicknesses. One silver lining from 2020 was that we all stayed healthy throughout the winter, which has not been the case this year.

In spite of health concerns, we did take a few family vacations this year: one to the Florida panhandle in early January, and then to the west coast of Michigan in July. The Florida trip was based on the desire to go someplace slightly warmer and less snowy. Rentals are cheap in the off season, and we reasoned that there would be fewer people as well. Well, there were definitely fewer people — only northern crazies like us would be walking the beaches in 40-50 degree weather. That being said, it was actually pretty nice. A lot warmer than Ohio was, plus nice scenery in the form of the beach and ocean. We also went to as many parks as we could in the area.

We went on the Michigan trip was with my wife’s family. It was basically a chance to go to some beaches in slightly warmer weather. Similar to Florida, our goal was to hit the beach every day — with varying degrees of success. One surprising highlight was a “dune tour” sand buggy ride. The driver went a lot faster than one thought would be safe, so the kids were initially pretty nervous, but eventually got over their initial fear and started to enjoy it. They have actually been asking to go back, so I think it was a success. My favorite location was Tunnel Park.

One bit of sadness we experienced this year was the death of the (almost 13-year old) family dog, Belle. In October she randomly fell over and started seizing up. After slowly recovering, the seizures started happening with more frequency, and finally were too much — she stopped breathing one night while at home. I was sitting next to her while she passed, so hope that my presence was somewhat comforting. As I told folks afterwards, dying at home with someone you love next to you is about as good as any of us could ask for. After a brief mourning period, we ended up adopting a rescue puppy that we named Stella. She’s quite the mutt, but has a good chunk of German Shepherd in her. It’s been a challenge for both her and us to adapt to the new living situation.

In personal news, I turned 40 this year, which felt like a symbolic milestone. I’ve been dealing with bouts of ennui, and some of the things I’ve focused on this year have been because I want to push back on the feeling of being “old.” After running two marathons last year, and not performing as well as I wanted, I tried hiring a coach for a few months in the spring. I think I was hoping that I would get some sort of mystical insight into correct running form, or dramatically improve, or something like that. What I ended up getting was interval workouts every other week, and a weekly running plan that was similar to what I was already doing. After 4 months, I decided not to continue with the coaching, mainly because I hate running on a track. I ended up following the same marathon training plan that I did last year, and had more success at the staffed Columbus marathon (read my race recap here).

I also changed jobs this year, after almost 5 years in my second stint at CoverMyMeds. I think the impetus was feeling bored/trapped/whatever due to my age, as well as stagnating in career growth at the company. McKesson, the corporate overlord, also decided to merge CoverMyMeds more closely into its existing structure, actually renaming their technology arm “CoverMyMeds.” So now that name refers to quite a few more people/offices than it previously did. The “legacy” employees didn’t really like some of the changes that were imposed, including changing (worse) benefits, and management basically said “our way or the highway.” So lots of senior/long-tenured people left. I ended up leaving after my manager left, and I was passed over for both a promotion and raise. I went to a company called Upstart, a fintech company that had opened a Columbus office a while ago. It was my first time getting RSUs as part of the sign on process, which was kinda cool. Unfortunately, my team’s onboarding process is not great, and over two months in I still feel like I don’t know what’s going on, and am hardly contributing. Hopefully things change in the new year, or else I might start grinding leetcode again in preparation for another round of interviews.

Tangential to work (at least in my mind) was paying off our mortgage this year. Work -> money, right? Now this achievement isn’t quite as monumental as it seems, just because the mortgage (and by extension, house) was pretty small to begin with. However, it does free up a good chunk of change to start investing elsewhere. Maybe I can stop being a wage slave a few years earlier than I would otherwise. Nothing like working your pain-free years away and retiring when your capacity to enjoy life has lessened.

I didn’t keep a list of consumed media this year. All I know is that I didn’t read as many books as I should have, and played more video games than I should have. In fact, one of my goals for 2022 is to keep better written records of my life. That way I might have the ability to look back with more accuracy at what I accomplished, rather than guess at the end of the year. I’d also like to get back into casually studying Japanese next year. I have no illusions that I’ll ever be fluent, but I do have a decent base in the language, and would like to continue to expand neural pathways. I’m going to continue to run next year, with a focus on aerobic base and low heart rate training. I’d like to get a sub 3:00 marathon, but am limited in terms of the time available for training. If I was able to train for one hour every day, at my current speeds my weekly distance would be in the 56 mile range. Throwing in a long run day could boost that into 60+ territory, which might be enough. We’ll see what happens. I’d also like to find something enjoyable to do for work, whether that’s grow into my current position or get a new one. I’m pretty fortunate in that I can choose from a sizable pool of different companies to work at, but my problem is that I have a hard time caring about the specific industry that a company is in. And technology for technology’s sake is usually pretty boring as well. Maybe I need to get out of web programming.

Thanks for reading this far. All in all, 2021 wasn’t too bad of a year, considering. Happy New Year, and hopefully I’ll see you all in another 12 months.


Review: Boxy Pixel Game Boy Macro Shell

Another day, another random video game-related project. This time some products from Michigan-based Boxy Pixel caught my eye — specifically, a machined aluminum faceplate for a “Game Boy Macro.” What is a Game Boy Macro, you may ask? In effect, a decapitated Nintendo DS Lite. Since the DS can play Game Boy Advance games, and the hinges for the upper screen are so fragile, some enterprising gamers have taken to completely removing the top screen on broken DS units, and repurposing them as dedicated GBA consoles. Now, normally these hacked machines would look a bit rough, but Boxy Pixel has designed a replacement faceplate that looks very professional. It takes some design cues from the Game Boy Advance SP, and has a modern design sensibility since it’s made of aluminum (truly, the metal of our time).

Aluminum Game Boy Macro top shell
What you get from Boxy Pixel — the empty top shell.
The completed Game Boy Macro
The completed product. Note that the GBA cart sticks out a bit from the bottom.
Game Boy Macro with screen turned on
With power. The screen looks great!

Now, there’s no reason that I needed to make a Macro. I have an original GBA that I modded with a Game Boy SP backlit LCD, which could arguably be considered the “best” GBA. But it seemed like a cool project, that wouldn’t be a huge time investment. So I poked around on eBay until I found someone selling a DS Lite for parts. True to the seller’s word, the device did not power on, and the charging port was disfigured to boot – I had to cut out a bent piece of metal before I could even plug the thing in. Fortunately, the first result after searching “ds lite no power” proved to be my solution. All I needed were a replacement fuse and charging port from Ali Express, obtained for about $2.

Once the DS powered on again, I was able to follow the assembly guide to complete the build. I had to reference a disassembly guide on iFixit once or twice, but otherwise the instructions were pretty straightforward. The build requires some minor soldering, but it was easily done, even with my limited skills.

So, after completing the project, what are my thoughts? Well, I knew that this would be completely unnecessary for my video game collection, but was just something I had wanted to do for a while. It’s definitely something for folks with more money than sense, as the saying goes. However, I do like the size and weight of the device. It’s the same general form factor as the original GBA, but quite a bit thinner and lighter, making it easier to play. It also uses the built-in rechargable DS Lite battery, which is kinda nice — you don’t have to swap AA batteries. The screen is also incredbily bright and vibrant.

Side-by-side comparison of original GBA and the Macro
Side-by-side comparison between the Macro and an original GBA.
Side-by-side comparison of original GBA and the Macro
The Macro is quite a bit thinner and lighter.

Any downsides? Well, one thing I had forgotten about was that the DS Lite didn’t have enough room to completely insert a GBA cartridge, so the games stick out about half an inch from the bottom of the system. Not a dealbreaker, but something to keep in mind. Another minor annoyance is that the glass screen protector that Boxy Pixel sells alongside the top shell is just a little too small, showing air gaps between the glass and the aluminum. I’m hoping that it doesn’t accumulate lint and dust too badly over time. The last thing I noticed was that there is just a hole in the top of the shell to allow the charging/power LEDs to shine through — I would have expected the option for a bit of diffusing plastic, so that the PCB wasn’t directly visible beneath. Perhaps if I get motivated to open the machine back up again, I’ll squirt some hot glue in there.

These are all minor nitpicks. On the whole, I like the device, and the aluminum top shell really makes it look like a mass-produced device. With people these days fawning over devices like the Analogue Pocket, it’s kind of fun to be a bit of a contrarian.