Reading List
The most recent articles from a list of feeds I subscribe to.
Red Button
My 3-year-old daughter Tavie and I made a time-travel movie for the inaugural Belvedere Home-Made Film Festival. Watch the four-minute film here on YouTube:
This project was fun on so many dimensions (get it, time travel). But watching Tavie watch herself on the big screen at the festival was the highlight for me. "Core memory," as they say on Instagram.
Career Advice from the Outer Rim
Smuggler. Pilot. Mechanic. Translator. Rebel. Veteran. Hero.
It's quite the resume LinkedIn profile.
Han reminds me of that dog with the coffee in the burning building.
I used to think that this meme was ironic, because "haha, why would the dog think things are fine?" But the dog is fine! The dog knows what to do. They've been here before. And they just need a sip of their goddamned coffee first, okay?
Han's that dog. Roughed up, competant, full of gallows humor, and - most importantly - a big ol' surface area for luck to make its appearance. Never tell me the odds!
Look, to survive in the Outer Rim, you need to be a jack-of-all-trades. A TTTTTTT-shaped person, if you will. Cause you never know when you're going to crash-land on a strange asteroid (or is it the belly of a space worm?), with a broken hyperdrive and a bunch of baddies looking for you.
It reminds me of frontier-life (at least what I can recall from my much-loved set of Little House on the Prarie
books). Embrace Murphy's Law. Respect the challenge. Build your skills. Learn from others. Develop your "gut." Adhere to Polya.
It's amusing, then, that Han's not a big fan of droids. Cause wouldn't they help him out in these scraps?
Clearly, the Star Wars universe reached some threshold of AGI (slightly?) ahead of ours. And everything didn't go all Terminator, which is nice (General Grevious, notwithstanding). Instead, droids are these helpful (frustratingly-so, if you ask Han) companions for our heroes. You probably wouldn't want to go to Dagobah without one, but at the same time, you never know when they're going to get snatched away by Jawas or just accidentally electrocute themselves into a cold stupor, and then you're S-O-L and back to square-one, with whatever you can string together between your wits and your (hopefully) incredibly-varied skillset.
Still, even Han would admit that it's important for us to learn how to work with LLMs and other AI-fangled-things and eventually our adorable droid companions, cause they're here and they're getting better all the time. Want proof? Even Han let this lil' cutie help fix the Falcon:
AI tools and adorable companion droids are coming. And they'll help us chart new corners of the universe. But things will go wrong (cause they always do) and it's going to be even more important for us to be scrappy and resourceful and self-reliant to survive.
A final note on self-reliance. That does not mean fully on your own. Friendship is everything. Friendship makes it all worthwhile. And, no matter how lucky or multi-disciplined you are, everyone has a bad day.
Even Han.
Using Farcaster protocol for .plan-style daily notes
I've loved and lost websites. A few that come to mind:
- Hyrule The Land of Zelda (htloz.com) - an Ocarina of Time forum devoted to finding the Triforce in a Zelda video game wherein you cannot find the Triforce (not with that attitude, at least)
- My very first website, which Peter Hayward and I hand-crafted on his mom's computer after school, featuring an exclusive variety of our exclusively frog-related drawings and stories
- Broken Records - my members.aol.com punk rock "record label" that I created in eighth grade where I declared that I was putting together a compilation album, and then someone mailed me a cassette from their band "One-Eyed Trouser Snake" and then I shut down Broken Records
- OhLife.com - a YC journal startup that emailed you once a day with a simple message
Hey, how did your day go?
and you just replied to the email with your thoughts or deeds or worries for the day. The daily email also included a random previous response of yours as inspiration or memory-induction.
I miss them all, and pine for their Frankensteinian-Lazarian-Wayback-Machinian resusitation. That's why I decided to revive one, and make it even weirder. But first, let's make a .plan!
John Carmark's .plan files and the Finger protocol
I've got DOOM on the mind these days. I'm halfway through John Romero's recent autobiography Doom Guy: Life in First Person - and I consider Masters of Doom an essential reading in any computer history syllabus.
In reading up further about the id crew, I encountered this excellent blog post about Carmack's daily logs and journals in .plan files, which were accessible via the Unix Finger protocol over the Internet.
Here's his entry for February 2, 1996:
* fix incorrectly updated origin bug
* added alias backpack and armor
* fixed weapons sticking into wall
* changed "connected to server" to "connected to map"
* fixed console
* armor skin numbers
* fixed "not shooting" bug
* changed sound back to origin based instead of entity based
+ swimming directions
+ quit scores are wrong
+ screen flicker crap
+ radius damage sight check
+ crushing issues
+ bodies stopping in midair
dimmed out weapons
follow killer
spin head inside gib
Don't we all wish our daily work logs had entries that looked like this (e.g. "crushing issues", "follow killer"). The blog post notes that Carmack uses a clear syntax for his updates (*
indicating work completed, +
completed on a later day, and so on).
There are many reasons this is such a great little journaling tool. First, it is simple - make your journal easy to update or else you won't remember to do it. Second (and this is pointed out by the great blog post) is its "greppability" - plaintext files means it is easy to use grep
and other Unix tools to search and filter notes. Finally for me is its "social availability" - id Software fans could use the Finger protocol to check in on Carmark and id's progress on upcoming games.
The Finger protocol
Here's how you might (ugh) Finger someone back in the day:
finger username@ip-address
What if I just type finger
into my modern Mac?
charlie ~ $ finger
Login Name TTY Idle Login Time Office Phone
charlie Charlie Harrington *con 10d Sep 20 16:56
charlie Charlie Harrington s00 3d Sep 25 09:43
charlie Charlie Harrington s00 Sun 12:20
charlie Charlie Harrington s00 20 Sun 12:00
Kinda shocked that it's available - and running. Okay, let's try to reference my username.
charlie ~ $ finger charlie
Login: charlie Name: Charlie Harrington
Directory: /Users/charlie Shell: /bin/bash
On since Wed Sep 20 16:56 (PDT) on console, idle 10 days 19:25 (messages off)
On since Mon Sep 25 09:43 (PDT) on ttys000, idle 3 days 2:21
On since Sun Oct 1 12:20 (PDT) on ttys001
On since Sat Sep 30 14:00 (PDT) on ttys002 (messages off)
On since Sun Oct 1 12:00 (PDT) on ttys003, idle 0:21
No Mail.
No Plan.
"No Mail"? Good. "No Plan". I don't like the sound of that. Let's fix that. The Finger protocol expects that you'll have a .plan
file in your home directory, which I don't, so let's make one and add my current plan.
charlie ~ $ echo "* writing blog post about .plan files!" > .plan
Okay, time to finger me again (sorry).
charlie ~ $ finger charlie
Login: charlie Name: Charlie Harrington
Directory: /Users/charlie Shell: /bin/bash
On since Wed Sep 20 16:56 (PDT) on console, idle 10 days 19:29 (messages off)
On since Mon Sep 25 09:43 (PDT) on ttys000, idle 3 days 2:25
On since Sun Oct 1 12:20 (PDT) on ttys001
On since Sat Sep 30 14:00 (PDT) on ttys002 (messages off)
On since Sun Oct 1 12:00 (PDT) on ttys003, idle 0:25
No Mail.
Plan: * writing blog post about .plan files!
Cool!
Now, why aren't we using the finger protocol all the time? Well, couple reasons from what I've gleaned:
- No encryption: the Finger protocol uses plaintext - so everyone with Wireshark on the Starbucks wifi can see your .plan and other "finger" information (which I'm guessing would include phone numbers and other potentially sensitive stuff)
- No access Folks don't really know each other's IP addresses and we also don't really make these directly publicly accessible to the Internet anyway, and I've also read that many networks will block port 79 (which Finger uses)
- No likes: We just like our social network karma, okay? Nothing wrong with that.
Back to Frankenstein's laboratory
Well, what if I combine what I love about OhLife (simple daily email journal) with Carmack's Finger .plan files (simple project status updates) with something that's secure, accessible, "likeable", and also "open and hackable?"
It's time introduce the next protocol in this blog post: the Farcaster protocol.
The Farcaster protocol
Farcaster is a "sufficiently decentralized" social networking protocol, which I interpret as a protocol not owned by a company that offers relatively open access to the social networking data. I've been using Farcaster for almost two years now as a Twitter-like social network using the popular Warpcast client.
Now, it's worth noting that there's a connection to Ethereum as a mechanism for registering your username in Farcaster, but that's really it as far as crypto goes (if that's what you want). You don't need to be a "crypto" person to use Farcaster and enjoy it - I'm not, and I'm having a bunch of fun with Farcaster - mostly because Farcaster is set up EXTREMELY well for generalized "hacking."
The Farcaster protocol has emphasized making it extremely easy for anyone to connect to and grab the state of the network (all the messages and user info) and do whatever they want with it, which could be building analytics dashboards, creating read-write Twitter-like clients, offering a search and keyword alerting service, even making this adorably weird and cute blob-workout app Blobs ("steps-powered Tamagotchis"). There's no API key that you need to request to make stuff with Farcaster.
In the last two years, I've built things like SQLCaster (using ROAPI to create an instant read-only SQL API against a CSV of a bunch of old Farcaster casts) and Top Podcasts Among Farcasters (an aggregation and ranking of podcasts among shared OPML files from Farcaster users).
I think Farcaster will be perfect for my OhLife-Plan Frankenstein, but we're going to have to constrain it a lil' bit.
⌆ The "fling" pattern
Fling is my idea for how we can use Farcaster to power a "daily notes" app. Recall (not sure if I mentioned it, but recall anyway) that Farcaster calls messages/posts as "casts". Here's the basic constraints for fling (which I wrote up in a gist):
- Each day, you may cast at most one cast that begins with "⌆" character. This is your "root" fling cast for the day. (You can, of course, cast as many other unrelated casts as you desire). This singular cast should contain your daily log / message / thoughts / reminders.
- If you'd like to add more to your day's log, you should reply to the day's root fling cast. Keep these replies as siblings to each other (aka direct children of the root cast), rather than a thread.
That's it! You don't need a special client to use the Fling pattern. Just follow these rules.
What's cool about these rules is that you can now filter through the messages on Farcaster to find your daily notes (aka .plan files) and render them. I even made a sample static website that does just that
Plus - people can "like" your notes! And reply to them! Engagement, woo!
If you wanna fling - I also released a demo CLI tool on NPM to fling your daily notes that works somewhat like adding commit messages in git:
$ fling -m "* finished excellent blog post about .plan files"
But wait - what about the OhLife email thing? Good point. Next up, I've gotta introduce a little place called Val.town.
val.town
"What if GitHub Gists could run and AWS Lambda was fun?"
Need I go on? This is the motto / mantra of val.town - a dev tools startup that makes it really fun and easy to create these little runnable Javascript snippets. They've added all sorts of great stuff, like console.email
and console.sms
- which do EXACTLY what you'd hope and expect. I really love this website and I'm spreading the word! We recently interviewed Steve Krouse the founder on the CS Primer Show and we spent an hour talking about what makes programming fun - because, guess what, it is super fun!
Anyway. Let's use val.town to make it all happen.
Putting it all together
I drew this in Excalidraw - maybe it will help (did I pass the interview?).
Most of this diagram is showing my mental model for how Farcaster works. Let's focus on the blue shaded boxes. There are two val.town vals (that's what they call their widgets) that we need to create:
- daily email sender
- email replier
The "Daily Email Sender" will use a popular Farcaster search tool to search through Farcaster for a random previous "fling" cast I sent, and then console.email
it to me. We will also configure this val to set a "reply val" to receive (and execute) from any replies.
To grab any "flings", you can use Searchcaster's API:
Remember our constraint - that the first character of a Fling root cast must be ⌆
.
We can do a lil' more processing of the casts, but the next major thing we have to do is send ourselves a nice HTML email and set the replyTo to the name of the "val" that I want to execute:
console.email({
replyTo: "whatrocks.<name_of_my_reply_val>@valtown.email",
html: `
<div>
<p>Just reply to this email with your entry.</p>
<p>Oh snap, remember this? ${diff_days} days ago you wrote...
<pre>${flingContents}</pre>
<p><a href="https://whatrocks.github.io/fling-web/?username=whatrocks" target="_blank">Past flings</a></p>
</div>`,
subject: `It's ${today.toDateString()} - How did your day go?`,
});
My "replyTo" val has code that looks like this:
const email_text = e.text.slice(0, e.text.indexOf("\r\n\r\n"));
const fling_cast = `⌆\n${email_text}`;
const did_cast = @me.otherValThatActuallySendsCast(e.from, fling_cast);
Before it does any of that, it also checks to see if the "sender" of the email matches the email I'm expecting to see (there's no great way to add a password / auth to this process right now).
I'll call yet another Val which actually posts a Farcaster "cast":
const { MerkleAPIClient } = await import(
"npm:@standard-crypto/farcaster-js"
);
const { Wallet } = await import("npm:ethers@^5.7.1");
const mnemonic = @me.secrets.mnemonic;
const wallet = Wallet.fromMnemonic(mnemonic);
const apiClient = new MerkleAPIClient(wallet);
await apiClient.publishCast(cast);
That's how easy it is to send a cast with Farcaster!
Does it work? Did it work?
Would ya look at that?! I got 6 likes!
Notes on Stanford Linear Accelerator Center
The latest of my "sixth grade class trip" adventures found me (and some co-workers) at SLAC - the Stanford Linear Accelerator Center.
Side note - my notes on previous "sixth grade class trips" include Nike Missile Site SF 88L and an REI Map and Compass Navigation course.
Maybe, like me, you've seen the SLAC sign countless times whilst driving down the SF peninsula past Menlo Park and wondered what sort of particle physics wonders were being conducted hundreds of feet beneath you and Interstate 280.
Well, now I know. And I have the obligatory two-mile long hallway selfie to prove it:
If you think you can see the end of this hallway, you're a liar! The human eye can't do it. Our guide told us so, and he was a scientist, okay? Okay!
For the so-tempted, SLAC offers a free tour, once per month, and I'm pretty sure it sells out faster than Phish tickets or Yosemite camping sites (bookmark this page if you want in!).
I've been daydreaming about visiting SLAC ever since I wrote a scene in my manuscript about someone accidentally discovering a particle accelerator beneath their parent's office -- and then subsequently realizing that I have no idea what a particle accelerator actually looks like.
Also, particle accelerators are just cool. You may be aware that the World Wide Web was created in one in 1989 - not directly influenced by hyper-charged electrons, of course, but also not-not-directly influenced either. Plus, this one -- SLAC -- also played host to some meetings of the Homebrew Computer Club during the 1970s.
I was therefore, understandably, quite excited when I successfully conjured tickets for the April tour, and then entered a building on Sand Hill Road for the first time.
SLAC tour walkthrough
The SLAC tour begins, excitingly, in a conference room where you watch a pre-recorded video, which despite a valient effort, is nowhere near as good as its Jurassic Park "frog DNA" counterpart. The SLAC video covers the Cold War era SLAC origin tale in the early 1960s, the fascinating Nobel-prize-inducing discoveries discovered here (including the charm quark and the tau lepton particle), the unplanned-obsolence of the primary linear accelerator, and its recent renewal for other cool x-ray stuff.
Approximately twelve minutes later, we hop in a bus and head on over to the linear accelerator, which from the surface, looks like a bunch of shipping-container style buildings in a row. A very long row. Here's Google Maps proof:
Inside this record-setting building (once the longest building the world), you'll first see a sample section of the accelerator itself (the rest of which is buried many feet below you).
The bigger silver pipe is called the Light Pipe and it helps align the smaller copper pipe above it where the particles travel. Because the accelerator is two miles long, they had to factor in the curvature of the Earth its contruction and its ongoing alignment. Though the advent of the laser pointer pen (you know, the thing your cool, but also kinda mean, middle school classmate secretly pointed at the guest speaker during an assembly about drugs or something) rendered the light pipe obsolete, the light pipe served its purpose effectively, helping align what was once the world's "most straight object."
After checking out this sample section of the accelerator, we're allowed to enter the "Klystron gallery".
A Klystron is this big microwave thing that helps speed up the particles traveling along the accelerator. This is the best visual of what's going on where with these here klystrons.
The "gallery", where we are, is the top section. Below us, beneath many feet of "Earth shielding" which appears to be dirt based on this diagram, is the accelerator. Every X feet (I forget how many), a kytstron will send microwave-like energy down to the accelerator, and help ... accelerate ... the particles flinging along the path (electrons and positrons). The inside of the copper accelerator pipe looks like this, where the microwaves from the Klystron enter these open sections.
The pipe with the particles is also water-cooled, cause it gets real hot.
What else? Well, here's the caution sign right as you enter the Klystron gallery.
Is there radiation risk in here, you might ask? No more so than when you eat a banana, says our guide. However, we are still greeted with these warnings:
Not sure about that leaky window thing.
Here's the view of the gallery looking left:
And now looking right:
It really is trippy to look down this hallway. I asked our host if he'd ever run the full length. He chuckled (not sure if that was an affirmative), but did say that there used to be a 5k among the scientists, up and back along the accelerator. I'd love to have seen - or better run -- that race.
Science stuff
Eventually ,the SLAC linear accelerator lost steam, so to speak. You may be loosely aware that the top accelerators these days are all curved (e.g. CERN). Our host explained that electrons lose energy during a curve, so why did the curved accelerators win out? Mainly, money. Because each klystron in a linear accelerator can only be used "once" for a given particle -- the only way to speed things up even more would be to make the linear accelerator longer, and that's just impractical money-wise and land-wise. But a curved accelerator, even with energy-loss along the way, can reuse its klystrons (and the like) many, many, many times. Even SLAC ended up building some curved sections at the end of the accelerator.
All that to say that the linear accelerator is no longer used in the same way anymore. But scientists have built a bunch of other interesting things using components of the accelerator, like the Linac Coherent Light Source - a giant x-ray laser.
And for the next part of the tour, we got to see where these scientists are doing their science. And guess what? This part was even cooler than the endless hallway, because it felt active and alive and also like a space station.
Like, what the heck is this thing?
Better wear the correct goggles, or else!
I know this says "hutch" but I read it as "hatch," and imagined Desmond from Lost stuck down here.
Inside the hutch, where they are using the x-ray laser to "record videos of photosynthesis happening." Awesome.
This is what I wish the inside of my garage looked like.
Here's more of the wild and weird machines just sitting in the hallway:
Some warning signs:
A whiteboard where they are presumably working on LeetCode problems while waiting for their turn with the laser.
Another fun facts
And that's it! The tour must end, science must continue. We're delivered back to the original building via bus, and as a final thank-you, we're allowed to make a commemorative flattened penny, which I would have loved to do, but the line was too long.
A few final SLAC notes:
While they were digging up the ground to build the accelerator, they found an intact Paleoparadoxia skeleton - which was an ancient manatee looking thing, and they've kept the big ol' fossil on-site.
Finally, though I did not learn this on the tour, this factoid is too important not to directly rip from Wikipedia:
The SSRL facility was used to reveal hidden text in the Archimedes Palimpsest. X-rays from the synchrotron radiation lightsource caused the iron in the original ink to glow, allowing the researchers to photograph the original document that a Christian monk had scrubbed off.
Palimpsest! My favorite word! Just when you think a place couldn't get any cooler it goes and reveals hidden text on ancient manuscripts.
The CS Primer Show
Straight from the Nand Cave and also somewhere else in a cave or maybe outer space comes The CS Primer Show.
Here's episode one, where Oz and I meander around Richard Hamming's excellent talk You And Your Research.
Subscribe to the YouTube channel for future episodes. You can expect a whole lot of Bell Labs content. Also check out Oz's new educational venture CS Primer - it's like having your own personal Aristotle-Oz computer science tutor and I'm loving it!