The Prose and the Passion

I was pretty torn between this and “The Future Soon” as the Year-End Song on this blog, but in the end I think I feel more threatened by the bland existence of the soulless adult than inspired by the starry-eyed-idealism-with-misogynist-undertones of the twelve-year-old, plus I get to show you the best kinetic typography video I have ever seen.

Halfway through 2018 I thought this would be the year of ephemeral phases. I felt like I went through a different phase every month — Online Dominion in April, crosswords in June, Only Connect in July, Jonathan Coulton in August, a brief stint of trying really hard to barre my guitar chords in October. Somewhere in the middle, I discovered Kittens Game (“the Dark Souls of Incremental Gaming”) and my summer internship mentor got me to pick up Pokémon Go again. A few intense periods of typographical study were interspersed, which involved watching the above music video dozens of times, teaching a Splash class on typography, and developing a new awareness of how Avenir was everywhere. During the last month, I went hard on Advent of Code and got second place, apparently the only person to make it on every single leaderboard. I also did a related golf side contest and poured a couple more hours into Paradoc, my personal golfing language, for rather unclear gain. At least I got a lot of GitHub followers?

It would turn out, though, that a lot of these phases had more staying power than I expected. Pokémon Go is a much better game than it was two years ago and has actually fostered a significant real-life community, which seems like one of the best possible outcomes of an augmented reality game, and I’ve found a steady pace to play at. I spread the Only Connect bug and people on my hall, intrigued by the format but annoyed by the overwhelmingly British trivia1, started writing and hosting full games for each other, with our own MIT-slanted set of trivia. One of us developed a custom site and tool to host these games. It took me a while to warm up to Jonathan Coulton’s latest album, but since it happened, I cannot get Ordinary Man or Sunshine out of my head; I’m still listening to JoCo as I finish typing up this post. Although I never got back to the peak of my crossword frenzy, I still study crosswordese from time to time and compose crosswords for some special occasions, like this one (.puz file).

The academics and technical aspects of this year have all blurred together, but I think my interests are finally crystallizing:

  • Front-end/web development is probably the big one. In the spring semester I took the PhD version of 6.813/6.831 (User Interface Design and Implementation), one of the classes I’ve heard the most positive reviews of ever, and enjoyed it except for insofar as it made me realize with horror that I might be good at CSS. This definitely bled into the typography phases because I remember audibly gasping when we were shown some crazy CSS typographical properties I didn’t know existed.

    Then this summer, I ended up with a mostly front-end internship at MemSQL. I went in planning to learn more about sysadminning and could have taken it several ways, but I quickly concluded that I still preferred working with visual interfaces over systems stuff (and also, JavaScript with good tooling over Go), and that was what I did. In the process of making those visual interfaces, I relearned React, learned Redux, and accidentally the entirety of Flexbox Zombies over a week.2 At one point the other front-end developer recognized when I used − (U+2212 MINUS SIGN) rather than - (U+002D HYPHEN MINUS) when pretty-printing numbers, which made my day. Finally, I even got to wrangle with an interesting algorithmic problem and then write a blog post for MemSQL3 about it — double Chekhov’s skill?

    A smaller interlude was that I created a Castlefall server and client in February, one of the first things in memory that other people started using of their own volition. I React-ified this after the internship.

    The most recent development in this direction in this category has been working on Mavo with some of the people I met in 6.813/6.831. Mavo is a research project of sorts that lets people create web applications with only HTML, CSS, and a sprinkling of Mavo’s custom attributes.

  • On the security side, certainly one of the reasons I migrated this blog was to make CTF writeups, and I did that, although I didn’t really foresee turning the entire front page of this blog into CTF writeups. In June, I did Google CTF with galhacktic trendsetters and earned some money for writeups, which I donated since it meant I didn’t have to fill out forms, I really ought to anyway, and Google said they’ll match it. I also do CSAW again with a new team, highlights of which include my first live-contest ROP, 9/16, 4 AM ET, during the qualifiers; and having to install Second Life on the Windows partition of my computer in order to access a crypto challenge during the finals, because, spoiler alert but not really, Second Life has a custom scripting language featuring quaternions as a built-in data type. (Whoops, maybe I should write that up.)

  • Education. In late April I started contemplating being a lab assistant for 6.01, the introductory EECS class. It seemed like a safe bet at the time, but then that fall turned out to be the one semester when 6.01 was not held. I settled instead for LAing the new 6.004 (“Computation Structures”, which teaches you how computers work from the ground up, starting with voltages and logic gates and building into full-fledged processors and assembly code). It’s a brand new day. The new 6.004 is drastically updated and involves writing Bluespec (a hardware specification language a la Verilog, but with a fairly expressive type system and noticeable Haskell influence, designed by one of the professors teaching 6.004) and RISC-V (an open instruction set architecture and assembly language designed by UC Berkeley and company), instead of dragging wires and gates around and writing a homegrown in a custom HTML/JS environment.

    Bluespec is… an interesting language. Having never written any other hardware description language before, I can’t tell if parts of Bluespec that seem strange to me were designed to be consistent with other HDLs. Still, there are some very obvious Haskell influences, but syntactically it’s an unholy mashup of Java, Ruby, and shell (blocks are begin and end blocks, except when they’re function/endfunction or module/endmodule, and so on).

    In any case, I learned how to write a hardware description language.

  • Music: I didn’t take that many classes, but after juggling extracurriculars and looking at the classes I wanted to take before graduating, I decided to add a minor in music. The first step was to start taking performance classes, so I joined the MIT Concert Choir and started singing German and Latin and stuff while dressed in a snappy tuxedo, bowtie and all. Somehow this semester we also ended up singing in a Jacob Collier concert. Jacob Collier is a modern English musician who I can only describe the way he was described to me, as a musical “force of nature”, and who fortunately for us had ties to MIT.

    A smaller interlude involved me presenting my Interactive Music Systems final project from last year to a lot of important people, and possibly playing a small role in MIT expanding its music technology department. Since I try not to make overeager commitments on this blog, let’s just say that I might be doing more in this area soon as well.

  • I guess I should mention that I did Battlecode with three other people, by which I mean I helped a little bit and mostly got carried to 7th/8th place.

  • Finally, there’s actually a bullet point’s worth of literature slash comparative media studies. I took Interactive Narrative with Nick Montfort, a literature class that also happened to be the only class in which I wrote any code that semester. The class got me to seriously write fiction for the first time in years, not to mention give a totally serious presentation analyzing Angels with Scaly Wings. Other highlights of the year include discovering TVTropes’ Universal Genre Savvy Guide, which I had somehow never seen before, and watching Spirited Away for something like the 12th time while finally being old and mature enough to understand what was going on for just about all of it. Okay, this is neither academic nor technical, but it’s a bullet point.

The big extracurricular was that I co-directed Spark, the ESP program.

This is not an experience I know how to put into words. Just, lots and lots of responsibility and achievement involving more than a thousand students and more than a hundred teachers. Being part of something bigger.

Puzzles: Well, any plans I had to acquire extra free time to work on Galactic Puzzle Hunt never materialized. I did help testsolve and sorta help run the Boston run of DASH 10, so that was something. Microsoft CPC (4/15) caused me to first feel like I can do metas. I think I had an extremely high meta hit rate during BAPHL 19, did a lot of puzzles during Caltech Puzzlehunt, and exchanged puzzles in Puzzlers Club’s secret santa. One cool fact was that somebody told me on Pi Day that they translated Puzzle of the Day into Spanish and French.

Games probably deserve a section to themselves. In fact, I’ll make it its own list…

  • After many hours, I’m on the last case of the main Ace Attorney series and a little sad that I’ll be done soon (Capcom please localize DGS thanks).
  • Over the summer, I played through Dust: An Elysian Tail for possibly obvious reasons.
  • It took about a year but I finally played through Nine Hours, Nine Persons, Nine Doors, which is a brilliant game as long as you don’t dwell on how (rot13) gur tnzr’f ragver neqhbhf frdhrapr bs riragf pnzr nobhg orpnhfr n tvey pbhyqa’g fbyir n fhqbxh (juvpu jnfa’g rira gung tbbq!) avar lrnef ntb.
  • As mentioned earlier, I started playing Pokémon Go again. In late July, during my internship, I started keeping the Pokémon Go app open on my phone while biking to and from work so I could hatch eggs. This feels vaguely like I’m cheating until I reflect on it and realize that biking is literally how players hatch eggs more quickly in regular Pokémon games! After vainly trying to procure more good gym defenders (I have one reasonable Snorlax that I still remember catching at Dropbox after somebody alerted everybody to the existence of a Snorlax in the Slack channel), I opened Pokémon Go on 9/15 and found a Chansey sitting right there anticlimactically in front of me, so I catch it. 11/25 is my first best friend and first Charizard (among other Pokémon species), as the prophecy foretold. That took long enough.

Speaking of which, I biked to and from work over the summer, which is a thing real people do. This involved learning how to make turn signals with one hand while not swerving out of control with the other, and how to turn left at an intersection. (If your light is red, you can dismount and walk as a pedestrian; if your light is green and the intersection isn’t busy, you can just turn; if your light is green and the intersection is busy, you can bike to either a designated turning area if one exists or simply to the far-right corner of the intersection and wait for the light to change.)

And finally, as always, the standard list of memes or something:

  • “Maybe the ‘jump out of the hot tub to make snow angels’ game wasn’t a great idea” — me, 2/12
  • 2/20: Novice Neopets players earn Neopoints by playing the flash games. Intermediate Neopets players earn Neopoints by playing the “stock market”. Expert Neopets players earn Neopoints by finding and exploiting inefficiencies in the actual in-game economy. In short, Neopets is a parable for the real world.
  • 4/23: I watch my first and only live quizbowl contest, which miraculously ends up being a nail-biter that’s decided by the last bonus. I’m told this is not usual.
  • 6/20: As an intern event we do an escape room, and while leaving I bump into three pizens, which really drives home something about how small the world is. Maybe it’s not so surprising if you restrict to the puzzle-loving subpopulation or something.
  • 7/25: Somebody finds my resume “using a boolean search on Google” (direct quote). This just means a search that uses a boolean operator, in case you were wondering.
  • 9/14?: My Dell XPS 13 arrives. It takes a few days for me to navigate the maze of twisty little BIOS settings to get it to dual boot the way I want it to, but I get it done and dub the laptop akriloth.
  • 9/22: I get an email in simplified Chinese which I think roughly asks whether I can be hired to do web penetration. Payment is negotiable and will be paid in Bitcoin.
  • 9/23: I do a Codeforces round with a bunch of people on my hall for old times’ sake. Six minutes after the contest end, a rando PMs me, “Why are you still participating in codeforces? :)”
  • 10/26: While preparing a presentation for 6.UAT on the oddities of color representation in colors and wondering whether it was realistic to encounter the problem of blurring a red-green boundary, I realize one of my wallpapers had a sharp red-green boundary. (It’s Grovyle!)
  • 12/10: I eat an Impossible Burger and am pretty satisfied.

I have no idea what’s happening in 2019, but. See you then!


  1. The flip side is that we were very amused when the British trivia was punctuated by things like the U.S. Bill of Rights listed in reverse order from the Fourth Amendment, especially when such trivia stumped both teams.

  2. I think the testimonials are slightly exaggerated as there are definitely still flexbox details I have to look up, but having not touched flexbox for a few months, I can still instinctively imagine and refer to an imaginary red crossbow and blue alignment lasers to name the basic properties. Also, the sequel for CSS grid actually costs more than two hundred dollars. Wow.

  3. One really interesting fact not mentioned in the post, which I wanted to include but could not end up describing in a way that passed editorial scrutiny, was that the problem of finding the narrowest possible drawing satisfying the aesthetic criteria is NP-complete (Supowit and Reingold, 1983)! This is extra-strong motivation to come up with a “good-enough” algorithm instead of something that’s optimal.

(note: the commenting setup here is experimental and I may not check my comments often; if you want to tell me something instead of the world, email me!)