Running a startup is about learning, and learning is the process of setting, measuring, guessing, and testing.

Outcomes and metrics must be set. Without outcomes, where are you going? Without metrics, how will you know you’ve gotten there? Some outcomes are qualitative–based on the senses and oftentimes feeling, but with business, business success means quantifiable money success (at some point), so profitability, cost, lifetime value is important. Then, assumptions guide actions, and certain actions cause better effects on the metrics than others. What we want to do is weed out all the bad assumptions and replace them with super good assumptions that cause super good actions that cause super good things to the metrics.

Browsers don't allow delays between animation iterations

Ideally, with limited education and training, I should see an animation in my mind, go to my IDE, and code it in five minutes. Basic animations may allow this but get even a bit more complicated, and you’ll hit a wall. For example, let’s say I want to run an animation multiple times with a delay between each time. CSS has a simple property for this, right? Right? No. Browsers cannot easily handle delays between iterations with a simple CSS property.

Annoyed at cat.

I want my cat to have zero capability to annoy me if I choose for her not to. The cat meowed while I wrote notes earlier. Minutes later, she’s pawing on my side. I haven’t done yoga today, and yoga’s my preventative maintenance for anger because my muscles get tense easily and tend to not relax, so I’m more irritable than normal. I push her away and tell her to stop.

My long-term goals

I’m going to be someone who cares about people, and who develops assets that works for him until he’s powerful enough and free enough. I’ll develop enough problem knowledge and technical knowledge and business knowledge to find something worth building, figure out how to build it, then build a self-sustaining worth machine called a business for it.

My long-term goals

I’m going to be someone who cares about people, and who develops assets that works for him until he’s powerful enough and free enough. I’ll develop enough problem knowledge and technical knowledge and business knowledge to find something worth building, figure out how to build it, then build a self-sustaining worth machine called a business for it.

In Clojure, define the app in a local state, not the global state, to avoid waiting on the JVM to restart

Faster than restarting the JVM: Make the app constructable from a function and use the function’s result. When you want to restart the app, use a stop function and a go function (or a new function that does both, reset) that destroys the old instance and creates a new instance of the app. The default approach is to have the default scope of be the initial scope. The way Stuart Sierra proposes has you use the highest scope as an app instance manager instead, with all your app’s work done one local scope down.

Stuart Sierra inspired the Integrant REPL library

A Clojure developer named Stuart Sierra developed and taught a Clojure workflow that inspired James Reeves to build a library that implements it using Integrant: the Integrant REPL library. In my limited understanding, I see the workflow uses a global state with starting and stopping functions to set the state and clear the state. With Integrant REPL, it does this but with Integrant.

`alter-var-root` changes what a variable points to (vs. Clojure's default of spawning a new variable/value binding)

(Yell at me on Twitter, @AttentionAaron, if this is wrong.) Understanding the Integrant REPL library source code required that I know alter-var-root, so here’s how I understand it. When programming, we decide meaning of symbols through “binding” or “assignment” or “pointing”. The first two feel bidirectional, which doesn’t seem the case; you can’t look up the variable through the value, so the term pointing feels the most precise. You can do three things regarding a pointer and the pointee:

Integrant is like Docker for Clojure

Integrant’s produces decoupled, well-contained parts within the app to prevent one piece of the app from tanking the whole thread–speeding up development time when you need to change one part. Integrant is like a mini Docker for your Clojure program–it containerizes things (database connection, http server) and isolates them to make their core functionality available to other parts of the program while protecting the program from any faults they may have.

I used java.time.LocalTime with Clojure to make a "sleep cycle wake time" calculator

The rule for a sleep session length in minutes is fifteen minutes plus the sleep cycle length (understood to be ninety minutes) x the desired number of sleep cycles, or T = 15 + 90*n. I often used a bloated, dissatisfying, too many steps site to get a simple list of when I’d wake up given a number of sleep cycles. I initially wanted another website for this, but the info’s so simple that a simple Clojure expression’d suffice.