Dueling Y-Axes

An interesting reading about fanciness and pointlessness of displaying data.

The team at OmniGraphSketcher wrote about the display of multiple y-scales overlaid on the same graph, to make it possible to plot several different types of related data on the same chart. I do this too in TrailRunner but my solution targets the middle of what they call a bad idea and what they suggest as a realistic solution.

The main conclusion of the OmniGraphSketcher team is that overlaying data with disparate scales saves space, but it makes the data significantly harder to interpret. The dual axes “duel” for your attention. So instead of overlaying scales, [they] recommend using a set of multiple graphs, aligned along their common axis.

> Omnimouth blogpost
> Read their Article

TrailRunner 2.1 -- Diary, Trim and iPhone

From my pont of view, TrailRunner 2.1 is done. The new release migrates your diary into a modern database format, fixes several bugs and adds compatibility to Mac OS X 10.6 Snow Leopard. Below the most important changes and extensions:

For better performance and for future extensions I rewrote the diary storage. Diaries are now based on a sport kind like running or biking.
So in future versions diaries can have different parameters for calculations.
TrailRunner 2.1 will already honor speed units like distance per hour or minutes per distance for sport kinds and also will calculate calories with a different formula.
This migration should solve many startup performance problems and will keep your mac responsive even with very large diaries.

Trimming workouts and Tracks
I do not know why I did not add this earlier but you can now trim workouts to be imported and routes within the map. Trimming means that everything from the edge up to and including the selection will be removed.

The screenshot shows a workout to be imported. You can either select something in the graph and then hit the backspace key or you open the track editor and use the Trim Selection command.
Update: You can now even remove data points in the middle of a track. There’s a new tutorial available explaining all operations available (Tutorials > Import and edit Tracks)

Improved Importers
TrailRunner 2.1 can now import Lap information from LoadMyTracks gpx files. Also GPX files are being loaded much faster due to an asynchronous decoding. Same goes for large tcx files you drag onto the TrailRunner application icon or main window.
The workout importer for non GPS workouts (the one that shows a list of routes below) now also displays a target diary selection menu.

Improved Map Speed
Though I highly recommend to remove any duplicate tracks within your map by following the instructions in the Mastering Track Merge tutorial, performance can be pretty bad with many long tracks on your map. In TrailRunner 2.1 I am testing a new display caching approach and have found results to be very good. Scrolling on my machine went up from 24fps to up to 60fps. But in most cases you should get 2x.

Other Improvements
Workout Graph: Added a Preferences option to change the interval resolution for the graph view. (TrailRunner > Preferences > Advanced)
General UI: Added a two finger zoom gesture for modern MacBook trackpads.
Local Route Editor: Added a drag over track to be included rerouting where there was only a drag to way-point rerouting before.
Streets Route Editor: Improved the OSM routing for very long route calculations.
Route Import: Added EveryTrail.com as an import source
Weblog publish: I removed the private and public comment approach as it caused some trouble in the past. When you publish your weblog, all notes will be published.
Export preserves timing: When you export tracks in TrailRunner, the original timing information will be preserved. This makes it posible to read data from your device and then later use an export for geo-tagging.
Route Filtering: The main window search field now filters for routes that contain the given search string in either their name or in the name of any way-point they come across. For example: say a route has a name of biking and goes over a waypoint called ruin, then a search term of ru will find this route. To filter on way-point names only, whith this example just enter wp:ru into the search field. To filter on route-names only, enter rte:ru into the search field.

Before you install TrailRunner 2.1
As TrailRunner uses a new diary store, you should better make a backup of your old.
All data in TrailRunner is being stored within the following folder on your Mac:

< yourhome >/Library/Application Support/TrailRunner/

You old diary was stored in RunLog.xml
When the new version starts up, it will migrate your old diary entries into the new diary. The new file is named ActivityStore.sqlite
A backup of your old diary will be copied to Archive/RunLog;4.xml for if there’s a problem with the migration. You can always move this file back and rename it to RunLog.xml
Please note that even after the migration was done, a much smaller RunLog.xml will stay in place, as it still contains some legacy data. So should you require to migrate back, just delete this file.
Important note: You can not use TrailRunner 2.0 at the same time as TrailRunner 2.1 as after the migration the diary will appear to be be empty on 2.0

Jump on the TrailRunner 2.1 track
TrailRunner 2.1 has its own app-cast so if you download the version below, you will be notified on updates.

> Download TrailRunner 2.1
> Import and Edit Tracks Tutorial
> Mastering Track Merge Tutorial

Please give feedback in case you have any trouble with the migration or other stuff.

Have fun,
- berbie.

TrailRunner 2.0 -- Have a mobile training Coach

TrailRunner 2.0 is now able to receive GPS recordings from yet another famous iPhone app called 321run written by Cyril Godefroy,

321Run is an iPhone coach for running. Learn to run more efficient, lose weight, increase your speed and get prepared for competitions. The app follows your runs with the GPS of your iPhone and records your run stats and tracks. You can then send these recordings over to TrailRunner.

The cool features of 321run are
- Record your workout
- Listen to how far you've gone and the duration of your training.
- Set yourself goals and reach them during your workout.
- Setup and follow Training plans

Find out more about 321run:
- Features
- Screenshots
- 321run in the AppStore

Tracks, Trails, Routes, Workouts, Laps, Courses, WTF

„TrailRunner is powerful but at the same time can be confusing for first time users.”
This is what I hear from many users. The typical learning curve goes from prejudices on how things should work to misunderstandings on what is actually going on to understanding and loving TrailRunner or bailing out for something else.

This all rotates around the difference between a track, workout, diary entry, route and the network of tracks.
And to be honest, I know this problem and I am constantly trying to make things easier to understand.
In fact TrailRunner is three applications in one. TrailRunner is
- an activity journal
- a mapping application to maintain a network of tracks
- a route planning application

So whenever you import something into TrailRunner, your intentions might go into either direction. And interestingly this even shifts over time — as new users with new devices stumble upon TrailRunner.

Probably the following "glossary" might help understanding what TrailRunner is about and what the application can do for you — whenever you drop data into it:

A track is a list of geographic points with GPS coordinates. Within the real world a track describes the path from e.g. one sign-post of a hiking trail to the next. Each sign-post representing a crossing that connects to other tracks. Within the context of such a way or street, a track contains no timing or heartrate information. It's only where, not when and how.

Network of Tracks
One big feature in TrailRunner is to build and maintain a network of tracks. That is much like the lines of streets, roads, ways, trails and pathes printed on maps. The difference is that your network of tracks is your personal collection. A collection that represents the paths you actually run or cycle on, masking everything else out that you dislike or haven't strolled along yet.

Within this network of tracks you have routes. A route is more or less a sequence of tracks. One important thing is that within a route, if you go back and forth a track, this track is part of the route twice. This is the most problematic part as simple GPS recordings never have this kind of conceptual differentiation. So I reject the idea that a route and a track should be the same thing. They could appear as — in the degenerate case where a route is being made of one track being used only once within the route. But that is just a special case — although typical in activity tracking applications that just import GPS data points and visualize them.

The biggest similarity between what others call a track is what I call in TrailRunner a workout. Garmin calls this an activity but I dislike this term as it fits better to being a diary entry. But back to the difference between tracks and workouts: If a recording contains data points with values like heart-rate, cadence and calories, it's not a track. It's a sequence of training session data-points and therefore it is a workout. For this reason TrailRunner generally distinguishes between routes and workouts. Routes belong to geographic data, workouts belong to performance over time or distance. A workout and a route can be connected to each other if they follow the same geographic course, but must not.
TrailRunner even offers features to merge a workout with the course of a route. That's important for training devices that can track distances but not GPS locations (e.g. the Apple Nike+ iPod Sensor)

Summary: The different faces of a track
To sum this all up, a track can have the following faces:
If the track contains a series of geographic points without timing information, then it's a track within your network of tracks.
If the track contains additional timing information, then it's the course of a route containing the single track or a sequence of tracks.
If the track contains timing information and values like heartrate, cadence etc., then it's a workout.

Import of a track
Whenever you import a track into TrailRunner, the importer shows you the course of the track in the map part of the main window. Then in the lower part of the importer you can decide if the workout face of the track should be attached to a new diary entry.
Then below that you have options to add a route to your list of routes that is based on the course face of the track. If you choose the option to import as one piece then one long track is added to your network of tracks along with a new route that contains this single track as it's course. If you choose any of the other options, TrailRunner will merge the track into the network of tracks, splitting the track into smaller tracks and joining all similar sub-tracks with existing tracks. One important fact now is that the resulting route will be made of a sequence of tracks that describe the almost identical course as the original recording but complementing your network of tracks.

But most importand of all is: your imported track can go a split way. If you choose the diary and the merge way, you actually have two items deriving from one source but being independent after the import:
- The workout became an immutable one-time recording being stored in the diary.
- The route and your extensions to your network of tracks are mutable.
On tracks you can apply operations like move, split and join affecting the routes that use these within their sequence.
On routes you can change the sequence of tracks they should follow during their course.
But in the end you can create and modify routes to match your plans and use an exported course as a basis for your orientation — while taking your gear out and burning some calories. What you then record can be imported as a new workout into TrailRunner.

To complement this all, a map within TrailRunner is just pixels. A background image you see beneath your network of tracks and a hint for your orientation and manual creation of new tracks. The lines drawn on a map are not part of your network of tracks unless you add them by re-drawing them using the track-tool or by adding GPS recordings that followed the same geographic course of the "line".
The only difference comes with openStreetMap. The openStreetMap map source is a pixel representation of the openStreetMap track network. For this reason it is recommended that when you are using openStreetMap for routing (streets tab) you should also use the openStreetMap map source as your backound maps. As both then perfectly match.

Further Reading
After reading the above, please revisit the following tutorials.
> About TrailRunner feature slide-show
> Import and Edit Tracks Tutorial
> Mastering Track Merge Tutorial

If you still have questions, remarks or suggestions — I do listen! Just write me. Either here, in the forum, on twitter or classic email.

TrailRunner 1.9.1 - Laps and Diaries

TrailRunner 1.9.1 is out.
Please read below, what the new features the new release has to offer. Thanks for everyone sending me bug reports and feedback.

Diary Assignment
In previous versions of TrailRunner it was not possible to assign imported workouts to diaries (if you have added more than one diary in TrailRunner > Preferences > Personal)
Now when you import a workout, you can choose what diary the diary entry for the workout should go into.
(Please also note that in the main diary window you can add an optional column “Diary” to move entries between diaries )

Laps Import and display
TrailRunner now imports lap information from your Garmin fitness device. As a side effect, TrailRunner displays average and maximum values stored in the device and does not calculate these if values are available.

Route Sharing
Another improvement now the handling for sharing routes. Press the routes button in the main windows control bar to display the route sharing download and upload panes. You now can easily switch between both modes. As this is a feature for sharing, please do not forget to upload your own favorites to GPSies.com

TrailRunner 1.9 - Garmin ANT Importer

TrailRunner can now directly import Garmin ForeRunner 50 and Garmin ForeRunner 405 workouts via the Garmin ANT importer. This works as follows:

Open the
application preferences and select the Garmin ANT Agent as your helper application.

Press the Import Button in the main windows toolbar and follow the steps described there.

Check the workouts you want to import either as a diary entry or (if available) as a route.

Heartrate zones

Due to another bugfix I was working on the workout graph and so added heart-rate zones

It might get rather philosophical on what heart rate ranges the different zones are defined. I decided on the following:

In green the Energy Efficient or Recovery Zone, up to 60% of you maximum heart-rate to develop a basic endurance and aerobic capacity.
In orange the Aerobic Zone, 60% up to 75% of your maximum heart-rate. Will develop your cardiovascular system.
In red the Anaerobic Zone, 85% up to 90% of your maximum heart-rate. Training in this zone will develop your lactic acid system.

Look Ma' to GTC

Reminder on how to use GPSBabel to download ForeRunner workouts and send them to TrailRunner.

GPSBabel is a free software for GPS data conversion and transfer. As Garmin Training Center for Mac is not supported any more, you can use GPSBabel as an alternative way to send your fitness data to TrailRunner. To send your ForeRunner workout data to TrailRunner, follow these steps:

Download GPSBabel
> Go to http://www.gpsbabel.org
> Go to Download
> Scroll down and download the current GPSBabel+ dmg Package for Mac OS X

The package contains two applications, gpsbabel and GPSBabel+.app

In your applications Folder, create a new folder named GPSBabel
Move the two apps into that folder.

Download and install the TrailRunner support script
> open http://www.trailrunnerx.com/SendToTrailRunner.app.zip
> Move the application SendToTrailRunner.app to the same GPSBabel folder as above

Send workout data from your ForeRunner to TrailRunner
> Connect your ForeRunner with your USB port.
> Double click the SendToTrailRunner.app

GPSBabel should now download your stored fitness data and open the TrailRunner Workout import.
If you get an error message, unplug and pug your ForeRunner with your USB port.

Please note that GPSBabel will download raw fitness data from your ForeRunner and TrailRunner has to calculate all average, maximum and calorie values. This will almost always differ from the devices values as Garmin does some fancy mathematics almost impossible to reproduce by just using the raw workout data. (see FAQ on this)

Import and Export for Garmin Edge 705

One of the nice things with the Garmin Edge is that you can mount the device as a Harddrive on your mac. Then within the folder you see all workouts accomplised.

It’s pretty easy to open these in TrailRunner. Just select a bunch and drag them onto TrailRunner and you’ll see them there.

This week I implemented the other direction. TrailRunner can now write the native file format for the newer Garmin devices, with the .tcx file extension.
There are a few steps to follow and it’s very convenient after that:
> Right-click on the control bar
> Choose Cutomize Toolbar…
> Drag the Export as TCX icon into your toolbar.

Next, when you like to export a route course onto your Edge, just select the route, press the Export button and save the route into the courses folder of the edge.
That’s it.

TrailRunner 1.7 - Released

TrailRunner 1.7 is now out. Please note that TrailRunner 1.7 requires MacOS X 10.5 Leopard to run. If you are still working under 10.4 Tiger, you can use the last 1.6 release. Development for the 1.6 release will be stopped from now on.

What's new in 1.7:

Rewrote the merge elements algorithm to be more stable, faster and to support more operations to be undoable. It's not complete yet but given the fact that this is extremely complex, I am very happy with what I have learned and was able to dig out as the current core. Also reduced the geographic snap-in grid from 20 meters to 10 meters.

Workout History
I am at rewriting the old overall history diagram. Instead of the once fancy idea of having adaptive time intervals like "Summer 06" I now go the conservative way of weeks. The screenshot below should illustrate what I mean. As you can see the diagram type is identical to the workout analysis graph meaning you have the same analysis features.
New is the deviation background behind the line. As before, TrailRunner displays the statistical median for an interval but now gives you an idea in what value range this median lies within (see the grey background with the dotted outline)

click to zoom

The weblog now also publishes a zoomed image along with the thumbnail left to the weblog entry. Click on the thumbnail to see the enlarged version. Find an example in my own weblog.

Nike+ SportBand and nikeplus.com
Originally I had planned to access the new Nike+ SportBand workout data much like I access an iPod. But it turned out to be impossible. But then I learned how easy it was (for me) to access a users complete workout store at nikeplus.com. The consequence? Register at nikeplus. Set goals, run competitions, put yourself into the spotlight and then download your personal data back into TrailRunner—on your Mac. It's your property. Find all this behind the Nike + Apple SportKit toolbar button.

Get the latest changes from the Release Cast
Download the latest TrailRunner 1.7 Release Download
Download the last TrailRunner 1.6 Release Download

TrailRunner 1.6 - Improved Polar Workout Import

Good news for Polar RS200 and TrackRecord users. I Improved the import process. Now the workflow is much simpler:

- Press the import button
- Use TrackRecord to read in your workout data
- Quit TrackRecord
- Press the continue button in TrailRunner
- Select workouts to be imported and assign routes.

Assigning a route will then merge the workout recordings with the TrailRunner route, giving you a good overlay of both.
And this also answers one of the most frequently asked questions: TrailRunner requires your Polar recordings to contain distance information. If that is not the case, the workout can't be imported. The reason is that TrailRunner is distance based and not time based. To overlay a distance based route with e.g. heart-rate information, the workout recording must be in the same unit meaning to be distance based too. This is a core concept and a time based approach will never be implemented into TrailRunner.

Have fun with another preview release:

> Download