Day 4 at Recurse Center

Stuff that didn’t go that great

I have been 10% as productive as I wanted to be this week. You can also tell by how I skipped yesterday's blog post. I attribute this mostly to the sheer mindspace I devoted to logistical and health issues — moving in to Brooklyn, figuring out what gym to go to, stressing about going back home and canceling my previous gym membership and a bunch of other stuff that just took up time and energy.

As for health issues, I brought back a virus from Spain and have spent this whole week coughing up a storm and feeling like crap during the day. Plus I scalded my tongue when drinking soup on Monday and now it’s blistered and hurts when I do… anything.

This resulted in me coming in at 2pm today, after laying in bed and lounging about for a while, feeling like a barrel of molasses had burst over me.

Overall, I felt out of my groove. A little lost, fatigued most of the day, and just a little anxious and stressed about what I was even doing.

Stuff that went very well

But today was presentation day and game night and I got to saw everyone’s awesome presentations about their work and bugs and got to play Codewords with a bunch of great people (Emma, King, Michael, Max, Arun, and Ben), as well as stuff myself with pizza and the surprisingly good Blue Moon variety they provided — I think it was Peach Apricot?

And I’ve finally gotten gym stuff settled (thanks Groupon!) and know what I’ll be doing every day, and I’ve talked to Alicia about my worries regarding my own productivity and getting the most out of my 6 weeks here and overall — I’m feeling great about the future!

Stuff I’m going to be doing

I haven’t actually described what I’m planning to work on, but the defining pillar is diving into the abstractions.

Throughout the past year, I’ve spent all of my programming time building things. Setting up Postgres, deploying the React frontend, coding up the RESTful backend in Go, configuring AWS, and all manner of practical devops and development.

My motivation for joining Recurse Center for a batch was to explore my interests as a computer scientist for their own sake — purely out of my interest, instead of some business need.

And more than anything else, I want to plumb the depths of the databases, browsers, and distributed systems I’ve relied on to create a production-ready web application over and over again.

Databases and BitTorrent clients

One of the foremost abstractions we use on a day-to-day basis is the database, which provides us with (in the case of relational databases like Postgres) SQL to transform, insert, and query our data in an infinite variety of ways.

I want to figure out how they work — first for a relational database like SQLite, then for something like Redis. Or maybe MongoDB. Or LevelDB. Regardless, I’ll pick something relational and something NoSQL (or maybe multiple NoSQL databases).

Then I’ll try to write a very crappy version of each.

And this goes for a BitTorrent client, too. I want to know how they work, and I think that in the course of implementing a BitTorrent client and testing it out, I’ll really get a feel for the entire networking stack and how peer-to-peer systems work. We have excellent people like Ben (who worked at Cloudflare) in case I need help exploring the treacherous inner sanctums of these grounds.

Cryptography

Today, I actually attended a great meeting led by Ernest W. Durbin, who contributes heavily to the Python community. But the meeting wasn’t about Python — instead, it arose from his personal interest in the uses and application of cryptography in the real world.

Ernest demonstrated his airgapped Raspberry Pi Zero that he uses to keep some of his PGP private keys secure, as well as a mechanism he developed using QR codes to transfer data to and from the device to the rest of the world.

My interest in cryptography arose when I took Intro to Cryptography by Professor Tal Malkin while at Columbia. It was the most fun I’ve ever had in a theory course.

To me, the course struck the perfect balance between theory and application — proving that a theoretical scheme is reasonably secure against an adversary, but also investigating AES/DES and other security schemes in the wild and how our notions of security in the real world are basically all “secure until shown to be unsecure by an attack”.

And so I want to implement my own version of what SSL/TLS might look like — maybe spin up my own test Internet and try to attack my own encrypted tunnel. Or what have you. Honestly, I don’t even know what this entails yet. But I intend to find out.

Webscraping and Sentiment Analysis with Deep Learning

Imagine you’re Best Budget Inc. and you sell a SaaS product called My Favorite Budgeter. People talk about this product in various places across the Internet — forums, Facebook pages, on Twitter, and, most importantly for my purposes, Reddit.

Best Budget cares a lot about its customers’ feedback, but it’s young and scrappy and doesn’t have 2000 people in its customer relations team to find aggregate all the Internet’s buzz around its product (or to fan it out to some other firm).

What I’m trying to build is a service that will aggregate these comments about their product and classify the feedback according to some set of tags — for our purposes, we’ll simply go with “Positive” or “Negative”.

A webcrawler would crawl the web and look for feedback, feed it into some text analysis pipeline, and then display all the tagged feedback in some web interface so that the 1 person Best Budget has working on customer relations and market research can efficiently look at their customers’ various sentiments.

As of right now, I’m foregoing the webscraping part and relying on Reddit’s API to look at comments in a specific subreddit (e.g. only looking at comments in r/personalfinance).

The problem is that I have no idea how to do any sort of Natural Language Processing (NLP). But that’s what I’m here for — to learn! So that’s why I’m going through Andrew Ng’s Deep Learning specialization on Coursera.

To infinity and beyond

Honestly, that’s just the tip of the iceberg. There are so many other things I want to do, and so many things I don’t even know that I want to do just yet.

Here’s a short list:

  • Build a crappy browser
  • Create my own Python debugger
  • Build a shell (or terminal?)
  • Create my own programming language
  • Create a type checker for Python (or maybe just do JavaScript again)
  • Learn Julia
  • Learn Rust
  • Actually learn C and how people use it in production and what is LLVM and I don’t even know

6 weeks felt like a lot of time before I started — and now, it’s already Friday of the first week. Every day and every hour counts. As Alicia said, those who get the most out of RC — those who learn the most — code the most.

So let’s get to it.