Overview
This is a desktop Efficient Learning Scheduler application. It has a GUI but most of the user interactions happen using a CLI (Command Line Interface). It is a Java application targeting NUS School of Computing students who are interested to learn how to learn. Our efficient learning scheduler implements ALSET’s proven learning strategy such as spacing. We believe that with our application at your expense, you will be able to develop a good and efficient learning habit that will help you achieve your academic or career goals.
Summary of contributions
-
Major enhancement: added the ability to interleave study time
-
What it does: allows the user to interleave self study time for every modules taken.
-
Justification: This feature improves the product significantly because it allows the user to study efficiently.
-
Highlights: This enhancement is what separates this program from other timetable programs.
-
Credits: Interleaving technique from ALSET.
-
-
Code contributed: https://nus-cs2113-ay1819s2.github.io/dashboard/#=undefined&search=sameow
-
Other contributions:
-
Project management:
-
Managed releases
v1.2.1
on GitHub
-
-
Community (Coming soon):
-
Tools:
-
Integrated a new Github plugin (Travis) to the team repo
-
-
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. |
Generating a learning schedule: 'interleave' [coming in v2.0]
Generates a learning schedule based on the modules in the storage. A calendar week view will appear in the GUI as seen above in Section 2. User would be able to generate a timetable based on the concept of interleaving. During one of my interactions with Mr Fung from ALSET, he mentioned that students should study in settings that closely resembles exam settings. That was what inspired this project and feature. Thus, the default (and minimum) focus period is 30 mins (average human attention span) with 5 mins rest and maximum is 2 hours with 2 hours rest, as most exams lasts 2 hours and occurring from either 9am-11am, 1pm-3pm and 5pm-7pm. Format: interleave
Generate a interleaved schedule based on module codes [coming in v?.?]
Interleave each module with 30 mins blocks. Assume each module has 3 hours self study.
Sign in with student ID and timetable automatically interleaved from data from CORs [coming in v?.?]
Use the app to collect data anonymously on students users. [coming in v?.?]
Extract academic performance indicators anonymously from school database, then convert all these data into an analysable format for data analysis, trend finding etc.
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. |
Generate interleaved schedule
Future implementation
The scheduling is facilitated by interleaver
, consisting of the following operations.
-
ExtractSelfStudyHours()
— extract all self study hours. -
split()
— split hours into 30 mins blocks. -
interleave()
— interleave blocks. -
generate()
— for each block, insert them into free time slots.
Given below is a activity diagram showing how the methods above work together:

The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command interleave
.
Maximum 10 modules, until integration with CORs

interleave
commandThe Sequence Diagram below shows the interactions within the Logic
component for the interleave()
API call.

interleave
CommandUse the unmodifiable ObservableList<Person> in Model.java to update UI? Save the scheduler data in json format (Storage.java) and read it back?
Design Considerations
Aspect: How to split hours
-
Alternative 1 (current choice): Split into 30 mins blocks.
-
Pros: Easy to implement.
-
Cons: Some people might find 30 mins to be too long/short.
-
-
Alternative 2: Let user decide duration of each block.
-
Pros: More flexibility.
-
Cons: Harder to implement.
-
Aspect: How to train users to study with maximum focus period setting.
-
Alternative 1 (current choice): Progressive training.
-
Increase in focus period weekly, starting from minimum settings.
-
Users should be comfortable with 1 hour focus periods by mid semester, to help with midterms.
-
Continue increasing to maximum setting for finals.
-
Logging
We are using java.util.logging package for logging. The LogsCenter class is used to manage the logging levels and logging destinations. The logging level can be controlled using the logLevel setting in the configuration file. The Logger for a class can be obtained using LogsCenter.getLogger(Class) which will log messages according to the specified logging level. Currently log messages are output through: Console and to a .log file.
Configuration
Certain properties of the application can be controlled (e.g user prefs file location, logging level) through the configuration file (default: config.json).