By: Team W16-2 Since: Feb 2020 Licence: NUS

1. About This Document

Welcome to the ZeroToOne User Guide!

We have read and tried to follow numerous badly written user guides. They are often poorly organised, and extremely painful to read. At ZeroToOne, we seek to make your user experience a seamless and pleasurable one. This is why we created this foolproof, step-by-step guide to help you kickstart your ZeroToOne journey.

To help you better understand this document, here is a list of notations that we will be using:

Table 1. ZeroToOne Notation
Notation Description

exercise delete EXERCISE_ID

A grey highlight alongside a monospace font indicates that this is a command that can be entered into the command line and executed by the application.

w/<workout_name>

A word surrounded by arrow brackets denotes a user fillable field in the parameter

[d/<datetime>]

A parameter surrounded by square brackets indicates that it is an optional parameter

{e/<exercise_name> | w/<workout_name> | d/<datetime>}

A set of parameters surrounded by curly brackets indicates that at least one of the parameters have to be filled up

EXERCISE_ID

Uppercase parameters indicate that it is an index from a list in ZeroToOne

2. Introducing ZeroToOne

ZeroToOne is a one-stop application to manage your fitness regimes. Using ZeroToOne, you can:

  • Customise your favourite workout programmes

  • Start a workout session which guides you through your workout routines

  • Schedule your workout session and receive timely reminders

  • Track your fitness progress

  • and much more!

Are you ready to transform yourself from a plump ‘0’ shape to a healthier ‘1’ shape? Kickstart your ZeroToOne journey today by following the steps listed below!

3. Getting Started

Before you can start using ZeroToOne, you will need to ensure that Java 11 is installed on your computer. If not, please follow the instructions on this website to install Java 11 on your computer.

To start your ZeroToOne journey, you will have to:

  1. Create an empty folder in your computer.

  2. Download the latest stable version of ZeroToOne from our GitHub page into the folder that you created.

  3. Double-click the executable file to start the application.

UgMainPage
Figure 1. ZeroToOne Main Page

At this stage, you should have successfully started ZeroToOne and will be able see the main page as described in Figure 1. If the application did not start, please refer to Section 6, “Troubleshooting” for more information to resolve the issue. Otherwise, the next step is to begin your ZeroToOne journey, by customising your favourite workout programmes!

4. User Interface Basics [Wong Chi Shan]

Before we delve into the commands that you can use, let us first explain the components of the User Interface, and how we can navigate through them.

UgUiComponents
Figure 2. Components of the User Interface

The navigation tabs allow you to easily access different parts of our application. Simply click on each tab to bring you to your desired feature! The coloured underline indicates which tab is currently activated and hence which feature you are currently accessing.

4.2. Result Display

This is where the results of your executed command will be displayed. The display will change according to the feature that you are currently using.

4.3. Feedback Display

Whenever you enter a command into the Command Box, the application will output a feedback message to you through this display!

4.4. Command Box

You type all of your commands in here. To execute the command, simply press the "Enter" button on your keyboard.

5. Using ZeroToOne

At this point, you should have sufficient knowledge to start using ZeroToOne. In this section, we will describe in-depth the features that ZeroToOne has, and how you can interact with them.

5.1. Overview [Wong Chi Shan]

For ZeroToOne commands, every user-fillable parameter is identified by a flag prefix. This allows ZeroToOne to accept parameters in any order. However, to correctly parse your command, we have reserved these flags as special symbols that are to be used only by the program. Please avoid using them in your commands. The reserved flags are listed as follows:

  • e/ - exercise name

  • w/ - workout name

  • s/ - number of sets

  • r/ - number of reps

  • m/ - weights (in kilograms)

  • d/ - datetime

  • f/ - frequency of schedule

  • p/ - file path

  • st/ - start datetime

  • et/ - end datetime

5.2. Viewing App Information [Wong Chi Shan]

Can’t remember the commands off the top of your head? Fret not. ZeroToOne provides you with a convenient way to view a list of all available commands that you can try. Simply enter the following command into the command box:

about
UgHelp
Figure 3. About Tab

The app view will switch tabs to show the About tab.

5.3. Closing ZeroToOne [Wong Chi Shan]

After you have finished using the application, you can exit the application by simply entering the following command into the command box:

exit

The application will close gracefully, and all data will be saved in the data directory. If the command is executed successfully, you should see the following message before the application closes:

Thank you for using ZeroToOne! Your data has been saved successfully. Hope to see you again soon!

5.4. Starting A Workout Session [Gabriel Yeo]

Are you ready to start working out now? To begin a new workout session, simply enter the following command into the command box:

start WORKOUT_ID
Example use:
start 1
UgStartWorkout
Figure 4. Started Workout

The User Interface will automatically switch to the “Home” tab. ZeroToOne will display upcoming sets in your workout, guiding you through set by set in your workout.

NOTE:
* This command assumes that you have already created a workout in the application. If you have not, refer to the section on "Managing your workouts" to create a new workout.
* WORKOUT_ID cannot be null and should be a value of a workout from the workout tab.

5.5. Completing a Set [Gabriel Yeo]

Completed your exercise set? To mark the current exercise set as complete and move on to the next set, simply enter this command into the command box:

done
UgDoneSet
Figure 5. Done Set

The background color of the completed set will turn green, indicating that the set is successfully completed. ZeroToOne will then progress your workout forward, indicating your next set. Additionally, the timer will reset to 00:00 and begin counting your rest for you.

After however many seconds you wish to rest, you may continue on to your next set.

If you were already on your last set, ZeroToOne will automatically stop the workout session after this command is executed and save your session to the Log.

5.6. Skipping An Exercise Set [Gabriel Yeo]

Unable to complete your current exercise set? No worries, it happens to the best of us. To skip the current exercise set, simply enter this command into the command box:

skip
UgSkippedSet
Figure 6. Skipped Set

The background color of the completed set will turn red, indicating that the set is incomplete.

This action is otherwise identical to the done command.

5.7. Stopping A Workout Session [Gabriel Yeo]

Need to stop the workout session prematurely? Simply enter this command into the command box:

stop

ZeroToOne will stop the workout that is currently in progress, and save the session into the Log. All remaining sets are marked as incomplete. The user interface will automatically return to the main screen. If stopping a workout session is successful, you should see the following in the feedback display with your workout name and time:

Stopped workout session: Push Day at 13 Apr 2020, 3:36:17 PM

5.8. Managing Your Exercises [Aloysius Chan]

The commands in this section allows you to manage your customised exercises in ZeroToOne. These exercises will eventually be the building blocks of a workout.

5.8.1. Creating a new exercise

To create a new exercise in ZeroToOne, simply enter this command into the command box:

exercise create e/<exercise_name>
Example use:
exercise create e/squat
UgCreatedExercise
Figure 7. Created Exercise

The newly created exercise will be automatically added to the bottom of the exercise list. This exercise will not contain any sets at this point.

NOTE: <exercise_name> has to be a string, consisting of only alphanumeric characters

5.8.2. Adding a set to an exercise

After you have created a new exercise in ZeroToOne, the next step is to add a set to the exercise! To add a set, simply enter this command:

exercise set add EXERCISE_ID r/<num_of_reps> m/<weight>
Example use:
exercise set add 2 r/2 m/30
UgAddedExerciseSet
Figure 8. Added Exercise Set

The exercise set will be automatically appended to the current list of sets in the exercise. The user interface will be updated to show the edited exercise.

NOTE:

  • This command assumes that you have already created an exercise under EXERCISE_ID. If you have not created the exercise, refer to the section on “Creating a new exercise” first.

  • EXERCISE_ID refers to the index of the exercise in exercise list

  • <num_of_reps> should be a positive integer

  • <weight> should be a positive integer between 1 and 1000

5.8.3. Editing a set in an exercise

Changed your mind on the details of an exercise set? No worries, you can edit the information in an exercise set by simply entering this command:

exercise set edit EXERCISE_ID SET_ID r/<num_of_reps> m/<weight>
Example use:
exercise set edit 1 1 r/20 m/30

The exercise set will be automatically updated in the exercise list. If so, the following message will be displayed in the feedback display:

Edited exercise set: Deadlift

NOTE:

  • EXERCISE_ID refers to the index of the exercise in exercise list

  • SET_ID refers to the index of the set in the exercise

  • <num_of_reps> has to be a positive integer

  • <weight> has to be a positive integer between 1 and 1000

5.8.4. Deleting a set in an exercise

Want to delete an exercise set from the exercise? You can do so by simply entering this command:

exercise set delete EXERCISE_ID SET_ID
Example use:
exercise set delete 1 2

The exercise set will be removed from the exercise, and the view will automatically update to show that the exercise no longer contains that set. If this is successful, the following message will be displayed in the feedback display:

Deleted Exercise Set: Deadlift

NOTE:

  • EXERCISE_ID refers to the index of the exercise in exercise list

  • SET_ID refers to the index of the set in the exercise

5.8.5. Listing all exercises

To show a list of exercises that you have created in ZeroToOne, simply enter this command into the command box:

exercise list
UgExerciseList
Figure 9. Exercise List

The User Interface will automatically switch to the “Exercise” tab, and the result display will automatically update with the list of exercises.

5.8.6. Finding an exercise by name

To find and view the information of a particular exercise that you have previously created, you can simply enter this command:

exercise find e/<exercise_name>
Example use:
exercise find e/Bench Press

The Result Display will automatically update to only show exercises that match the search keyword.

UgFindExercise
Figure 10. Find Exercise

NOTE:

  • <exercise_name> has to be a String, consisting of only Alphanumeric characters

  • <exercise_name> can be a partial substring of the full exercise name

  • <exercise_name> is not case-sensitive

5.8.7. Changing an exercise’s name

Made a mistake while creating the exercise’s name? You can change the exercise name by simply running this command in the command box:

exercise edit EXERCISE_ID e/<exercise_name>
Example use:
exercise edit 1 e/Squat

The exercise in ZeroToOne will be automatically updated to show its new name. If this is successful, the following message will be displayed in the feedback display:

Edited exercise: Squat

NOTE:

  • EXERCISE_ID refers to the index of the exercise in exercise list

  • <exercise_name> has to be a String, consisting of only Alphanumeric characters

5.8.8. Deleting an exercise

Want to remove an exercise from ZeroToOne? You can do so by entering this command into the command box:

exercise delete EXERCISE_ID
Example use:
exercise delete 1

The exercise will be removed from ZeroToOne. At the same time, all current workouts that contain this exercise will also have this exercise removed. If this is successful, the following message will be displayed in the feedback display:

Deleted Exercise: Deadlift

NOTE:

  • EXERCISE_ID refers to the index of the exercise in exercise list

5.9. Managing Your Workouts [Wong Chi Shan]

After creating and modifying your exercises however you desire, it’s time to use those exercises to create workouts! In this section, we will walk you through how to manage all your workouts.

5.9.1. Creating a new workout

To create a new workout, simply type the following command:

workout create w/<workout_name>
Example use:
workout create w/Abs Workout
UgCreateWorkout
Figure 11. Creating A Workout

The feedback display will let you know if the creation of your workout was successful. The application view will also update to display your new workout!

5.9.2. Adding an exercise to a workout

After creating your workout, the next step is to add an exercise to it! To do so, simply enter the following command:

workout exercise add WORKOUT_ID EXERCISE_ID
Example use:
workout exercise add 1 3

If this is successful, the following message will be displayed in the feedback display:

Added exercise Bench Press to Arms Workout!
NOTE:
* You cannot add an empty exercise (i.e. exercise that does not contain any sets) to a workout
* WORKOUT_ID refers to the index of the workout in `workout list`
* EXERCISE_ID refers to the index of the exercise in `exercise list`

5.9.3. Editing an exercise in a workout

If you add the wrong exercise to a workout by mistake, or want to change a particular exercise to a different one, no worries! You can run this command:

workout exercise edit WORKOUT_ID EXERCISE_ID NEW_EXERCISE_ID
Example use:
workout exercise edit 1 2 3

This command allows you to edit an exercise in a workout, by replacing the exercise corresponding to EXERCISE_ID with the exercise corresponding to NEW_EXERCISE_ID. Hence, the order of exercises within the workout is retained. ZeroToOne will automatically update the exercise in the workout on your result display. If this is successful, the following message will be displayed in the feedback display:

Successfully edited Bench Press in Arms Workout to become Bicep Curl
NOTE:
* WORKOUT_ID refers to the index of the workout in `workout list`
* EXERCISE_ID refers to the index of the exercise in the workout, when `workout find w/<workout_name>` is executed
* NEW_EXERCISE_ID refers to the index of the exercise in `exercise list`

5.9.4. Deleting an exercise from a workout

If editing an exercise does not work for your purposes, you can also choose to simply delete any exercise from a workout. You may type the following command:

workout exercise delete WORKOUT_ID EXERCISE_ID
Example use:
workout exercise delete 1 3

ZeroToOne will delete the exercise with the specified exercise ID, from the workout with the specified workout ID. If this is successful, the following message will be displayed in the feedback display:

Successfully deleted Bench Press from Arms Workout
NOTE:
* WORKOUT_ID refers to the index of the workout in `workout list`
* EXERCISE_ID refers to the index of the exercise in the workout, when `workout find w/<workout_name>` is executed

5.9.5. Listing all workouts

Now that we have covered how to manage individual workouts, how about viewing all your workouts in one place? Simply type the following command:

workout list
UgWorkoutList
Figure 12. Workout List

ZeroToOne will show you a list of all the workouts you have created! From this list, you can see the names of all your workouts and their corresponding IDs. Additionally, it shows all the information about the exercises in each workout.

5.9.6. Finding a workout by name

You may find that you need to know a workout’s ID for some commands, or that you need to retrieve the details of a specific workout. Fret not! Simply type the following command:

workout find w/<workout_name>
Example use:
workout find w/Push Day
UgFindWorkout

ZeroToOne will return a list of all the workouts whose name matches the workout name you have typed into the command. From this command, you can find out the workout ID number of the workout you are looking for, as well as see the details of each exercise in the workout.

NOTE:
* <workout_name> is not case sensitive
* <workout_name> can be a partial substring of the actual workout name

5.9.7. Editing the name of a workout

If you ever want to edit the name of a workout, simply type this command:

workout edit WORKOUT_ID w/<new_workout_name>
Example use:
workout edit 1 w/Arms Training

ZeroToOne will update its display to show you the new workout name. If this is successful, the following message will be displayed in the feedback display:

Successfully edited name from Arms Workout to Arms Training
NOTE:
* WORKOUT_ID refers to the index of the workout in `workout list`

5.9.8. Deleting a workout

To delete a workout from ZeroToOne, simply type this command:

workout delete WORKOUT_ID
Example use:
workout delete 1

ZeroToOne will update its display to show you the updated list of workouts. If this is successful, the following message will be displayed in the feedback display:

Successfully deleted workout: Arms Training
NOTE:
* WORKOUT_ID refers to the index of the workout in `workout list`

5.9.9. Exporting a workout plan to a file (Coming in v2.0)

Do you enjoy sharing your fitness journey with your friends? Well, this feature allows you to share your workouts with your friends, so you can help each other out in the journey to become fit!

workout export WORKOUT_ID p/<file_path>
Example use:
workout export 1 p/data/myWorkout.txt

If this is successful, the following message will be displayed in the feedback display:

Successfully exported workout 1 to /data/myWorkout.txt!

5.9.10. Importing a workout plan from a file (Coming in v2.0)

ZeroToOne will import a workout from a plain text file stored in the specified file_path in your computer. This feature allows you to get workouts from your friends, so you can help each other out in the journey to become fit.

workout import w/<workout_name> p/<file_path>
Example use:
workout import w/My Friend's Workout p/data/myFriendsWorkout.txt

If this is successful, the following message will be displayed in the feedback display:

Successfully imported /data/myFriendsWorkout.txt as a new workout: My Friend's Workout!

5.10. Managing Your Scheduled Sessions [Tang Guofeng]

You are now an expert in managing your workouts, and can start a workout any time! However, wouldn’t you like to have the ability to schedule your workout sessions? In this section, we will guide you to learn how ZeroToOne can help you in this aspect!

5.10.1. Scheduling a new workout session

To schedule a new workout session, simply type in this command:

schedule create WORKOUT_ID d/<datetime>
Example use:
schedule create 1 d/2020-10-06 18:00
UgScheduleSession
Figure 13. Scheduling a workout session
NOTE:
* WORKOUT_ID refers to the index of the workout in `workout list`
* <datetime> must not be outdated and follow the format {yyyy}-{mm}-{dd} {HH:mm}

5.10.2. Listing all scheduled sessions [Tang Guofeng]

To view all of your schedule sessions, type the following command:

schedule list
UgListSchedule
Figure 14. Display of schedule in chronological order

ZeroToOne displays an intuitive chronological view, showing your upcoming schedule! From this view, you can see what workout sessions are coming up, which workout sessions are outdated, as well as their corresponding schedule IDs.

5.10.3. Changing a scheduled session to another date

If you need to shift your scheduled session to another date, try the following command:

schedule edit SCHEDULED_WORKOUT_ID d/<datetime>
Example use:
schedule edit 1 d/2020-05-08 18:00

If this is successful, the following message will be displayed in the feedback display:

Edited schedule: Strength Workout on 2020-05-08 18:00
NOTE:
* SCHEDULED_WORKOUT_ID refers to the index of the scheduled workout in `schedule list`
* <datetime> must not be outdated and follow the format {yyyy}-{mm}-{dd} {HH:mm}

5.10.4. Deleting a scheduled session

Want to delete a scheduled session? You can do so by typing the following command:

schedule delete SCHEDULED_WORKOUT_ID
Example use:
schedule delete 1

This deletes an existing scheduled workout session with the corresponding scheduled workout ID. If this is successful, the following message will be displayed in the feedback display:

Deleted scheduled workout: Strength Training
NOTE:
* SCHEDULED_WORKOUT_ID refers to the index of the scheduled workout in `schedule list`

5.10.5. Scheduling a recurring workout session (Coming in v2.0)

Sometimes you will want to schedule a workout session that repeats over time, with a certain frequency. No problem! Simply type the following command:

schedule recurring create WORKOUT_ID d/<datetime> f/<frequency>
Example use:
schedule recurring create WORKOUT_ID d/2020-05-26 10:00 f/MONTHLY

For example, if you want to have the workout Arms Workout on a monthly basis, starting from the 26th of May 2020 at 10am, you can type schedule recurring create WORKOUT_ID d/2020-05-26 10:00 f/MONTHLY. If this is successful, the following message will be displayed in the feedback display:

New recurring schedule added: Strength Workout on 2020-05-06 18:00 Monthly
NOTE:
* WORKOUT_ID refers to the index of the workout in `workout list`
* <datetime> must not be outdated and follow the format {yyyy}-{mm}-{dd} {HH:mm}
* <frequency> must be one of the following: DAILY, WEEKLY, MONTHLY

5.11. Managing Your Session Logs [Liow Jiachen]

Well done, you have successfully gone through the whole process of setting up your workouts, scheduling them and even logging the workout. In addition to all these cool features, ZeroToOne also allows you to manage your workout log history and even provides you with meaningful statistics to help you track your current progress to help you hit all those fitness goals.

5.11.1. Viewing your logs

To view a list of all your logged completed workout sessions, simply type the following command:

log list
UgLogList
Figure 15. List of logged workout sessions

ZeroToOne will display a list of all the logged workout sessions you have carried out. Here, you can see all the logged sessions as well as their corresponding log ID number.

5.11.2. Filtering your logs

We understand that viewing too many logs at once can be confusing at times, so finding a particular log can be difficult. In order to filter your logs by a search query, simply type the following command:

log find [st/<datetime>] [et/<datetime>] [e/<exercise_name>]
Example uses:
log find st/2020-04-27 10:10
log find et/2020-04-27 10:10
log find st/2020-04-04 10:10 et/2020-04-05 10:10
log find w/Arms Day
log find w/arms

ZeroToOne will return a list of all the logged workout sessions that matches either the start_time, end_time or whose workout_name contains the workout name you have typed into the command. From this command, you will be able to see the details of the logged session(s) being searched for. If this is successful, the following message will be displayed in the feedback display:

Listed 1 logged workout sessions(s) found!

5.11.3. Deleting a log

Want to delete a log? Simply type in the following command:

log delete LOG_ID
Example use:
log delete 1

The view will automatically update with the updated list of logged sessions. If this is successful, the following message will be displayed in the feedback display:

Successfully deleted log: Legs Day on 1 April 2020, 21:50, Wed
NOTE:
* LOG_ID refers to the index of the log as viewed on the screen
* This include results returned through the find command

5.11.4. Displaying progress in workout logs

To view your progress in a graphical view over a particular time period, simply type the following command:

log display [st/<start_time>] [et/<end_time>]
Example use:
log display
log display st/2020-04-01 10:10
log display st/2020-01-01 00:00 et/2020-02-01 00:00
NOTE:
* Statistics will considered ALL entries in range between <start_time> and <end_time> inclusive
* If <start_time> is omitted then logs will be considered regardless of their start timings
* If <end_time> is omitted then logs will be considered regardless of their end timings
* If both <start_time> and <end_time> are omitted then ALL logs will be considered
UgGraphicalLogs
Figure 16. Graphical view of logs

ZeroToOne will display a graphical line chart that depicts your overall progress. This means you can quickly see at a glance how successful you have been in completing your sessions. This can help motivate you to work harder to improve, or continue maintaining your progress.

Here is a list and explanation of the metrics provided:

Table 2. ZeroToOne Report Card Metrics
Notation Description

Total Number of Workouts

The number of successfully completed workouts

Total Time Spend

The total sum of time spend in all the workouts

Average Time Per Day

The amount of time spent on average per day

6. Troubleshooting

  1. How do I transfer my data to another computer?

    1. Install the app on the other computer.

    2. Copy the /data folder from the old computer to the new computer and place it in the folder you are running the app from.

  2. I am unable to view the GUI.

    1. Ensure that you have Java 11 installed on your computer.

    2. You can check your current Java version by opening up a Command Prompt or Terminal, and entering java -version.

    3. Do install Java 11 if it is not installed. If installing Java 11 does not work, then try installing JavaFX 11 Dependencies on your computer.

  3. I cannot double-click on the application!

    1. Ensure that you have Java 11 installed on your computer.

    2. Open up a Command Prompt or Terminal

    3. Navigate to the directory that ZeroToOne is stored in

    4. Run java -jar <zerotoone_filename>.jar

7. Command List

GLOBAL FLAGS

e/ - exercise name
w/ - workout name
s/ - number of sets
r/ - number of reps
m/ - weights
d/ - datetime
f/ - frequency
p/ - file path
st/ - start time
et/ end time

General: <command> <arguments>

start WORKOUT_ID
stop
done
skip
help
exit

Exercise: exercise <command> <arguments>

exercise create e/<exercise_name>
exercise set add EXERCISE_ID r/<num_reps> m/<weight>
exercise set delete EXERCISE_ID SET_ID
exercise set edit EXERCISE_ID SET_ID r/<num_reps> m/<weight>
exercise find e/<exercise_name>
exercise list
exercise edit EXERCISE_ID e/<exercise_name>
exercise delete EXERCISE_ID

Workout: workout <command> <arguments>

workout create w/<workout_name>
workout exercise add WORKOUT_ID EXERCISE_ID
workout exercise edit WORKOUT_ID EXERCISE_ID NEW_EXERCISE_ID
workout exercise delete WORKOUT_ID EXERCISE_ID
workout find w/<workout_name>
workout delete WORKOUT_ID
workout list
workout edit WORKOUT_ID w/<workout_name>

Schedule: schedule <command> <arguments>

schedule create WORKOUT_ID d/<datetime>
schedule edit SCHEDULED_WORKOUT_ID d/<datetime>
schedule delete SCHEDULED_WORKOUT_ID
schedule list

Log: log <command> <arguments>

log list
log delete LOG_ID
log find [st/<datetime>] [et/<datetime>] [w/<workout_name>]
log display [st/<datetime>] [et/<datetime>]

8. Glossary

CLI

Stands for Command Line Interface, which processes commands to a computer program in the form of lines of text.

Exercise

A single type of exercise, for example push ups or crunches.

Gradle

A build automation tool.

GUI

Stands for Graphical User Interface, which is a form of user interface that allows users to interact with electronic devices through graphical means, not textual means.

Instance

A specific instantiation of an object.

Java

A programming language.

Mainstream OS

Windows, Linux, Unix, OS-X

Schedule

A workout that has been planned to be carried out on a specific date or dates.

Session

An instance of a workout, whereby the workout is a template for a session.

Set

An exercise set that consists of the number of repetitions and its weight.

Workout

A list of exercises to be done together, in a certain order.

Log

A workout that has been completed and stored away safely.