AlgoBase is a desktop algorithmic problem manager. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 20 kLoC.
This project portfolio details my individual contributions to the AlgoBase project. It includes a summary of the enhancements and other contributions I made throughout the duration of the project. Additionally, portions of my contribution to the User Guide and Developer Guide have also been included.
-
Code contributed: Code contributed
-
Major enhancement: Implemented the problem searching and sorting feature.
-
What it does: allows the user to filter problems by combining search constraints on most fields (e.g. problem names, sources, descriptions, difficulty, etc.), allows user to save and reuse some typical search rules and allows user to sort the search result.
-
Justification: To organize algorithmic questions, the first step is to find a proper subset of AlgoBase to either add to a training plan or solve the problems directly. Searching and sorting feature should be one of the most frequently used features in AlgoBase. Plus, by enabling the user to save certain frequently used find rules (e.g. medium difficulty), we essentially made it possible to create a problem list that’s dynamically updated according to certain rules - the user no longer needs to manually add tags or create plans for problems with certain properties, they can just use the saved find rules to locate them.
-
Highlights:
-
This is a full-stack feature involving all the components of AlgoBase from
Logic
toModel
toStorage
toUI
, consisting of roughly 3000 lines of functional code and more than 2000 lines of testing code. -
findprob
can search on almost all fields of a problem whilesortprob
provides 10 combinations of sorting order. -
It requires an in-depth analysis of the overall architecture of AlgoBase because
-
The original implementation of
findprob
in AddressBook accepts only one search constraint (i.e. the name), but in AlgoBase we need to support combination of arbitrary (non-zero) number of search constraints. -
The design of AB3 only considers "filtering" problems, thus it used
FilteredList
to supportfindprob
command. However, AlgoBase needs to support bothfindprob
andsortprob
. We need to redesign the way AB3 exposes the processed observable list to the UI so that the list accepts both a predicate and a comparator.
-
-
-
-
Minor enhancement: Implemented the command history feature.
-
What it does: allows the user to navigate to previous commands using
Up
andDown
keyboard shortcut. -
Justification: This feature makes
addfindrule
more useful - the user can first check if their problem find rule is working as expected by executing it usingfindprob
command, then pressUp
to restore the command text, change the command word toaddfindrule
and assign a name to the added find rule. -
Relevant pull request #105 #137 (Adapted some code from AB4)
-
-
Other contributions:
-
Project management:
-
Managed releases
v1.3
,v1.3.4
,v1.4
(3 releases) on GitHub
-
-
Enhancements to existing features:
-
Re-implement the
help
command: #81
-
-
Documentation:
-
Explains how reserved words should work in AlgoBase (used as a reference in the development) #35
-
-
Community:
-
As shown below, I participated in the review of most (significant) PRs in AlgoBase and provided some in-depth comments to make sure that the code quality of this project is consistent.
-
PRs reviewed (with non-trivial review comments): #24 #37 #65 #66 #67 #70 #80 #85 #116 #145 #147 #201
-
Contributed to forum discussions
-
Reported bugs and suggestions for other teams in the class:
-
-
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
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. |
Remaining part: Design - Model