The Garmin Forerunner 955 Solar vs Apple Watch Ultra 2

As I train for my second ultramarathon, the battery life – or rather, lack thereof – on the Apple Watch Ultra 2 has become a concern. Some days, despite my disabling all the fanciness on the Watch (cellular, wifi, enabling Airplane Mode, activating low power mode, and using an external Bluetooth heart rate monitor), battery life still drops at around 8-10% per hour. Do the math and that tells me I’ll get maybe 10 hours of battery life on a workout. As I prep for a 50 mile race with an anticipated 4-5 mile per hour pace, that cuts it awfully close to not having enough juice to finish. So at my coach’s recommendation, I picked up a Garmin Forerunner 955 Solar last week (at the time of this writing). Here’s my analysis so far.

Apple Watch features I miss:

A lot more than you’d think. Right off the bat I knew the Garmin would not have a lot of the “nice to have” features I’ve grown accustomed to on the Apple. A little background – I’ve owned a Apple Watch Series 2, 4, 6, Ultra, and Ultra 2, so it’s pretty integrated with my daily life.

Siri. I know, hard to believe with all the complaining I do about Siri, you wouldn’t think I miss it. But I do. The ability to invoke Siri and (sometimes) have it do what I want is a nice plus. record a voice memo, set a reminder. Simple things I took for granted on my watch are no longer available to me without another Apple device. Saying “Hey Siri, add Greek Yogurt to the Shopping list” to my Garmin does nothing. Huh.

Making a call. Sometimes it’s really convenient to make – or moreover, receive – a call from the Watch. Like, when I leave the phone over on the counter and go outside for a few minutes. Also, the ability to discretely call 911 is appealing.

Sending a text. Garmin has a “Messenger” app. I haven’t gotten it to work yet. I tried. I set up the app and gave it access to select contacts I want to be able to message. It insists I need to add contacts before I can send. Even though it fails far too often, I still regularly say “hey Siri, Message so and so” or “send so and so an audio message.” Can’t do that on the Garmin.

Tracking Medications. Rolling over in bed after popping a melatonin, it’s nice to be able to log that on the Watch, but now I have to pick up the phone and blast some blue light radiation into my eyes for a minute or two as I log it there.

Responding to notifications. Yes, I can get notifications on the Garmin, but I can’t respond to notifications. And that’s the important part – the responding. Also, when I clear a notification on the Garmin, I have to clear it again on the iPhone. Side note: some days, particularly with weak cell signal it seems, responses to various notifications go nowhere. Only after I look at my phone do I realize that replies I’d thought I’d sent vanished into the ether somewhere over Cupertino.

Another big one is responding to Authenticator apps. As I went to upload this post to my blog I was prompted for my MFA code. My Garmin helpfully told me I had a notification, and I needed to get up and walk across the room to confirm it was me on my phone.

Turn by turn navigation in the car. I really REALLY appreciate Apple’s haptic feedback on the watch when driving. Not an option with Garmin.

Remote control of playback. Now I have to yell across the room and hope Siri will hear me on my phone. (Note: Siri won’t hear me on the phone.) Again, a nice to have when the phone is not within easy reach, which is my preferred way of watching TV or a movie! Leave the phone away from the couch and let myself enjoy the movie is my preferred mode.

Home automation. Turn off the lights. Unlock the front door. See a picture of the person AT the front door. Can’t do that on the Garmin.

Better UI. So much easier to find things. I’m learning the Garmin interface, but it is far more complex. I’m learning it but it is nowhere near as intuitive as WatchOS.

Apple’s magnetic charging experience is so much nicer than the Garmin plug in method. It’s very old school and reminds me of a cell phone from the 90s. Fortunately I only have to do it every week or so.

Music. Amazon Music, Spotify, and Youtube Music have apps for the Garmin but you need to download them to the watch for playback. That kinda ruins the experience for me. It feels like it’s 2003 and I need to download files to my MP3 player before I leave the house. Given that I canceled the cellular plan on my Ultra because I always have my phone with me when working out, this is functionally the same. Generally I only have one playlist which I use as a metronome, so functionally this isn’t a big detractor.

Podcast apps. I use Overcast religiously in the Apple ecosystem. To play podcasts from the Garmin, I presume I would need to download them in advance via Spotify.

The display. Apple completely owns this. Even on their older, cheaper models, Apple’s tech makes the Forerunner feel like a Timex or Casio I wore in high school. It’s not even in the same hemisphere, let alone zip code. Maybe one of the more expensive Garmin lines like the Feenix has better, but the Forerunner 955 Solar’s display is not a contender.

Update 2025-08-09: Replaceable bands. I have like 10 bands for my Apple Watch. I often swap them out more than once a day. With the Garmin, this is a process that requires a tiny flathead screwdriver or special tool to pry down the pins that hold the band to the watch. So instead of a simple process that takes 5 seconds, it’s now a process that takes five minutes and requires tools. I ordered this band from Amazon, which is like the Trail Loop for the Apple Watch.

Things I like about the Garmin Forerunner 955 Solar and/or Garmin Connect app:

Battery life. Hands down. No comparison. Apple, 36 hours is just a joke, even though I thought it a game changer when compared to 18 hours. Get some real athletes to use your product and see what they say. If Scott Jurek really uses the Ultra, it’s not to run 100 miles. (Okay, MAYBE Scott Jurek can outpace this thing’s battery on a 100 miler, but I sure as heck can’t.) This was the reason I bought the Garmin in the first place, and it does not disappoint.

Buttons! Yeah, sometimes buttons are better than a touch screen! Like when I’m hot and sweaty or accidentally trigger something on the Watch display. The only thing is there are 5 buttons and I’m still trying to wrap my head around which is which. While they do have their names etched into the case, unless I’m in bright light, I can’t see them.

Thanks to a third party app that my running coach uses, I can download workouts directly from their website to my Garmin account, which sends them to my Forerunner. On a day when they have a running workout scheduled for me, when I start a running workout, it asks if I want to do the one scheduled. This is much easier than creating a custom workout on the Apple Watch. Why can you only do this via the Watch itself? At LEAST let us do this from the phone. Better yet, allow us to import Garmin, Fit, and other format workouts into it.

There’s more in depth analysis in the Garmin Connect app than what I get in Apple Workouts. I like what I see here better than Strava, and I don’t have to pay Strava’s annual fee to see it. The presentation is not as pretty Apple’s Workouts app, but there’s more to drill in to.

The built in analysis of sleep and training recommendations are more useful on the Garmin. It takes a more proactive stance, not just telling me “you slept this many hours” but “you slept poorly and you may want to listen to your body before working out today.”

More actionable insights from Garmin. “Hey, you slept poorly. This may affect your performance. Maybe take a rest day, etc.” While I already know these things, I don’t always listen to my body and DO these things. Having a second opinion telling me “yeah, you could try to push through this, but you’re probably gonna regret it,” is huge for me.

Garmin seamlessly sends notifications from the Forerunner to my AirPods through the phone connection. I was very surprised when this first happened because I’d not paired my AirPods with the Forerunner, and yet when I started a run and got a mile down the road, a voice came over the music I was playing via my phone, gave me the lap update, and did not adversely affect playback. This is something Apple seems to get right sometimes, and completely fail other times. Sometimes the Watch will stop playback altogether to give me an update. Sometimes the Watch will give me updates for a few miles and then just stop for no reason. So far, the Garmin has not done this.

The Forerunner 955 Solar is noticeably lighter than the Ultra 2. Probably similar to the smaller Apple Watch Editions, but I noticed the difference immediately, and it’s less obtrusive when sleeping.

I was able to easily pair my COOSPO bluetooth heart rate monitor with the Forerunner. Unlike the Apple Watch, the Forerunner has a handy heart icon showing that it is paired, which saves me a trip into Settings > Bluetooth to double check that it’s connected to the Apple Watch.

Things that are the same (or close enough to not matter to me)

Workout tracking. I start the workout and go. Pretty much the same except for days when I have a pre-set workout scheduled.

GPS navigation on the Garmin is comparable to my experience using the Footpath app on the Apple Watch. I’ve only used the Garmin once, on class four roads in Vermont, but it seemed much more accurate than Footpath has ever been on trails. Obviously this is not an apples to apples comparison, so maybe Footpath would do better on roads and Garmin would do worse on trails.

Apple’s safety features. Prior to his passing, I bought my father an Apple Watch SE because of its fall detection. Given that I run on slippery, rock-hewn trails and am a decent fall candidate myself, I gain a modicum of peace of mind having that too. However, I think the only times I’ve ever had my Apple Watch trigger a fall alert was when I was punching my boxing bag, or deliberately practicing breakfalls. The Ultra also has a siren that you can use to call for help if you think it’s near but they can’t locate you. Despite having this feature at my fingertips (or rather, on my wrist) for over two years, I’ve never even tried it. Gamin has an “incident Detection” feature which I have not yet tried.

Things that are just different

Garmin’s workout app has turn by turn navigation when I import GPSX files. On Apple I need to use a third party app like Footpath for this.

Syncing from the Forerunner to the Garmin Connect app is seamless and near immediate. Syncing to Strava and Apple Health, however, seems to happen twice an hour or so.

Connect workouts don’t push map data into the Apple Fitness app? What??

Garmin seems to think I am in better shape than Apple does. This could be because Apple has much more historic data and Garmin only knows me for the last week. But after just a week Garmin upped my fitness levels and max heart rate and calculated a lower resting heart rate than Apple. I like that. Also, I think I proved that with my latest time trial in which I moved significantly faster than the previous one a couple weeks ago. That said, there are many factors besides the gear, like temperature, terrain, air quality, sleep quality, nutrition, etc. not necessarily considered.

Things that are bad

The documentation for the Forerunner is sometimes wrong. The manual says to activate the Flashlight feature, hold the Light button and select the Flashlight icon from the list. There is no flashlight icon on the list.

I also tried to set a silent timer. When I teach yoga, I want my watch to vibrate when it’s time to switch poses, but I don’t want an audible beep to disturb my students. The manual gives steps to set up a timer and then says to hold the menu button to see options on said timer. Problem is, holding the button returns you back to the previous menu. to get options for the timer, you’re supposed to press but NOT hold said button.

So which do I like better? Given a choice, I would take an Apple Watch with a one week battery life over a Garmin. But given that the Apple Watch has been a thing for over a decade now, I am not holding my breath waiting for that to happen any time soon. I expect I’ll be a two-watch guy for as long as I’m an ultra marathon runner, using a Garmin for the long runs and sleep, and an Apple for pretty much everything else.

3 Must-Use Commands With Tupperbox in Discord

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.

tul!avatar "Hector Roundtree" https://example.com/uploads/images/hector-roundtree.png

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.

tul!register "Hector Roundtree" Hrtext

My Journey Into Analyzing Apple Health Data

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.

Well-structured XML

It’s XML data, and that doesn’t easily lend itself to a graph. Also, my data is over 1.3GB at present. That’s a lot of data for one guy. So I looked around for how to analyze my iOS Health data. The first site I found that looked promising was Analyze the Crap Out of Your Apple Health/HealthKit Data (sep.com) and GitHub – jonfuller/health-parse: Parses an Apple Health data export… for reasons. The developer offers an email address – email your health data to [email protected] and it will send back parsed stuff. Sure. I’ll email you my 1.3GB of Apple Health Data. Let me know when you get it. Okay, no, I did not try that because it’s never going to work. So I downloaded his code from Github, but I couldn’t get it to compile. Seems like I’m not the only one, as others reported the same issue.

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.

Then I tried the YouTube video (1) How to download, graph and assess physical activity and exercise data from Apple Watch – YouTube. OMG hilarious. Fail. 

Something in Python perhaps?  Analyze Your iOS Health Data With Python | by Guido Casiraghi | Better Programming | Medium Prerequisites: You know the basics of Pandas. I don’t even know what pandas is, other than a big bear-like thing that lives in China. 

I tried to import the XML files into Excel. Hahahaha. I’m running the 32-bit version. It cannot open a 1.3GB XML file. 

I poked around and found this article by Taras Kaduk: Analyze and visualize your iPhone’s Health app data in R. I was told R is easy to learn and use, so I figured I’d give it a try.

I installed R for Windows. The UI seems a bit dated and barebones. The Comprehensive R Archive Network (case.edu) How do I install libraries, anyway?  HodentekHelp: How do you install the XML library for R programming? Okay, manual process, must select stuff from a list by point and click. Yuck. 

How do I change directories in R?  how to set path in R on Windows – Google Search

Hm. This looks kinda neat and more polished.   Download the RStudio IDE – RStudioHave to install those libraries, but at least I can type their names in a comma-separated list. Much quicker. 

How do I change directories in R again?  getwd, setwd | R Function of the Day

What’s the path to my files in my OneDrive folder without spaces in it?  Use PowerShell to display Short File and Folder Names | Scripting Blog (microsoft.com)

How do you comment in R? Comments in R – GeeksforGeeks

How do you print more lines than it’s showing me?  how to increase the limit for max.print in R – Stack Overflow

What does that %>% do?  Simplify Your Code with %>% · UC Business Analytics R Programming Guide (uc-r.github.io)

Oof. Guess I should take a lesson. Learn R | Codecademy

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:

library(XML)
library(dplyr)
xml <- xmlParse('export.xml')
df_workout <-  XML:::xmlAttrsToDataFrame(xml["//Workout"])
write_csv(df_workout,'health_export.csv')

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!