We began with a brainstorming session about our biggest daily problems as students at Northeastern. One major commonality was that we all felt we were wasting time, and we realized that a major contributor to this stress is the long wait times at the gym. All of us are regular users of the Marino Recreation Center and all struggle with planning gym sessions with little time between classes and club activities. When we can go to the gym, workouts are often cut short to make the next event on time, and even when we are free, we simply waste too much time waiting for our turn on the squat racks. This is when we chose to build an application that tracks average northeastern rec center crowds and schedules a gym session for us at the most empty time that fits on our schedule, at a time we desire.
What it does
Our group created a “time optimization scheduler” with a specialization in scheduling gym sessions. Our application takes in a user’s current schedule (classes, activities, etc) and desired workout information, such as duration, time of day, and location, and creates a calendar event of the most optimal (least crowded time) to go to one of Northeastern’s recreation centers.
Our Project is broken into five main parts: Web scraping from Canvas web page(Python, iCal) An interface that prompts user input and displays their Canvas calendar (HTML, CSS, Flask) Web scraping via Selenium to retrieve and analyze all Northeastern reaction center crowd metrics in 15-minute intervals (Python, Selenium) Storage of the corresponding data and analysis on a locally hosted MySQL database (SQL) An algorithm that computes optimum (and compatible) workout times based on the historical data retrieved from the MySQL database and the user’s Canvas calendar: maximizing the efficiency of time. (SQL, Python, Flask)
How we built it
After all the initial brainstorming it was time to design our application, which we broke down into the 5 main parts described above. We then allocated tasks: Dan was in charge of harvesting and storing data, Devanshi Would handle the UI and scraping the canvas page, and Sean would build the algorithm and connect Devanshi’s UI with Dan’s database. Our skeletal thought process was on the basis of the MVC design pattern.
Challenges we ran into
After our initial brainstorming, we thought about potential future expansions of our software, as discussed below, before being given a reality check that we have 36 hours to code the whole thing from scratch, so we had to be conscious of the scope of our abilities and resources. Once we began implementing, it was a matter of chutes and ladders, making progress on our code only to discover bugs, a lack of understanding of the technologies we were using, incompatibility between the code we wrote individually, and no way of connecting all the moving parts. As a result, most of our time was spent skimming documentation, debugging, and god forbid, actually communicating how our pieces would piece together! We also attempted to analyze data from the user-input HTML via Flask to our back-end Python data functions; however we ran into problems having had no experience in the flask-interface. Ultimately, we were not able to connect our UI to our backend, though we feel that we are super close, and this would be achievable with just a little more time.
Accomplishments that we're proud of
We are super stoked to make functional web scraping scripts. We had no prior experience in this field, and felt that what we accomplished from scratch in 24 hours was far beyond what we anticipated we could in many weeks. We are also very proud of our algorithm, which utilized topics from class such as Dynamic Programming and memoization, and again was an application of a difficult skill.
What we learned
One obvious part of what we learned is all of the new languages, technologies and frameworks we had to deploy to make our application possible. To name a few, we utilized Selenium to scrape the data we needed from the Rec Center website, SQL to store this data, Python to analyze it, HTML and CSS to visualize our interface. Furthermore, we learned how to connect all these complicated parts, across various databases, scripts, and files, all in different languages, which none of us had prior experience in. Calculating optimal gym times was also a deployment of our Algorithm knowledge, in which we used Dynamic Programming and memoization to decrease runtime and space usage in our algorithm from O(n^2) to O(n). Although this wasn’t really necessary, as we are working with a relatively small dataset and limits to the size of our inputs, we felt it would be good practice to implement scalable code. As always, time management was a major inhibitor of progress. As Benjamin Franklin once said, “Don't put off until tomorrow what you can do today, especially when tomorrow 9 AM is the submission deadline for HackBeanpot.” Or, something like that. Finally, we were reminded of the bliss that is running real, working, code that we designed ourselves. There were many fist pumps and shouts of joy when we got a part to work as we needed.
What's next for Mari-No more waiting
Make UI fully functional - display the schedule Improve the UI by leveraging templates Expand our application to be compatible with any gym hosted on connect2concepts. Incorporate more algorithms to recommend workout times across locations, weighted based on desired fitness style (or even muscle groups to target). make scheduled events that require reservations (such as using the marino basketball courts) automatically book reservations if open. Enable scheduling based on multiple peoples’ schedules to be able to hit the gym with friends! Recommend Events and activities based on surplus free time and location. If you’re bored, open the app to see what kind of stuff is going on around campus! Connect to the Google Maps Crowd Data API and transportation schedules to be able to optimally schedule not only gym times, but any events you desire in any location. Publish an actual website people can use to schedule their college lives to optimize how they spend their time. Make it a mobile application