Reading List

The most recent articles from a list of feeds I subscribe to.

Your Favorite Homepage as a GIF

The Wayback Machine is a treasure. But it's also a little slow to navigate IMHO (perhaps purposely harkening back to those halcyon microfiche days). Can't we use computers to speed up our research endeavors?

Yes, we can. Here's a neato gif of Apple's homepage from 1996 to present:

Apple homepage gif

Or maybe you're looking for some H1 or CSS gradient inspiration for your enterprise SaaS web3 startup? Look no further - here's Stripe's homepage since 2009:

Stripe homepage gif

Gotta love that cloud with gears inside image. APIs, baby.

These gifs are neat, right? Much faster than clicking around the Wayback Machine UI. Careful observers may be wondering about the snapshot cadence here - I'm grabbing one screenshot per year in these examples. The Wayback Machine has waaay more snapshots for these sites (there are currently 349,843 available snapshots of apple.com between October 22, 1996 and February 1, 2023), but an annual capture -- in gif format -- definitely gives you a good sense for the evolution of these homepages.

Here's another great example: whitehouse.gov (and, no, this is not whitehouse.com, to those of you from the 90s who've made that most-enlightening of mistakes before):

Whitehouse homepage gif

This is almost itself a history lesson of the web in a single gif.

How I made these GIFs

Speaking of the GIF format, did you know it was created in 1987? That's two years before the World Wide Web. Also, the gif spec is nuts and has tons of features that no one really uses or knows about. These magical features (like the "wait for user input" flag) were first revealed to me in our Escaping Web interview with Lauren Budorick of Figma. But I digress.

My point here -- and I do have one -- is that I've been thinking about this idea -- gifs of the Wayback Machine results -- for a couple years now, and never actually did anything about it. And then my pal Nicholas extolled the virtues of coding with ChatGPT to me last night. I was skeptical, despite dabbling with (and enjoying) GPT-3 and DALL-E 2 during last year's writing project. But then I remembered this little Wayback gif idea, and I thought I'd give ol' ChattyG a try, since this would mostly be a "string some boilerplate together until it works" sort of project.

AI rubber duck debugging

This is not going to be a how I, for one, came to love our new AI overlords post. But I will quickly share my takeaways.

The most impressive thing about working with ChatGPT was that I shipped this project. Period. Something that had been rattling around in my skull for a couple years is now available for you to try out on GitHub and even Replit if you want to give it a try in your browser.

Did ChatGPT get it right the first time? No. But sometimes editing is easier, and it got me started in a direction. I still had to do some documentation digging and even some StackOverflowing, but that was fine, cause I was paired up with a robot buddy. In this sense, ChatGPT felt like rubber duck debugging, except with a rubber duck who has some fairly decent ideas of its own.

Where ChatGPT really excelled for me was when I wanted to add conveniences to working code which would have been annoying to code myself.

For example, the URL to search was originally hardcoded in the script. After everything was working, I asked ChatGPT to update my script to accept the URL as a required CLI argument. ChatGPT crushed this task, pulling in an arg parsing library for Python and updating my script structure accordingly. That was pretty cool.

More GIFs, please!

How about the Everything Store?

Amazon homepage gif

Seems like they got wind of the automated test software by 2020.

Let's do one more. How about YahoooOooOOo?

Yahoo homepage gif

Kinda disturbing to see Yahoo transform from covering "Arts and Humanities" and "Science" into the LCD of our attention span over the years, actually. I think I'm going to stop now.

Homepage as history

Homepages are cool. And we're lucky we have the Internet Archive out there recording them all for posterity.

Please consider donating to the Internet Archive - creators and maintainers of the Wayback Machine, as well as many other Library of Alexandria-esque Internet.. um, archival programs - right here. I just did it, and it was super easy with PayPal.

F52 By the Numbers

In the spirit of Brick Experiment Channel's post about their YouTube channel's earnings, I thought I'd share some stats about last year's short story writing project Fahrenheit 52.

With it being the New Year and all, I thought I'd channel my inner Stoic and classify these stats into Those Things I Can Control and Those Things I Cannot Control.

Those Things I Can Control

Stories

52! And I managed to hit the weekly deadline for every single one, which wasn't always easy, like during our honeymoon (I had to basically pre-write that one).

Words

59,913.

NaNoWriMo says a novel is 50k words, so I wrote a book this past year. That's cool. Maybe I should self-publish it!

For future Charlie's edification, here's how I grabbed that stat:

# make a tmp folder
mkdir tmp
cd tmp
# copy the stories into the tmp folder
cp ../fahrenheit-52/pages/stories/*.md .
# remove frontmatter from each story
sed -i '' -n '16,$p' *.md
# count words for all files in this directory
cat * | wc -w

I'm also curious about average words per story. Since there are technically 53 stories in the project (I preloaded a zeroth story to make myself feel good in the beginning), we can just divide 59,913 by 53, which gives us 1,130 average words per story. Now, my writer heroes like Stephen King and Delilah Dawson are probably outputting 1k+ words per day rather than per week, but, hey, it's a start!

Most Common Word

Now that we have a corpus of text, there's a bunch of fun data mining things we can do, like word clouds and Markov chains. In fact, I already wrote a story about just that this year, so I'll link over to that story rather than recreate the fun here: Writer's Blockchain.

Minutes of Audio

As a fun bonus, I read aloud each story and quickly published out as a podcast, which I listed in the iTunes Podcast Directory and the Spotify Podcast thingie. I'll share some (spoiler: disappointing) stats below, but the Spotify Wrapped for Podcasters did share this one:

minutes of audio

Fairly certain they also missed the last episode/story or two, so I think we can safely call this ~300 minutes of audio. That's (carry the one...), 5 hours of audio! Roadtrip, here we come.

logic tracks

If you're at all intrigued by the F52 podcast, I can also reveal that there are also a few surprise narrators in there, including Carly, my parents, my mother-in-law, my sister, and one more!

Of every good outcome from this project, of which there are many, these recordings of my people reading my stories is by far my favorite treasure. Audio of your loved ones, I cannot recommend it enough. It's better than video. Close your eyes and listen to your people.

Those Things I Cannot Control

Page Views

Oof. We weren't doing this for the page views, were we? No! But they would have been nice, right?

Annoyingly (or perhaps for the best), Cloudflare Web Analytics only retains data for 30 days. Here's a current screenshot:

web analytics

570 visits in last 30 days (with a minor spike from my Year in Short Stories post). Not super great.

BUT -- what you're not seeing are the Hacker News bursts for a few of my stories. I posted my stories when I thought they'd be interesting or relevant to the HN crowd. A few of them did okay, and Nibbles - a story about cute hungry hungry von Neumann probes) did great. This post hung around the home page for a few hours and I think I saw ~1-2k visitors that day. There was also another post that completely destroyed my bad science in Shimmer - my diamond asteroid mining story -- but in a super constructive positive way, where I learned a ton! All told, I had a very positive experience posting these on HN, and the comments were uplifting and helpful. It can really happen, people.

RSS subscribers

No idea. I don't have this instrumented, and I'd love any guidance or tips for the future on how to best do this. For F52, I'd wager a guess it's less than 10, even with the recent re-interest in personal blogs and whatnot.

Spotify Subscribers

Hi, Mom!

spotify analytics

Apple Podcasts Subscribers

Also, hi Mom!

itunes analytics

Clearly all my listeners must use Overcast, like me!

Notes for next time

I think I missed an opportunity in not collecting emails for a newsletter on the F52 website - especially during the big HN bursts. Or perhaps I should have just done everything as a Substack instead?

Like the good H2 says, just some notes for next time!

Year of Short Stories

I wrote a short story every week in 2022. My goals were to get better at writing and to have fun. I'll let you be the judge of the former but I sure did have a good time. This is what they look like:

F52 stories

Colorful, right? Technically, there's 53 stories, but that's cause I preloaded up a zeroth story that I'd written a year back so that the site wouldn't look empty and also to trick me into thinking I'd already made progress - you know, the proverbial todo list items you've already done but still jot down so you can cross them out immediately.

Speaking of task management, this is also probably the first "New Year's Resolution" that I really achieved.

#TODO: Fix me later (JIRA CH-4202)

There's always chatter around this time of year about whether or not New Year's Resolutions are a good thing or a bad thing. Maybe we're supposed to be doing goals instead. Or anti-resolutions.

The debate reminds of when we were told by our teachers at St. Leo the Great to switch from "giving something up" in Lent to "doing something new that's also good" - which is actually a good setup for a story!

Regardless, what I like about Resolutions Time is the "resetting" it can bring. Sometimes you gotta blow on that Nintendo game to make it work again. It's also a great opportunity to try new things. Many of us seem to calcify as we age (see Thanksgiving dinner discussion topics). But we can resist, my friends, if we simply follow Merlin's advice. Finally, there's often a health theme around New Year's Resolutions, and hopefully you already know my thoughts on being your own health advocate.

Resolutions-rant aside, I thought I'd share some LEARNINGS (is there a more annoying word in modern business-speak? Yes, probably, but don't you dare tell me it) from my year of writing short stories.

Learn the Learnings Learned by a Learned Learner

Have fun

This one's already part of my life motto (borrowed from children's publisher Klutz Press), and I view it as critical to the success of my short story writing project. I wrote these stories for me, and I like reading them. I think they're fun, and I didn't stress about writing them, even though I did have to carve out time to write them each week. But it doesn't take much time to make a meaningful dent into a short story. I think everyone would be surprised by that - take a phrase or a name or a memory and just start... going.

Clear the cache

I wrote many of these stories to simply get them out of my head (where some of them have been rattling around for years, like what if it's The Young Adventures of Indiana Jones but it's Warren Buffett instead and all his greatest investment ideas came from hijinks and misadventures?). As it turns out, not all of my long-standing story ideas were prize winners, but they're at least OUT of my head now, where I can edit or revise them or, most-likely, just move on! My creative cache is cleared and is feeling very performant now.

Remove technical barriers

I coded up the project's website last December. I made sure that I could deploy it with a simple push to GitHub. I made sure that all I needed to do each week was "write the story" and "git push" (other than the podcast recording, a process which I also kept as simple as possible, partly due to lack of audio editing knowledge but mostly because I knew no one was really listening to them anyway other than Carly and my mom).

Jot stuff down

Write down your dreams, any bits of them that you remember. I use the Drafts iOS app to do this. I dump ideas, character names, dialogue, etc. throughout the day into Drafts, and then process the queue when I'm back at my computer. My phone's always with me, and I'm trying to make it a tool for creativity over pure consumption.

Review the list of things I didn't do good cause I'm no-good

Here's where I would normally write down some "opportunities for improvement" - where I reveal that I'm simply masquerading as a lifelong learner but I'm simply a shameless millenial optimizooor.

However, this is not only a blameless post-mortem, it's also a faultless one, too. I know I could have done a better job of editing and revising my stories. I know I could have written more every single day, and made it a true daily habit. But we are not doing this, okay?

Try to forgive yourself for being human, Charlie, and instead enjoy the fleeting joy of creative fulfillment before the next project begins tomorrow. Have fun, remember!

10 PRINT "HAVE FUN!"
20 GOTO 10

Mini story collections

Lessons be damned, one of the fun things that unexpectedly emerged this year was my use of recurring characters and companies and locations. If I'm allowed to be critical again, it's because this tactic became a shortcut. It was definitely easier to keep developing the same characters versus going full-on tabula rasa each week. But, also, I liked these characters and companies and locations, so there, brain!

If you do give my stories a try, keep your eye out for the megacorp Eagle (can we trust them? do we even have a choice?) as well as several adventures across Old New Jersey and the town of Little Bighill.

I'll also highlight two recurring characters: Penelope "Thesaurus" Green and Will. Penny's braver than just about anyone, and Will's -- well, Will's me. Anytime you read a Will story, it's an ever-so-slightly-veiled memory. They're the beginnings of my Dandelion Wine.

Penny stories

Will stories

Run Linux on Electric Objects EO1 Wall Computer

Riddle in the dark

What was too early for NFTs, too vertical to be a Samsung Frame TV competitor, kickstarted to life by gifs, and acquired to death by Giphy?

That's right, hobbitses, it's Electric Objects!

Electric Objects app

Electric Objects was a computer company building a computer made for art. That's one of the coolest sentences ever, except for the was part. Founder and CEO Jake Levine (a fellow Morgan Stanley escapee) wrote a great what-happened series of posts in 2018 that are worth a read for anyone interested in hardware startups. But, even better, just re-watch their Kickstarter video and experience the pure joy of the creative act of bringing a computer to life.

Electric Objects art

Electric Objects was gobbled up by Giphy, which in turn was slurped and gorbled into Facebook, and the Electric Objects iOS app is sadly no more. Which, for a computer that was explicly designed to not have a keyboard or mouse, poses a challenge for its owners.

So, why am I still lugging around my EO1?

Because I'm not giving up on the dream, Jake.

Still kicking

The EO1 is a computer, right? Surely, we can boot into its presumably Linux OS somehow, instead of the default Electric Objects app experience thingie?

Turns out, yes, we can! I had to do a fair bit of forum spelunking to figure it out. I was delighted to discover other Electric Object wanderers out there like me. This post was the jackpot.

The long and the short of it is that the company who manufactured the board for the EO1 is called Boundary Devices, and you can download their Linux builds on their website (after making an account, etc, etc). Fling that image onto a USB thumbdrive, attach the thumbdrive and a keyboard and a mouse to a USB hub, connect the hub to a micro-USB adaptor, plug that sucker into the back of the EO1, and then - boom - you've got yourself a weird vertical Linux computer on your dang wall.

It's almost too easy.

Electric Objects

Displaying the New York Times frontpage on your Electric Objects EO1

So, now what? What are you going to do with your wall computer, Charlie?

Lots of stuff, okay?

Like... remember that post from Brian Donahue about displaying the NY Times frontpage on his EO1 (which itself was derived from another post about building a giganto e-ink display to do the same)? How about that?

Much of Brian's repo is about communicating with the Electric Objects API. But we're not going to do that, are we? The real nugget of gold here is the deterministic URL for grabbing a PDF of the NY Time front page:

https://static01.nyt.com/images/$(date +"%Y/%m/%d")/nytfrontpage/scan.pdf

I bet we could make a nice one-liner to download today's front page using today's date and then open it up full screen somehow and then make it run this script every time the computer boots up.

That turned out to be more complicated than expected (typical). I hacked and slashed (and Googled) my way to the following setup, which works (I know it's not a one-liner, but doing it this way really helped me debug why each step - yes, each step - wasn't working at some point in this process):

#!/bin/bash

export DISPLAY=:0

echo "sleeping..."
sleep 60

echo "remove yesterday..."
rm scan.pdf

echo "download today..."
/usr/bin/wget "https://static01.nyt.com/images/$(date +"%Y/%m/%d")/nytfrontpage/scan.pdf"

echo "open fullscreen..."
/usr/bin/evince --fullscreen scan.pdf

echo "done!"

Then, you can use crontab to setup this script to run every time the computer boots with the @reboot keyword (which I didn't know about before and works as valid cron syntax - depending on your cron version). Don't forget to chmod +x your script first!

Well, does it work?

Electric Objects

It does!

For the curious, migrating my one-liner/script to cron had a bunch of challenges (e.g. cron doesn't like % without escaping them; I needed to add sleep to ensure networking/wifi had loaded; I needed to add the DISPLAY env var so that cron knew how to talk to the display, etc). Also, I needed to install postfix so that I could read cron's error logs, which amazingly are emailed to your computer.

After all that, I connected the EO1 power cable to a Wemo smart outlet plug thingie, which integrated with Apple Homekit. Using the Apple Home app, I set this outlet to turn on at 6 AM and then turn off 2 hours later.

Hello darkness, my old friend

After a few evenings, I thought this "5 minute" project was done until I noticed that the screen was going dark at the 1 hour mark.

This particular Ubuntu distro's Power settings did not provide me the option of "never going to sleep". More Googling led me down many failed paths (e.g. masking stuff in systemctl, trying gnome-tweaks) until I finally got something that keeps the EO1 display "awake" - the caffeine utility.

I added this line to the end of my script, and now we're awake and jittery... at 6 AM. But at least we have today's paper to read.

caffeinate sleep 9999999

Are we done puttering yet?

Never!

Now I'm adding Tailscale so that I can officially disconnect the keyboard and mouse and still be able to easy SSH into this wall computer. And I think I broke something else running sudo apt-get update, cause it's not booting up right now. Sigh...

Also, this whole caffeine thing makes me realize that I don't want to read anything before coffee, so I think automating morning coffee has got to be the next step.

I hope this little project reinvigorates your faith in the EO1, noble carriers of this wonderous device. Here's to even more people starting computer companies!

This Song Also Wrote Itself

Careful readers of this site may recall that I'm the first person in the history of the world to play guitar and sing a song in the back of a self-driving car (TODO: insert "prove me wrong" meme here).

Well, friends, my "talents" were requested again by Cruise.

Thank you to my pal Paul Rosevear for the blues-y, groovin' strummin' tips last week (please teach me more guitar stuff)! Thanks also to the great Chuck Berry (all albums should probably include this thank-you)! And thanks to Carly for tolerating all the practicin' I've been doing in preparation (and also for the bouncy-ball lyrics idea in the video)!

Music is the best!

Studio action photo