Thankfully, Lyndsie convinced me last week to take today off of work. I got to sleep in a smidge and have been working on my project all day long. I couldn't say how many hours I've put in today, but probably at least 8 hours of the day. I've been debating how many hours total this project has taken, and I kind of wish that I had been keeping track. My timelines have all focused around deadline dates rather than time worked (with my lack of experience, I had no way of forecasting how much time would be required for each step) so I didn't really think about it. I surmised 150 hours so far, but Lyndsie suggests significantly more. I can't even express how much I'm looking forward to finishing this baby and getting back to my everyday life!
Today's work has focused primarily on building the Recipe Builder in the GUI. In addition to laying out the elements of the main builder tab, I've almost finished the functionality. Perhaps more importantly, I've finished work on 4 pop-up windows for editing validations, instructions, foods, and ingredients. That's no small feat considering the interconnections of all the different components.
What's really interesting about working on these user interfaces is the number of features I've discovered I had planned that were real nice-to-haves but not need-to-haves. There's a lot of functionality that I thought would be in the prototype that I've had to cut for the sake of time and scope control, but the project is coming together. Most of these things I've cut have been aesthetic matters like logically sorting the validations instead of alphabetizing them and presetting sizes on the windows. As I've been advised, these things can all wait for version 2.0.
I'm just about out of time to work on this today and really just have one goal - finishing the Recipe Builder window, which at this point is mostly a matter of deciding the logic necessary to save new recipes or update current recipes.
I would like to note something that this experience is teaching me - the value of programming to an interface! Most of my classes have a method to write to the database. They also share a number of other methods involving lists and refreshing data. Though I have named all of these methods the same and have copied code between them (oh, by-the-way, really important to make sure everything's been renamed. Spent a log of debugging time finding mistakes), I find that I forgot to do a couple in my earlier work. For example, I apparently never got around to coding the Recipe class to write to the database. How silly is that? I've got my form ready to save this sucker and have to go back and write the database writer!
Short story long - if I'd written the Interface earlier (which I considered) I would have not been allowed to leave out these methods and would have remembered them earlier. Yet another live and learn experience.
Here's the final news of the night - I just finished the rather lengthy code to save a recipe to the database and guess what - now my program won't run. Apparently it can no longer find the Recipe class, which is really preposterous! Through process of elimination (and logic) I can determine conclusively that there's a problem in the new database writer method. And voila, a few minutes of searching and it's taken care of (ironically, I didn't really change anything in the end but went back to how it was when I started).
And that's all the work I am going to do on this sucker today. My remaining tasks include:
- Write the Recipe Builder update logic
- Write the Recipe Builder delete logic
- Write the HTML builder for Recipes
- Write the database interaction methods for the Meal, Meal Plan, and Daily Plan classes
- Update the meal planner tab based on the successes and failures of number 4
- Write the GUI logic for the meal planner tab (all three interaction methods)
- Write randomizer logic for meal plans
- Design GUI for meal plan randomizer
- Design GUI for shopping lists
- Design logic for shopping lists
- Design printer control for shopping lists and meal plans
- Write Capstone Project Paperwork and submit it.
- CELEBRATE!!!!!!!! (when I pass, anyway)