Throughout our busy student lives, stress and failure due to poor time management was often a harrowing reality. We could pinpoint moments when incorrectly ordering our deadlines and commitments through the day had dropped morale and motivation to work, and therefore led to unacceptable productivity levels.
We wanted to help students and all busy individuals by removing the chore of figuring out when to complete tasks. This is where MoodViewed comes in, reordering your calendar in a way that suits your mood for the day. Studies show that at negative mood levels, hard work could not be accomplished well and some motivating factors, such as the satisfaction of completing an easy task could precede your hard tasks and leave you with greater energy to complete it.
What it does
MoodViewed prompts the user to input all their fixed time events and schedulable tasks, even with deadlines! Then takes care of the rest for you by using a Natural Language Processor (Google NLP) to get sentiment analysis on your statement. Based on this derived mood, and factors such as difficulty and closeness of deadline your events and tasks are smartly ordered.
How I built it
- Using the R programming language, an optimized multiple regression model was determined for the 3 variable (difficulty, duration, and deadline) model to best align events with scheduling priorities.
- JSON data is imported and the main file running the back end system is done in Python with functions to calculate the heuristic values for our events, order them based on sentiment values (and difficulty). If the sentiment is below a "negative" threshold your day will start with a few easy tasks followed by some hard tasks and alternating between the two to give the user a balanced yet motivating workload. (similarly but in reverse for a positive sentiment), if you're feeling neutral at the particular moment your events will be returned in the entered order.
- Events are then assigned time slots in succession using linked lists in Python and finally returned as JSON to the front end.
Front End: On the front end, React was used to design the interactive interface for the user, as well as page functionality such as the event editing and a button to trigger the algorithm if reordering the events is required. JSON was passed to the Google App Engine which does the processing, and a JSON array of ordered scheduled items are received on the front end and rendered as a stack of elements representing the to-do list. The difficulty that the user inputted is also shown to demonstrate the functionality that the ordering changes based on a set of criteria including the sentiment of their inputted string. The user is asked to input a series of answers to our questions to inquire about their day.
Challenges I ran into
- Connecting Front end to Back end poses an issue in terms of getting a response from the Google Server to run the Natural Language Processing of the sentiment analysis part of our application. Everything worked locally quite easily, however, we ran into issues when attempting to deploy to the Cloud. Understanding what was required for the application to be built and run on the cloud, required deep investigation and finding out which packages and authentications were required also proved to be a challenge. Another issue with the cloud is that the debugging process was very convoluted, and digging into the build logs on Google App Engine and understanding the errors was difficult. However, we did end up overcoming these Cloud-based difficulties and allowed us to not have to run a local server with an exposed endpoint re-route through ngrok, but with a Google App Engine (appspot) endpoint instead.
- One other issue was hitting the endpoint through the front end, and choosing how to pass the JSON data to the server. We had to tinker around to find the right fit with the configuration that we had for our application.
Accomplishments that I'm proud of
From this project, each hacker had a hand in the Full Stack Development experience giving us an enhanced and realistic hackathon development experience. Creating a functional and deployed web app that can take a load off of our minds to relieve stress in the little ways that it builds up. Furthermore, working with the Google NLP API and seeing its ML capabilities in action had given great insight into the possibilities that machine learning has to offer for bettering the lives of individuals.
What I learned
- How the Google NLP API can be used in a python-based project to facilitate sentiment analysis on an inputted text block.
- Practical experience using the Pandas python library to manipulate dataframes using SQL-like methods, but after discovering simpler ways to transform incoming front end data, the focus was then shifted to simple reindexing and sorting using Standard Python Library functions.
What's next for MoodViewed
- Automated tagged Difficulty values, ML generated: The future could show a tag-based input system that can be used to automatically set difficulty values to your tasks based on (e.g how often you rescheduled it and other metrics)
- We would also like to include a machine learning model that will learn based on user habits. Based on similar difficulty tasks and their delta between completion time and estimated time, in the future, when the user tries to add in a task with the same difficulty, we will pop out a suggestion to maybe consider adding some more time, following past trends.
- We will also allow the user to be able to edit a task on our desktop, allowing them to make changes to future tasks they have previously added, and then reschedule it based on the new time allotments.