Skip to content

Latest commit

 

History

History
125 lines (91 loc) · 7.14 KB

le0tan.adoc

File metadata and controls

125 lines (91 loc) · 7.14 KB

Tan Yuanhong - Project Portfolio

PROJECT: AlgoBase

Overview

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.

About this portfolio

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.

Summary of contributions

  • 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 to Model to Storage to UI, 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 while sortprob 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 support findprob command. However, AlgoBase needs to support both findprob and sortprob. 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.

    • Relevant pull requests: #49 #61 #64 #90 #94 #107

  • Minor enhancement: Implemented the command history feature.

    • What it does: allows the user to navigate to previous commands using Up and Down 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 using findprob command, then press Up to restore the command text, change the command word to addfindrule 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

        • Fixed the forum issue template #126

        • Reported module website’s inaccurate information on PPP #149

      • Reported bugs and suggestions for other teams in the class:

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.

More contributions to the User Guide

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.

Remaining part: Design - Model