About
Note: This page is currently an awkward mix of casual autobiography, directionless hobby sharing, and aggressively padded informal résumé. Sorry! I’ve been moving stuff around on this website and can’t bring myself to delete any of it. Just dragon things.
The Story So Far…
I spent my elementary to high school years in Taiwan, where I did many high school math and programming competitions. I got my B.S. (2015–2019) and MEng (2019–2020) at MIT, where I was also part of ESP, a group that runs educational programs for middle- and high-school students, and SIPB, the (oldest) student computing group. As a masters student I was a TA for 6.004 (now 6.191), MIT’s “Computation Structures”, around the time of the HDL Bluespec to Minispec transition. I lived in Floor Pi, the third floor of the west parallel of East Campus, all four years of undergrad, and joined my puzzlehunting team, ✈✈✈ Galactic Trendsetters ✈✈✈, from there.
Professional Software Experience
Most recently I’ve been writing Python with a side of JavaScript/Svelte professionally; but before that, I’ve done C++ and TypeScript with React/Redux.
- Since March 2023 I’ve been doing interpretability research at Anthropic.
- From October 2020 to December 2022, I was a software engineer at Zoom by way of Keybase, working to implement end-to-end encryption. I spent some of my time on the cryptography research subteam as well, creating an in-house implementation of the relatively young primitive of a Verifiable Random Function, and helping with Rotatable Zero Knowledge Sets, our paper in ASIACRYPT 2022.
- I spent the summers of 2018 and 2019 interning for SingleStore (known as memSQL when I was an intern), an SF-based company making an extremely fast database. I was on the Platform team and worked on SingleStore/memSQL Studio, a visual interface for managing and monitoring database 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.
Hobby Software Experience
Languages I’ve learned as hobbies include Haskell, Scala, and Rust. I also generally love learning new languages (exhibit A, correct solutions in 23 languages on Google Code Jam 2015.)
- As an organizer on Galactic Puzzle Hunt, I worked on and helped open-source gph-site, our hunt-running website codebase that has now been used by at least a dozen other puzzlehunts, and Puzzlord, our puzzle-writing website that has been picked up by the Mystery Hunt writers after us.
- At MIT, as an ESP member, I worked a lot on the ESP website, a custom Django site we manage our programs with.
- 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’ve spent some winters working on Stone Campus, a Taiwanese provider of programming classes and material, run by my father.
Competitive Programming
I did Advent of Code pretty seriously in 2018–2022 (and may or may not keep doing them pretty seriously). I also wrote a detailed blog post on how to place on the leaderboard for fastest solve.
Aside from that, I did the high-school and college competitions, IOI and ACM-ICPC, ages ago. I did Google Code Jam most of the later years it was running and fluked into being a finalist once, in 2015. Maybe once a year I am convinced to do a Codeforces problem or contest for whatever reason. But in general I am not an active competitive programmer.
Open-Source
I like open source software. I used to collect PRs I sent out here, but that list was both incredibly old and underwhelming. Here are some particularly notable ones:
- Adding Pandoc to Hugo
- Adding
unsnoc
to Haskell’s Data.Text and Data.Lazy - Updating OpenSSL’s fuzzing documentation
Esolangs and Code Golf
At some middling rank on the list of my hobbies are 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. Much later I wrote an introduction to code golf on my blog.
Computer Security
For a few years I was kind of a computer security professional. Relatedly, I sporadically do CTFs with 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 KeePassXC for many of my passwords. Though I liked EFF’s Diceware word list, I was just dissatisfied enough to make my own word list. I also own two precision backgammon dice for personal password generation (as well as extremely fair games of Settlers of Catan :)
User Interfaces
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.
I am probably overreliant on Practical Typography (Matthew Butterick), but it’s a good resource.
My usual coding font is Hasklig, or Source Code Pro with ligatures. There are many others out there but this is still my favorite. (There are good reasons not to use ligatures in code that you’re sharing, but in private the arrows make me happy. Also, technically I use a version of Hasklig that I manually modified to have a smaller line height…)
Math
I grew up reading Martin Gardner’s columns as a child, and was heavily inspired by Dr. Sun, who runs 九章 (Chiuchang Mathematics Education Foundation). I also did a lot of math competitions in middle and high school. One of the weirder things that blossomed out of this was me presenting about Triangles of Absolute Differences at the Gathering 4 Gardener 9, which hilariously appeared as Problem 3 on the 2018 IMO because nobody on the jury realized it was a known result.
I was big on combinatorics and my favorite theorem is probably still Cayley’s formula for the number of trees. Some neat proofs other than the “standard” one with Prüfer codes:
- Joyal’s bijective proof;
- Pitman’s proof by double counting;
- A surprisingly elegant proof by generating functions.
I also dabbled in theoretical computer science a bunch. One of my earliest ventures into this space was in middle school where I submitted a paper on simple variations on the secretary problem, which won a silver medal for some reason. Fields I’ve surveyed in classes and summer projects include communication complexity, the prophet inequality, and tree reconstruction.
A neat math puzzle, via Martin Gardner: You are playing a game called Say Red. A normal deck of 52 cards is shuffled face down, then you flip over the cards one by one. At some point, before you flip over some card, you should say “Red!” and you win iff the next card to be flipped over is red (diamonds or hearts, but all that matters is that these cards make up 1/2 of all cards). If you don’t say “Red!” before the first 51 cards, you have to say it before the last card. What strategies are optimal, and what is your probability of winning under them?
Music
I played piano in elementary/middle school, and sang with an a cappella group and learned guitar in high school. My HASS concentration at MIT was in music; one of the highlights was getting to take Interactive Music Systems with Eran Egozy, co-founder of Harmonix (best known for Guitar Hero and Rock Band). I sang with Dropbox’s Syncopation and rapped in Dropbox the Musical III while interning there in the summer of 2016. While Techiya existed I sang bass with the group, even though I am not a bass.
I picked up FL Studio in 2021 and have messed with it a bit. My most public recordings are part of the 2020 Galactic Puzzle Hunt puzzle Intersections. I have posted a few other recordings elsewhere on the public Internet; I’m deliberately not linking them because they’re deeply mediocre, but you might be able to guess the URL.
Other Things I Like
Vim, RSS, fish (shell), sushi, boba (milk tea, 30% sugar), Bo Burnham, dashes, dragons, and Enhancing people’s lives, errr, enhancing people’s lives by linking to TVTropes.
Songs:
- Breathe (2 AM), Anna Nalick (not the official music video as it has some bizarre bowdlerization)
- Better Days, Goo Goo Dolls
- Viva la Vida, Coldplay
- Love Can Move You, Savage Garden
- Breakaway, Kelly Clarkson
Video games:
- the entire Ace Attorney series
- shout-outs to Socrates Jones: Pro Philosopher and Tyrion Cuthbert: Attorney of the Arcane (the latter of which I helped crowdfund)
- Undertale
- OneShot
- Final Fantasy XIV
- Crypt of the NecroDancer
- Angels with Scaly Wings
Other cool things:
- Haskell’s list monad
- Haskell’s Ordering monoid
- Grovyle (due to), Charizard (duh), Gligar, etc.
- “COTD: This place, for instance, is terribly disturbed (9)”
- Find the missing number: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ?, 1, 1, 1
FDDmpw5a A C+ D+ H M P+ R++ T++ W Z- Sm# RLCT a cl+++ d? e+++ f h+ i+++ j p->+ sm#