Steven's Project Portfolio Page
Project: Gim
Gim is a desktop app for managing gym exercises, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). Gim builds on the commands of Vim so if you can type fast and are an avid Vim user, Gim can optimize your exercise routines to a much greater capacity than traditional GUI apps.
Given below are my contributions to the project.
- New Feature:
:range start/START_DATE end/END_DATE
command (PR #92, #119)- What it does: Displays a list of exercises within the time period defined by the start date and end date.
- Justification: This allows users to easily view exercise within a time period, which is a common operation.
- Highlights: Tracing of the original AB3 code base is necessary to understand how a new command can be added. The integration of Java’s LocalDate APIs is crucial to this command as well.
- New Feature:
:range last/NUMBER_OF_DAYS
(PR #92, #119)- What it does: Displays a list of exercises the last N days, where N is the number of days the user inputs.
- Justification: This allows users to easily view exercise within a time period, without inputting the specific dates.
- Highlights: Tracing of the original AB3 code base is necessary to understand how a new command can be added. The integration of Java’s LocalDate APIs is crucial to this command as well.
-
Code contributed: RepoSense Link
- Enhancements to existing features:
- Allow date to be optional when adding an exercise using
:add
(PR #86, #108)- What I did:
- When the date field for
:add
is empty, the date will be set as today’s date by default.
- When the date field for
- Justification:
- This is to make the
:add
command shorter and increases speed of adding an exercise when one wants to add exercises for today.
- This is to make the
- What I did:
- Allow a variety of common date formats (PR #108, #119)
- What I did:
- Allow different separators, such as
15/05/2002
,15 05 2002
,15-05-2022
. - Allow Day-Month-Year and Year-Month-Day formats, such as
15/05/2022
or2022/05/15
.
- Allow different separators, such as
- Justification:
- Improve user experience by allowing more input variations.
- What I did:
- Allow date to be optional when adding an exercise using
- Testing:
- Add unit tests for
Date
,FormatterList
,RegexList
,RangeCommand
,RangeCommandParser
,AddCommandParser
,DateWithinRangePredicate
to improve Codecov code coverage. (PR #217 etc.)
- Add unit tests for
- Documentation:
- User Guide:
- Developer Guide:
- Class diagram showing the relationship between
Date
,RegexList
andFormatterList
. - Sequence diagram for
:range
command. - Explanation on the implementation of
:range start/START_DATE end/END_DATE
command. - Explanation on the implementation of
:range last/NUMBER_OF_DAYS
command. - Explanation on the implementation of the
Date
class.
- Class diagram showing the relationship between
- Community:
- Add a guide for the team to refer to on how to use Gradle to run tests and checkstyle for CI checks locally before making a pull request. (PR #29)
- Add a guide for using Codecov to see which parts of the code base can be covered better. (Issue #224)
- Discussed design choices with their benefits and trade-offs and implementation options with the team.
- Analyzed team member’s Pull Requests (PRs) and provided feedback.
- Brainstormed on the potential bugs in the app and ways to rigorously test the features.