Recurse Center

My friend Bryan Braun recommended I apply. I'd heard about RC before but didn't consider it for myself for whatever reason. I'm thankful to Bryan for the shift in my opinion.


A lot of these links are private to RC, as a reminder for me.

I try to post a summary of my daily logs to #checkins.

Log Book

Thu Oct 5 22:32:05 PDT 2023

I accepted the offer to join the first Winter cohort of 2024 this week. I'd like to be on-site at the Brooklyn location for some part of it.

While I figure out how I'll get to and live in Brooklyn I also have to work out a project to focus on when I begin there. I have several ideas.

One idea is to enable myself to edit this very website from a browser. Currently I edit it in Emacs or Vi. But I like to look at it on the web, so I'd like to edit it there too. There are good code editor components for JavaScript already like CodeMirror. But there are many questions I don't have straightforward answers for. How would I edit the site given that it's written in MDX? It's not WYSIWYG. The source code of my site is not the same as the HTML and CSS and JS which is displayed on the browser. And then, once I've made some edit to that source, how would I persist it? Currently I store my site in git, on GitHub. Could I still do that? Or would I need another storage method like a document store?

Wed Jan 3 10:39:19 AM PST 2024

First day. Went to talks. Met people in small breakouts. Played with Virtual RC, a shared, persistent virtual 2D space where I have my own desk (a certain colored square on the 2D grid with my initials on it). I'm not sure how I'll use that space, but I had fun on my first walk around.

Attended a Creative Coding meetup, brainstormed with Alex and Tristan, learned about the CMU pronunciation dictionary.

Learned about Mavo, a tool for building editable HTML pages. I spent some time exploring and reading their documentation.

Generally overwhelmed with my own excitement and Zulip messages.

Learned more about Zulip, like their time picker to translate to local time zones. Installed Zulip on my e-ink phone so I can hopefully limit my screentime while staying in touch.

Spelunked in some RC music archives and found gems.

Looked at Playdate dev stuff for a while. I got a Playdate as a gift a few days ago. I love it and I might explore a project on it.

Thu Jan 4 11:51:12 AM PST 2024

Pairing workshop. Worked with Kevin to get some colored circles to cycle colors when clicked, on the way to a Mastermind game.

After the workshop, I saw clearly why RC promotes the benefits of pairing so much. Such a variety of benefits from socialization to experimentation to inspiration. And the cost? Just put yourself out there and turn on your microphone.

Still overwhelmed by Zulip. E-ink view definitely helped me feel more comfortable, but it felt impossible to keep up with the deluge of daily check-in threads! At some point, I will have to prioritize instead of my vain attempts to keep up to date with everyone's, but until then, I have accepted the pain. I want to see what everyone's into, so I'll accept the pain!

I set up to ease organization of quick connections. Though Erika mentioned their concerns about security/privacy. I heard about it from Faisal when he shared his script ( for scheduling in Zulip's formatting.

Had a great chat with Vedashree and Raghav talking about web animation, GSAP, web development, micro interactions, Josh W Comeau's site CSS, old-school web design, using real life prints in web design.

Coffee with P.B. To (she/they) (W2'24), talked about visualizers and the web audio and web GL, Playdate. We also talked about the history of React and how all the abstractions it provides. She told me about a coworker who couldn't achieve a Spotify audio player scrubber in React-land, flummoxed by refs. How React is a functional veneer (PB's word) over the web's landscape of imperative. We both got pumped for Bret Victor. Then we talked about my implementation of framework-less JSX and MDX for my website.

I loved sitting in the voice chat cafe in RC Together

Had an idea for a Playdate game: Replicate the experience of the famous Japanese train engineer simulator, "DENSHA de GO!" using the crank as a brake.

Asked a question and got an answer about calendar management and RC

Fri Jan 5 08:36:14 AM PST 2024

I had an idea to host an event at an event about hosting events. Here's my brain dump on the idea. If you could see yourself co-hosting something like this, let me know and we can collab. Otherwise I'll throw it on the calendar and just try it.

> What's That? Wednesday

Everyone is welcome without preparation.

Those who do want to prepare ("presenters"), here is your goal:

> Bring something that will make others say "what's that?!"

Here's how it might go, in rough chronological order:

Presenters let the facilitators know that they have prepared something at the beginning (Maybe in the future this happens before, to maximize time for presentations).

Facilitators share the order of presenters to reduce surprise.

I'd love to copy this great trick I saw Mai and Liz do. Between each presentation, the host reminds the next presenter it's their turn, and warns the on-deck presenter so that they are not caught surprised. Maybe like:

> "Now we'll see <your name>'s something! <other name>, you're on-deck!"

Then maybe the host invites the presenter to share however (screenshare, hold something up to camera, sing a song). Then, the host asks the question on everyone's mind (or maybe asks everyone to unmute and say it together? Is this a game show now?):

> What's that?!

Then the presenter answers that question. They can say anytime "I'll take questions now," and facilitators will help pick out questions from the audience (so it's not on the presenter to be fair).

Repeat for however many people are prepared (or jump in at the end unprepared?! why not?) and for how much time allows.

Other thoughts: Should there be a time limit? I know I get ramble-y, and I wouldn't want to short anyone else their time. Maybe it depends on how many people sign up. So we can't ever guarantee there will be time for everyone. So maybe we prioritize first-timers/least-recent-ers? sf 80 people show up prepared, 5 minutes each, we can't do 7ish hours of this, right? That's crazy?

Note from Mai: Let each person describe what kind of feedback/questions they want. That will maximize the comfort of people who may need to be a bit more comfortable to cross the fence from not presenting to presenting.

[RC Event hosting guide](

Read Julia Evans's blog post about git commits which got me hooked on git internals for the afternoon.

In the evening, I watched some YouTube.

Watched "Cursorless: A spoken language for editing code" by Pokey Rule (Strange Loop 2023) about a structural editor driven by voice commands. Very cool. Good description of tree-sitter, a tool I'd heard of but never understood. Also learned about the term "Tacit programming languages" to refer to point-free languages. Not sure the difference between "tacit" and "point-free", or if they're synonymous.

Still reading all the Zulip, but I feel less overwhelmed and more enthused about all the bright and smart conversations happening and the privilege to have the time and space to explore!

Watched "Concatenative programming and stack-based languages" by Douglas Creager. Really good, fast description of concatenative languages. Also great description of an argument for a novel language's Turing Completeness by comparison to another known language.

Creager mentioned Uxn on the subject of stack-based languages. I'd heard of before and was always impressed with their work. At the bottom of the page I saw:

Uxn can also run on classic consoles and on old electronics. Currently, there are ports(not all are complete) for GBA, Nintendo DS, Playdate, DOS, PS Vita, Raspberri Pi Pico, Teletype, ESP32, Amiga, iOS, STM32, IBM PC, and many more.

Following the thread of Uxn, I watched "Weathering Software Winter", Handmade Seattle 2022 by Devine of Hundred Rabbits ( Devine mentions the importance of learning SmallTalk and the path from their to Lisp Machines. I had learned about SmallTalk a little in the past, but I had never studied Lisp machines. Likened those systems to the empowerment of View Source on the web (and how it's reducing over time). Referenced Bell Lab's Cardboard Computer which fascinated me.

I made Anchor: a new project to explore Uxn and Playdate.

Future: Watched Strange Loop Language Panel - Hickey, Sussman, Wirfs-Brock, Pamer, Alexandrescu, Ashkenas (2011)

Mon Jan 8 09:01:19 AM PST 2024

Attended check-ins, followed by an ad-hoc talk about databases. Chatted with George about Pomodoros, the benefits of plans, note taking, strategies for keeping on track.

Attended C Creatures, the meeting of C enthusiasts. Spoke about the merits of other languages compared to C, like Zig and Rust.

Attended "Building Your Volitional Muscles" workshop. We wrote three columns, a row for each idea for a project at RC, labeled "Ideas", "Why?", and "What to do?". The first two just rolled off my fingertips, but I found the "What to do?" column difficult. Which project? All of them! The exercise was so helpful to pinpoint where my bottleneck was. Great observation by Will that there was a lot of overlap, and that it might not be such a big deal which one I pick. I realized that I wanted to pick a project which would push my limits coding-wise, because I want to converse and connect with my co-recursers about code.

Had a great talk with Rachel Petacat about the history and current state of RC and her time with RC. And how beautiful Colorado is.

Attended the Bret Victor Reading Group. Good to circle back on mind-melting ideas. I can sense how different my perspective is from the first time I approached his work. Refreshed by others' alternative perspectives and healthy skepticism which led to nice discussion.

Our focus was the "Media For Thinking The Unthinkable" video. There's also the article version and the note

Got a bunch of great links from everyone to investigate further. So grateful for people who investigate the same space and find different stuff. Excited especially to check out, the DynamicLand descendant.

Attended Music Programming Group, but none of the originators were there, so just had a great discursive chat with Vedashree and Zack on music, web, and micro-controllers.

Anchor: Investigated Cryptopals for the meetup on Wednesday. Read the high praise note from 2013.

Went to Dorkbot, the local hackerspace's hardware night. Had a great talk with Other Reed Hummel and Zack Davis. Feel lucky to have other RCers nearby to meet with in meatspace.

Tue Jan 9 10:54:24 AM PST 2024

Read a big chunk of Inside Playdate, but there's sooo much. Still, I learned a lot and found it incredibly valuable.

Zack's SuperCollider workshop, watched and listened to amazing sounds! I don't think I have mental bandwidth to learn it now, but I'll enjoy listening in to future musings.

Jake's Emulators + VMs group. I enjoyed seeing some code and was amazed that I understood much of it! What I did not understand was the "why," but I'm encouraged to get deeper in the stack and understand better.

Julie's Graphics Goblins. Chatted, watched demos, shared ideas and resources about computer graphics. A topic I know nothing about but intend to dig into once I've got my footing set deeper in the computer. I'll soon need CPU graphics skills to draw on my Playdate!

Hung out in the cafe, renovated a bit to make it more attractive and cozy. Chatted with Vedashree and Zach about RC so far.

Continued to hang in the Music Consumption Group. It was really nice to chill and work with handpicked bangers galore. Anchor: Got the first 3 Cryptopals challenges done for the meetup tomorrow. It was really fun to work through them! I might be hooked.

Wed Jan 10 10:54:24 AM PST 2024

Cryptopals! When I listened to others' implementations, my mind expanded. JavaScript had its own unique challenges, sure. But the bit twiddling of low level language solutions highlighted for me how much I'd taken for granted. I plan to restart the challenges in C, and catch up for the next meeting.

I appreciate the external pressure of the group pushing forward - this will force me to figure out how to run C on my machine, which I thought about for the last 5 days but so far took no action on.

I went to Creative Coding, but when we broke out to begin work, I realized I hadn't eaten yet. When I finished a quick lunch, Elias pinged about his project on the Shakespeare programming language. Someday I hope to actually work on a Creative Coding project!

Elias's project was really cool! Fun to connect and navigate how to talk about a topic on which I haven't had many in-person conversations. That topic was broad, maybe "programming language implementation"? Names are hard. We did some pair programming, for which the driver/navigator split still feels uncomfortable to me. And we did actually achieve some code!

P.B. popped in during this time - love that the audio spaces in Virtual RC encourage this type of ad-hoc meetup.

Spoke with George about socializing and how much easier it is when you have a project to show to the group. We talked about low level languages possible projects we might explore together. George was so fun to talk to!

Spoke at the Non-Programming Talks. I'm certain now that if Julie organizes an event, the vibes will be spectacular. Lots of great questions about my e-ink driven, one-handed-keyboarding, mobile computing journey. Wow at Blaise's journey. Inspiring in its detail. Intrigued and sold by Quinten's pitch for Dungeon Crawl Stone Soup! I wonder if I can play on my E-ink phone? Will look.

Spoke with Roger about the struggle and anxiety of the job hunt. So real!

Then I chilled in the cafe for a while with Ivy and Vedashree, spoke about resumes and job hunting some more, metaphors between computing and meatspace, and how Twitter was never really good but now it's far worse. Oh and this video is a must watch (2:30).

Thu Jan 11 11:55:02 AM PST 2024

Crafting interpreters. Fun group. I don't think I have the head space to follow along but I'm so interested in the topic that I want to follow along.

Paired with Raunak

Weekly Presentations!

Hung out with Shaq

Future: I took out all people's last names because I hadn't asked anyone if I wanted to publish their words/identities

Fri Jan 12 11:55:02 AM PST 2024

Paired with Jake on gameboy

Got Playdate C code running

Sun Jan 14 11:55:02 AM PST 2024

Redid Cryptopals challenges 1-3 in C.

Mon Jan 15 11:00:02 AM PST 2024

Light day, lots of people taking MLK day off. Watched Jacob start a base64 decoder. So enlightening to watch a skilled C technician! Look forward to our chat on Thursday.

Watched and vibed through Quinten's incredible TIC-80 tour. Spinning cat is life!

Tue Jan 16 11:00:02 AM PST 2024

Vibed with Zack's supercollider group. Sound wizard!

Postponed Bret Victor group. Great discussion - it was great to hear from others about how they framed Bret Victor in their minds. I realized I'd spent far too long thinking my own thoughts about his work without engaging with other smart people. So great to finally break that trend.

Chatted with Dan about industry, expectations, and programming language theory. Want to chat more, about anything!

Paired with Julie on JavaScript project setup and the urge to craft a perfect setup and the fear that an imperfect setup will cause insurmountable friction in the future. Maybe, maybe not.

Paired with Jeff on a super cool project to create custom playing cards in a web interface. I loved how the project intertwined hand-crafted SVG and complex JS interactions.

Wed Jan 17 12:47:14 PM PST 2024


Creatively coded with Ivy a Non-programming talks on peakbagging, proper pasta preparation, and packs of instant noodle.

Nice chat in the virtual cafe with Julie, Raghav, and Shaq about Mac and Windows ecosystems and whether it's worth the time to port a niche tool from one to the other.

Began to watch these amazing videos on coding a Forth linux executable by hand in assembly. I think I may follow along!

Thu Jan 18 08:44:25 AM PST 2024

Impossible day! My project idea was to enable myself to edit on this website at its public domain ( as opposed to localhost), and have that edit appear in the right place in my local source code. I started working on that here.

Thu Jan 25 09:49:52 AM PST 2024

I volunteered to take over from Julie as host for "Non-programming Talks". So every week I plan to

  1. Make a new worksheet here copied from the template, with the correct date
  2. Broadcast the talk coming up a few times
  3. Host the meeting
    1. Let people filter in (though if there are 4 talks, then start right away)
    2. Time the talks (though this isn't such a big deal if there are less than 4 talks)
    3. Facilitate questions if needed

<a href=" impossible-day-project-edit-from-live-to-local.mdx ../fly.toml

Wed Feb 14 11:36:46 AM PST 2024

For creative coding, the prompt was "Everybody has a hungry heart". Mostly I helped with Zack's idea of a recursive, AI driven recipe builder.

In the few minutes before we presented, I took some time to see if i could put an SVG heart onto my webpage in MDX.

a nearly perfect heart made of two arcs and a right angle

Tue Feb 20 09:35:52 AM PST 2024

I often posted reminder notes in Recurse Center's Zulip chat, and they often had a bunch of repeated information. All that information was also present in RC's closed-source calendar app. So, I had the idea to lower the burden to writing those reminders by grabbing all of that information from the calendar and formatting it for a Zulip post. I figured I could write some JavaScript to do this.

I ended up having a lot of fun with this and bouncing ideas and improvements off some other RCers, esp Hannah

My most recent version was this

javascript:if (!location.href.match(/^https:\/\/\/calendar\/\d+/)) {  alert(    "Click on an event on, then run this script again",  );} else {  const getPaneDetailValueElmtByLabel = (label) => {    const elmtLabels = document.querySelectorAll(".pane-detail__label");    return [], (elmt) =>      elmt.innerText.match(label),    )?.[0]?.nextElementSibling;  };  const elmtSidebar = document.querySelector(".full-page-app__pane--sidebar");  const elmtTitle = elmtSidebar.querySelector("h3");  const title = elmtTitle.innerText;  const elmtZoomLink =    getPaneDetailValueElmtByLabel("Zoom room")?.querySelector("a");  const zoomUrl =    elmtZoomLink && `${elmtZoomLink.getAttribute("href")}`;  const zoomName = elmtZoomLink?.innerText;  const calendarUrl = location.href;  const eventDescription = getPaneDetailValueElmtByLabel("Description")?.innerText;  const elmtEventTime = getPaneDetailValueElmtByLabel("Date & time");  const eventDateRaw = elmtEventTime.children[0].children[0].innerText;  const eventTimeRaw =    elmtEventTime.children[0].children[1].innerText.split(" ");  const eventTime = new Date(    eventDateRaw.split(", ")[1].slice(0, -2) +      " " +      (new Date).getFullYear() +       " " +      eventTimeRaw[0].slice(0, -2) +      " " +      eventTimeRaw[0].substr(-2, 2) +      " " +      eventTimeRaw[3],  );  const minUntilStart = Math.floor((eventTime - new Date()) / 60000);  let timePhrase = `starts in ${minUntilStart} minutes at <time:${eventTime.toISOString()}>`;  if (minUntilStart <= 1 && minUntilStart >= -1) {    timePhrase = `is meeting now!`;  } else if (minUntilStart < -1) {    timePhrase = `started ${minUntilStart} minutes ago (but you%27re not late!)`;  }  const message = `${title} ${timePhrase} - ${    elmtZoomLink ? `[${zoomName} Zoom room](${zoomUrl})` : "No Zoom room"  } - [Calendar event](${calendarUrl}) ${    eventDescription &&    `\n\n\`\`\`spoiler Event description\n${eventDescription}\n\`\`\``  }`;  console.log(message);}

Future: I made a little widget to format code for a bookmarklet so that it was easy to read this code and edit it and then single-linify it.