I came up with the idea that I can train my modeling skills just by modeling apps first. Sort of a form of an intensive deliberate practice.
Let's get to it:
TH app
- Goal:
- Train the ability to recognize if the word has voiced or voiceless TH sound.
MVP:
- Show one word out of a list of words iteratively. - Ability to answer with key events. Left means voiceless, right means voiced.
Full Blown App:
- Show a list or results at the end. - Randomize the list of words. - The ability to get the words from a text from a website
Model for MVP:
-- Model type TH = Soft | Hard type Correctness = Correct | Incorrect type alias Model = { words : List String , answer : Maybe TH , correctness : Maybe Correctness }
Full Blown Model:
To make it to the end I need to add the state of two pages Playing and Results. I also want to keep the results and show a table with them.
-- Model type TH = Soft | Hard type Correctness = Correct | Incorrect type State = Playing | Results type alias Result = ( TH, Correctness ) type alias Model = { words : List String , answer : Maybe TH , correctness : Maybe Correctness , state : State , results : List Result }
Breathing app.
- Goal:
- I have a long list of different breathing exercises.
- They work best if you do them one after another.
- The problem the instructions are in Russion, so I need to translate it first. I'll put in on gist later. I think I maybe even have the translation somewhere already.
MVP: Box breathing. This is going to be the mvp version. This app is great. Take a peak at it.
Model:
-- Model type State = TimingState | BreathingState | TheEndState type alias Model = { inhale : Inhale , inhalePause : InhalePause , exhale : Exhale , exhalePause : ExhalePause , duration : Duration , state : Timings } -- There is going to be three states: -- 1) Choosing the timings -- 2) The actuall breathing -- - There is gotta be some pause button during that process -- 3) The end state. -- Four views: -- 1) inhale has a min 3 sec -- 2) inhale pause -- 3) exhale has a min 3 sec -- 4) exhale pause -- 5) the overall duration. Min 2 min - max 60 min. -- All of the fields can have different time length. -- each of the above has a length in seconds -- a checkbox for making the thing move synchroniously.
Note app. More on that app here
- Goal:
- To experiment with taking notes.
MVP:
- Two columns. The first one has an input filed the other shows the output.
Whack-a-mole game.
- Goal:
- Clone a whack-a-mole game from Wes Bos's js 30 course.
MVP:
- The game itself.
Model
-- Model type alias Model = { holes : List Hole , random : Int -- for randomization. , points : Int -- for keeping score , numberOfAttempts : Int -- If the player is fast will he have more attemps. } -- What will the duration be based on? -- I think it should be based on time. -- a fast player will have more attempts. -- What about levels? For now I will ignore that aspect. type Hole = Empty | Full -- the mole is in the hole
At first the model looked simple after I gave more thought to it I came up with this model.
Clock
MVP:
- A cloock with a seconds hand.
Finished version:
- The clock itself with hours, minutes and seconds hands.
Model:
-- Model type alias Model = { seconds : Seconds } -- the rest will be similar with just different timings type alias Seconds = { seconds : Time.Posix , svgPosition : { x, y } -- x the center of the circle, and y will be the end -- of the hand and will tell the angle. }
Arabic English chatroom
- Goal:
- A chatroom where messages are transformed into Arabic English. Arabic has vowel sounds, but actualy doesn't have vowel letters. Would you be able to read English without vowel letters?
MVP:
- A chat window where you can communicate back and forth. The output is processed with an Arabic English algorithm.
Model:
I don't know how to model this app yet, because there's gotta be a backend to this app. When I figured what that backend would be I will model the app.
Penguin maze game.
- Goal:
- Clone Lumosity's Penguin Pursuit game. Really fun game. Play this a lot on my phone.
MVP:
- A maze and a penguin that can walk through the maze.
Full app:
- A rotating maze
- AI pengiun that competes with you
- Levels
Model:
To be honest this is out of my ability that I don't even know how to approach this.
Nevertheless, I'll try:
-- Model type alias Model = { maze : Maze , entryPoint : EntryPoint -- penguin's start position , fishPoint : FishPonit -- The end point point. Where the penguin finally get's the fish. , penguin : Penguin } type alias Penguin = { x : Int , y : Int }
This model is just me shooting in the dark. I have some resources to follow on how to build mazes. So after learning those I will change the model accordingly.
That's it folks. What do you think of this kind of exercise? Do you think this is a good delibarate practice?
Top comments (0)