The Singular Multipurpose Activity Recording Tool.
The flashy name I settled with after making my first crash-free run using this app 8))
Preface:
First of all I'll try to explain why did I decide to create a complete app replacement.
I'm not that young to run sprints and mostly do it for stamina aiming to complete my workouts in specific HR zones. After I got used to my Forerunner 230, it became rather obvious, that present HR notifications are not the thing I was hoping for: using standard data field layout I didn't receive notifications at all (happened constantly during early 2016 firmwares, maybe something changed now) and for the custom data fields I received them only when value changed outside of defined range, but e.g. if I run with constant pace and HR is high but doesn't change (happens to me quite often), then I don't receive notification, which is not good for long anaerobic runs when it's hard to monitor values regularly. Another thing about notifications is that they completely replace all other data fields on the screen for a couple of seconds - exact time when I receive vibe and look at the watch to check what was the reason behind it. So, basically, I wanted more advanced notification system with the ability to see other values and notification remaining on the same screen. At that time I also got back to the next book in R.Jordan's "Wheel of time" series, so, in a couple of runs intertwined with reading, I was pretty sure how this app needs to look like ;) With this app I aimed to replace native running and biking apps for Forerunners 23x and any other applicable types.
Application:
The main idea is to display important values located on a "wheel", which can be "rotated" in any mode (before, during or paused recording) to display different metrics. Much like standard screen switches, but still a little bit more fancy.
Currently application houses 16 data fields ranging from basic values, that are read via Activity.info, to complex ones. Activity list includes walking, running, cycling, skiing and training, where last one is reserved for indoors activities and doesn't enable GPS to improve battery usage. Application with 10 fields enabled, 69 second pace smoothing intervals, default intervals/waypoint sets and alerts/settings used takes around 60 out of 64 kilobytes of memory during recording cycle, so, unfortunately, there's no room for new features. The most embarassing thing is that out of 64kb available application byte-code itself eats around 48kb and to reduce that I need to remove code, i.e. to cut some functions out, which I don't want to. Furthermore, some data is user configurable and I cannot predict it's size in the memory, thus, "out of memory" error may occur on heavy setups. I advise to test your setup in activity recording mode before important events to find out whether it's stable enough for your purposes.
Simple fields:
- elapsed time,
- current speed (has setting, which defines auto-pause threshold, i.e at which speed value recording will be paused/resumed, thus, to add auto-pause to activity it's enough to enable field and set threshold, this way auto-pause is not global but activity-based),
- average speed,
- current pace and average paces,
- elapsed distance,
- current cadence,
- current heart rate,
- altitude,
- calories.
Complex fields:
- Smoothed pace (current pace values rolling average over the defined time period, up to 69 seconds), also displays cadence value with zone color, has settings, which allow to select value type (speed or pace) and define smoothing interval in seconds, has range alert;
- Improved heart rate field with zone color indicator, percentage, activity max HR and training effect, for watches with firmware, that doesn't support HR zones in user profile, has setting, which allows to set HR zone values, has range alert;
- Interval timer, works much like standard workouts, displays element name instead of field label and presignals the end of the element, segments consist of time and distance elements, segment has repeat count including infinite loop, has settings, which allow to select one of the interval definitions from list and/or let this field trigger activity laps when interval element finishes;
- ETA aka Estimated Time Arrival, is a subclass of intervals data fields, but displays estimated completion time for distance elements based on first active speed or pace type fields, has setting, which allow to select one of the interval definitions from list;
- Directions field, has settings, which allows to select way point set and WP sequence, based on this setting displays either current coordinates or arrow pointing to the next way point and arrow pointing north; since Forerunners are lacking magnetic compass, this can be achieved only during movement, when heading vector can be calculated; due to raw GPS values changes, arrows may flicker unless stable satellite coverage is achieved, processes Back key input during recording, which switches to the next way point if field is centered or adds current location to WP list;
- Lap time field, displays time of a current lap, time of a previous lap and difference between those, has setting, which allows to select WP list to automatically trigger next lap when one of the waypoins is in the vicinity, processes Back key input during recording, which triggers next lap (lap field can be anywhere on the "wheel", even offscreen) and adds current location to WP list, lap number 0 is not a bug, it's expected behavior, since most of my personal trainings start with warm-up section and I like to see when my actual 1st lap starts after that, although lap numbering changes after uploading to Garmin Connect;
- Pacemaker, I don't know exact math around Garmin's virtual partner, but mine is quite simple: it's a difference between activity elapsed time and time, which will be taken by a pacer with a constant speed to cover the activity elapsed distance, has settings, which allow to select value type (speed or pace) and set it's value.
Any combination of up to 10 simple and complex data fields can be set as active simultaneously, field setup is stored for current activity type, different setups including alert values and field settings can be defined for each of the activity types. Fields have settings and alert ranges, which can be configured on watch before and during recording by holding Up key (pressing Menu on FR630). Menu structure is rather simple, so feel free to explore. Order of fields means the sequence in which they appear on "wheel" with the last field in list being displayed before the first one. Active, Alerts and Settings data field submenus are self explanatory. If nothing happens at the Select press on the Settings or Alerts menu, then this means, that current setup doesn't contain applicable fields. I refer to "keys" but input processing is implemented via behavior delegates, thus it should work with corresponding gestures on FR630.
Notifications, the thing I started this project for, work in the following way: if field value alert appears, then alerting field is automatically brought to center row, displaying value in red if it exceeds the highest alert range value, or in blue if it is below the lowest (zero from each range side being considered as and open range), this field will stay in focus until value goes into range with continuous vibe/tone alerts every 5 seconds. When value goes back into range "wheel" will scroll back to the position, at which alert switched central row. If another field is about to give notification while there's still alert in focus, another vibe will be given to notify user of the upcoming alert, but it won't be centered to replace current alert. Currently, only 2 fields allow to enter alert ranges: Smoothed pace and HR Plus, but application is arranged in a framework way, so that it's easy to add ability to enter alert ranges to the whole groups of fields (e.g. time values like time and pace). For this I expect to get user feedback, since all of the value alerts, that I wanted for myself, are already there.
This explanation may be obscure, but it's much easier to see this in action. I ran with this app for about a 100km already and find it rather convenient with a default field order for running activity reflecting one of the most usable setups (imho).
Also, there is a mobile companion for Andrioid 4.4+. Since Garmin Mobile doesn't expose extensive configuration abilities, there's no other way than help oneself...
Companion allows to configure interval definitions and define waypoints by either just long pressing at Google map layer, entering specific coordinates (good to define specific way points for autolap functionality) or even importing user waypoints from watch. There are no plans to release similar companion for Apple devices, since I'm unable to maintain hardware and/or virtual development environment. Although there is an idea to create web configurator like dwMap app does, but unfortunately this won't happen in near future, since time is scarce and we all must do something for a living except having nice hobbies.