Modeling exercise for 7 apps.
Anton
Posted on May 24, 2019
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?
Posted on May 24, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 28, 2024