Adjust Instant Pace to match Lap

IMG_2095The issue with the fenix 3 instant pace since version 6.5 was driving me nuts. I know it’s not the end of the day, but the graphs just looked really disturbing as below.


And it resulted in incorrect best of calculations. So I added an option to readjust the pace to match the average of the lap. The shape here felt quite accurate, this is a run just after the snow storm in New York City, and the area not cleared of snow resulted in clear slow down of pace. Also the spike correspond accurately to the place I stopped to take pictures…Screenshot_03_02_2016__22_29




So below you can see the graph after turning on the new adjustment. I left the adjustment turned off by default though.

The feature is included in the upcoming version 3.0.1

ConnectStats Version 3.0

shutterstock_91834361It took a bit of time, but a  fairly improved version of ConnectStats is now ready. It contains the features of the failed version 2.5, and a few other significant improvements. In a nutshell, you can now access your daily steps and activity as recorded by your apple watch or iPhone motion processor (this is not available on iPad). There are quite a few under the hood improvement for future extensibility, which always brings the risk of some new bugs… And finally improvement for the ski season with extra fields and plots for your ski activities, along with display of new run dynamics fields and graphs. It contains also a few minor improvements, like multi sport display and filter for the calendar and swipe right to move backwards on graphs in activities.

Extra Graphs

There were quite a bit of internal refactoring that made it easier to add new graphs in ConnectStats. If your device supports it, you will now have graphs for temperature, along with the new running dynamics of the fenix 3. It also now is easier to had new derived plots like for example the vertical speed, which I initially build for ski activities, but can be handy, I suppose, for cycling or running as well. I say “I suppose”, because I live in London, and vertical speed in a flat city is only marginally helpful… If there are graphs your device supports that you would like to see in ConnectStats contact me and send me a fit file so I can test it and add it.

Health Data

This is only applicable to iPhone users. The idea is to integrate the data recorded in the health app into ConnectStats to enable some of the analysis available to the run or cycle data.

To enable it, in the service page, turn on Health Data. It will try to figure out the source automatically: either the apple watch or your phone if it has a motion processor. If it does not select the right source you can select it manually.Simulator_Screen_Shot_20_Jan_2016__21_27_28

Once you enabled it, during refresh the latest data should get integrated into your activity list. Because ConnectStats primary focus is still to look at sport activities, there is a quick filter available to only show the sport activities and hide the day summary coming from the health data.

Simulator Screen Shot 20 Jan 2016, 21.27.06Simulator Screen Shot 20 Jan 2016, 21.27.14

The primary purpose for me is to be able to have quick view of the day and look at the stats and data from the apple watch or the phone in a bit more details. In the stats session, you have now a new type Days to look at these stats

The summary page will show monthly steps progression: how well I am doing in step this month versus last and Short Term vs Long Term activity.

Simulator Screen Shot 20 Jan 2016, 21.28.03

Here you see the weekly or monthly summary.

Simulator Screen Shot 20 Jan 2016, 21.28.27Simulator Screen Shot 20 Jan 2016, 21.40.48

I will see how much I expand on the functionality. As I mentioned before I don’t anticipate it will become a major focus for the app.



Statistics on a selection of activities

One feature people repeatedly ask about is the ability to see statistics for a selection of Garmin Activities. It is actually possible by using the search feature.

Let’s say for example I want to see the statistics of all the running activities in july 2015. I first enter that as a search

Simulator Screen Shot 20 Jan 2016, 21.53.35

Then in the statistics page, hit the type button until the term Search appears. It will remind you what the search term was, and then the statistics you see are only using the currently selected list:


This will be the case for the other stats page as well, here for example I show a scatter plot of Pace versus HR for the running activities of July 2015

Simulator Screen Shot 20 Jan 2016, 21.53.54

Another useful application is to run statistics on a specific activity type, for example all the skiing activities as here, I show how much elevation gain I achieved each month in backcountry skiing. You can see more about skiing here

Simulator Screen Shot 20 Jan 2016, 22.01.22

It is limited though by the current search syntax of ConnectStats, which if there is significant demand, I may extend. Just let me know.


Fenix 3: Inconsistent Laps and speed graphs?

Update I added a new option to ConnectStats to mitigate the issue

I started noticing something quite weird with the activities recorded on the Fenix 3 since I updated to firmware 6.5 for my running activities. The pace reported on garmin connect is quite off, while the pace of the splits seems correct. At the very least the two are very inconsistent, the pace on the pace graph is typically quite slower than the correct pace. You can see an example activity here, all the lap pace overlay are clearly toward the minimum of the lap pace, which is not possible.

Screen Shot 2016-01-18 at 21.24.55Screen Shot 2016-01-18 at 21.25.09

While if I look at a similar run but in december (pre 6.5) it’s much better

Screen Shot 2016-01-19 at 22.15.39

Looking at the activity on garmin connect, shows the same issue, so I don’t think it’s a bug in Connectstats (my initial thought). Old activities (pre 6.5) do not show the issue. On Garmin website, while it’s harder to see, if you move around the pace, you can see most values are quite slower than the average pace for the activity.


Screen Shot 2016-01-18 at 21.23.49

If I looked at the same activities on Activity on Strava,  the graph is consistent with the splits. Strava seem to recreate the pace from the GPS points (my guess).

Screen Shot 2016-01-18 at 21.24.20Screen Shot 2016-01-18 at 21.24.10

I then looked at the details in excel, here too, it’s quite clear that the speed recorded for each point is quite slower, while the speed of the split is correct. For example for the first split, I looked for the 1000m point, computed the time to start 308 seconds, which gives 3.24 meter/seconds or 5:08min/km. While a simple average of the speed recorded for each point gives 2.72mps or 6:07min/km. The simple average is inaccurate, it should be weighted by the time between points, but this is way off.



Ski with Garmin and Connectstats

image I have been in the Swiss mountains for almost two weeks around the year end holiday season and enjoyed quite a bit of skiing. There wasn’t much snow this year so resort skiing was limited, but I got to do a lot of the other activity I enjoy in the mountain: ski de randonnée or ski touring, even if given the snow condition you could only really go on the pistes with artificial snow.

This gave me opportunity to try the garmin fenix 3 ski features and think about what I would want to see in connectstats to look at these activities in more details.

Garmin fenix ski activities

The fenix allows to record ski activities by default. I went and selected resort skiing for downhill ski and xc ski for the uphill randonnée skiing.

For downhill skiing it worked great, and only recorded the time you went downhill as separate tracks. I had added the ability to connectstats to breakdown a track recorded with a forerunner into downhill/uphill laps, but the native ability of the fenix 3 works much better.

There were a few issues though. Mainly that when uploaded to garmin connect (and therefore connecstats) the downhill ski activities showed up as uncategorised for activity type. The ski de randonnée was uploaded as cross country ski, while I had so far recorded all my previous tours as backcountry skiing. It would be great if the fenix had ability to select what activity type to report when uploading to garmin connect but I didn’t find such ability. So I had to edit the activity type manually on the web each time. It’s unfortunate because it’s quite important to have the activity type correct so connectstats can then break down your stats over time properly.

Ski de randonnée

imageSki de randonnée uses much lighter boots and skis to which you clip skins on to let you go uphill. Typically you would go in the backcountry off the typical trails, but it’s also quite common to go up in the side of a regular piste. Going uphill is definitely a good workout and leads to the similar type of analysis, comparison over time and statistics you’d want on a run in connecstats.

The default information you get from the activity recorded by the fenix 3 will be very similar to those of a run. The one difference I found was that even though the cadence is reported as an overall value, the details values reported are somehow only 0 or 0.5 instead of the value you expect. It’s a shame because I would really like to be able to see at what cadence I was climbing at different point of the course. I will try to mess about the fit file to see if I can find that information somewhere at some point.

Simulator_Screen_Shot_5_Jan_2016__21_57_44The key information I wanted to see for these activities though, is the vertical speed or ascent speed when you go up. This wasn’t provided by the watch, but is not very difficult to compute from the elevation data. So from version 3.0, ConnectStats will show along with the elevation the vertical speed graph (up or down) and a summary ascent speed, max ascent speed (Vertical speed going up only).


Downhill Ski


Here again the data is very similar to a run activity, but the fenix smartly breakdown the activity into laps for each run. One change to ConnectStats is that now the laps are labelled run for ski activities and it shows the elevation loss for each run instead of the heart rate in the summary. Of course the heart rate is still available in the detailed view. And in addition to the vertical speed, starting with version 3.0 ConnectStats will show the descent speed.

Ski without the Fenix

If you don’t have a fenix, and recorded your downhill skiing with a garmin, you will end up with an activity including the downhill and the lift time. ConnectStats will let you break down the activity into lift time and downhill time. Tap on the lap and select Ski Laps to get the activity broken down in runs properly. But definitely using a fenix is much nicer for ski activities.Simulator_Screen_Shot_5_Jan_2016__22_07_55 Simulator Screen Shot 5 Jan 2016, 22.08.01

Other ideas?

If people have other suggestions of information to display for ski activities, let me know in the comments below.


Heart Rate Time in Zone Accuracy

Someone in a comment highlighted differences between the Time in Zone reported by ConnectStats and the one reported in Garmin Connect. So I did some investigation of the accuracy of the time in zone reported by Garmin and ConnectStats. I checked some of my recent activities and also found some discrepancies. Here is a bit of a dive and how to look at it, but my initial conclusion is that ConnectStats seems more accurate.

I look here at a run in the mountains of Switzerland. First you can see the time in zone reported by ConnectStats. You can see first the graphs, but if you tap on the laps cell and select the Heart Rate Zone choice, you can then see details of the numbers computed for each zone.

Screenshot_30_12_2015__21_54 iPhone_6_-_iPhone_6___iOS_9_2__13C75_

Note also that if you hit a given zone, here Zone 5, you can see on the map and on the graph where you were in that zone.


Here it shows 26 minutes in the zone 176 to 190. As a comparison, Garmin Connect shows 47 minutes in that zone and 1:36 in the Z5 zone (above 190), which is interesting because the max HR reported for that run is 189… The settings for the zone in garmin connect is also consistent with the one ConnectStats is using as you can see below.


Garmin_Connect Garmin Connect Time in Zone

As a comparison, Strava shows numbers more in line with ConnectStats, but I was unable to align the zone exactly. For me choosing a custom zone in strava to match the one above 176 to 190 didn’t work and wasn’t picked up by the graph.


Strava time in zone

As a last resort I exported the data for this run to a csv file. You can do that by using the sharing pane in the details activity of ConnectStats, select csv file and email it to yourself. In this case the number also was matched closer to connectstats at 1739 seconds or 28 minutes and change (though not exact, I’ll try to understand why)


So all in all, I’d be interested in other example of mismatch, but here I feel ConnectStats seems more accurate than Garmin Connect, especially for example the fact that Garmin Connect report over 1min30 in a zone that is above the Max HR reported…

If you find a case where Garmin Connect seems more accurate, please send me a bug report that includes the activity and the numbers Garmin Connect reports.



ConnectStats 2.5 rejected…

shutterstock_310884725So as per last week post, I had submitted to the apple review process a new version of connectstats with the 3D flyover feature…

Unfortunately, Apple rejected this version. The reason is that the code is using some of the HealthKit API. Actually it is appears to be using it because I am currently working on a version that will let you look at the steps and other information recorded via the Apple Health App or your Apple Watch. It is not yet enabled as I am still working on it and I am waiting until it’s ready for prime time. But the Apple review team rejected it on the basis that my code should not appear to potentially use health data if it’s not clear to the user why.

So I will wait until the next version is ready to release the 3D flyover, at this point would be too painful to patch an old version or  remove that code that I know I will need soon.

Flyover maps in ConnectStats 2.5

Screen Shot 2015-10-31 at 09.36.24I recently saw an article on iOS development, explaining the maps features available to developers. I had never realised it was possible to enable in an app the 3d views you see in the apple Map app. A little bit of fiddling later and you can now see your course in gorgeous 3d views if you have an iPhone that supports it and your city is covered by the feature.

I haven’t really yet figured out how it can help you with training or analysing your data better, but it looks great and is a pretty neat way to relive some of your runs or rides, so here it is available in connectstats 2.5 (under review by apple at the time of this writing)

How to

Screen Shot 2015-10-31 at 09.43.15To enable it, simply go to the detail page, switch to the satellite view and tap anywhere on the map, it will then show you the closest point on your course in 3d. You can then use the normal controls of the map to zoom or move around.

Small Gallery

You can see here a few samples from recent runs. Enjoy!


Screen Shot 2015-10-31 at 09.39.02Screen Shot 2015-10-31 at 09.45.29Screen Shot 2015-10-31 at 09.44.27

ConnectStats Cache Management

ConnectStats downloads activity data from the web service of your choice, and then maintains a local cache. This is for speed, to allows for offline drilling of the data and minimise bandwidth usage.

When you do a refresh, ConnectStats will try to download the only summary information it needs to display a summary and when you try to open an activity details, it will then only download and cache these details. This allows for faster initial download and also minimise bandwidth usage as it only downloads what it needs once.

There are quite a few options to help manage the cache in the Settings Tab, under Current Profile. You can find information about creating profile here.

Delete Activities or Profile

Usually when you do a refresh of the activities in the app, it will try to detect if some activity were removed from the remote service and remove them from the local cache. It will also try to check if anything was changed on the remote service. But it only does that for the last 20 or so activities. If you have a lot of activities it would be too slow to check too many each time.

If you feel the cache is very inconsistent you can delete some activities from the local cache, which will force the app to download a fresh version. The 3 options when you select Delete Activities or Profile are:

  • Delete Profile: this will delete the whole profile, including associated settings and all the cached activities
  • Delete Some Activities: this will delete all the activities in the local cache from the most recent until the activity you have currently selected
  • Delete All Activities: this will delete all the activities in the local cache but preserve your profile settings

Note that all these functions only delete activities in the local cache, but never on the remote service

Compute Best for more old Activities

ConnectStats beside maintaining a cache of the activity data from the remote service, also store some of it’s own data. Specifically for now it maintains your best overall speed and heart rate for given distance or time. This is somewhat slow to calculate, so it only calculates it when you look at an activity. Given the data is more interesting when you look at it over longer period of time, this option lets you force a calculation over a set of older activities. This can be useful to get the graph in the summary stats page to account for more activity. It can be a bit slow, but it’s also safe to interrupt and restart. It will always compute about 15 activities worth of analysis. Note it will not force a download of the details of an activity but only analyses activities for which the details cache has been downloaded.

This can be useful if you have a lot of activities already downloaded and want to make sure the summary stats are takes everything into account.

Force Download Details

This option allows you to force the app to download details for 30 activities. As mentioned earlier, initially it only downloads in the cache summary information and the details information on demand (when you look at an activity). This allows you to force the download of many activities without opening them all by one. If you start the app when your history on the remote service is quite long, it lets you download and run the extra analysis.

Force Reload Old Activities

When you refresh, ConnectStats only checks changes and the summary for the 20 most recent activities. This option allows you to force the app to checks every activity in your history. It should then pick up changes on older activities as well as older activities deleted on the service.

View and Manage Cache

This will show you the break down of the files in the local cache and the space it takes on the disk. You can press on a category to clear the files of that type. But I don’t recommend you do that.

What the Summary Stats say about September

Looking at the summary stats September turned out a pretty good month for my running.

Looking at the fitness vs fatigue graph section corresponding to september, the line stayed pretty constant, showing I kept my training level pretty constant. Later in the month I pushed a bit more as the peak in fatigue shows.

Simulator_Screen_Shot_17_Oct_2015__21_12_12In the bottom graph, the thicker black line shows the best speed achieved for given distances in september. I achieved my best speed of the year for all distance between 6km and 13km. You can see that as the thicker black line for september is the minimum for the year, and I did quite significantly better in speed than august.

Simulator_Screen_Shot_17_Oct_2015__21_12_27Meanwhile the best heart rate profile shows that this was achieved without pushing the heart rate more than the other months. Actually, the september line (black thick line) stays quite below the max of the year for any duration. This is pretty satisfying: better speed without pushing  much more…