Running continues to be my primary focus outside of work. Okay, I admit it – on most days I could leave out the “outside of work” qualifier. My long runs continue to approach marathon length. I recall how in 2019 I thought “maybe I’ll get to the point where I just run a half marathon equivalent (13.1 miles) twice a week and that will be my training schedule.” Now I’m back to the point where I’m doing 30-40+ miles a week as my prep for the Vermont 50 is peaking. It feels great. I love the continued training, challenge, and improvement.
I have owned an Apple Watch since Series 2. I also had a Series 4 with cellular, and now own a Series 6, also with cellular. I bought the Apple Watch because it was rated as being the most accurate general purpose, wrist-based fitness tracker. There are certainly other options, and better ones just for running, but I went with Apple because I am fairly comfy in their ecosystem.
I’ve known for some time that wrist-based heart rate monitors (HRM) are inaccurate. My Apple Watch will show me at 180 bpm when I am working moderately/hard. My maximum heart rate is around 173 bpm, so, no. Just no.
As of watchOS 7, it’s like the Watch does not even try anymore. I will start my run and it’s a good half mile before it even can show a reading. When it finally does, it is wildly inaccurate. At a friend’s suggestion, I bought a Wahoo TICKR FIT a couple years ago. I wear it on my upper arm, and it gets within 1-2 bpm of what a chest strap Wahoo TICKR X gives. This is good enough for my purposes. For comparison, when the Apple Watch says I’m at 180 bpm, the Wahoo TICKRs will show me being somewhere in the 150s.
As of watchOS 8.4, things got worse. The Bluetooth connection between the Watch and three different HRMs (Wahoo TICKR Fit, Wahoo TICKR X, and Polar H10) all lose their connection to the watch within seconds of starting a workout. They periodically reconnect, but then continue to lose the connection. The end result is periods of accurate readings along with equal periods of inaccurate readings. The result is the same – useless, garbage data. On the Apple Watches, I test by pairing the HRM and using the Workout app. On my iPhone, I pair the devices and tested with Strava or the manufacturer’s apps.
To troubleshoot this, Apple sent me a new Apple Watch. It is running watchOS 7.6.1. While this version is buggy, it works and will reliably hold a connection with any of the three HRMs I have tried. When I paired a couple of the HRMs with a friend’s Apple Watch, running watchOS 8.4.2, she experienced the same, erratic and inaccurate behavior. So at this point, I have tried the combinations shown in the following table.
Wahoo TICKR X
Wahoo TICKR Fit
Series 6, Cellular, watchOS 8.4, 8.4.1, 8.4.2
Series 4, Cellular, watchOS 8.4.2
Series 6, Cellular, watchOS 7.6.1
iPhone 13, iOS 15.3.1
✓ = Works as expected. X = Does not work reliably. – = Untested
I have gone well above and beyond what any customer should have to do to troubleshoot this. I have reported my findings to Apple and Wahoo at my own time and expense. And I have gotten zero positive results.
After weeks of troubleshooting, Apple reported back that the problem is with the third-party manufacturers. Apple will not work with me further to address the issue. Apple said they would work with the manufacturers, but not with me. As I only have the Wahoo devices (returning the Polar, since it behaved the same), that leaves them. Wahoo maintains no one else has reported this behavior, even though I have clearly demonstrated the issue with two of their products on two separate Apple Watches.
So what’s a guy to do? I have clearly demonstrated the problem, but no one wants to own it. At this point, if I want reliable metrics, I need to stay on an old, buggy, insecure version of watchOS. I didn’t even get into the fact that I cannot activate cellular service on the replacement watch running watchOS 7.6.1. I’ll save that for another post.
UPDATE: As of watchOS 8.5 (2022-03-14) everything seems to be working again normally.
UPDATE: Nope, nope. As of 2022-03-17 it happened again.
A few days after my first marathon last year, my right foot swelled up. Massively. I took a couple days off, and did (relatively) short runs. The foot hurt and would swell up like a baloon. I self-diagnosed as having a stress injury (fracture?) and accepted I may have to stop running for the rest of the year. I was able to get an appointment with a sports orthopedist at MGH, and he prescribed physical therapy. X-Rays showed no (remaining) fractures.
I did it. Four hours and 38 minutes of nearly non-stop plodding along at an average 10:37/mile pace. My main goal was to finish in 4.5 hours. My secondary goal was to finish. I finished. 690 people finished the marathon. I was 575. So hey! I was in the top 83rd percentile!
From 2017 to early 2021, my go to running shoes were the New Balance Fresh Foam 1080 (I forget if they were version 9 or 10), and a pair of the New Balance Summit Unknown for trail running. In 2020 I went on a bit of a shopping spree and was trying all sorts of New Balance shoes, as I liked the wide toe box that didn’t mash my feet. I had an old pair of the Fresh Foam 960s, and bought a pair of the Fresh Foam 980s, as well as the Fresh Foam More. I liked my shows like I like my cappuccino – fresh and foamy.
It’s been a while since I threw my hat over the fence, so here we go! I just registered for the 33rd annual Baystate Marathon. 26.2 miles of pure fun in the tradition of my Spartan ancestors*. I started running regularly in 2017, and embraced it in 2018. In March 2020 I ran 13.1 miles for the first time. I did 13.25 three weeks ago, then 14 last weekend. Sunday my running buddy/accountability partner and I will do 15.5, etc., as we build up to the event on October 17. The clock is ticking!
I have no goal other than to finish. I think that’s sufficient for now.
* No, I don’t really know if I had any Spartan ancestors, but my dad’s from Athens, so that’s close, right?
If you’re like 99% of the civilized world, you’ve been on a Zoom, WebEx, GotoMeeting, Hangout, Meet, or other similar platform within the last two hours. Even though it’s been just over a year since the first reported case of COVID-19 in the US, I figured it would not hurt to give some folks some best practices on attending online meetings.
Know if Your Camera is On
I recommend cameras on for small meetings. It shows that you are (or are not) engaged. For a large meeting with dozens of people in attendance, don’t turn your camera on if no one else has – just go with the flow. If you’re a manager and you want people to be more engaged, have your staff turn ’em on.
If your camera is on, act accordingly. Don’t be that guy.
Mute if You’re Not Speaking
If you’re a good meeting attendee, and you’re paying attention to what’s going on, you may not need to mute. However, if you’re splitting your attention, typing, using a scratchy microphone, or have background noise (kids, spouses, pets, traffic, smoke detectors, etc.) please mute. And then remember to unmute when you speak. Another reason to keep your camera on – if you forget to unmute, people can helpfully tell you “you’re muted.”
Use a Good Microphone
Lots of people have cheap headsets or use their laptop microphone. Some of these sound absolutely terrible. If your microphone is the kind that hangs by your neck, you’ll likely make a sound like steel wool over a chalkboard every time you turn your head. Laptop mics also tend to have a lot of echo and can sound like you’re very far away. Using your phone for audio is often better. Amazing! A device built for audio calls is better at audio. Most platforms offer an iOS and Android option, and these will usually let you call in over the Internet and via a phone call. Try these if anyone complains of audio quality issues when you’re using a laptop microphone. And if other people on the meeting are complaining about your audio quality, do something about it. Don’t ignore it or just hope it gets better.
Use Do Not Disturb
Another annoyance is the constant buzz or beep of notifications going off in the background. Enable do not disturb or sign out of your email and messaging platforms.
Share Only What You Want
If you’re presenting, share only the application you want everyone else to see. This is safe than sharing your entire screen. Showing up nude when your camera is on is pretty bad. Slightly less embarrassing is getting a pop-up on your screen about how stupid someone else in the meeting is.
For the last few months, I’ve been using Discord, Slack, Hangouts, Signal, Skype, and Teams for chatting with friends, family, colleagues, and clients. Discord is very like Slack, with a few differences because it’s geared toward gamers while Slack focuses on businesses.
Both Slack and Discord support add-ons in the form of ‘bots (robots, or programs that watch for certain events and respond to them). Tupperbox is a robot that has popped up on a couple of servers on which I role-play. It’s used to let you assign actions to issue different responses, based on the inputs. In my most frequent use case, I give it a trigger phrase and it takes whatever follows and makes the text appear to have come from someone else. I can use the robot to make a sentence I type look like it came from one of my characters instead of myself. Instead of “Peter Nikolaidis says that Hector Roundtree says ‘Forsooth!'” you would see “Hector Rountree: ‘Forsooth!'”
The trick is that I need to register every character and its associated trigger phrase, and this confuses me every time, despite the built in help. So I figured I’d document the exact characters I typed right here for next time (and for you, of course, dear reader)!
How register a new character/avatar/name:
tul!register "Hector Roundtree" hrtext
Any time I start a message with the letters “hr” and repackage anything after that to appear to have come from “Hector Roundtree” himself.
I also like to have a different icon for each of my characters. The first step is to upload a small (thumbnail) image, preferably a square with the face in the center, to a publicly reachable URL. I’ve had zero luck linking to OneDrive or iCloud photos, so I upload them to my WordPress site and reference them from there.
The above text will register the image with posts made by Sir Hector, instead of a big question mark icon. Update: Another option I only recently discovered is to drag and drop the avatar picture right into the post, instead of giving a URL. This is a much simpler option!
What if you goof and want to start over? You can always remove and re-register. For example, I registered “JJ:” for one of my characters, and “hr” for another. The problem? For one, the colon is extraneous. I could use “JJ” instead. Also case matters, so “JJ” is not the same as “jj” or “Jj.” I often type posts from my phone, which likes to autocorrect things. For instance, if I start a new post by typing a letter ‘h’ and an ‘r’ by default this will be “Hr.” Great, except I registered “hr” so every time I want to post as Hector, I have to uncapitalize the ‘H’ first. What a pain! That’s where the remove command comes in.
tul!remove "Hector Roundtree"
The above text will remove Hector, letting me re-add him with a simpler trigger phrase. This time I’ll use “Hr” to make for easier posting from my phone.
I’ve owned an Apple Watch for years – since the Series 2. I’ve also been running consistently for years – three of them, to be precise. I also like data. I’ve been collecting data on my workouts via my phone and watch for years, but getting data off of the iPhone’s small screen has always been problematic.
“But Peter!” you say “Apple lets you export data from the Health app!” Yes, it does. Have you ever looked at it? It looks something like this. Correction – it looks EXACTLY like this.
Next I tried the Heartwatch app for iOS. So close! It generates some nice reports but only goes back one year. I want to track data over multiple years. I emailed the developer, and he said he’d consider it.
Yup, that did it! The following R code imports my Health XML data and spits out a CSV. And yeah, it took a lot of floundering to get these few lines of code:
xml <- xmlParse('export.xml')
df_workout <- XML:::xmlAttrsToDataFrame(xml["//Workout"])
Now I have a CSV file! Great! I’ll make a chart in Excel. OMFG Excel charting is beyond convoluted. Why is it so F***ING COMPLICATED?!?!
Google Sheets to the rescue. Finally. I have what I have sought for months.
I realized that with the right libraries, I likely could have accomplished the same thing with Perl or Python, but learning R has been fun and I may have applications for this professionally as well as personally. Also, I should be able to generate the graphs directly from R, but haven’t learned that yet. Finally, I will likely need to dive deeper into the data to incorporate steps per minute and heartrate into the above chart. I’m really interested in overlaying my steps per minute and average heartrate to see how this affects energy used and pace. So while I’ve taken the first step (no pun intended), I’m not done yet!
I like to use a strap in leg extensions, especially in long-held Yin poses. The problem? Holding the strap gets tiring! Looping it around the fingers can hurt after a while, and even if you hold it around the meaty part of the hand, it still takes some muscle power. The solution? Loop the strap around both wrists so that it holds itself in place. Start by making a loop.
Take the bottom of the loop and lift it toward its center so as to make two smaller loops toward the bottom.
Slide your hands through the small loops.
Grasping the strap, loop it over your foot, so that your hands rest lightly on the strap and are held in place by it.