I was a participant at the Recurse Center for a 12 week period during the Summer of 2024. Recurse is a self-directed programming retreat where programmers are encouraged to work on personal projects that excite them, collaborate with other participants, and stretch the edge of their abilities. You can read more about it on their website.
Here are some things I worked on while I was there:
- Getting my feet wet with full-stack web development
- Started by reading through the MDN, understanding the fundamentals of HTML, CSS, JavaScript, and how the 3 fit together in the creation of frontend UIs.
- Explored various frontend frameworks to get a better feel for how modern frontends are built. Worked through the React tutorial and the Svelte tutorial.
- Working through fly.io’s distributed systems challenges utilizing the Maelstrom workbench.
- Built a library in Rust utilizing Tokio and async programming to handle sending and receiving messages between nodes following the Maelstrom protocol specification.
- Once I’m happier with the API, I’d like to publish the library to make it easier for future Rustaceans to work through these challenges while focusing on the distributed systems part and not on the protocol part.
- Completed the first four challenges
- Echoing messages that nodes receive back to the sender.
- Generating a globally unique ID - utilized UUID v6 to guarantee uniqueness across the system without requiring synchronization between nodes.
- Receive messages from nodes and broadcast all received messages to neighboring nodes such that all nodes retain the same set of messages at the end of the workload run. Includes tolerance to simulated network partitions. Reduced number of messages sent between nodes by only sending updates at specific time intervals.
- Grow-only counter: nodes receive a number to add to a globally consistent counter. Utilizes a Maelstrom service that provides a key value store with an atomic compare-and-swap.
- Built a library in Rust utilizing Tokio and async programming to handle sending and receiving messages between nodes following the Maelstrom protocol specification.
- Stemming from frustrations working on other projects, created a simple Rust crate to read environment variables from a group of local .env files in a prioritized sequence.
- Attended weekly creative coding workshops to exercise my creative muscles and come up with ideas for new projects. Learned how to build simple animations and interactive toys with p5.js and three.js.
- Stemming from one creative coding session about a “long talk with an old friend”, created a simple website to let people see a random poem at the click of a button. Utilized Rust on the backend using the Axum crate, SQLite, and vanilla HTML and CSS rendered with server-side templating.
- Used this project to learn more about deployment and hosting. Explored different hosting providers, learned how to build and containerize the application with Docker, and set up a CD pipeline using GitHub actions to automatically deploy the app to the hosting service on every push/merge to main.
- Learned about some other important DevOps things with this project. Since I worked on this project alone, I set up pre-commit hooks to build, test, and lint the code prior to every commit, allowing for a faster and more efficient developer loop than waiting for a build process to spin up and run on GitHub actions.
- Went a little overboard for such a small and lightly trafficked website by setting up metrics and monitoring using sentry.io and Grafana, including full request tracing and automated alerting for crashes and performance regressions: (sentry)
- Hosted on fly.io.
- A website that provides an HTTP API to retrieve a “random” number generated by humans. (code)
- Utilized two new-to-me technologies:
- Websockets to send updates to users of the websites to indicate when new clients are waiting for a “random number”.
- Redis as both a distributed messaging system using Pub/Sub and as a statistics aggregator using sorted sets.
- Read more about this here.
- Utilized two new-to-me technologies:
- This website!
- Hoping to go a bit out of my comfort zone by being more visible on the web, and also by doing more technical writing and having a place to host it.
- Built using the Quartz static-site generator and Markdown edited with Obsidian.
- Hosted on Cloudflare Pages and R2 storage.
Want to become a better programmer? Join the Recurse Center!