Installing and configging Emacs

Install the Emacs executable or unzip the zip to gain the runemacs.exe file in the bin directory. To config on Windows, place your customizations at C:/Users/[Username]/AppData/Roaming/.emacs.d

I haven't gotten Netlify to properly deploy the Paragrapher yet

My deployment for the Paragrapher failed. First it said, “Cannot convert ECMASCRIPT_2018 feature “RegExp Lookbehind”. I checked for an option to target later ECMAScript releases. I set :language-in and :language-out to :es-next each. I don’t understand these options, so it’s not surprising this failed. I then tried turning :optimizations from :advanced to :none. It deployed, the basic html showed, but the js of the app didn’t load. I turned it to :simple and pushed it.

I (rightly) chose aesthetics before function

I’ve improved the aesthetics of my “paragrapher” app before finishing the main course. The app shows the words remaining and disables completed parts onload. My next aesthetic is to have it resize the textarea as one types, and I’ll have all this done before I enable it to save or publish what I’ve written.

When comparing myself to others, if I feel bad I should change the metric.

When I feel pain from comparison, I should change the metric. Recently I’ve compared my intellect to my sister’s somewhat blinding intellect and caused myself lots of grief. “Why bother?” came up often as she’d bring up her short learning curve while I recall how hard things came to me. Like a Naruto character, I felt consternation at my lack of intrinsic skill/ability. “Comparison is the thief of joy”. This is almost true.

I timeboxed my coding tasks to gain ugly-but-working code

Nasty-looking code can work (well), esp. for indy one-off projects. What I did is have a list of things that needed to be done and set time limits for the first four things. I timeboxed these four things. Before the deadlines, I wondered how I’d get these things done. I used excuses like, “The pictures in my head are virtually non-existent” (I’m pretty much aphantasiac, thus my propensity for words and writing), but with the specific tasks and timelines, hardish seeming code started filling out before my eyes.

Clj vs. Lein

The clj tool evaluates expressions; Leiningen (lein) does not. Lein enables easy jar building with lein [uber]jar; clj does not. Lein offers easier builds at the price of a heavier weight build system. Clj offers more control and the ability to run ad hoc expressions. To use clj to build jar files, you use the tools.build library in some Clojure code. To evaluate expressions from the command line using Lein… you can’t.

Improving the image-streaming app

Because it gets such bizarre results and answers, I’m a fan of image-streaming as taught by the late Win Wenger, Ph.D. In my process of image-streaming hundreds of times, I found a lot of friction, so I started building an app to streamline the process. My app’s still nascent, and I want to improve my image-streaming app. The main ideas to implement are: Make collecting the info enjoyable. (Give feedback at every step.

I used the JS Fetch API with audio data using Clojure(Script)

I learned to use the JS Fetch API with audio data using ClojureScript. To send an audio file to the client, I learned the JS Fetch and FormData API (I’m unsure how else to send the audio data). The creators made Fetch promise-based, so this means understanding JS promises and the ClojureScript interop for it. I also learned about http headers. The fetch failed until I made the server (not the client) send an “Access-Control-Allow-Origin” header set to “localhost:3450” or “*”.

I thought depending on other ClojureScript libraries differed from Clojure until I noticed my typo

Leiningen uses Maven repos, usually Clojars, to pull in dependencies. With the right repos specified, lein install updates the pom.xml file, which causes Clojure to pull the files from the web needed to complete the requirement. I thought ClojureScript dependencies differed from Clojure, because I used lambdaisland/fetch, and it didn’t fly. After much research I double-checked the namespace name in the GitHub repo, and I saw it was lambdaisland.fetch. Changing it to this, the Figwheel compilation error disappeared, and my code worked again.

Clojure(Script) requires a certain file structure to build correctly

The Clojure/ClojureScript compiler takes directions from the pom.xml file, usually auto-generated with Leingingen, to see where to start and build everything from. It then uses these directions to traverse your file structure and then compile the Java bytecode/JavaScript.