Starting - Pet project series - 0/x
For the last couple years I wanted to start a pet project, where I could play around with different technologies and practices.
So far it was "successful". Most of my attempts ended at the ideas stage. For two of them I went as far as creating GitHub repo. And just one project I'm restarting every 5 months and losing interest in a week.
Until today.
This is it.
This is THE PROJECT.
Why?
You would say: "But Denis, how is it different from all your previous pet projects?"
Good question. This time I have a million dollars idea! I will write weekly articles about the project. Yep! That simple. This kills two birds with one stone:
- I would be required to continue working on the project, because of the fear of being shamed by a random dude on the internet, who would send me something like: "Hey u lazy bastard where r updates?" You know what I mean.
- I will finally start writing blog posts that I promised to my English tutor 2 months ago (Sorry Brian).
Rules
First let's define a set of ground rules for the project:
- Every Friday I publish a status update post.
I would argue my decisions, findings and experience. Check it out, maybe you will find something interesting or new for you. Or the other way around, you will find mistakes on my side (feel free to get in touch in this case, highly appreciated).
- YOLO Driven Development.
No predefined architectures. Open minded approach. Solve problems when they appear. No overthinking and overengineering.
- Start with UIKit with plans for SwiftUI in future.
For too long I was delaying giving a chance to SwiftUI. This project is not an exception.
- ???
- PROFIT
Uh, we got that far and not even a single word about the project itself.
Preamble
I enjoy crafting games. They give you a clear goal and a path to achieve this goal. But as your production tree grows it becomes difficult to keep track of everything that needs to be crafted, primitives to collect and small tasks to perform. The production tree can be dozens and dozens of intermediate products deep.
Let me show you an example:
To fix a broken bridge I need: 4 wooden planks and 2 nails. While I'm here I might as well build a mailbox that requires 2 wooden logs and 1 iron bar.
Processing 1 wooden log gives you 2 wooden planks. From 1 iron bar you get 4 nails.
So in total I need: 4 wooden logs and 2 iron bars.
But I already have 2 wooden planks and 1 nail from a previous crafting project.
Adding them into the equation results in 3 wooden logs and still 2 iron bars.
Feeling the weight of math already, huh?
What I would love to see in the app
Idea of the project is to take something that I could do in Excel in an hour and spend a couple months writing an app for it. Sounds like classic IT, isn't it?
Jokes aside. What I would love to see in the app:
- Add / edit / remove ingredients.
An ingredient is a simple building block. Everything is an ingredient.
- Define / edit / remove recipe.
Recipe defines the relationship between one ingredient (product of recipe) and a set of other ingredients. For now for simplicity we would ignore possible recipe loops (when A made from B, but B could be made from A as well) and assume our production pipeline is a rooted tree.
- Create / edit / remove projects.
A project is a set of final recipes to perform.
- Project summary.
Displays all intermediate recipes that need to be performed to finish the project. Allows you to specify which ingredients you already prepared and helps track progress.
Side note: to properly calculate ingredients amount with possible duplication in a tree branches, we could merge duplication by transforming a tree into a directed acyclic graph and then sort nodes in topological order (Have I mentioned that I'm fascinated by graphs theory?)
Future?
That would do it for now. I already have multiple ideas to progress from that point (share a recipes library, widgets, group activity), but let's hold our horses. One step at the time.
Hope to see you next week.
If for some reason you want to check out my day-to-day progress, feel free to come by the project repo: ManWithBear/TheProject ยท GitHub