Commit graph

1217 commits

Author SHA1 Message Date
William Carroll
edc8f4ef6e Remodel model.selectedChord as Maybe Chord
Until the user presses play, we shouldn't display any chords.
2020-04-13 09:42:26 +01:00
William Carroll
6a91065677 Whitelist and blacklist note classes
Often I want to practice only C, F, and G-chords in all inversions. Next I'd
like to only support the chords for various keys.
2020-04-12 23:35:16 +01:00
William Carroll
083763f7f2 Only display chords that fit on the displayed piano
Only show the chords that we can fit on the piano.

TODO: Debug occasional instance where we render chords that do not fit. I am
unsure how to reproduce these states at the moment.
2020-04-12 23:33:56 +01:00
William Carroll
3ee1b1f670 Support suspended chords
I'm not sure how valuable it is to study all of the inversions of the suspended
chords. Maybe it is. I'll let the users decide.
2020-04-12 23:32:00 +01:00
William Carroll
bf460fe5ac Whitelist and blacklist chordTypes
Allow and disallow chords by the type of chords.
2020-04-12 19:32:54 +01:00
William Carroll
1298263629 Whitelist and blacklist chords by inversion type
Add checkboxes to support various chord positions.
2020-04-12 19:20:00 +01:00
William Carroll
24692ab465 Properly support chord inversions
While I did change a lot of functionality, I also ran `elm-format` across the
codebase, which makes these changes a bit noisy.

Here is the TL;DR:
- Properly support chord inversions
- Ensure that the piano styling changes dynamically when I change the variables
  like `naturalWidth`
- Add start and end notes to define the size of the piano and which chords we
  create
- Support elm-format and run it across entire project
- Debug Misc.comesBefore
- Introduce a ChordInspector and debugger

TODO: Ensure that we only generate chords where all of the notes can be rendered
on the displayed keys.

TODO: Add preferences panel, so that I can do things like "Practice blues chords
in C and E with chord substitutions."
2020-04-12 16:43:34 +01:00
William Carroll
730aecc076 Support NoteClass
Remodel application to support the scientific pitch notation for notes. Instead
of supporting simply "C", support "C4". This change created cascading
changes. After refactoring for around an hour, I restored the app to a working
state. The current state is not desirable, but it compiles. More changes on the
way.
2020-04-11 23:11:04 +01:00
William Carroll
808e6ee484 Support Misc module
Define two functions for attempting to return an element in a list that precedes
or succeeds another element.

I prefer having something like Utils.List. Perhaps I will refactor.
2020-04-11 23:10:14 +01:00
William Carroll
c24c9b7fb9 Support BPM for tempo
Using BPM as the unit for tempo.

TODO: Consider a higher-fidelity way to calculate BPM, although I'm not sure
this is critical functionality; an interesting problem is just seducing me, and
this app would be better off resisting the temptation.
2020-04-11 17:46:46 +01:00
William Carroll
e864074600 Support elm-mode for Emacs
Instead of (ab)using haskell-mode, support elm-mode.

TODO: Support elm-format on buffer save
2020-04-11 17:45:59 +01:00
William Carroll
93bdebf9b2 Track app ideas
Use an org file to track random ideas or features or improvements.
2020-04-11 17:44:20 +01:00
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
William Carroll
52eb456a0f Support basic tempo
Supporting Play/Pause events, and Increase/Decrease tempo.

TODO: Convert milliseconds to BPM
2020-04-11 16:09:11 +01:00
William Carroll
2f446d0441 Improve the styling of the piano
Create a more convincing representation of the piano.

I would like to compute the left-offset based on the naturalWidth. That change
is probably forthcoming.
2020-04-11 11:36:37 +01:00
William Carroll
3562343c19 Generate all known chords and display randomly selected chords
First of all, Elm's purity is beautiful. I think every language should model
their error messages and develop experience after Elm. If I didn't have to
download packages, I don't think I would need an internet connection to
troubleshoot my program's errors. This is how helpful I find the compiler.

Now that that's out of the way, here's what I've changed since we've last
corresponded:
- Use Elm's Browser.element to create a reactive application with state
- Write a function to generate all of the chords about which CDS knows
- Move some code out of Main.elm into other modules
- Depend on List.Extra, Random, Random.Extra

What's left:
- Lots of work
- Instead of clicking a button to show a new chord, use a timer
- Add mobile-first styling (probably add TailwindCSS)
- Persist settings in LocalStorage (and then eventually create user accounts)
- Allow users to curate the list of chords they're interested in practicing
- Deploy the website and dogfood it

Unknowns:
- How can I handle tempo? I don't expect setInterval to be enough (maybe it
  is)...
2020-04-11 10:45:42 +01:00
William Carroll
3dac2f10ff Drop support for Haskell glyphs
I think that glyphs look nice, but they subtley confuse Emacs's UI. In the case
of a two-character glyph condensing into one character's width, the fill-width
indicator -- correctly -- highlights the 81st character as red, but it looks
like it's erroneously highlighting the 80th.

Also when I want to create an anonymous function I type (), which condenses into
the unit character, and it's difficult to delete either the opening or the
closing parenthesis.

Overall I think glyphs are cute, but they're not worth the trouble.
2020-04-11 10:41:49 +01:00
William Carroll
b600f709b4 Model data and sketch ideas for Chord Drill Sergeant
Initialize an Elm application to build a MVP for the Chord Drill Sergeant
application. There isn't much to see at the moment. I'm just sketching
ideas. More forthcoming...
2020-04-10 23:03:01 +01:00
William Carroll
c350222fcc Create README for Chord Drill Sergeant
See the README for more information.

I've wanted to use an application like this for awhile. I would like to start
developing this soon.
2020-04-10 14:48:00 +01:00
William Carroll
065d58dd5a Add README for typo-po
See the README for more context on typo-po.

I drank a strong cup of coffee this morning, and I cannot quiet the activity in
my head. I'm attempting to use READMEs in my //website/sandbox to track ideas
that I would typically track using my phone's notes application. Creating a
README forces me to write more than I may have written in my phone's
notes. Also, since this repository is available at https://git.wpcarro.dev, I
can share these ideas with friends by sending them a URL! So much for "stealth
mode"... Well I guess this stress-tests my theory that ideas are less important
than execution.
2020-04-10 13:54:33 +01:00
William Carroll
a2f68732de Create README for Github Issues Service
See the README for an overview of the concept.

Basically I would like a simpler way to collect feature requests and bug
reportss from my web apps.
2020-04-10 13:40:04 +01:00
William Carroll
ca67b4256d Debug unresponsive keyboard
After binary searching through my git history to restore my keyboard
functionality, I discovered the issue: I deleted the "Terminal" workspace, but I
did not remove the call to `(exwm/switch "Terminal")`, which silently prevented
EXWM from initializing.

I wish errors like this were noisier.
2020-04-06 11:30:09 +01:00
William Carroll
a180a51620 Don't depend on google-stuff.el
I created a google-stuff.el module months ago, but I have not needed to
use it much. Removing the google-stuff.el module and all of my
dependencies on it.
2020-04-05 17:01:52 +01:00
William Carroll
1e1c61c84c Gitignore Emacs's tramp file
While I have not found any sensitive information in these files, I do
not see much value in version-controlling its contents.
2020-04-05 17:00:35 +01:00
William Carroll
5c378aadcb Change Gitea's rootUrl
This value defaults to localhost:3000, which works, but then Gitea
renders "http://localhost:3000/wpcarro/briefcase" as the URL to clone my
briefcase repository.
2020-04-05 16:36:10 +01:00
William Carroll
5e2f54b0fb Add a README to //website/habits
In //website, I have the following directories about habits:
- days-of-week-habits
- habitgarden
- habits

Without READMEs in each of these directories, visitors (and myself) can
easily get confused.
2020-04-05 16:31:46 +01:00
William Carroll
f5f03e2049 Delete //tools/website-blocker
I changed the name of this project to url-blocker, which lives both
within this repository and at github.com/wpcarro/url-blocker.
2020-04-05 16:30:17 +01:00
William Carroll
4e038f5a18 Add README to //website
Help orient visitors for my cobbled website.
2020-04-05 16:29:17 +01:00
William Carroll
4b9a2a6880 Add README to //utils
Add a README.md to the //utils directory.
2020-04-05 16:26:00 +01:00
William Carroll
36d9f7a01b Add README.md to //lisp
I sometimes forget the purpose of this project, so -- while it is fresh
in my mind -- I'm documenting it in a README.
2020-04-05 16:18:26 +01:00
William Carroll
5cc9bf7dce Remove //java
When I started working on //clojure, which I also deleted, I wanted to
learn more about how to package Java projects using Nix. This was a part
of that study.
2020-04-05 16:13:31 +01:00
William Carroll
81b59e9ddd Drop support for ynab.el
YNAB is short for YouNeedABudget.com. I wrote this code before I started
the //monzo_ynab project.
2020-04-05 16:11:42 +01:00
William Carroll
fb6dabfb8d Drop support for wpc-terminal
As I mentioned in the previous commit, I now use vterm.el as my primary
terminal. I wrote most of this Elisp when I first started using Emacs. I
know longer need it.
2020-04-05 16:10:32 +01:00
William Carroll
431f68298d Drop support for terminator.el
Before I switched to vterm.el, I used alacritty as my primary terminal.
I could not install alacritty on gLinux, so I switched to terminator.
When I was ricing my machine, I wanted my Emacs theme to change my
terminator theme. I never finished that project, and it is quite dusty
now.
2020-04-05 16:08:10 +01:00
William Carroll
695ab28a6c Remove wpc-docker.el
I have not needed this configuration in over a year.
2020-04-05 16:07:33 +01:00
William Carroll
408a25415c Remove dotfiles.el
This module is a bit stale.
2020-04-05 15:58:57 +01:00
William Carroll
946ccfb247 Tidy //emacs
TL;DR:
- Add README.md that includes instructions on how to install my Emacs
- Delete unused Makefile
2020-04-05 15:50:58 +01:00
William Carroll
8562bf5b5a Rename //deploy -> //nix_gcr
I create //deploy when I first deployed a few applications that I
packaged with Nix. This was before I setup socrates as my "cloud". Now I
deploy all of my services using NixOS. The name "deploy" is a bit stale.
I'm renaming it //nix_gcr because it documents how I can deploy
Nix-packaged projects on Google Cloud Run.
2020-04-05 15:40:47 +01:00
William Carroll
a500171fd8 Remove unnecessary rec { .. }
In Nix, rec mean "recursive" and for attribute sets, this allows
attributes to refer to other attributes in the same attribute set. This
is useful, but I'm not using it here, so I'm removing it.
2020-04-05 15:29:59 +01:00
William Carroll
3f5cea53b0 Prefer ~/.local/share/static to ~/Dropbox/static
I would like to remove all dependencies on Dropbox.
2020-04-05 15:29:14 +01:00
William Carroll
61c6a50285 Delete //clojure
Deleting my early sketches of how I would like a Nix expression that
built Clojure packages, libraries, and executables to look like.
2020-04-05 15:20:18 +01:00
William Carroll
b266378850 Tidy advent-of-code directory
TL;DR:
- Add README.md
- Delete *.nix sketches
- Delete *.pyc and *.ex python artifacts
2020-04-05 15:17:50 +01:00
William Carroll
444da4aa05 Forward git.wpcarro.dev connections to :3000
Gitea is running a web server on localhost:3000.
2020-04-05 14:57:08 +01:00
William Carroll
2686a9a2ed Prefer gitea to gogs
Gitea's announcement notes explain some of the benefits of Gitea over
Gogs:

https://blog.gitea.io/2016/12/welcome-to-gitea/

Also, I never configured Gogs such that I could use it, so the cost of
switching from Gogs to Gitea was basically zero.
2020-04-05 14:33:02 +01:00
William Carroll
46d817665f Move Emacs documents to //emacs
These documents outline some of my Elisp conventions and ideas. As such,
I think //emacs should host them.
2020-04-04 14:30:27 +01:00
William Carroll
d0d331df09 Update README.md
This change was long overdue. I'm updating this README.md to reflect the
state of my monorepo.
2020-04-04 14:29:28 +01:00
William Carroll
3555f5a418 Fix spelling errors in cell-phone-experiment blog
Shoutout to Ryan D. for texting me about these.
2020-04-03 17:20:13 +01:00
William Carroll
55e1170bf5 Change Disqus shortname
I setup a Disqus Admin account.
2020-04-03 11:35:31 +01:00
William Carroll
466392673e Edit cell-phone-experiment blog post
After a full night's rest, I re-read my blog post and made some changes:
- Fix grammatical errors
- Clarify unclear passages
2020-04-03 11:26:20 +01:00
William Carroll
f23e1be416 Drop support for Terminal workspace
I created the Terminal workspace before I wrote a function for finding/creating
vterm instances. I now use the latter almost exclusively.
2020-04-03 10:08:41 +01:00