CJ Eller

Classical Guitar by Training, Software by Accident

I view writing on this blog as something connected to my normal weekday routine — after work I'll write up a post that is automatically published here with a program. When weekends roll around I hardly think about blogging. This weekend, however, is different. Even though it is Memorial Day in the US and I have off, Monday is still part of the weekday, meaning the program still runs.

This is me scrambling to write something to take the place of what the program posted instead — my previous post.

How fascinating that a program works on one layer of meaning while I'm operating on another. What I consider a weekend is different than what the cron job that publishes a post considers a weekend. The cron job doesn't have the flexibility that I do (though of course I could try to program that in).

One thing my wife and I have done lately is read to each other. It could be a passage from a book or a long-form article — anything that we think the other would find interesting. Because of this little pattern, the act of communal reading is something has been on my mind.

I just got through reading Laura Dassow Walls' biography of Thoreau. A striking fact I gleaned from her lovely writing is that Throeau was one of the first Americans to read Darwin's On the Origins the Species when it came out. How did he initially access it? By visiting a friend of Bronson Alcott's who had a copy. All three of them read the book aloud and discussed it. To be a fly on the wall during that Transcendentalist collision with Darwin's findings!

I wonder if there's something about reading a book aloud with other people that gives the words a different impact. You are occupying the same space as other readers. It is not merely an audiobook. The reader is someone you can stop to discuss what they just read. There is room for tangential conversation, for trailing footnotes of discussion over a paragraph, for a shared reverential silence over a rhapsodic passage.

Sometimes people don't have a chance to read a book but get access to a detailed summary of it. One shouldn't chalk that up to intellectual laziness. Accessibility can be an issue — still is. I came across an anecdote about how one Rudolf Carnap was able to get his mind around the literally massive Principa Mathematica even though he couldn't get access to it. This came from a not so ordinary summary. Here's an account from David Embods & John Eidinow's Wittgenstein's Poker:

Carnap, when he was an impecunious graduate student in Germany during the hyperinflation of the early 1920s, had written to Russell to request a copy of this 1,929 page, three-volume tome, which was unavailable — or unaffordable — and Russell had responded with a thirty-five-page letter detailing all its main proofs.

A thirty-five-page letter is massive to our standards (at least mine). When compared to a 1,929 page book, Russell had actually done Carnap quite a service — a distillation of the Principa Mathematica from one of the authors. Carnap took the proofs from that letter into the philosophical meetings with the Vienna Circle who looked to Russell as one of their touchstones. Who's to say whether the thirty-five-page letter from Russell had a role in that?

Distillations of ideas are as important as ever. Nobody will read every book in the world, let alone every blog post, but we can get a sampling of them from those who have, a lens into what people find insightful. Is that not one of the purposes of a personal blog?

I had written a post earlier that I took from some jottings in my paper journal. At the last minute I decided against using that, putting placeholder text here instead. This apprehension came from a place of wanting some of my interior thoughts to stay interior.

Thoughts don't always need to travel across a network of bits. Sometimes thoughts just need to travel across a network of graphite indentations on tree pulp. That analog act alone can be enough.

I've been thinking more about using the keyboard like I do the guitar.

With the guitar, you usually rest your thumb on the back of the neck. It acts as a pivot as you play chords, melodies, and move across the strings.

With the keyboard, I'm finding my thumb act in a similar way. A lot of keyboard shortcuts I rely on use the Command key on my Macbook. That is pressed down by my left thumb and acts as the pivot by which I combine keystrokes with both hands. I am sure there are other pivot points like this — the Shift key comes to mind.

As I begin to think of the keyboard like a musical instrument, using my laptop becomes something like playing music, a miniature improvisation of keyboard shortcuts to navigate across windows and files and websites and programs like the notes that vibrate from the resonant strings of a guitar.

There's this great anecdote from one of the students of philosopher Ludwig Wittgenstein's. In David Embods & John Eidinow's Wittgenstein's Poker, Vinelott recounts a particular session from a philosopher club that Wittgenstein led.

Besides the puzzle of speaking to oneself, they had discussed the flexibility of the rules of mathematics. “Suppose you had all done arithmetic within this room only,” Wittgenstein had hypothesized. “And suppose you go into the next room. Mightn't this make 2+2=5 legitimate?” He had pushed this apparent absurdity further. “If you came back from the next room with 20x20=600, and I said that was wrong, couldn't you say, 'But it wasn't wrong in the other room.'”

This might seem like “apparent absurdity,” but it isn't to me. How peculiarly appropriate that Wittgenstein intuited an entire field where you sometimes walk into a room and 2+2=5 is legitimate, where you can say “It wasn't wrong in the other room.”

It just takes on a different guise:

“It works on my machine...”

I wonder how much further Wittgenstein explored this flexibility in mathematics in his own thought/writing and how it could be analogized/connected to this often parodied problem in software engineering.

Continuing to read Henry Thoreau: A Life by Laura Dassow Walls and came across this lovely passage:

Thoreau usually walked alone, but often [his friend & poet Ellery] Channing came along, though Thoreau could be impatient: “In our walks C. takes out his note-book some times & tries to write as I do — but all in vain. He soon puts it up again — or contents himself with scrawling some sketch of the landscape. Observing me still scribbling he will say that he confines himself to the ideal — purely ideal remarks — he leaves the facts to me.” Channing's criticism pushed Thoreau to articulate what he wanted with those heaps of “facts”: not mere data, but “material to the mythology which I am writing” — or, more largely, “facts which the mind perceived — thoughts which the body thought with these I deal.”

Walls delves deeper:

Thoreau's walks became a form of mediation, a spiritual as well as physical discipline. He worried about walking bodily into the woods without getting there in spirit, some piece of business in his mind literally blinding his eyes. “I am not where my body is — I am out of my senses. In my walks I would return to my senses like aa bird or beast. What business haave I in the woods if I am thinking of something out of the woods.” Animal minds became a model for him; he strove to walk like a fox, mind and senses wholly open. As he said of a muskrat: “While I am looking at him I am thinking what he is thinking of me. he is a different sort of man, that is all.”

Thoughts which the body thought as the material for which Thoreau crafted a personal mythology. Perhaps with practice it can be the material for ours too.

I recall a post from Tom Critchlow earlier this year that ended with a simple pitch:

Build a browser that comes pre-installed with Node.js, an IDE and a simple runtime environment.

It seems like that is slowly materializing into reality with StackBlitz's WebContainers. The pitch of WebContainers is a dead ringer to Tom's:

Run Node.js natively in your browser

The technology that runs behind it is beyond me but still fascinating to read about within the announcement post:

A few years ago we realized that the web was heading towards a key inflection point. The advent of WebAssembly and new capabilities APIs made it seem possible to write a WebAssembly-based operating system powerful enough to run Node.js, entirely inside your browser. We envisioned a superior development environment that was faster, more secure and consistent than local environments, to enable seamless code collaboration without ever having to set up a local environment.

When I initially read this post about WebContainers, I thought about services like Glitch and Replit that already act as IDE/programming environments on the web. However, upon further reading, WebContainers is something different:

Again, these environments are not running on remote servers. Instead, each environment is completely contained within your web browser. That’s right: the Node.js runtime itself is running natively, inside the browser, for the first time ever.

That's the key. Glitch and Replit are technically running on remote servers (which doesn't make them any less awesome). WebContainers is inherently powered by the browser on your computer, which is wild to think about. I can't help but think of the future potential, especially with running non-web native programming languages like Python within a browser.

Web IDE/programming tools are already wonderful. Glitch literally helped me get on the software development/cloud career path as someone who was a PhD drop out in classical guitar with only basic help desk experience. Seeing programming get democratized right down to the browser with WebContainers makes me even more thrilled at the potential for more people to learn.

Here's a fascinating anecdote I came across from reading Laura Dassow Walls' Henry Thoreau: A Life:

In December 1849, a neighbor, annoyed by a large hawk killing his hens, shot it out of the sky — but instead of tossing the carcass into the woods to rot, he brought it to Thoreau. What Thoreau did next was also remarkable: he brought it to the Boston Society of Natural History, to show Samuel Cabot (brother of James Elliot Cabot), their curator of birds. Remarkable indeed, agreed Cabot — it was a rare and beautiful American goshawk. Thoreau's donation allowed Cabot to settle a controversy, for it was clearly a new species, unique to America, and not, as Audubon had claimed, the same as the European goshawk.

What amazes me about this story is how the nameless neighbor's choice was the catalyst to this discovery. In his frustration at this hawk killing his hens, he could've easily thrown it into the woods — good riddance! Instead he gave the hawk to Thoreau who gave it to Cabot who then established the legitimacy of the American goshawk. What was going through this neighbor's mind? Who was he?

How curious that a contribution to science doesn't always have to start with a scientist, let alone a citizen scientist. It can start with a nameless neighbor, protecting his hens.

Today I learned the valuable lesson of the dry run. Testing out a software upgrade on a test instance proved to be a comedy of errors. Thankfully the audience of that show was only me. If any more people had to deal with the downtime it took for me to solve things, it wouldn't be a comedy to them.

Besides learning that dry runs are crucial in software, I also learned about their etymologic origins. Wikipedia referenced this lovely blog called The Word Detective (which has been going for 26 years as of the publishing of this post). Here's what the Word Detective uncovered about the origins of the dry run:

Beginning in the late 19th century, fire departments in the US began conducting practice sessions where engines were dispatched and hoses deployed, but water was not pumped, thus making the exercises literally “dry” runs. Public exhibitions and competitions between departments also typically centered on such “dry runs.” Conversely, a real run to a “working fire” where water was pumped was known as a “wet run.” In his posting to the ADS list, Doug Wilson found instances of this use of “dry run” dating back to 1893. Just when the term came into more general use meaning “practice session” is uncertain, but it seems to have been after “dry run” was widely used in the US Armed Services during World War II.

What's interesting is that the original dry run seems to miss out on an important part of firefighting — pumping the water. What happened if there was a malfunction in the hose? What if the pumping process got botched? I suppose that's why the dry run was more an exhibition than anything else. And yet it crept into meaning a “practice session.”

I wonder if that is where we make sure we do our best to replicate “pumping the water” in our dry runs — whatever that means. For me it's dealing with upgrading software on an instance that is running with snapshots of production data. Might not be the real deal, the actual “pumping of water,” but as long as you get close enough to know that, when the time comes, the water has a good chance of pumping.