Studies at Olin College of Engineering,
Class of 2021
Studies at Olin College of Engineering,
Class of 2021
In undertaking this project, our goal was to create a webapp that helps one be productive and find time to spend on activities they enjoy. Creating something practical was one of our fundamental values and we both felt as though there were a handful of challenges related to time management. We also wanted to use this as an opportunity to broaden our software skills and explore areas we had yet been exposed to. Building a webapp was a new area to both of us when we started, as was writing in HTML. Luis has a specific interest in making a program that is interactive. He wanted to gain familiarity with python input commands and using user information. Anna’s individual goal was to explore webapp development and design. Ultimately, we both want to expand our grasp on python by navigating into different areas then we had touch upon in class.
Upon starting this project, neither of us had any experience with Flask or working with databases. As we moved away from python and user interactions in the terminal, we faced many new obstacles. At the very beginning of the transition over to Flask, we had to figure out how to implement Flask-Forms and embed user entries and submit buttons. Along with this, we had to do something with the information we were gathering from the user and add it to a database. After exploring our options, we found Flask-SQLAlchemy would integrate nicely and be the best fit.
At this point we had finished the login and had a table of users that held usernames, passwords, and emails. Our next step was figuring out a way to save activities and their respective information (user, time, and progress) in the database. Since we knew that it would not be a one-to-one relationship between users and activities, one user could have many activities, we had to figure out a way to bridge two tables. To combat this problem, we created a column in the activities table that stores the current user at the time of the creation of the activity. This allowed us to be able to filter the activities by the current user when we were querying values from the table to render the dashboard page. This deviated to our initial thoughts on how we would approach this problem. Originally we had tried to bridge the two tables by creating user ids and activity ids through which we could cycle through to look up a specific user's information. However, this proved to be cumbersome and was only successful at getting the first user's data despite there being multiple users saved in the database.
Along the lines of communication between Flask and SQLAlchemy, we had to find a way to save and respond to user input. We had many different form components, all of which took user information and needed to add or verify the information submitted. On the other hand, we also inserted buttons on the dashboard so that the user could easily update their progress and data on their home page. In order to achieve this feature, we needed to find some way to detect a push of a button, figure out which user account was currently logged in, identify which activity was being updated, and then update the right value in the database. This sequence of events all had to happen behind the scenes to allow the user to not have to do additional work.
Moving forward, we want to implement a date and time feature. Our idea was that a user would be able to set an interval over which they would have to try and reach their goals. At the moment, we do not have a way for a user to choose an time frame for achieving their goal, but we have given it some thought. We could have the user chose their start date and then get date and time information from the computer so that the program knows how much time has passed and how much time is left to complete a goal. Although, with this real-time tracking, we would have an additional set of data to work with and could potentially create a useful visualization of a user's time break up. Right now, we just a progress bar for each activity, but nothing yet that connects all of the times and activities. Additionally, it would also be really exciting if we could do some mobile app development and potentially make this app accessible on phone. A mobile app version lends itself to quick and easy interactions so that the process of logging information is not cumbersome.
From a technical standpoint, the both of us have learned a great deal about WebApp development, working with Flask, HTML, and working with databases. We started knowing very little and problem solved along the way. This was also a great opportunity to gain experience programming on a team. There are a handful of differences between working alone and programming with a partner which are important to be exposed to and work through.
Since this was a long term project, we got a chance to participate in architectural reviews which we found very helpful and insightful. From these, we learned about presenting our code and challenge, asking for advice and suggestions in areas we were less sure about, and leading a feedback driven discussion. Neither of us had had an opportunity to present unfinished code in front of an audience before and ask for help. It was definitely a worth while experiences as we received a lot of useful feedback and suggestions from our classmates. Sometimes a new set of eyes looking at a problem can help solve a seemingly challenging problem.