Overview
My teammates and I developed Tasketch for those who need to manage their time by allocating time for each daily task. More importantly, our Tasketch is optimized for those who prefer to use a desktop app and work with a Command Line Interface* (CLI) while still having the benefits of a Graphical User Interface (GUI)
Summary of contributions
This part shows my individual contributions to our project Tasketch.
-
Major enhancement: I have added the reminder feature to our Tasketch.
-
What it does: Sometimes student tend to forget important deadline of their tasks or start time of their CCA events and etc. When users type in remind command, Tasketch will show a list of tasks in time order for them to conveniently view what tasks are coming soon so that they will know what to prepare first.
-
Justification: For busy university students, it is almost impossible for them to remember every start time or deadlines of their activities. A reminder is a common requirement of them to easily view these time in order. This feature significantly improves the users' using experience by meeting this requirement.
-
Highlights:
-
The task cards in the remind list are filled with different colors according to those tasks' urgency level. It is very striking for users to view and consequently have a good effect on reminding users.
-
This feature implement a very useful method sort() in model API which can be used to implement other features.
-
-
-
Minor enhancement: I made an enhancement to the list command of the previous version. In the previous version, list command can only list all the tasks in the storage. After enhancement, it support the following 4 kind of usages:
-
Code contributed: [Functional code] [Test code]
-
Other contributions:
-
Project management:
-
Managed releases
v1.3
on GitHub
-
-
Enhancements to existing features:
-
Updated the GUI for reminder.
-
Wrote additional tests for existing features.
-
-
Documentation:
-
Did improvement to UserGuide according to new features.
-
Did improvement to DeveloperGuide according to new features
-
-
Community:
-
PRs reviewed.
-
The filterlist() function of the new list commands I added was adopted by my teammates.
-
-
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. |
Listing all tasks : list
/l
Shows a list of tasks in Tasketch.

Format:
-
list
Lists all the tasks in the storage -
list td
List all the tasks whose start date is today -
list DATE
Lists all the tasks whose start date is that specific date -
list CATEGORY
Lists all the tasks of the specified category.
Examples:
-
list a
Lists all the tasks of academic category. -
list 02-19
Lists all the tasks which starts in February, 2019 -
list 20-02-19
Lists all the tasks which starts on February 20th, 2019 -
list
Lists all the tasks in the storage
Reminding the users of the nearest task : remind
Shows to the user the nearest tasks of certain category.

Format:
-
remind start
Reminds the users of the most recently begin tasks of all categories. The reminded tasks should be in colored task cards. -
remind ddl
Remind the users of the most recent deadline of all categories. The reminded tasks should be in colored task cards. -
remind a/e/c/r/o ddl/start
Remind the users of most recent start tasks or deadline of specified category.
"a" - Academic "e" - Entertainment "c" - Co-Curricular Activity (CCA) "r" - Errand "o" - Other |
Examples:
-
remind c start
Shows a list of nearest start CCA activities. -
remind a ddl
Shows a list of nearest deadlines of academic activities.
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
This feature will show user a remind list when remind command is requested. The remind list is a task list sorted by start time or deadline.
Current Implementation
We maintain a reminder list in each model. Note that each time user can ask for any category of tasks to be reminded, which means the remind list should contains all the tasks in Tasketch to be filtered. When the app runs, remind list will be initialised to be a FXCollections list of all the tasks in Tasketch.
Remind feature has two formats of command:
-
a)
remind [start/ddl]
-
b)
remind [category] [start/ddl]
they follows the following steps:
-
Step 1 : Sort remind list.
-
When
remind [start/ddl]
is requested, sortRemindListByStart() / sortRemindListByEnd() will be called. These two method will sort the remind list by start time or deadline of a task. -
When
remind [category] [start/ddl]
is requested, Tasketh will first do the same thing as described above. In addition, it will call filterRemindList() method to filter the remind list to contain only tasks with the specified category.
-
-
Step 2 : Update the UI.
The UI part of reminder is managed by ReminderPane class. After remind list is sorted. We update the UI of reminder in MainWindow by calling setReminder() method. setReminder() is implemented using ReminderPane. -
Step 3 : Re-initialize remind list.
Call reinitialzeRemindList() method in MainWindow to set remind list to be a FXCollections list of all the tasks.
The reason of doing this is when we show the remind list in UI, we change it from FXCollections list to a Observable list. However, in current implementation, sorting method can only be applied to FXCollections list. So we need to re-initialize remind list to be a FXCollections list containing all the tasks after each call of remind command. |

Design Consideration
-
Alternative 1: Use filteredTaskList as the remind list and all operations which are related to reminder are done to filteredTaskList.
-
Pros: Very easy to implement.
-
Cons: It is not user friendly. When user execute command like "list", "filteredTaskList" will change and as a result the remind list will also change. However, remind list is expected to be concise and up-to-date. It should point to all tasks in storage instead of filteredTaskList and only change when commands like "add" and "delete" are executed.
-
-
Alternative 2 (current choice): Implement a separate remind list in model and maintain the remind list whenever the tasks in storage change.
-
Pros: It is user friendly. As long as users don’t change the tasks in the storage, remind list will remain the same. When users make change to tasks, remind command will update remind list.
-
Cons: Hard to implement. Developers need to implement a separate bunch of methods in logic and model interface and class to maintain the remind list.
-