About me
I am a team member of the JitHub developer team, in-charge of managing the documentations and implementing the Reminder feature (Major enhancement). I also attempted to work on natural language processing and Remark command (Minor enhancement)
Overview
JitHub is an addressbook application that allows you to quickly navigate the GUI with efficient CLI (Command Line Interface) commands. JitHub also allows you to input your timetables and compare them with yours peers on the Calendar GUI, for easier scheduling of meetings. Coded in Java, JitHub has excellent portability and can be run on any device installed with Java RunTime Environment.
Summary of contributions
- 
Major enhancement: Added a Reminder Command - 
What it does: The Reminder feature automatically stores and displays an upcoming meeting’s details on the GUI. Multiple reminders can be set for different meetings, and can be viewed in a scrolling panel at the side of the application. 
- 
Justification: The Reminder feature complements the user experience of JitHub significantly. By displaying meeting details on the GUI, it reduces the risk of users forgetting about their meetings, especially if their schedules are packed. 
- 
Highlights: This enhancement affects existing commands and taught me how to manage multiple classes that constitute a command, as well as how to enable my command to interact with the UI component. The greatest challenge 
 
- 
- 
Code contributed: [Reposense] 
- 
Other contributions: - 
Project Management: I was in-charge of documentation and managed releases V1.1 to V1.4 on GitHub with the rest of my team 
- 
Feature: I attempted to add natural language processing to the Command Line Interface as my initial Major Enhancement. - 
What it does: The Natural Language Processing allows users to input their commands in any order and it will still be recognised by the parser. 
- 
What went wrong: I could not fix the many edge cases that caused my tests to fail, and also I realised that ArgMultiMapwas already doing a large part of what I attempted and hence decided to change my feature at Milestone V1.3.
- 
Highlights: I’ve learnt about how to account for multiple edge cases and work my code around them so as to make it more universal. 
- 
Code contributed: - 
V1.1 [Non-functional code] 
- 
V1.2 [Non-functional code] 
 
- 
 
- 
- 
Enhancements to existing features: 
 
- 
Contributions to the User Guide
| Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. | 
Add Reminder: reminder
Adds a reminder for your next meeting, containing details like the title, date, time and agenda of the meeting.
Format: reminder tt/TITLE d/DATE(DDMMYYYY) st/START_TIME ag/AGENDA
| Reminders with the same  | 
Examples:
- 
reminder tt/CS2113T Meeting d/03112018 st/1900 ag/Milestone 1.4
- 
The following sequence of images illustrate how the example ReminderCommandis executed in JitHub.- 
Step 1: User inputs command in Jithub’s command box. 
 
- 
 
- 
Step 2: On successful addition, the results box will display this message. 
 
- 
Step 3: The newly added Reminderwill be displayed on theReminderpane of theUIsidebar, below theTodopane.
 
Contributions to the Developer Guide
| Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. | 
Reminder Feature
Add a reminder to notify users of an upcoming meeting.
Current Implementation
The reminder mechanism is facilitated by the ReminderCommand, which extends Command, from the Logic component. A Reminder object is instantiated and each Reminder object consists of Title, Date, Time and Agenda objects.
The following diagram illustrates the Reminder class:
 
Given below is an example usage scenario of how the reminder mechanism behaves at each step.
Step 1. A student launches the application for the first time and types in a valid reminder command into the CommandBox Pane.
Step 2. The command will be parsed into the AddressBookParser class.
Step 3. AddressBookParser recognises the command word reminder and parses the remaining arguments into ReminderCommandParser.
Step 4. ReminderCommandParser checks for the validity of the title, date, time and agenda parameters.
Step 5. If the parameters are valid, addReminder() in the Model component updates the VersionedAddressBook with the new Reminder.
Step 6. This exposes an unmodifiable ObservableList<Reminder> that the ReminderListPane in the UI is bound to, automatically updating itself upon the addition of the new Reminder.
The following diagram illustrates how the ReminderCommand operation interactions with the Logic and Model components:
 
Design Considerations
Aspect: Checking for duplications of reminders
- 
Alternative 1 (current choice): isSameReminder- 
Pros: Easy to implement and write the test as it checks for all the parameters of a reminder. 
- 
Cons: This implementation may store too many similiar reminders. 
 
- 
Aspect: Too many UI Windows
- 
Alternative 1 (current choice): Implementing a VBoxto split theTodoandReminder- 
Pros: This makes the 2 panes take up only half the size of normal panes, reducing the clutter on the screen. Since there isn’t a need for too many TodoandReminderto be displayed concurrently, a small pane is useable. Furthermore, the individual panes are also scrollable and resizeable.
- 
Cons: This results in a smaller pane for each component, which may cause them to be overlooked. 
 
- 
- 
Alternative 2: A command to switch between the TodoandReminderpanes- 
Pros: More space is catered towards both panes, allowing for the display of more information. 
- 
Cons: Concurrent viewing of TodoandReminderwill not be possible.
 
- 
