Kingston Kuan Jun Xiang - Project Portfolio Page
Overview
E-Duke-8 (pronounced “Educate”) helps CS2113/T students learn and understand software engineering and Object-Oriented Programming (OOP) principles through a gamified platform and enhances their learning experience.
Summary of Contributions
- New Feature: Implemented and maintained the Storage component.
- What it does:
LogStorage
saves logging data,TopicsStorage
loads topic data andUserStorage
saves and loads user data locally. - Justification: This feature improves the product significantly because a user does not need to add questions manually for the quiz through the CLI, the user’s statistics will be stored which enhances gamification, and user logs are available to identfy causes of bugs in the application.
- Highlights: The saving of user data does not actually require the implementation of a
User
class as the user attributes for each question are extracted directly from the question. This design was chosen so as to not increase the overall complexity of the system. The error handling was also challenging as the files save locally are easily editable by the user. ForTopicsStorage
, if the format of the JSON file is not correct then the program will not startup and users will be directed to instructions to fix this instead. ForUserStorage
, if the user chooses to tamper with the user data, badly formatted data will result in a safe loss of data and the program will continue to run. Furthermore, as it is not guaranteed that users will download the default data file, this was included as a resource in the jar file to allow normal operation while still allowing edits though the external path. - Credits: This feature relies heavily on the use of the
JSON.simple
library as data is stored in JSON format.
- What it does:
-
New Feature: Implemented the initial quiz logic to be a separate interface from the main menu.
-
Code contributed: RepoSense link
- Project management:
- Managed releases
v1.0
-v2.1
(3 releases) on GitHub
- Managed releases
- Enhancements to existing features:
- Implemented a fix for problems with the timer feature on Windows for command prompt/powershell. The user input was no showing up due to the use of the
BufferedReader
instead of the usualScanner
. The workaround usedFuture
andExecutorService
to get the user input asynchronously in a separate thread while allowing for aTimeoutException
to be used for the timer. However, this required the use of aRobot
to complete theFuture
which did not work in headless environments like WSL. I recommened for this to be fixed in a separate issue by doing an OS-dependent timer. (Pull requests #158)
- Implemented a fix for problems with the timer feature on Windows for command prompt/powershell. The user input was no showing up due to the use of the
- Documentation:
- Community:
- Tools:
- Integrated a third party library (JSON.simple) to the project (#13)