A decade without a drink
That's a long time
Dec 17, 2024
This is a post about addiction and recovery. It is way outside my ‘whimsical games’ lane and I completely understand if you’d like to skip it.
I have no plans to write about this again, and I promise I will be back to building nonsense soon.
That’s a decade without a drink for me.
After I quit I was hungry for stories. So today I’d like to share my own.
Keep readingWriting down (and searching through) every UUID
I couldn't remember every UUID so I wrote them all down
Dec 4, 2024
I’ve been struggling to remember all of the UUIDs 1. There are a lot of them. So this week I wrote them all down. You can see my list at everyuuid.com.
A UUID is a universally unique identifier - a long collection of letters and numbers that is basically always unique.
The site looks like this - UUIDs are displayed in a random-ish but consistent order and you can quickly search for one that you like:
it's so much easier to remember them all now
I think the site is great. I can quickly find my favorite UUIDs and star them or browse them all to find one that’s just right.
But having 5,316,911,983,139,663,491,615,228,241,121,378,304 2 possible values made it way harder than it needed to be to write them all down. I’m not sure why the authors of the UUID spec wanted to include so many bits!
While UUID have 128 bits, UUID v4s reserve 4 bits for the version and 2 or 3 bits for the variant. I chose the 2-bit variant, which left me with 122 bits of entropy.
So I think the final implementation here is pretty interesting. Let me tell you about it.
Keep readingAuto-texting STOP to unknown numbers
I am sick of political spam
Nov 4, 2024
I’m sick of political spam texts. Here is a stupid solution.
I’m not telling you that you should do this. But this morning I made my phone auto-respond “STOP” to any unknown number:
testing this was pretty satisfying
Sharing iOS automations is weirdly annoying (it’s easy to share shortcuts via iCloud, but I built this directly into an automation and I can’t make an iCloud link for it), so here is the logic written out:
Keep readingPacCam: Pacman controlled with your face
Chomp to move, look to turn
Nov 1, 2024
I made a game. It’s called PacCam. It’s Pacman, but you control it with your face.
Looking very cool
You can play it here (or read the code).
You chomp your mouth to move and turn your face to steer. You look…pretty dumb while playing it. At the end it tries to give you the dumbest possible gif of yourself (it tracks when your mouth is the most open, and builds the gif around that moment).
I could fill a book with dumb gifs of me after all the testing I did
I’m really pleased with how the game turned out, but making it was way more work than I expected. Let’s look at why.
Keep readingDOOM in the iOS Photos app
Well, kind of
Sep 23, 2024
I made a game with Adnan Aga. It’s DOOM, but it runs inside the iOS photos app. Kind of.
look, we eventually manage to get up some stairs
It is…technically playable? We managed to pick up some power ups and shoot at some enemies. It requires 8 manually configured iOS shortcuts, a dedicated photos folder, and a separately configured computer.
Let’s look at how it works!
Keep readingData and code for One Million Checkboxes
It's all here
Sep 17, 2024
I’ve released the data and code from One Million Checkboxes.
- You can download the data here, on the internet archive
- You can find some tools for generating timelapses from the data over here, on github
- And you can see the original code and how it evolved here, on github
Thanks for playing. More games to come :)
Keep readingThe Secret Inside One Million Checkboxes
Teens wrote me a secret. I found them.
Aug 28, 2024
A few days into making One Million Checkboxes I thought I’d been hacked. What was that doing in my database?
A few hours later I was tearing up, proud of some brilliant teens.
But let’s back up.
Note - I’m trying something new; I’ve also made a YouTube video that tells this story. I’m trying to decide whether I’m interested in making videos; check it out if you’d like!
Keep readingScaling One Million Checkboxes to 650,000,000 checks
Dealing with unexpected popularity
Jul 25, 2024
On June 26th 2024 I launched a website called One Million Checkboxes (OMCB). It had one million global checkboxes on it - checking a box checked it for everyone on the site, immediately.
The site, 30 minutes after launch
I built the site in 2 days. I thought I’d get a few hundred users, max. That is not what happened.
Instead, within hours of launching, tens of thousands of users checked millions of boxes. They piled in from Hacker News, /r/InternetIsBeautiful, Mastodon and Twitter. A few days later OMCB appeared in the Washington Post and the New York Times.
Here’s what activity looked like on the first day (I launched at 11:30 AM EST).
I don't have logs for checked boxes from the first few hours because I originally only kept the latest 1 million logs for a given day(!)
I wasn’t prepared for this level of activity. The site crashed a lot. But by day 2 I started to stabilize things and people checked over 50 million boxes. We passed 650 million before I sunset the site 2 weeks later.
Let’s talk about how I kept the site (mostly) online!
Keep readingOne Million Checkboxes
One million checkboxes that anyone can check
Jun 25, 2024
Hi. It's Nolen (eieio) from the future, a day and half after I posted this.
While it was live, One Million Checkboxes was played by over half a million people. Over 650 million boxes were checked. The site was featured in the New York Times and has a Wikipedia page. Wild stuff.
This post discusses the original implementation. You can read about how I scaled up the site here, and you can read a story of some incredible emmergent gameplay from the site here.
The original blog post continues below.
I made a website. It’s called One Million Checkboxes. It has one million checkboxes on it. Checking a box checks that box for everyone (and makes some numbers go up).
You can find it at onemillioncheckboxes.com.
checking some boxes
Why
I don’t really know. The idea came up in a conversation with my friend Neal last Friday and I felt compelled to make it.
Keep readingQuestions to ask when I don't want to work
Treating myself a little more kindly
Apr 2, 2024
Sometimes I don’t want to work. Not wanting to work makes me feel bad.
My identity is tied up in liking to work hard! And I work for myself - it’s very easy to slack off. Not wanting to work makes me feel lazy. It makes me feel like I need to buckle down, and I feel like something is wrong with me when I can’t.
This used to make me upset. I’d spend days distracted, neither fully working nor fully relaxing. Now when this happens I tell myself:
You love to work. That hasn’t changed.
Something else needs to.
This reframing has been a revelation for me. Thinking this way makes it easier to change my process, helps me find what excites me, and makes it easier to consciously take breaks. Here are some questions I ask in order to isolate what needs to change.
Keep readingBreakTime: Brickbreaker inside Google Calendar
Giving google calendar critical functionality
Mar 12, 2024
I made a game. It’s called BreakTime. It’s Breakout (aka Brick Breaker) running inside Google Calendar. Your meetings are bricks. It (optionally) declines the meetings you destroy.
shattering some meetings
It’s a chrome extension. You can install it here. It has no external dependencies; it’s 1,500 lines of javascript including a little game engine I made for the project.
Making it was a ton of fun. Let me tell you about it.
Keep readingTeleyegraph: convert blinks to morse code
Who says face tracking isn't useful?
Feb 13, 2024
I made a little tool. It’s called telEyegraph. It converts blinks to morse code.
me, blinking out a dril tweet
I built it because I’m fascinated with controlling things with your eyes and as a test of the React and CSS skills that I spent January learning.
You can play with it here or check out the code on github.
Keep readingTalk Paper Scissors
Rock paper scissors with strangers over the phone
Dec 21, 2023
We shut Talk Paper Scissors down on November 24th, 2024. Tens of thousands of people played it in the year that it was live.
I made a new game with greg technology. It’s called Talk Paper Scissors. It lets you play rock paper scissors with strangers by calling a phone number.
the Talk Paper Scissors mascot
It’s an attempt to make an audio-only stranger video. Here’s how it works:
- you call a phone number
- you’re asked to say rock, paper, or scissors
- you aren’t allowed to say anything else
- you hear a recording of what the stranger said and are told whether you won or lost
Games are 3 rounds long. Your stats are tracked between rounds.
When the game was live, you could play by calling 1-(515)-762-5762
(that’s 1-515-ROCK-ROC
).
I Made a Substack
Thinking about audience engagement
Dec 6, 2023
I made a newsletter. It’s here, on substack. Then I wrote a post on my blog about making a substack. It’s here, on my blog, which you’re reading right now.
Keep readingMy Computer Tells Me to Go to Bed
Nudging myself towards a better sleep schedule
Nov 23, 2023
Every night at 12:15 AM my computer tells me to go to bed.
No, really. A voice says “time to sleep.” Then this window pops up:
yeah, it's a little verbose
If I hit “ok” the window pops up again a minute later. Sometimes I move the popup out of view and ignore it for a few minutes. Sometimes I snooze it and keep coding (or writing - it’s 12:28 AM right now). But most of the time I go to bed.
Keep readingStranger Video
Stare into a stranger's eyes
Nov 16, 2023
Update: the day after I posted this stranger video went viral in japan. It was a ton of fun. The viralness has died off for now; I’m working on a separate post about the experience of using stranger video at peak popularity.
I have a new project. It’s called ‘stranger video.’ It’s about staring at strangers.
this is me and a friend - no strangers!
stranger video has some rules:
- you are paired with a stranger for a video call.
- video is tightly cropped to just your face and cuts out if there’s no face in frame.
- no audio, no text chat, just silent video.
- video cuts out as soon as one of you blinks.
You can play it at stranger.video
It’s the most uncomfortable thing I’ve built. I hope you love it.
Keep readingFlappy Dird: Flappy Bird inside MacOS Finder
Unity who?
Oct 17, 2023
I made a game. It’s called Flappy Dird. It’s Flappy Bird inside MacOS Finder.
ad placements start at $2,000
It has instructions, high score tracking, and marquee banner ads. You double-click to start a game and select any file in the window to jump. It runs at 4 frames a second and can’t run much faster. It occasionally drops inputs for reasons that you’ll understand if you finish this blog.
I’m going to lay out how Flappy Dird works and how it got there. Head to the github repo if you want to check out the code or play the game yourself.
Keep readingA real-time game that runs in a Google Sheet
A deranged adventure
Sep 16, 2023
I made a game. It’s in a Google Sheet:
really, really, I'm fine
There’s some stuff going on here! But in addition to aesthetics this game is “real time” - the spreadsheet tracks the time when you complete tasks and compares those times to where the animated blue progress bar is. Your final evaluation (in the lower right) tells you whether you completed your tasks early, on time, or late. This is all driven purely via Google Sheets formulas - no Apps Script or other trickery needed.
Let’s talk about how this works!
Keep readingMeasuring something changes it - and sometimes that's enough
Changing behavior without worrying about individual metrics
Aug 29, 2023
Every night I write down six seconds of my day that I want to remember.
Some nights I struggle to come up with something worth writing down. That’s ok! Sometimes I’ll struggle for many days in a row. That’s less ok.
But when I have multi-day stretches where I have nothing to write down I notice. And noticing causes me to start changing my behavior. Journaling this way helps me seek out memories worth remembering.
Measuring and optimizing the right metric can be powerful. Measuring and optimizing the wrong metric can be disastrous. But sometimes the act of measurement itself is sufficient to change behavior for the better.
Keep readingHexagone
A font that converts hex color codes to RGB
Aug 26, 2023
So here’s a neat trick:
the font is called hexagone because it gets rid of hex
By changing the font I’m able to automatically convert hex color codes to RGB! What’s going on?
Keep readingSwedish Furniture Conglomerate Survivors
Busting ghosts in a haunted Ikea
Aug 21, 2023
Basics
- Genre: survivors-like
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: ~August 8th - 20th
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
Gameplay Video
I like the 'pop' that the ghosts make
Wub
Say nonsense words fast
Aug 11, 2023
Basics
- Genre: Competitive toungue twister
- Links: play it right here or play it on itch
- Engine: A little hand-rolled javascript
- Time Spent: ~4 hours one evening
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
In Wub you’re prompted to say some silly phrases while a timer plays. When you finish saying the silly phrases the timer stops. The first phrase you say is “wub wub 1.” That’s why it’s called wub.
Interestingly, the API does a better job of detecting the phrase “wub wub” than detecting a single wub!
wub wub wub wub wub
Infinite Hamlet
Typing Hamlet one character at a time into twitch chat
Aug 2, 2023
I turned off Infinite Hamlet on September 30th.
Some quick stats: 41 unique chatters submitted 4,400 characters and completed 136 lines of hamlet. Running it was a ton of fun! I’m excited to revisit this kind of game in the future.
Basics
- Genre: twitch-plays-pokemon-like
- Links: play it live on twitch
- Engine: Godot 3.5
- Time Spent: ~2 weeks on and off
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
Gameplay Video
To play Infinite Hamlet you attempt to type out all of Hamlet one character at time via twitch chat. That’s the whole game. It’s called “Infinite Hamlet” because of the infinite monkey theorem
Riveting
Wordle in the Firefox address bar
Abusing the Opensearch spec to make a game
Jul 5, 2023
So here’s a neat trick:
If only the font was monospaced
That’s the firefox address bar! And I’m playing a full game of Wordle in it! What’s going on?
Keep readingGame 6: Get the DVD logo in the corner
Achieving my childhood dream (of getting the DVD logo in the corner)
Jul 3, 2023
This game was linked from New York Times Watching newsletter on Friday September 8, 2023. This was super cool for me! Margaret Lyons I have no idea how to get in touch with you but thanks for mentioning my game!
Basics
- Genre: Uh. Arcade action game / childhood dream achievement simulator (?)
- Links: play it on itch or check out the code on github
- Engine: PICO-8
- Time Spent: 4 days (June 27th - June 30th)
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
Gameplay Video
My favorite part was adding manual 'particle effects' by drawing individual pixels to the screen
Game 5: Reshape TD
A tower defense with roguelike elements
Jun 12, 2023
Basics
- Genre: Tower defense with a vaguely roguelike choose-1-of-3 upgrade system
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: Uh. 15ish days? May 8th - May 13th part time, May 29th - June 11th full time 1.
- Other Stuff: This game shamelessly rips off the UI of DesktopTD, one of my favorite games of the flash game era. Thanks for the many hours of enjoyment, DesktopTD!
More context than you want or need: I started making a tower defense, went on a trip and worked on it in my off hours, dropped it to make click click trick for a game jam, and then started back up on a new tower defense on June 7th (using the bones of the original TD).
Gameplay Video
I was so excited when I first combined 'many projectiles' and 'exploding projectiles'
Game 4: click, click, trick
A rhythmic puzzle game built for a game jam
May 23, 2023
Basics
- Genre: Rhythmic puzzle game
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: May 15th - May 21st (1 week)
- Other Stuff: The first few levels of the game are probably too hard. If you almost immediately get stuck check out “the game is too damn hard” below.
Gameplay video
No phones in sight just squares pulsing to beats
The game is about leading the little gray guy into a trap and then making it to the end of the level.
Keep readingGame 3: Don't Send Me a Puddle (Ludum Dare 53)
A physics puzzle about taking ice down a mountain
May 5, 2023
Basics
- Genre: Physics puzzle game
- Links: play it on itch, read the code on github, or check it out on the Ludum website
- Engine: Godot 3.5
- Time Spent: April 28 - May 1 (72 hours)
- Other Stuff: This is my first game jam game 1 - neat! It’s the first time I’ve made my own game music - neat! I threw away most of my work from the first day of the jam - less neat!
Alright I did a two-hour game jam and made a relaxing drive but that doesn’t really count.
Gameplay video
If I showed any more you'd get spoiled!
Game 2: Sisyphus Needs a Nap
A greek myth launcher game
Apr 27, 2023
Basics
- Genre: Launcher, almost idle. Inspired by “Learn to Fly” and some other games popular in the Flash era.
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: April 11-13, April 18-26 (12 days with some traveling in between)
- Other: Sisyphus Needs a Nap got more plays on itch in a single day than platris did over its lifetime! It also made it to the top of itch’s “new and popular web games” page. Neat!
Gameplay Video
alright I cheated and started part of the way through the game but it's more fun that way.
Game 1: Platris
Playing tetris while platforming
Apr 21, 2023
Basics
- Genre: stressful puzzle platformer? You play tetris and a platformer at the same time.
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time spent: March 30th - April 7th, but I already had a basic tetris implementation
Gameplay Video
the enemy is named doug