Saturday, June 28, 2014

Sprint Triathlon

The Boy and I did a sprint triathlon today (0.25 mile swim, 14 mile bike, 3.1 mile run). He smoked me on the swim, but I cleaned up on the rest. Here are our results (out of 154 finishers):

The Boy
  • Place Overall: 103 
  • Division Place: 3rd (15-19) 
  • Swim Rank/Time: 18 / 0:06:38.0 
  • T1: 0:02:15.6 
  • Bike Rank / Time / Speed: 101 / 0:49:07.2 / 17.1MPH 
  • T2: 0:01:06.8 
  • Run Rank / Time / Speed: 126 / 0:28:28.6 / 9:11/M 
  • Overall Time: 1:27:36.2

  • Place Overall: 38 
  • Division Place: 7th (40-44) 
  • Swim Rank/Time: 79 / 0:08:36.4 
  • T1: 0:01:21.7 
  • Bike Rank / Time / Speed: 31 / 0:39:15.1 / 21.4MPH 
  • T2: 0:01:07.3 
  • Run Rank / Time / Speed: 61 / 0:23:11.4 7:29/M 
  • Overall Time: 1:13:31.9

Downloading FIT files manually from a Garmin 910xt

When Garmin switched from their ANT agent to Garmin Express, the first version(s) of Garmin Express would not save the FIT files on your machine after it sync'd with Garmin Connect. The switch from the ANT agent to Garmin Express also broke connectivity with Strava and any other website that relied on the Garmin web browser plugin.

The workaround was (is) to upload FIT files directly to any site that got their plugin connectivity broken. Since the FIT files were deleted with earlier versions of Garmin Express, they could not be found to upload (catch-22). The fix is to extract the files manually with the 
Garmin-Forerunner-610-Extractor tool - yes, it works on the Garmin 910xt despite the name.

Here are detailed instructions for installing and running the manual extraction tool on an Apple machine running OSX Mavericks or later (and probably Linux). I have no idea how to do this on a win-tel machine. Also note that this how I personally got things working. Your mileage may vary, and I am not responsible for any problems that arise out of the use of these instructions. If you have problems, feel free to post a detailed explanation of what went wrong, and I will try to help.

In your web browser go to and click on the link to "Download the latest release tarball" of libusb (Currently libusb-1.0.18).

[Note: A few people have missed the capital "D" in "Development" and "Documents". The OS X HFS+ filesystem is case sensitive, so you must be sure to get the case correct.]
  1. Open the terminal (You can find this by opening the finder and selecting "Applications" and then "Utilities". Double click on "Terminal"). 
  2. Type the following command in the Terminal: mkdir -p ~/Documents/Development && cd ~/Documents/Development 
  3. Type the following command in the Terminal: git clone 
  4. Type the following command in the Terminal: cd ~/Documents/Development/Garmin-Forerunner-610-Extractor/ 
  5. Type the following command in the Terminal: sudo easy_install pyusb 
  6. Type the following command in the Terminal: cp ~/Downloads/libusb* ~/Documents/Development/Garmin-Forerunner-610-Extractor/ 
  7. Type the following command in the Terminal: tar -zxvf libusb-* 
  8. Type the following command in the Terminal: cd libusb* 
  9. Type the following command in the Terminal: ./configure && make && sudo make install 
  10. Type the following command in the Terminal: cd .. 
  11. Turn on your Garmin device. Once it is fully started, plug in your ANT USB stick. 
  12. Type the following command in the Terminal: sudo python ~/Documents/Development/Garmin-Forerunner-610-Extractor/ 
  13. If this is the first time you have done this, your Garmin 910xt should ask if you want to pair with the Garmin Extractor device. Select "Yes" with the arrow button and press the "Enter" button. 
  14. The FIT files will now start downloading (including those that Garmin Express and the ANT Agent will not download). 
  15. When the download is complete, you can find them in ~/.config/garmin-extractor/$NUMBER/activities ($NUMBER is unique to your device, it should be the only numbered directory in ~/.config/garmin-extractor). This is the directory you will select files from when you need to upload them to sites like Strava. 
Repeat steps 1, and 12 - 16 for subsequent extractions.


When running step 12, if you get an error similar to the following, it is probably because you have some other program accessing the ANT USB stick, like Garmin Express, or the old ANT Agent. Simply shut down the program in question, reinsert the ANT USB stick, and attempt step 12 again.

Driver available: [, ] - Using: ant.base.driver.USB2DriverTraceback (most recent call last):  File "", line 336, in main    g = Garmin(options.upload)  File "", line 137, in __init__    Application.__init__(self)  File "/Users/chuckwolber/Documents/Development/Garmin-Forerunner-610-Extractor/ant/fs/", line 82, in __init__    self._node = Node()  File "/Users/chuckwolber/Documents/Development/Garmin-Forerunner-610-Extractor/ant/easy/", line 48, in __init__    self.ant = Ant()  File "/Users/chuckwolber/Documents/Development/Garmin-Forerunner-610-Extractor/ant/base/", line 59, in __init__  File "/Users/chuckwolber/Documents/Development/Garmin-Forerunner-610-Extractor/ant/base/", line 180, in open    dev.set_configuration()  File "build/bdist.macosx-10.9-intel/egg/usb/", line 559, in set_configuration    self._ctx.managed_set_configuration(self, configuration)  File "build/bdist.macosx-10.9-intel/egg/usb/", line 92, in managed_set_configuration    self.backend.set_configuration(self.handle, cfg.bConfigurationValue)  File "build/bdist.macosx-10.9-intel/egg/usb/backend/", line 741, in set_configuration    _check(self.lib.libusb_set_configuration(dev_handle.handle, config_value))  File "build/bdist.macosx-10.9-intel/egg/usb/backend/", line 571, in _check    raise USBError(_str_error[ret], ret, _libusb_errno[ret])USBError: [Errno 19] No such device (it may have been disconnected)Interrupted: [Errno 19] No such device (it may have been disconnected)

Update 20Nov2014:

I tested this with a Garmin FR60 and it worked great.

Update 02Jul2015:

If you get the following, error or something like it:

can't open file '/Users/Aaron/documents/development/garmin-forerunner-610-extractor/': [Errno 2] No such file or directory

You probably neglected to capitalize the "D" in Documents and/or the "D" in Development. Look through the execution path carefully for "Documents" and "Development" and make sure you capitalize the "D".