
Show HN: EverActiv, an ML personal trainer for iPhone - kareemsabri
http://appstore.com/everactiv
======
kareemsabri
For those interested in the engineering behind it, there's a few elements of
this app that might be of interest.

1\. Workout builder: there's no stored workouts. Given a bunch of inputs: # of
minutes, muscles to target, goals, the builder generates a workout for the
user. The goal is to constantly get new workouts.

2\. Workout calibrator: workout builder gives a workout that consists of
exercises, sets, and reps. Workout calibrator assigns weight to all the sets,
based on the user's past performance for that exercise and other strongly
correlated exercises. If it isn't confident enough (not sufficiently high
correlation coefficient for any past exercises) it leaves it blank for the
user to fill in.

3\. Set calibrator: the set calibrator is for calibrating a single set while
in a workout. If it tells the user do 100lbs x 8 reps, and the user does 12
reps, it will adjust all subsequent exercises of that type to a more
appropriate weight for 8 reps. There's no ML here, it's just a formula (8 rep
weight = .6 * 12 rep weight, for example), but it works pretty well. This has
the nice effect that if you don't know how much weight you can lift for x
reps, just grab any weight, do what you can, tell the app how much you did,
and it'll be accurately calibrated in 2-3 sets.

~~~
bazzargh
A slightly different approach: I was doing the hacker's diet exercise ladder
([https://www.fourmilab.ch/hackdiet/e4/exercise.html](https://www.fourmilab.ch/hackdiet/e4/exercise.html)),
which is supposed to be completed in 10-15 mins; if you can't complete it in
that time, move down a rung. But keeping track of the numbers at each level
got annoying, and it was unclear if you were on track to complete things fast
enough.

So, I wrote code to take those lists and a number of beats for each exercise,
with a gap between to change position, take the completion time and calculate
a bpm to make this fit. I then processed the output using the built in voices
on the mac to read instructions in the gaps, count down reps and so on, and
set up the metronome, so I never had to look at the screen. Now I could just
type a command to kick off the whole thing.

I ended up not using it so much, I got sidetracked into the yak shave of
making it play generative music in time with the plan, and just went running
more.

One I did use more was a simple timer for cycling on the turbo, for eg
watching movies instead of using a planned session like The Sufferfest. All
this did was, you pick how long to ride, and then at decreasing random
intervals it would read out the remaining time, then add a robot-based insult
for encouragement (movie quotes and suchlike)

------
mrborgen
Not available in my App Store (Norwegian). Why not make it international?

------
njaremko
Just FYI, on my iPhone 6S the date selector for scheduling your introductory
workout is dark grey over a grey background....almost impossible to read.

~~~
kareemsabri
Ah yes, will fix. Thanks.

------
krosaen
Cool! Could you elaborate on the ways ML is used within the app? So far I
gather it learns the optimal weight to be used for repetitions.

~~~
kareemsabri
Thanks!

The main ML component is to guess how much weight you should lift for an
exercise you've never logged before. To accomplish this, I periodically ingest
all the exercise data offline, and for all possible pairs of exercises, see
which ones are most strongly correlated. The client app downloads the latest
data before every workout, and uses it to calibrate exercises if the user
hasn't performed them before. If the user has logged the exercise before,
guessing the optimal weight is pretty trivial, but if it's been a while, which
can happen because every workout is somewhat randomized, it will override and
make a prediction based on more recent exercises.

There's also some learning of progress rates, it'll slow down or speed up the
rate of increasing weights based on the user's performance.

~~~
tharshan09
Im also just curious what technologies you are using, specifically for the ML.
Is there a particular ML technique that works well for this use case?

~~~
kareemsabri
Just python. I'm by no means an ML expert, this was my first foray into it. I
used some basic stats to identify correlated exercises, and then simple linear
regression to fit the data to a line. In my mind, linear regression is
sufficient for such a simple ML problem.

------
terhechte
I'd love to try it, but it says that the app is not available on the German
store. Is there a specific reason why you limited it to (as I suppose) the US
store?

~~~
kareemsabri
Just an oversight. I'll add it to the German store. There's no metric option
though!

~~~
terhechte
Oh ok, well I may still give it a try.

~~~
kareemsabri
Available in all territories now.

------
rmellow
Excellent onboarding, it's not common to see it well done.

By the way, the Scheduler widget's text is black, which doesn't appear well on
the dark background.

------
skrowl
Looks neat, but it won't run on my Nexus 6P. Any plans for an Android version?

~~~
kareemsabri
Not enough traction to justify two apps currently. Maybe down the road.

------
ajonit
All weights are in lbs. Please provide an option for kg as well.

------
bweard
What's the best way to provide feedback?

~~~
kareemsabri
PM or email kareem [at] everactivapp [dot] com

