analysis and reflection - VilleKylmamaa/WorkoutLogAPI GitHub Wiki
๐ Chapter summary
In this section we would like that you reflect about the work you have done during the course.- Reflect about own learning
- Feedback on course instruction
โ๏ธ Chapter evaluation (max 4.5 points)
You can get a maximum of 4.5 points after completing the Analysis and Reflection section.๐ Content that must be included in the section
Explain how you would improve your RESTful API and your client application. Try to develop the ideas, and explain why each improvement is neededโ๏ธ Evaluation criteria(max 1.5 points)
- Future work is provided and carefully thought out: 1.5
โ๏ธ Write here your text
There are additional resources that the API could provide. For example, a 1-rep max calculator, so that clients don't have to use another source for estimating their maxes. There could also be a fun resource which in response to a GET request iterates over all sets done for a specific exercise and using a formula for estimating 1-rep max from a non-maximal set, finds the highest estimate.
The API could also incorporate nutrition log functionality and exercise information database like the wger API I reviewed on the "DL1. RESTful API description" page.
Training program could perhaps be more integrated on the API side. However, given that there are tons of different kinds of workout programs, trying to make an all-fit or near all-fit structure is difficult. At that point you might be just designing another Excel sheets.
A sweet-looking and easy-to-use GUI is basically required from all applications nowadays, so that can always be worked on. Responsiveness and page transitions could be improved. On the functionality side, I would mainly focus on integrating a training program to automatically provide workouts, i.e. the exercises that should be done, how many reps and sets, for what intensity and RIR, etc.
๐ Content that must be included in the section
Discuss in this section the things that you would have done differently if you started the project after this course ends.โ๏ธ Evaluation criteria(max 1.0 points)
- A short reflective description of what was learned while working on the project 1.0
โ๏ธ Write here your text
The main thing I would have preferred to do differently is do the course with the multiple deadlines option and a team during the spring. This course was a ton of work alone and also a little shorter during the summer than spring. I followed the Mattermost chat and Moodle page for finding team. I should have tried harder to find a team.
The multiple deadlines and meetings would have greatly helped organize everything. Discussions with team members and the feedback from staff meetings would likely have solved a number of problems earlier. When you notice a problem late, there will be so much code and documentation that you have to update. Given this, I better realize the value of the time put into designing before implementation.
๐ Content that must be included in the section
Comment where you encountered the main difficulties while doing your project work. Discuss about the easiest/most difficult parts of the project. Provide convincing statements.โ๏ธ Evaluation criteria(max 1.0 points)
- A short reflective description of the easiest/most difficults parts of the projects 1.0
โ๏ธ Write here your text
I had very little experience with databases beforehand so I found making the different kinds of relationships and all the restraints work challenging. I had trouble figuring out the general structure. The multiple paths to the same resource added a lot of work. Perhaps I made it a little bit harder than it needed to be. I also had no prior exercise with APIs. Early on, I found it hard to understand what should happen on the API side and what on the client side.
I kept changing between having exercises as unique and non-unique. In general, deciding what is unique and what is not was hard for a workout log because workouts and what happens in them aren't particularly unique. Basically the only guaranteed unique thing I can think of in a workout is the date and time it happens.
Which brings us to datetime. If a workout's date is unique, then you can't store multiple workouts on one day, so you need datetime. Datetime is ridiculously hard to deal with in a Flask SQLAlchemy API. A datetime column has to store a datetime object but JSON can't serialize a datetime object so you have to do conversions from object to string and string to object.
I wanted to have datetime in the URL for a specific workout. All those microseconds are ugly and make asking for a valid request from a client just awful so I tried to cut them out. Not too difficult for a string but Flask takes the URL for the resource straight from the database, where it sits as a datetime object, so the URL will contain the microseconds no matter what. That means you can't find the resource without the microseconds. I tried turning everything from seconds to microseconds to 0, but datetime object still always has all those zeros all the way down to microseconds. I even tried padding strings with enough zeros but just couldn't get it to work before I gave up.
I had some prior experience with HTML, CSS, JavaScript and jQuery, so implementing the application was quite easy, except ajax calls are a lot of trouble because of their asynchronous nature.
๐ Content that must be included in the section
Make sincere comments about the course. How this course could be improved? What should be changed? What should not be changed?โ๏ธ Evaluation criteria(max 1.0 points)
- Useful course feedback - what we should change, what we should keep: 1.0
โ๏ธ Write here your text
I would definitely keep heavily recommending students to take the multiple deadlines option and have teams. The amount of required documentation is heavy but I also understand why that is. I think the course material on Lovelace and the GitHub sensorhub example are good which made the course doable for me even alone. More examples of different kinds of cases could always be given but it's good to let students figure stuff out on their own too. I had to solve multiple problems specific to my project during each phase, which is good.
I like that the course includes both the API and the client. I think the evaluation weight of the API vs. the client is proper with the main focus being on the API since a proper GUI client could be a whole course on its own.
I found the course very useful. It forced me to learn a lot.
Task | Student | Estimated time |
---|---|---|
All | Ville Kylmรคmaa | 1h |