tvl-depot/website/sandbox/chord-drill-sergeant
William Carroll 3c8bfe85c9 Prefer type alias to type
Elm reminds me of Haskell. In fact, I'm using `haskell-mode` (for now) in Emacs
to write my Elm code, and it works reliably. I'm not writing a Haskell app, but
if I were, I would define my application Model with the following Haskell code:

```haskell
data Model = Model { whitelistedChords :: [Theory.Chord]
                   , selectedChord :: Theory.Chord
                   , isPaused :: Bool
                   , tempo :: Int
                   }
```

When I first modelled my application state, I did something similar. After
reading more Elm examples of SPAs, I see that people prefer using type aliases
to define records. As far as I know, you cannot do this in Haskell; I believe
all types are "tagged" (something about "nominal typing" comes to mind). Anyhow,
Elm isn't Haskell; Haskell has cool features like type classes; Elm has cool
features like human-readable error messages and exhaustiveness checking for
cases. I love Haskell, and I love Elm, and you didn't ask.

Anyhow, this commit refactors my records as type aliases instead of types. I
think the resulting code is more readable and ergonomic.
2020-04-11 16:50:02 +01:00
..
src Prefer type alias to type 2020-04-11 16:50:02 +01:00
.gitignore Model data and sketch ideas for Chord Drill Sergeant 2020-04-10 23:03:01 +01:00
elm.json Support basic tempo 2020-04-11 16:09:11 +01:00
README.md Model data and sketch ideas for Chord Drill Sergeant 2020-04-10 23:03:01 +01:00
shell.nix Model data and sketch ideas for Chord Drill Sergeant 2020-04-10 23:03:01 +01:00

Chord Drill Sergeant (CDS)

Are you a musician looking for a more effective way to improve your craft? Maybe you're a music teacher looking to create useful exercises to give your students.

Studying music theory can be a fruitful undertaking, but it can often overwhelm or bore students. I think that if practicing is enjoyable, students will practice more. Practice doesn't make perfect; perfect practice makes perfect. Chord Drill Sergeant is a web app that lowers the barrier to practicing and internalizing music theory.

How does it work?

  1. Grab a cell phone or a laptop and your instrument.
  2. Open a web browser and visit the Chord Drill Sergeant app (URL and app forthcoming).
  3. Set the tempo at which you would like to practice.
  4. Set the target duration of your session.
  5. Select the key(s) and chord(s) you would like to practice.
  6. Set the tempo (i.e. pace) at which you would like to practice.
  7. CDS will display chords at various rhythmic intervals during your practice session. It is your job to play these chords in time before the next chord appears.

Highlights

Here are some useful features of CDS:

  • Tempo: Set the rate at which CDS displays chords.
  • Predefined practice sessions: CDS offers users a few practice sessions to get users started. The goal, however, is to teach users to create their own bespoke practice sessions. CDS aims to foster a community of practitioners who curate and share their practice sessions.
  • Whitelist / blacklist: Construct the set of chords you would like to practice. Let's say you only want to practice triads in the keys of F, C, and G. Would you also like to avoid diminished chords? Or maybe you only want to practice major-7th chords for all keys. CDS supports all of these scenarios and many others. You can save these chord configurations to reuse them at any time. You can also share chord configurations with other CDS users if you find the practice useful.
  • Inversions: Every chord has inversions. For instance, every triad (i.e. chord composed of three notes) has three inversions: root, second, and third positions. CDS acknowledges all of the positions in which chords may appear and helps you study all, some, or none of these inversions.
  • Harmony: CDS understands basic harmony and can sort the chords you would like to train in various harmonious permutations.
  • Chaos-mode: Feeling confident? Throw the classical notions of harmony to the wayside and use CDS in "chaos-mode" where CDS samples randomly from the Circle of Fifths.

Developing

If you're interested in contributing, the following will create an environment in which you can develop:

$ nix-shell
$ elm reactor