Project: Socius

Socius is a contact management desktop application used for CS2103T module takers. Socius is a platform to help students find potential project group mates for CS2103T. The user interacts with it using a CLI, and it has a GUI created with JavaFX. Socius is written in Java, and has about 12 kLoC.

Given below are my contributions to the project.

  • New Feature: Added the ability to import/export JSON file.
    • What it does: allows the user to import contacts from a JSON file, and also export the current data to a JSON file.
    • Justification: This feature improves the product significantly because without it, the user will need to manually add data which is tedious.
    • Credits: Adapted some file related functionalities from AB3
  • New Feature: Added a statistics command that allows the user to see the nationality statistics of a tutorial group.
    • What it does: allows the user to see a pie chart containing the breakdown of nationalities in a tutorial group.
    • Justification: This feature improves the product because it can help users get an overview of how their tutorial group looks like.
    • Highlights: The main challenge when implementing this feature was displaying the pie chart properly
  • New Feature: Added an alias command that allows the user to give an alias to any commands.
    • What it does: allows the user to bind a particular keyword to a command.
    • Justification: This feature improves the product significantly because it allows user to save the time and effort of typing long commands.
  • New Enhancement: Added an input suggestion enhancement that suggests potential keyword(s) when a user types in something wrongly.
    • What it does: Provides word suggestions when there is a typo by the user, similar to the “Did You Mean” feature in Google.
    • Justification: This feature improves the user experience quite significantly especially as new users might not yet be accustomed to our command keywords.
    • Highlights: Implemented using a dynamic programming algorithm called Wagner-Fischer algorithm, which computes the Levenshtein distance of any two words. The dynamic programming algorithm used is significantly faster (quadratic time) than the more straightforward but slower recursive algorithm which takes exponential time.
  • Enhancements to existing features:
    • Added TutorialGroup attribute to the Person model. (Pull request #54)
    • Wrote additional tests for new and existing features. (Pull request #54, #311)
  • Code contributed: RepoSense link

  • Project management:
    • Set up the GitHub team organization
    • Made 27 pull requests on GitHub
    • Finished and closed more than 50 issues
  • Review contributions:
    • In charge of reviewing and approving pull requests with one other teammate.
    • Reviewed more than 50 pull requests.
  • Documentation:
    • User Guide:
      • Added documentation for the features alias, import, export, and import. (Pull request #92, #94)
      • Refactored UG based on mock PE. (Pull request #258, #281)
    • Developer Guide:
      • Added implementation details and UML diagrams for the alias, import, export, import, and input suggestion features. (Pull requests #126, #259, #282, #314)
      • Added use cases for tag and remarks. (Pull request #45)
  • Tools:
    • Integrated Codecov into the team repo