traindown / spec

It's spectacular!
BSD 3-Clause "New" or "Revised" License
3 stars 0 forks source link

Circuit-based training representation #3

Open sashaafm opened 3 years ago

sashaafm commented 3 years ago

Hello 👋, I've become quite interested in Traindown and using it for my training logs, and possibly develop some personal software on top of it. Great work so far!

I've read the guide, but I could not find the proper way to represent circuit-based training like EMOMs? If one does a circuit of 20 rounds it's too cumbersome (and may be error-prone) to just repeat the same information over and over.

Could some kind of loop directive could be added to better represent this?

I'm still quite new to Traindown, but after I get a better hang of it I'd be happy with attempting to suggest some syntax for this, if it's not possible to represent with the current version.

Thanks for your work and attention 🙏

scottt2 commented 3 years ago

Hey @sashaafm !

Thanks for your interest in Traindown.

You can get at expressing simple circuits using the + operator for supersets but it is very suboptimal for cases like EMOMs.

Here is a discussion about a new | operator for denoting loops: https://github.com/traindown/spec/issues/1#issuecomment-770434243

An example would be something like:

| # Rest: EMOM
| Pull-ups: 15, 12, 12, 10, 10
| Box jumps: 5, 5, 5, 5, 5
| Dips: 20, 18, 15, 15, 15

I'd be happy with attempting to suggest some syntax for this

I would love to hear your suggestions. I have my own ideas about this but I honestly don't do a whole bunch of circuit based training so I would rather defer to users that live it for guidance.

So TL;DR--we don't yet have a great way to represent circuit base training. We have a proposal to use the |. I would love to hear your thoughts on how you would like to express this.

scottt2 commented 3 years ago

Reference to previous thread discussing circuits

https://github.com/traindown/spec/issues/1

@daveliepmann just a friendly ping letting you know the discussion has moved to here. I am behind on implementing new features due to spending time getting some of the library functionality roughed in.

I have tentatively marked wanting to have this feature shipped within one month. Let's hash out the details here and get this thing built.

sashaafm commented 3 years ago

Hello @scottt2, sorry for the delayed response.

My idea for circuit training is that it should be flexible enough to cover the following cases:

  1. EMOM: have to represent how many rounds and how many reps per exercise (or round). Should support multiple exercises in the same circuit (i.e., each round may have a different exercise).
  2. Tabata: similar to EMOM but rest time and round time should be represented as well. Thus, besides supporting classic Tabata (20 seconds on; 10 seconds rest).
  3. For reps: support variable round time. For example, when performing rounds for target reps (e.g., 15 kettlebell snatches in the least amount possible with 45 second rest).
  4. Crossfit-like: I believe the cases above combined already support Crossfit-like training. Nevertheless, ideally Traindown would be flexible enough to represent any possible Crossfit workout (which I believe is quite a range of possibilities).

The current proposal:

| # Rest: EMOM
| Pull-ups: 15, 12, 12, 10, 10
| Box jumps: 5, 5, 5, 5, 5
| Dips: 20, 18, 15, 15, 15

Does work for something like classic EMOM and Tabata. If we use the # Rest: <circuit_type> to accept both EMOM and Tabata then the user/client already knows it means 1 minute on/0 second off, or 20 seconds on/10 seconds off, respectively.

However, it doesn't support:

  1. Variable Tabata
  2. For reps
  3. Probably some CrossFit workouts

As an improvement I believe we could have something like this:

| # Rest: [ EMOM | TABATA | <ON>/<OFF>] # => the last option represents ON/OFF in seconds (takes an integer for both values)
| <EXERCISE>: <REPS> [<TIME>]t # => the TIME option represents how long that round took in the given time unit (default to seconds)

As an example for variable Tabata

| # Rest 30/15 # => rounds of 30 seconds with 15 seconds of rest
| Pull-ups: 5 5 4 4 3
| Squat: 8 8 7 5 5

As an example for a circuit done for reps:

| Pull-ups: 10 65t 8 60t 6 75t
| Squat: 10 45t 8 45t 8 45t 

This is just a first proposal to enhance the proposal you gave 🙂 I'm sure there are still some cases missing. I find Traindown quite interesting and I think I'll give it a shot to post another improved proposal soon.

scottt2 commented 3 years ago

Oooh @sashaafm I am digging where you're going with this!!

I'll start playing around with the proposal in the Dart library because that's the one I use most due to the mobile app. Maybe once we start to settle the UX we can kick out some release candidates to the client libs?

I should have time in the next week to explore this in earnest. Thanks so much for the collaboration on this.