diff --git a/docs/README_coach.md b/docs/README_coach.md index 66303f2..ddd7b96 100644 --- a/docs/README_coach.md +++ b/docs/README_coach.md @@ -1,16 +1,16 @@ -# extending open rowing monitor (mostly javascript) +# Extending open rowing monitor (mostly javascript) ## Libraries -- [Node.js](https://nodejs.org/en) is a JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts. -- [Rollup.js](https://rollupjs.org/) is a Node.js module bundler most often used for client-side JavaScript running in the browser. ECMAScript ES6 ES modules. -- [Babel](https://babeljs.io/) is a JavaScript compiler. -- [Snowpack](https://www.snowpack.dev/) is a frontend build tool. -- [lit](https://lit.dev/) Lit is a simple library for building fast, lightweight web components. (alternative to reactjs) Lit uses TypeScript. -- [web components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) are a set of native browser APIs that let you create your own HTML elements. Those elements can do whatever you want them to. Lit is a library that wraps around web components, making them easier to work with. Instead of setting up web components using the native APIs directly, you can use Lit to make Lit Components. +* [Node.js](https://nodejs.org/en) is a JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts. +* [Rollup.js](https://rollupjs.org/) is a Node.js module bundler most often used for client-side JavaScript running in the browser. ECMAScript ES6 ES modules. +* [Babel](https://babeljs.io/) is a JavaScript compiler. +* [Snowpack](https://www.snowpack.dev/) is a frontend build tool. +* [lit](https://lit.dev/) Lit is a simple library for building fast, lightweight web components. (alternative to reactjs) Lit uses TypeScript. +* [web components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) are a set of native browser APIs that let you create your own HTML elements. Those elements can do whatever you want them to. Lit is a library that wraps around web components, making them easier to work with. Instead of setting up web components using the native APIs directly, you can use Lit to make Lit Components. -- [uvu](https://github.com/lukeed/uvu) is a test runner for Node.js --* [axios](https://github.com/axios/axios) Make http requests from node.js, Supports the Promise API +* [uvu](https://github.com/lukeed/uvu) is a test runner for Node.js +* [axios](https://github.com/axios/axios) Make http requests from node.js, Supports the Promise API ## Files @@ -110,14 +110,14 @@ └── snowpack.config.js ``` -- app/server.js - entry point -- app/client/index.js - renders a performance-dashboard component, defines a custom element called web-app using LitElement. -- app/client/components/AppElement.js - Base Component for all other App Components. -- app/client/components/DashboardActions.js - Component that renders the action buttons of the dashboard. -- app/client/components/DashboardMetric.js - Component that renders a metric of the dashboard. -- app/client/components/PerformanceDashboard.js - Component that renders the dashboard. -- app/client/components/BatteryIcon.js - Component that renders a battery indicator. -- app/client/components/AppDialog.js - Component that renders a html dialog. +* app/server.js - entry point +* app/client/index.js - renders a performance-dashboard component, defines a custom element called web-app using LitElement. +* app/client/components/AppElement.js - Base Component for all other App Components. +* app/client/components/DashboardActions.js - Component that renders the action buttons of the dashboard. +* app/client/components/DashboardMetric.js - Component that renders a metric of the dashboard. +* app/client/components/PerformanceDashboard.js - Component that renders the dashboard. +* app/client/components/BatteryIcon.js - Component that renders a battery indicator. +* app/client/components/AppDialog.js - Component that renders a html dialog. ```html https://stackblitz.com/edit/lit-element @@ -141,17 +141,17 @@ https://www.chartjs.org/docs/latest/samples/line/line.html ## What you get -- Stroke detection -- Power (watts) -- Split time (/500m) +* Stroke detection +* Power (watts) +* Split time (/500m) - Strokes per Minute -- Calories used (kcal) -- Training Duration -- Heart Rate (supports BLE and ANT+ heart rate monitors, ANT+ requires an ANT+ +* Calories used (kcal) +* Training Duration +* Heart Rate (supports BLE and ANT+ heart rate monitors, ANT+ requires an ANT+ USB stick USB id 0x1008 or 0x1009) -- web sockets front end -- BLE (FTMS indoor bike, FMTS rower, concept2 PM) +* web sockets front end +* BLE (FTMS indoor bike, FMTS rower, concept2 PM) Export session in [TCX](https://en.wikipedia.org/wiki/Training_Center_XML), csv for [RowingData](https://pypi.org/project/rowingdata/), and csv raw data. @@ -162,27 +162,27 @@ and csv raw data. Make the data accessible in python and create useful plots. -- Color HR band charts or Pie Charts (implemented) -- Plot drive length, drive time, and other erg related parameters as a function +* Color HR band charts or Pie Charts (implemented) +* Plot drive length, drive time, and other erg related parameters as a function of time or distance (implemented) -- Create histograms (Do-it-yourself). -- And much more (do-it-yourself). You’ve got the entire Python matplotlib at +* Create histograms (Do-it-yourself). +* And much more (do-it-yourself). You’ve got the entire Python matplotlib at your disposal. Goodbye excel! The project is based on: -- [python plotting code](https://quantifiedrowing.com/category/software-tools/) by Greg Smith +* [python plotting code](https://quantifiedrowing.com/category/software-tools/) by Greg Smith and inspired by: -- the [RowPro Dan Burpee spreadsheet](http://www.sub7irc.com/RP_Split_Template.zip) +* the [RowPro Dan Burpee spreadsheet](http://www.sub7irc.com/RP_Split_Template.zip) The [roadmap](https://laberning.github.io/openrowingmonitor/backlog.html) indentifies: -- add possibility to define workouts (i.e. training intervals with goals) +* add possibility to define workouts (i.e. training intervals with goals) which we aim to add using the concept2 training plans and davids spreadsheet formula to provide a training program for a given goal date which varies the @@ -192,7 +192,7 @@ program in relation to improvements over time. The [roadmap](https://laberning.github.io/openrowingmonitor/backlog.html) indentifies: -- add possibility to define workouts (i.e. training intervals with goals) +* add possibility to define workouts (i.e. training intervals with goals) which we aim to add using the concept2 training plans and davids spreadsheet formula to provide a training program for a given goal date which varies the @@ -202,37 +202,37 @@ program in relation to improvements over time. ### Feedback from the Coach #### CMA for the Coach - Provide warning over excess heart rate while exercising: +* Provide warning over excess heart rate while exercising: Heart rate should remain below upper limit of "expected zone". Advise that heart rate above upper limit by >1 bpm means user must reduce effort. - Instruction on when to take rest days. - Recording of heart rate after work-outs too, to identify pending illness. - Coach warns of overtraining when performance declines steadily over, say 4 or more, days. - When overtraining is indicated, Coach suggests: skip a day or two; eat more; +* Instruction on when to take rest days. +* Recording of heart rate after work-outs too, to identify pending illness. +* Coach warns of overtraining when performance declines steadily over, say 4 or more, days. +- When overtraining is indicated, Coach suggests: skip a day or two; eat more; Coach also warns of overtraining when, after a skip, performance has not returned to before. - Coach suggests work rates based on recent past performance. - Perhaps present this as a choice for the user, perhaps between: +* Coach suggests work rates based on recent past performance. +- Perhaps present this as a choice for the user, perhaps between: (Coach's default, perhaps based on yesterday's performance), and (user choice). (yesterday's performance) and (the day before's performance). (low|easier|"get the job done") versus (high|harder|"make a mark"). - Marking of results of rows rows taken in contravention of instructions. - Display of recorded rows highlighting contraventions, say in red. - Have an optional way to, temporarily, display results without the red. +* Marking of results of rows rows taken in contravention of instructions. +* Display of recorded rows highlighting contraventions, say in red. +* Have an optional way to, temporarily, display results without the red. ## What we need -- resting heart rate (ask) -- max heart rate (stepped challenge) -- heart rate after given workload (watt/duration challenge) -- heart rate after work-outs too, to identify pending illness -- Interpolate heart rate to predict competition performance. -- Have Eddie's racing warm-up (as attached to the rower atm) +* resting heart rate (ask) +* max heart rate (stepped challenge) +* heart rate after given workload (watt/duration challenge) +* heart rate after work-outs too, to identify pending illness +* Interpolate heart rate to predict competition performance. +* Have Eddie's racing warm-up (as attached to the rower atm) ### Candidate rowing programmes -- For athlete levels 1 (not exercised for 3 years) to 5 (hero). -- Have table of suggested rowing effort and duration. +* For athlete levels 1 (not exercised for 3 years) to 5 (hero). +* Have table of suggested rowing effort and duration. ## Other projects @@ -241,54 +241,59 @@ program in relation to improvements over time. Displays thorough statistics about your current workout. In addition to that there should be a variety of bots available. Here are a few ideas: -- *Constant pace:* This is useful if you want to row in a certain tempo -- *Boomerang:* They're rowing at a constant pace, but if they get behind you +* *Constant pace:* This is useful if you want to row in a certain tempo +* *Boomerang:* They're rowing at a constant pace, but if they get behind you they will row faster. If they get too far in front, they'll decelerate to let you keep up with them. They're almost like the constant pace boats, but they'll always be around. This leads to having opponents around even at the longest training sessions -- *Heartrate:* You set up your desired target heart rate and the bot will row +* *Heartrate:* You set up your desired target heart rate and the bot will row faster/slower according to your current heart rate -- *Ghostrider:* This bot replays a previously rowing session of yourself -- *Intervals:* Usually this bot runs on a constant pace, but it'll push the +* *Ghostrider:* This bot replays a previously rowing session of yourself +* *Intervals:* Usually this bot runs on a constant pace, but it'll push the tempo from time to time. ### Elevate -- [Elevate github](https://github.com/thomaschampagne/elevate) -- [Elevate docs](https://thomaschampagne.github.io/elevate-docs/) -- [More fun with Elevate](https://quantifiedrowing.com/2017/03/09/more-fun-with-stravastix/) -- [‘training impulse’ (TRIMP)](http://www.trainingimpulse.com/banisters-trimp-0) -- [TRIMP example in Elevate – A Strava plugin deprecated](https://rowingmusings.wordpress.com/2017/02/04/stravistix-a-strava-plugin-which-can-help-with-rowing/) now a windows or mac app. +* [Elevate github](https://github.com/thomaschampagne/elevate) +* [Elevate docs](https://thomaschampagne.github.io/elevate-docs/) +* [More fun with Elevate](https://quantifiedrowing.com/2017/03/09/more-fun-with-stravastix/) +* [‘training impulse’ (TRIMP)](http://www.trainingimpulse.com/banisters-trimp-0) +* [TRIMP example in Elevate – A Strava plugin deprecated](https://rowingmusings.wordpress.com/2017/02/04/stravistix-a-strava-plugin-which-can-help-with-rowing/) now a windows or mac app. -- Typescript as programming language. -- Angular as frontend (build with @angular/cli). -- Angular Material for material designed components. -- Metrics Graphics, Plotly & D3 for charting. -- LokiJS as in-memory NoSQL database persisted in IndexedDB. -- Jest as Javascript test runner (instead of "stock" karma one). +* Typescript as programming language. +* Angular as frontend (build with @angular/cli). +* Angular Material for material designed components. +* Metrics Graphics, Plotly & D3 for charting. +* LokiJS as in-memory NoSQL database persisted in IndexedDB. +* Jest as Javascript test runner (instead of "stock" karma one). ## Requests An "unlocked" PM would be such an amazing training tool. -- Everything that ErgData does, without crashing. -- Also average stroke rating could help a lot, especially on pieces where my coach gives us punishments for not hitting our goal average stroke rate exactly. -- My only complaint with PM5 is that if you sync your HRM to it, you get your HR from the end of the split not the average across it. Sort that and I'm all set. +* Everything that ErgData does, without crashing. +* Also average stroke rating could help a lot, especially on pieces where my coach gives us punishments for not hitting our goal average stroke rate exactly. +* My only complaint with PM5 is that if you sync your HRM to it, you get your HR from the end of the split not the average across it. Sort that and I'm all set. The PM6 Super Plus: -- Improved screen resolution and size -- Larger more detailed power curve -- More data metrics on one screen (peak power %, watts + split at the same time, stroke length, average stroke rate data to the tenth of a stroke, current split to the tenth of a split) -- Accurate average heart rate data - right now the resulting heart rate for a piece seems closer to the final heart rate measured than the average for the piece -- Ability to add a split distance by the push of a button (so if you do 1500m, with 250m splits, you push a button and it adds that distance to your piece) -- Results graph that shows heart rate, stroke rate, split over the course of the piece -- Front facing speakers -- Netflix + spotify -- LED backlit screen -- Full colour display -- Picture-in-picture or overlay (so you can have erg data plus another feed, perhaps a TV stream or something nice to watch). A headphone jack / bluetooth audio connection would be awesome too, with input either from streams or a radio/TV receiver. It would also give the option of something I've always wanted for training/coaching rate work - timing pips. Seriously, like a metronome, but for rowing, would be absolutely incredible for keeping focus / improving consistency. -- Touch screen, and a good one at that. Buttons are nice but this is 2018. -- WiFi / Mobile Data. Cables are also something which should be optional in all but the most critical situation. Obviously, for stability sensitive things like indoor rowing competitions in real-time, the Ethernet connection is absolutely irreplaceable, but additional connectivity for more general use would be an excellent feature. -- Use of the data connection to allow me to store my data on a cloud based profile, great for shared ergs in clubs/gyms, just sign in and save/recall all your metrics, bonus points if you can access it from other platforms too for analysis. So much smoother and cleaner than a USB stick, much better UX too. -- Buttons on the handle that control the PM6 and/or my music via bluetooth, because sometimes I'm just not feeling a track. Hate myself for adding this one but it would be cool as hell, plus great to be able to make changes (e.g. add 1000m to a steady state piece) mid-row without breaking rhythm. \ No newline at end of file +* Improved screen resolution and size +* Larger more detailed power curve +* More data metrics on one screen: +- peak power %, +- watts + split at the same time, +- stroke length, +- average stroke rate data to the tenth of a stroke, +- current split to the tenth of a split +* Accurate average heart rate data - right now the resulting heart rate for a piece seems closer to the final heart rate measured than the average for the piece +* Ability to add a split distance by the push of a button (so if you do 1500m, with 250m splits, you push a button and it adds that distance to your piece) +* Results graph that shows heart rate, stroke rate, split over the course of the piece +* Front facing speakers +* Netflix + spotify +* LED backlit screen +* Full colour display +* Picture-in-picture or overlay (so you can have erg data plus another feed, perhaps a TV stream or something nice to watch). A headphone jack / bluetooth audio connection would be awesome too, with input either from streams or a radio/TV receiver. It would also give the option of something I've always wanted for training/coaching rate work - timing pips. Seriously, like a metronome, but for rowing, would be absolutely incredible for keeping focus / improving consistency. +* Touch screen, and a good one at that. Buttons are nice but this is 2018. +* WiFi / Mobile Data. Cables are also something which should be optional in all but the most critical situation. Obviously, for stability sensitive things like indoor rowing competitions in real-time, the Ethernet connection is absolutely irreplaceable, but additional connectivity for more general use would be an excellent feature. +* Use of the data connection to allow me to store my data on a cloud based profile, great for shared ergs in clubs/gyms, just sign in and save/recall all your metrics, bonus points if you can access it from other platforms too for analysis. So much smoother and cleaner than a USB stick, much better UX too. +* Buttons on the handle that control the PM6 and/or my music via bluetooth, because sometimes I'm just not feeling a track. Hate myself for adding this one but it would be cool as hell, plus great to be able to make changes (e.g. add 1000m to a steady state piece) mid-row without breaking rhythm. \ No newline at end of file