about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorFilesLines
2020-04-18 "Chord Drill Sergeant" -> "Learn Piano Chords"William Carroll20-15/+16
In the spirit of "keep it simple, stupid", I am naming this application as closely to the functionality as I can imagine.
2020-04-18 Use elm2nix to (attempt to) deploy learnpianochords.appWilliam Carroll4-18/+121
After a few failed attempts at deploying my Elm application on NixOS, I'm trying elm2nix, which some NixOS and Elm users created to attempt to solve some of the issues that I ran into earlier today. Elm tries to write to $HOME, which NixOS doesn't like. I typically prefer to avoid things like cabal2nix, elm2nix, node2nix because I don't like the workflow that they suggest, but I'm so eager to deploy this application, that I'm trying it.
2020-04-17 Nixify build for Chord Drill SergeantWilliam Carroll3-1/+30
Thankfully @tazjin builds Gemma (an Elm project) with Nix, so I could reference Gemma's default.nix to help me with mine. Elm problematically attempts to HTTP-fetch a list of packages to verify my project's dependencies. Because Nix builds derivations in a sandbox without network access, I need to use some escape hatches (i.e. NIX_REDIRECTS, LD_PRELOAD, SYSTEM_CERTIFICATE_PATH). Welp... it's packaged now... I'm also pointing learnpianochords.app to this project's index.html. It will be live soon! :) TODO(wpcarro): Rename "Chord Drill Sergeant" -> "Learn Piano Chords" (KISS)
2020-04-17 Simplify preferencesWilliam Carroll1-32/+40
I'd like to deploy an MVP version of this application today, so I'm dropping support for a few features to focus my efforts. I may bring these features back. TL;DR: - Temporarily drop support for "Fine Tune" tab of preferences - Sort keys by the Circle of Fifths
2020-04-17 Render a mobile-friendly pianoWilliam Carroll5-116/+236
For now since I'm the only customer and I'm primarily making this for myself, I'm styling the app specifically for my Google Pixel 4. If I find this app useful, I will consider supporting other devices. I'm using the Icons that I bought when I purchased the "Refactoring UI" book. Other news: - I bought the domain learnpianochords.app! What's left: - Style the "fine tune" tab of the preferences view - Better support non-mobile devices like the browser and tablet devices - Deploy the application to learnpianochords.app - Redesign the "key" tab of the preferences view to sort the keys according to the circle of fifths - Dogfood - Simplify until I cannot simplify anymore
2020-04-13 Begin styling effortsWilliam Carroll8-126/+264
Start styling the Chord Drill Sergeant for mobile devices because that is that device on which I will primarily use CDS. I'm also deleting the debugger related code. I would like to support a debugger, but I'm not currently using this one, so I am going to remove it to keep things slender. - Introduce TailwindCSS, which also introduced elm-live, index.html, index.css - Add mobile-first styling for the preferences modal - Remove unused code
2020-04-13 Support generating chords for a particular keyWilliam Carroll4-285/+283
Generate chords for a given key. I believe my Theory.allChords function is taking a long time to generate all of the chord possibilities. I would like to profile this to verify this assumption. I think I can create a "staging area" for changes and only regenerate chords when "committing" the options from the "staging area". This should stress the application less. TODO: Profile application to find bottleneck.
2020-04-13 Don't render the notes on the pianoWilliam Carroll1-1/+1
I was using this to debug a feature that I no longer need to debug.
2020-04-13 Rename NoteClass -> PitchClassWilliam Carroll2-148/+151
For the past two to three days, I've been searching for the name for the concept of "C" or "A". From what I read, notes are specific things like C0 or C4, but I wanted the name of the concept of a C. Thankfully today I discovered that this is called a pitch class.
2020-04-13 Remodel model.selectedChord as Maybe ChordWilliam Carroll1-50/+65
Until the user presses play, we shouldn't display any chords.
2020-04-12 Whitelist and blacklist note classesWilliam Carroll1-7/+64
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 Only display chords that fit on the displayed pianoWilliam Carroll1-278/+293
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 Support suspended chordsWilliam Carroll1-0/+30
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 Whitelist and blacklist chordTypesWilliam Carroll2-105/+112
Allow and disallow chords by the type of chords.
2020-04-12 Whitelist and blacklist chords by inversion typeWilliam Carroll2-10/+84
Add checkboxes to support various chord positions.
2020-04-12 Properly support chord inversionsWilliam Carroll9-516/+1547
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-11 Support NoteClassWilliam Carroll3-124/+283
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 Support Misc moduleWilliam Carroll1-0/+15
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 Support BPM for tempoWilliam Carroll2-10/+50
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 Support elm-mode for EmacsWilliam Carroll2-0/+4
Instead of (ab)using haskell-mode, support elm-mode. TODO: Support elm-format on buffer save
2020-04-11 Track app ideasWilliam Carroll1-0/+3
Use an org file to track random ideas or features or improvements.
2020-04-11 Prefer type alias to typeWilliam Carroll2-60/+48
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 Support basic tempoWilliam Carroll2-13/+75
Supporting Play/Pause events, and Increase/Decrease tempo. TODO: Convert milliseconds to BPM
2020-04-11 Improve the styling of the pianoWilliam Carroll2-29/+58
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 Generate all known chords and display randomly selected chordsWilliam Carroll4-216/+345
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 Drop support for Haskell glyphsWilliam Carroll1-5/+0
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-10 Model data and sketch ideas for Chord Drill SergeantWilliam Carroll6-0/+294
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 Create README for Chord Drill SergeantWilliam Carroll1-0/+47
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 Add README for typo-poWilliam Carroll1-0/+10
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 Create README for Github Issues ServiceWilliam Carroll1-0/+28
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-06 Debug unresponsive keyboardWilliam Carroll1-6/+0
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-05 Don't depend on google-stuff.elWilliam Carroll1-3/+0
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 Gitignore Emacs's tramp fileWilliam Carroll1-1/+2
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 Change Gitea's rootUrlWilliam Carroll1-1/+6
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 Add a README to //website/habitsWilliam Carroll1-0/+4
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 Delete //tools/website-blockerWilliam Carroll1-28/+0
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 Add README to //websiteWilliam Carroll1-0/+11
Help orient visitors for my cobbled website.
2020-04-05 Add README to //utilsWilliam Carroll1-0/+8
Add a README.md to the //utils directory.
2020-04-05 Add README.md to //lispWilliam Carroll1-0/+16
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 Remove //javaWilliam Carroll2-11/+0
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 Drop support for ynab.elWilliam Carroll1-56/+0
YNAB is short for YouNeedABudget.com. I wrote this code before I started the //monzo_ynab project.
2020-04-05 Drop support for wpc-terminalWilliam Carroll3-72/+0
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 Drop support for terminator.elWilliam Carroll2-1888/+0
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 Remove wpc-docker.elWilliam Carroll2-17/+0
I have not needed this configuration in over a year.
2020-04-05 Remove dotfiles.elWilliam Carroll3-59/+1
This module is a bit stale.
2020-04-05 Tidy //emacsWilliam Carroll2-5/+13
TL;DR: - Add README.md that includes instructions on how to install my Emacs - Delete unused Makefile
2020-04-05 Rename //deploy -> //nix_gcrWilliam Carroll3-4/+8
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 Remove unnecessary rec { .. }William Carroll1-1/+1
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 Prefer ~/.local/share/static to ~/Dropbox/staticWilliam Carroll1-8/+2
I would like to remove all dependencies on Dropbox.
2020-04-05 Delete //clojureWilliam Carroll1-11/+0
Deleting my early sketches of how I would like a Nix expression that built Clojure packages, libraries, and executables to look like.