Max Ng's Project Portfolio Page
Project: PlanIT
PlanIT is a task scheduling application targeted at NUS computing students. Our goal is to improve students’ productivity with features and tools to help them manage their schedules. It features simple and short commands that are enhanced for fast typists as well as features which focuses on solving our target audience’s problems.
Given below are my contributions to the project. All features include unit testing.
- New Feature: Added a
status
attribute.- What it does: Allows the user to track tasks which they have completed and tasks which may be uncompleted.
- Justification: Users can track if they have completed a recurring task by setting the status to ‘done’.
- Highlights: The status attribute will be set to ‘not done’ by default, allowing users to quickly add tasks without typing unnecessary characters.
- New Feature: Added the ability to quickly mark a task’s status as done.
- What it does: Shortens the process to mark a task as done.
- Justification: During testing, the done command was a frequently used command and was a bottle-neck in the efficiency in utilizing commands in PlanIT. Providing a shortcut solves the issue of spending unnecessary time on a frequently used command, solving one of our user’s pain points.
- New Feature: Added the ability to postpone a task’s date attribute.
- What it does: Postpones a task’s date to a later date by the given number of days specified by the user.
- Justification: Our target user, NUS computing students, often face instances when a meeting gets postponed, or a more pressing issue has arise which requires other tasks’ deadline to be postponed.
- Highlights: The
snooze
command can still work with only 1 parameter, the INDEX, and sets the default number of days to postpone a task as 1; this shortens the command even further.
- Enhancements to existing features: Refactoring of code for constraint enforcement.
- Refactored the checking of conditions and enforcement of constraints over a period of time from Pull request: #103 to Pull request: #217
- Key issue 1: The first step was to create a class which is in charge of checking constraints. This improved the later process of changing and editing the various checks for constraints as our group decides to change certain logical implementations of the conditions and constraints on task creation.
- Key issue 2: The next step was the planning of the architecture. While the facade class can directly access the various functionalities provided by the various attribute classes (e.g Date, RecurringSchedule, etc), this would violate the law of demeter. Furthermore, the checks cannot be done on the model since potentially invalid tasks cannot be added to the model first. The final implementation can be found in the DG.
- Testing: Added unit tests for the various constraints and conditions classes. (Pull request: #125)
- Enhancements to existing features:
- Refactored Add and Edit commands to abide by SLAP and fix error messages to be specific to the issue causing it. Pull request: #204
- Error messages are also more consistent due to the modularity of the code.
-
Code contributed: RepoSense link
- Documentation:
- User Guide:
- Developer Guide:
- Community:
- Contribution to team-based tasks:
- In charge of merging pull requests and ensuring that reviews for PRs are valid.
- Help set up the GitHub team org and repo.
- Managed issue tracker, assigning of issues and tagging of issues for PE-D.
- Monitored team tasks using Github Project board.