Overview
TAble is your handy desktop app, optimized for TAs who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI)! Mark attendance, arrange consults, add module notes, set reminders and more with TAble! It has a GUI created with JavaFX and written in Java, and has about 20 kLoC.
Summary of contributions
-
Major enhancement: Enabled support for Reminders
-
What it does: The user is able to add/edit/delete/done/snooze/find/list all
Reminders
which he has set in TAble. -
Justification: Teaching Assistants have many tasks to keep track of when managing a tutorial class (e.g. sending of administrative information to students, uploading of materials/attendance, keeping professor up to date etc). Therefore, it is important for the Teaching Assistants to have a way to keep track of their ongoing tasks so that they are not missed out.
-
Highlights: Reminders are auto sorted according to their due date and time with different panel colors to distinguish tasks that are due, in progress or done. Reminders that are due on the current day also shows the number of hours and minutes left in real time.
-
-
Minor enhancements:
-
Added a feature that allows the user to navigate to previous commands using up/down keys
-
Eliminates the need for user to retype repetitive commands (e.g. adding students to a tutorial).
-
-
Added an autocomplete feature that provides user with suggestions according to their current input
-
Eliminates the need to type out long commands/prefixes which increases the user’s experience and productivity.
-
Credits: ControlsFX
-
-
-
Code contributed: [RepoSense - Code Report]
-
Other contributions:
-
Project management:
-
Enhancements to existing features:
-
Added the functionality for list/find commands to open the corresponding tab in GUI.
-
-
Documentation:
-
Updated User Guide and Developer Guide for Reminder features, including adding relevant PlantUML diagrams in the Developer Guide to enhance comprehensibility of the codebase and the structure of the feature.
-
-
Tools:
-
Setting up of github’s issue tracker.
-
-
Summary of contributions:
-
Created over [15 pull requests] on GitHub
-
Reviewed over [15 pull requests] on GitHub
-
-
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. |
Reminder Feature (Written by Cranston Yeo)
Adding a reminder: addReminder
Adds a reminder to the reminder list.
Format: addReminder desc/DESCRIPTION date/DATE time/TIME
Reminders will be automatically sorted according to their date and time, with the earliest at the top of the list. |
Examples:
-
addReminder desc/Mark midterms papers date/2020-10-05 time/14:00
Editing a reminder: editReminder
Edits an existing reminder in the reminder list.
Format: editReminder INDEX [desc/DESCRIPTION] [date/DATE] [time/TIME]
Examples:
-
editReminder 1 desc/Return midterms papers
Edits the description of the 1st reminder to "Return midterms paper". -
editReminder 3 date/2020-05-20 time/18:00
Edits the date of the 3rd reminder to 20th May 2020 18:00 hours i.e. 6.00 p.m.
Finding reminders by their descriptions or date: findReminder
Finds reminders matching with the given descriptions or date.
Format: findReminder [desc/DESCRIPTION] [MORE_DESCRIPTIONS] [date/DATE]
Examples:
-
findReminder desc/mark
Returns reminders containing the keyword 'mark'. -
findReminder date/2020-05-05
Returns all reminders on 05 May 2020.
List all reminders: listReminder
Lists all the reminders that the TA have added on TAble.
Format: listReminder
Marking a reminder as done: doneReminder
Marks the reminder from the reminder list as done.
Format: doneReminder INDEX
Reminders marked as done will automatically be sorted to the bottom of the list and will no longer appears in the calendar. |
Examples:
-
listReminder
doneReminder 3
Mark the 3rd reminder in TAble as done.
Deleting a reminder: deleteReminder
Deletes the specified reminder from the reminder list.
Format: deleteReminder INDEX
Examples:
-
listReminder
deleteReminder 3
Deletes the 3rd reminder in TAble.
Snoozing a reminder: snoozeReminder
Snoozes a reminder in the reminder list.
Format: snoozeReminder INDEX [day/DAY] [hour/HOUR] [minute/MINUTE]
Examples:
-
snoozeReminder 2 day/3 hour/2
Postpone the second reminder to 3 days and 2 hours later. -
snoozeReminder 4 minute/30
Postpone the fourth reminder to 30 minutes later.
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 (Written by Cranston Yeo)
TAble allows NUS SoC teaching assistants to create reminders to help them in keeping track of their ongoing or upcoming tasks.
Implementation
A reminder is made up of a description, date and time which uniquely identify each reminder. Each reminder has a boolean attribute to indicate if the task is done.
To find a reminder in the reminder list, user must key in at least one of the optional predicates, DescriptionContainsKeywordsPredicate
or DatePredicate
. DescriptionContainsKeywordsPredicate
contains a list of strings entered by the user while DatePredicate
contains the input LocalDate
.
The list of strings are matched against the description of the reminders in the reminder list while the LocalDate
is matched against the date field. The reminder list is then updated with the list of matching reminders via updatedFilteredReminderList
in Model
. Below shows a sequence diagram of the execution.
A snooze reminder feature is also implemented for the users to easily postpone a reminder. It’s implementation is similar to the editReminderCommand
where it creates a new reminder to replace the specified reminder instead of editing the current reminder directly. This is to ensure the reminders are immutable which improves the stability of the application.
User can choose to snooze the reminder in any/all of the following time units: days, hours and/or minutes. Only positive integer are allowed as the user are not supposed to snooze the reminders backwards or snooze it by zero duration. Reminders that are done are also not allowed to be snoozed. Following is an activity diagram for the command.
Design Considerations
Sorting the reminders
Alternative 1 (Current Choice): Automatically sorts the reminder list whenever a reminder is added |
Alternative 2 : Sorts the reminder list only when user enters a sort command |
|
Pros |
It is intuitive for the reminder list to be sorted according to their done status and deadline. |
User can decide how they want the list to be sorted (e.g. in alphabetical order). |
Cons |
User are not able to sort the list according to their preferences. |
User have to type the sort command each time a new task is added. |
Reason for choosing Alternative 1: We believe that automatically sorting the list provide with a better user experience as they could immediately see the most urgent tasks in the reminder’s list upon startup without first typing a sort command.
Ways to inform user about their upcoming tasks
Alternative 1: (Current Choice) Each reminder displays the duration left before the task is due |
Alternative 2 : A pop-up notification when a reminder is due or about to due |
|
Pros |
User could see clearly the duration left for each task at a glance. |
User are notified of upcoming tasks without having to look through the list of reminders. |
Cons |
Reminders that are about to due could be missed out. |
Multiple pop-up notifications from the reminders could cause annoyance for the user. |
Reason for choosing Alternative 1: Pop-up notifications can be intrusive and potentially cause lag to the program which negatively impacts user’s experience. Furthermore, they are hard to test due to their volatile nature and including them might decrease the stability of the application.
Use Cases
Use case: Add reminder (U19)
MSS
-
User requests to add reminder with description, date and time of reminder included
-
System saves the new reminder into the database
Use case ends.
Extensions
-
1a. The description, date or time of reminder is not included.
-
1a1. System shows an error message that description, date and time must all be included.
Use case ends.
-
Use case: Mark reminder as done (U20)
MSS
-
User requests to mark an existing reminder as done
-
System updates the existing reminder according to the User’s request
Use case ends.
Extensions
-
1a. The reminder does not exist.
-
1a1. System shows an error message that the reminder does not exist.
Use case ends.
-
-
1b. The reminder is already done.
-
1b1. System shows an error message that the reminder is already done.
Use case ends.
-
Use case: Update reminder (U21)
MSS
-
User requests to update either the description, date or time of an existing reminder
-
System updates the existing reminder according to the User’s request
Use case ends.
Extensions
-
1a. The reminder does not exist.
-
1a1. System shows an error message that the reminder does not exist.
Use case ends.
-
-
1b. The description, date and time of reminder are not included.
-
1b1. System shows an error message that at least one of description, date or time must be included.
Use case ends.
-
Use case: Delete reminder (U22)
MSS
-
User requests to delete an existing reminder
-
System removes the existing reminder from the database
Use case ends.
Extensions
-
1a. The reminder does not exist.
-
1a1. System shows an error message that the reminder does not exist.
Use case ends.
-
Use case: List reminders (U23)
MSS
-
User requests to list all existing reminders
-
System returns all the existing reminders from the database
Use case ends.
Extensions
-
2a. The list is empty.
Use case ends.
Use case: Find reminders (U24)
MSS
-
User requests to find all reminders matching with some keywords and/or date.
-
System returns a list with all the matching reminders from the database
Use case ends.
Extensions
-
1a. The keyword and date are not included.
-
1a1. System shows an error message that at least a keyword or date must be included.
Use case ends.
-
-
2a. The list is empty.
Use case ends.
Use case: Snooze reminder (U25)
MSS
-
User requests to snooze an existing reminder by a certain number of day, hour or minute
-
System updates the existing reminder according to the User’s request
Use case ends.
Extensions
-
1a. The reminder does not exist.
-
1a1. System shows an error message that the reminder does not exist.
Use case ends.
-
-
1b. The day, hour and minute of reminder to be snoozed by are not included.
-
1b1. System shows an error message that at least one of day, hour or minute must be included.
Use case ends.
-
-
1c. The reminder is already done.
-
1c1. System shows an error message that the reminder is already done.
Use case ends.
-