RC01: Settling into my first week at Recurse Center

September 22, 2023

I'm attending the Fall 2 batch at Recurse Center! Posts in this series cover things I'm working on or find interesting during my time here. This is the first post in this series.

Recurse has been something I’ve been wanting to do for a number of years now and I’m really glad to finally have an opportunity to attend. One of my goals at Recurse is to spend time exploring topics in CS that I haven’t had the chance to check out. Right now, I’m curious about computer networks and Rust, amongst (too many) other things and a concrete goal I’ve set for myself while here is to explore Rust through TCP by implementing my own TCP/IP stack. I’m also hoping to get into Haskell type classes and monads in later half of the batch if I’ve the time.

First week of school

So far the experience has been exciting and a little overwhelming, like how one might feel during their first week of school. It’s only the first week but it’s been really cool meeting like-minded people working on projects both familiar and foreign. And also learning from other Recursers about known unknowns (like how a neural net works), and unknown unknowns (like how there’s a deep sea sponge that makes fibre optics better than any present man-made process (truth being stranger than fiction 👀)). The community has been open and generous.

What I ended up doing this week

I didn’t quite have a set list of goals for this week except to just settle in and see how things go along the way. Mainly, apart from attending the welcome talks and orientation workshop, I tried to give myself daily goals for my project to make sure that I stay focused and at least spend some time each day moving the project forward. A random set of things that I ended up doing:

  • Attended the AI Safety study group session.
  • Refreshed my memory on what packets are involved in a TCP connection, from initiation to closing, and how TCP and IP relate to each other.
  • Found out about the Zig programming language while talking to another Recurser working on Crafting Interpreters (which seems to be really popular around here).
  • Got stuck on my program not being able to receive packets when using libpnet to open raw sockets.
  • Figured out how to use a series of networking tools and tricks as I tried to manually create and send my own TCP SYN packet: how to capture and filter packets using tcpdump, how to view and analyse said packets using Wireshark, making quick test connections using netcat, how to find all open ports on localhost using netstat.
  • Still WIP, but learnt about TUN/TAP and Unix network sockets.

Plans for next week

  • Better understand how Unix network sockets work and how to use them, enough for me to at least start sending my own packets through raw sockets and get unstuck.
  • Read up more about TUN/TAP and figure out how I might need to use them for my project (do I need to if I’m just sending packets locally?).
  • Have my Rust program be able to open a TCP connection with a simple server and send packets to the server, at least over localhost first.
  • Go through Week 0 of this AI Safety Fundamentals’ AI alignment course.
  • Pair with at least one other person on something related to Rust.

That’s it! Hopefully more progress on my project next week.

Stacey Tay

Hi! I’m Stacey. Welcome to my blog. I’m a software engineer with an interest in programming languages and web performance. I also like making 🍵, reading fiction, and discovering random word origins.