My team, comprising of 5 software engineering students, was tasked with enhancing a basic command line interface (CLI) desktop address book application for our Software Engineering project.
With modern life comes a fast-paced, hectic lifestyle. It is increasingly easy to be overwhelmed by the insurmountable number of responsibilities and tasks we have to fulfill. Most task-manager applications involve countless clicking and navigation, which defeats their purpose. To rectify this, my team decided to design a simple, no frills CLI student assistant from the address book to cater to students who prefer CLI.
We named our application ELISA, an Exceptionally Loud and Intelligent Student Assistant. ELISA enables users to add and track their tasks and events while receiving reminders for them. With a sassy and humorous personality and her user-interface interaction (in the form of a chat bot), she is simpler, yet more engaging to use than other regular task managers. There are also other features to aid the productivity of students and to spice up their life.
This is how our application looks like:
ELISA’s various components serve the following functions:
Component | Function |
---|---|
ELISA icon |
Icon of the application which changes with the different mode of ELISA. |
Result display |
The "chat box" with ELISA which contains all past user input and ELISA’s response. |
Command box |
The user can type their commands here to interact with ELISA. |
View panel |
The current view of the application. It can show the task, event, reminder or calendar panel. |
In this section, I will be briefly going through my contributions to this team project. For the full extent of my contributions to the project, please visit here.
-
Priority mode (Major Feature):
What does it do?
This feature allows the user to enter a priority mode where they are able to prioritize tasks with a higher priority first and focus on that task to complete it.
Why make it?
This features helps the user narrow their focus down to completing one task at a time and prevents them from being overwhelmed by a long list of tasks.
Why is it special?
There are multiple modes to cater to different user needs. Users can choose from a focus mode, a timed mode, a normal mode or a combination of multiple modes. The different modes will be explained in greater detail in the user guide.
At the same time, users are able to update their task list in realtime (add, delete, edit) so that they can always be sure that the task that they are currently doing is the most important one.
Difficulties?
The difficulty of this feature comes from the fact that it has to be integrated with all the other commands within the application. That means that the algorithm needs to be written in a way such that it is constantly updating itself to give the user the most important task despite the changes in the tasks.
For example, when a new task of a higher priority (than the current task) is added, the algorithm should be able to make that the task that is to be completed first. This requires a lot of integration with all the other code so that ELISA can behave differently depending on whether she is in priority mode.
-
Sorting (Minor Feature):
The sorting feature allows users to sort their items so that they are able to better arrange their items in a way that is most useful to them. Each list has its own sorting algorithm while users can also choose to sort the items based on their priority or description. Refer to here for more information on this feature.
-
Find (Minor Feature):
The find feature allows users to find an item based on the description of the item. This will aid users in getting the item that they need at the fastest possible time. Refer to here for more information on this feature.
-
Other implementations:
Helped my teammates with the following features and implementation:
-
Project management:
Review and made notable suggestions on the following PR:
-
PR #69 - gave idea of storing the priority in the item class that was ultimately adopted
-
PR #130 - gave idea of getting the command word to display to the user was ultimately adopted
-
PR #132 - gave suggestion on how to improve the code for readability and to follow coding practice.
-
PR #134 - gave idea of moving method to the
UndoableCommand
abstract class was ultimately adopted in PR #137 -
PR #141 - gave suggestion of using
Long
instead ofBigInteger
-
PR #158 - gave suggestion on how to improve the feed back message to the users for undo command, which was ultimately adopted
-
PR #252 - gave suggestion on fixing some issue with the code and optimizing it
-
Refactoring:
-
Documentation:
Given below are sections I contributed to the User Guide for my main feature. They showcase my ability to write documentation targeting end-users. |
Given below are sections I contributed to the Developer Guide for the model implementation and my main feature. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |