wx report

GPS receivers

A couple decades of GPS receivers

Each data point is where-and-when: the location is stored as a triple of: latitude (degrees north), longitude (degrees east), and elevation above sea level (meters)—and the time is stored in UTC. For my purposes, any system for perceiving where-and-when will do. Here’s my rough semi-illustrated history.

Mid-2000s Garmin eTrex unit

A bunch of different GPS devices contributed to this dataset. My first one was a birthday or maybe Christmas present from my dad, a yellow Garmin eTrex that ran on two AA batteries. It broke and I replaced it, then broke again and I replaced it again, and when that one broke I switched to a smaller Garmin unit that could mount to my old school mountain bike’s handlebars, and this got replaced at least once. (They didn’t seem to like getting sweaty.) All of them had the problem that they would drop old data on the floor (where old meant a month or two), and getting data down from them was an enormous pain: I had to get a download cable and cradle assembly (purchased separately from Garmin) that exposed a serial interface to the device; and then got an adapter to the (still kind of new, then) USB standard; and then get the data through that stack of stuff onto the computer (a fantastic white plastic iBook) using a shareware program on the Mac. Then I had to back the data up to Time Machine and Dropbox, lest it vanish forever. It was super fiddly for quite a few years.

At some point in 2011 I’d finally broken my Samsung flip phone (my second cell phone ever; the first having been a Nokia candy bar phone from 2002) and replaced it with a shiny black iPhone 4. In June of 2012 I decided that goddamnit I’m a computer programmer and I will just make this newly GPS-enabled cell phone show me maps as I run and I will make it track my GPS locations so that I can retire those sweaty Garmin units. This I did: I wrote an iOS app and it was kind of terrible in a bunch of ways. The first version only recorded locations when it was in the foreground, so if a spouse or child used my phone to switch the music in the car I lost a giant chunk of data. It dropped all the location data on the floor if it got force quit by iOS or by an errant swipe. But I was the only user, and it had a big Push To Dropbox button that made the data just appear on my laptop, and it was mostly wonderful to be using my own hand-crafted iPhone app to archive my own locations. (Its descendant serves as my car’s speedometer.)

Default app icon which I still use

The trick with being the sole developer of an app, even one with one user, is that when the app breaks due to an iOS upgrade or some other bug you’re the only one who is going to fix it. This happened a whole bunch of times, at least a dozen, and the fixes were usually trivial: endow the app with a newly required permission, google some new system call that’s required for getting the screen to stay on and to keep the tracking alive, perform an Xcode dance recently concocted in Cupertino, and so on. But two or three times the app needed to be rewritten entirely from scratch. Once it was to switch garbage collection strategies because I had Objective C memory leaks (or something) that caused iOS to force quit my app, and that were going to be too much for me to track down in my spare time, so it was easier to just start over. Once I switched the whole thing from Objective C to Swift. (I don’t actually know Swift very well, so this was super annoying pre-LLMs.)

There was also a stretch of about eight years where I worked at Fitbit, and there are a bunch of GPS-enabled Fitbits that contributed to this corpus. More recently I have the lovely wife’s Garmin GPS watch, which I use now that she has an Apple watch instead: the Garmin mounts itself as a USB drive full of weird binary formatted GPS data, which has started contributing marginally to the corpus. The battery life is dramatically better than that of a Fitbit or an iPhone, and it’s way better for things like skiing and biking where I hopefully get to spend most of the day otherwise unplugged.