I mentioned many time the best rolling plots are my favorite feature of ConnectStats. After adding a new ability to visually see when you reached specific best, I have now a first version of a feature I have been planning to do for a while now: time analysis of specific slice of your best achievement.
So today, I submitted to Apple for release a first version of this feature in ConnectStats 6.1. The best rolling curve shows you what best power, heart rate or pace you reached for a given time or distance. You could previously see what that curve looked like for a month or year. Now you can see how specific point evolved over time.
I mostly work and play within the Apple ecosystem and AirDrop, Continuity and other integration between devices is extremely useful and convenient. My son recently converted himself to Linux and started to miss the ability to easily move photos, text, or url between his phone and his Linux computer. Being a hacker himself, he thought it would be a great idea to devise an app that let’s you move information from your phone to your computer, and more generally a “cross platform AirDrop substitute for geeks”…
Of course, one solution would be to google and figure out if such an app exists, but where is the fun in that? We decided to take on a Father-Son new project and build our own solution.
First a quick note as I write this, since the new ConnectStats service was introduced, the new service has now passed the 1 million activities threshold out of 14,000 users who used the new service rolled out in January! It is small compared to the big players, but nice nonetheless.
After working on improving the calculation of the best rolling curves, I have now implemented a first version of an improved summary analysis.
In the new version 6.0 of ConnectStats you can now explore your power curves or best rolling plot and study when you reached you best and compare in detail how you are improving over time.
We are living through strange times. I live in London and we are currently in lockdown/stay at home order for a few weeks now. I am quite lucky that my family and myself didn’t get infected by the virus and are still healthy. We are following the rules and staying home except for the daily exercise. Luckily in London, unlike in France where some of my family lives, we are allowed to bike and run without a constraints to stay too close to home (one kilometre in france), as long as we leave and come back from our home it’s ok.
As the weather has been gorgeous since the beginning of the lockdown, this enabled me to log quite a few nice runs and ride.
ConnectStats tries to maintain for each field in an activities from Garmin or Strava a list of translations and units for the metric or imperial system. I am mostly my-self using the app in English and metric but I had updated the list in different languages from some sources I had found online and the Garmin website a few years ago.
But it is now a bit dated and there are quite a few attributes for which I do not have the translations. Some users volunteered to update the translations in their native language. In addition recently I received quite a few bugs report about units being incorrect for example for elevation or weights.
Trying to understand what was wrong in my Best Rolling Curve Calculation pushed my ability to use Xcode debugger to its limit. The quirks I was trying to understand were happening on large time series after multiple level of sampling, rolling averages, etc on noisy data.
I ended up in a mixed environment so I could easily exchange time series data between Xcode and pandas in a Jupyter notebook, which enabled me to explore and get to the bottom it!
The harder category of bugs are when it is related to bad numbers generated from the more complex algorithms in ConnectStats. This is what is now happening with the best rolling plots.
The rolling best curve are one of my favorite feature in ConnectStats, they provide insight I don’t see in many other services. It’s quite common to see a power curve, but I feel the concept extended to heart rate or speed help give people a good sense of the characteristic of a workout. While the concept is simple, it actually can be a bit tricky to implement (at least for me it was). The current version of the app shows quite a few quirks that are obviously wrong, like the below.
I am now stuck at home as many of us. Weather out is beautiful. So I’ll take the opportunity of the extra time to try to write more about the app development. One source of inspiration that never seem to end is chasing bugs in the app! So while I have the time at home, I’ll try to detail them as I chase them! Starting with some database woes…
ConnectStats has been around for a while now. It started in 2011, while the Garmin API was in a very different place as today. I have maintained it over the years, but there is still quite a bit of complexity in the code due to the history of the API evolution.
I am pushing a new version that simplifies some of the legacy internals of the code.
As any internal upgrade, it will help in the future and fixes some side effect or bugs coming from the legacy complexity. But it also comes with high risk as it is hard to test all the side effect. I’ll try to fix what comes out.
While I am still preparing a new release of ConnectStats fixing a few issues, right now, the corona virus is a major distraction for most of us. While the virus spreads there is a lot of information floating around and it can be sometimes be a bit confusing. So I decided to see what could I verify on my own at home with basics analysis and tools. I’ll be using python/jupyter/pandas, which is very standard and easy to install or can be run directly on google collab
This may become a bit technical for some, but hopefully will be interesting and may help some people learn more about python and pandas as more of us have to stay home…