Although “science” has connotations of theory and experimentation, this page is meant to also cover the practical aspects of what I’ve done programming and generally tinkering with computers. (On the other hand, theoretical computer science is on the math page. It should also not be confused with my cheat sheet.)
So yeah. I wrote code to make computers do stuff. I have the most work experience developing on the front-end, with TypeScript and React/Redux as well as HTML/CSS, but I also write Haskell, Python, and Scala, and love learning new languages (exhibit A, correct solutions in 23 languages on Google Code Jam 2015.)
For personal projects, see the projects page.
- I spent the summers of 2018 and 2019 interning for MemSQL, an SF-based company making an extremely fast database. I was on the Platform team and worked on MemSQL Studio, a visual interface for managing and monitoring MemSQL clusters. In particular, in 2018, I worked on and blogged about Visual Explain, a tool for visualizing the operations used to perform database queries.
- During the 2018–2019 school year, I worked on Mavo, a tool for creating web applications capable of reactivity and persistence by only writing HTML and CSS, with Lea Verou and the Haystack Group at MIT CSAIL. I implemented server-side rendering for Mavo apps.
- I spent the summer of 2016 working for Dropbox. I worked on Dropbox Paper, a nifty doc editor for collaboration and brainstorming, primarily adding a sign-in-as-user feature but also making UI tweaks.
- I’ve spent some winters working on Stone Campus, a Taiwanese provider of programming classes and material, run by my father.
- I was a remote member of Random Fish, the writers of the 2015 MIT Mystery Hunt, and hacked quite a bit on Puzzletron, some quite old software for managing the editing and testing of puzzles.
I like open source software. Here are some pull requests I’ve sent out.
- Hugo: I added support for Pandoc and for custom taxonomy permalinks.
- voltron: I added reversal of the stack view and styled null bytes.
text: I added unsnoc.
- hdevtools: I added support for paths with spaces.
- Habitica: I have a few lines of code to notify users of skill points and fix overpowered leveling mechanics.
- bed-and-breakfast PR #7
I’m a fairly big fan of Haskell, an elegant purely functional programming language with a strong type system. bcodex is my biggest personal project in it, but I also write a lot of simple Haskell scripts. Examples include:
- xxb (a fancy/silly xxd replacement)
- probabilistic-poliwraths (part of a contest in predicting a pattern of frogs)
- hs-utils (random scripts)
- some solutions to Project Euler problems (not public, since Project Euler doesn’t want us sharing solutions)
I’ve never been paid to write any Haskell, though. (If you want to change that, definitely send me an email :)
If you are interested in learning Haskell, here are some resources:
- Try Haskell is a site where you can evaluate simple Haskell expressions in your browser and do a simple tutorial.
- University of Pennsylvania’s CIS 194, from Spring 2013, as taught by Brent Yorgey, is a widely recommended tutorial. (Different instructors have taught it in different years; I have heard the most praise about Yorgey’s version.)
- Learn You a Haskell for Great Good! by Miran Lipovača is a fun, friendly, and free book on Haskell.
- As mentioned, Project Euler is a large repository of math/programming problems; working through these problems in Haskell is a good way to supplement these tutorials, and how I learned a lot of Haskell myself.
Scala is an expressive language combining the functional and object-oriented paradigms. gridderface is my biggest Scala project; I also wrote a compiler in Scala in a team for 6.035: Computer Language Engineering at MIT. And I think I wrote at least one line of Scala at Dropbox.
- I have also dabbled with languages with even more complicated type systems, though not as much. Silly example: I solved the first challenge in Google Code Jam 2015 with Idris, a language with dependent types (fun fact: it’s named after a certain singing dragon).
- I’ve dabbled in esoteric programming languages and code golf. Back when GolfScript was the only golf-oriented programming language, I spent a lot of time playing with it on anarchy golf; but after I returned after a few years’ hiatus and checked out codegolf.SE to find everybody writing extremely dense languages with (what I considered to be) much worse mnemonics (e.g. Pyth, Jelly, 05AB1E), I spent a few weeks writing my own code golf language, Paradoc. In the end I think I spent way more effort writing it than I have golfing in the post-GolfScript era, but it was fun.
I’m interested in computer security, although I am not very good at maintaining a consistent threat model.
Since more recently, I do CTFs with a somewhat fluctuating group of friends that has mostly stabilized as galhacktic trendsetters. I participated in the 2017 and 2018 CSAW CTF finals, the first time with Don’t Hack Alone, the second time with TechSec.
I use KeePassX for many of my passwords. I like EFF’s Diceware word list (although I hope to improve it someday), and own two precision backgammon dice for personal password generation (as well as extremely fair games of Settlers of Catan :)
I’ve worked a bit with Bootstrap components for the ESP website, although in an effort to try for a more minimalist and deeply customized theme for this site I chose Pure.css. I think semantic markup is a pretty good idea.
I like playing with gradients and shadows and hover/active effects on buttons, probably to a mildly unhealthy degree. To spread the passion, I taught the class “How to Build the Perfect Button with CSS” for Spark and Splash 2017. Once you’ve seen Bootstrap basic and themed buttons, you’ve probably seen most of them, but there’s the occasional much fancier example like BonBon buttons.
Other cool things:
- Build Shit in CSS (Jason Goldstein) is an excellent series of CSS examples for those who know the syntax and understand specificity.
- Practical Typography (Matthew Butterick) is, well, a practical guide to typography.
- Font Awesome has great logos/symbols/glyphs, a few of which are in my résumé.
- For the programmers who want to typographically improve their coding experience, Hasklig is the monospace font I use; it’s Source Code Pro with ligatures. There are many others out there and I didn’t realize how much this subtle improvement in fonts increased my quality of life until I tried it. (I will note that Matthew Butterick is firmly against code ligatures for fair reasons, but personally, I think ligatured arrows make me happy enough to offset the times when ligatures misfire.)