Inspiration
I am someone who goes to the extremes when it comes to working on assignments and projects. Either I do not take any breaks and my mental slowly starts degrading, or I take too long of breaks and I get no work done. Breaks are always good for your mental well being, but it's a bit rough to drop what you're doing and get back to work, especially if you are in the middle of doing something on an unrelated application. I've seen study timers before and I thought I could add my own twist to improve on that idea.
What it does
Other than being a timer that loops between two states, it has notifications that gives the user some "encouragement" to get off unrelated applications. There are two modes for this application, the first mode simply reminds you every 5 seconds to get off the unrelated application with a sound notification. The second mode is a bit more extreme, rather than notifying you, it simply force closes the application.
How we built it
This application was built in Python. The GUI was built using customtkinter, and using psutil alongside Powershell scripts to help monitor and enforce the blacklisted items.
Challenges we ran into
A particular challenge we ran into was ensuring the timer stopped during appropriate events, such as a blacklisted application being opened or pausing the timer. This was solved using several extra variables to ensure that we would not get stuck in infinite loops or have the the same function executing several times. Another challenge we ran into was the automatic detection and handling of blacklisted applications executing multiple times. This resulted in more notifications than intended. Solving this took a bit as we had to go through several places where it could happen. However, it turned out that one function that should've stopped running when a blacklisted application was found kept running, so it would call the handler function several times. This was solved by adding some extra conditions to the execution of the handler function.
Accomplishments that we're proud of
One particular thing we're proud of is making a functioning GUI interface. This is a very basic thing, however this is the first time we developed a standalone GUI application. Another thing is the connection between the program and Powershell scripts to execute function that otherwise would not be possible.
What we learned
As this was our first GUI application we learned a lot. Creating a cohesive interface is hard, and making sure everything is positioned correctly is challenging. Also there is a lot of power behind using a script that directly interacts with the system's terminal commands, in this case running Powershell scripts. Being able to force quit any application at will is nice, but it makes me want to explore more to see what can be achieved by using this.
What's next for Study Timer
The program is a bit rough around the edges, so a polish up is needed. Due to the fact that we were learning a lot of the tools used in this program as we were coding, there wasn't much of an opportunity to create clean code. Splitting the code into modules in the future is a must. Also, the process selector needs to be improved, as it relies on the user having some know-how on how to get process names. Rather than the user manually entering in the process name and checking if it exists, what should be done is the user is given a list of processes that are associated with applications and select whatever applications they want. The current notification system is also very bad, as the tool used to play audio requires the entire program to wait for the audio to play. The program would heavily benefit from exploring different options that can help fix this issue. Also the UI needs to be ironed out.
Log in or sign up for Devpost to join the conversation.