DEV Community

Anton
Anton

Posted on

2 2

Modeling exercise for 7 apps.

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.

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?

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

AWS Q Developer image

Your AI Code Assistant

Generate and update README files, create data-flow diagrams, and keep your project fully documented. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay