Me: Today is Mid-Autumn Festival, the day of the year when the moon is at its roundest. You're supposed to spend it with family. It's the chinese version of Thanksgiving.
Dan: Yes, I was impressed by the moon tonight. It was very round.
Me: Are you sure it wasn't a shark?
Me: [to Charles] Dan was two years ahead of me at Caltech, and I participated in his Ditch Day stack.
Charles: What's that?
Dan: It's an annual tradition where seniors construct elaborate puzzle hunts. My stack's premise was that an AI was loose in the system. It communicated with you via light bulbs scattered around campus, that flashed in morse code. There was always a switch next to the light bulb, that you tap with morse code. I put a light bulb in the steam tunnel. I even had a fridge where you open the door, and the fridge light flashed morse code.
Me: In preparation for Ditch Day, seniors hid their preparation materials behind sheets that they marked "Seniors Only". Months before the event, Dan strung a 50-foot cable across the entire Dabney House courtyard. (Imagine a black cable strung across this courtyard):
with an Atari joystick hanging from it, eight feet in the air.
Charles: What was the joystick for?
Me: Nothing. It wasn't used in his Ditch Day stack at all. He put it there for months, just to build hype.
Dan: On the day before Ditch Day, we stayed up all night coding. Seniors had to get off campus by eight a.m., or they'd get duct-taped to a tree. [mimes rapidly encircling a tree with tape] At 7:30am, the code was still hitting asserts everywhere.
Dan: So we said, "Crap. Re-compile without asserts."
Me: [laughing] That's your solution?
Dan: We rebuilt the thing without asserts. We ran it, and the intro segfaulted. So we skipped the intro, and went right to the first puzzle. The program worked perfectly the rest of the day.
The evening reminded me of my favorite story involving Dan. In college, we liked to use the unix utility "figlet" to make ascii art. For example:
> figlet "hello world"
_ _ _ _ _
| |__ ___| | | ___ __ _____ _ __| | __| |
| '_ \ / _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` |
| | | | __/ | | (_) | \ V V / (_) | | | | (_| |
|_| |_|\___|_|_|\___/ \_/\_/ \___/|_| |_|\__,_|
In our college online chat, we discussed how one would write "un-figlet". The idea is that it would take ascii art input and extract the original words. The challenge is that letters overlap (witness the "e" and "l" in the example above), and it would have to handle the multiple fonts that figlet supports.
Twenty minutes into the conversation, Dan announced that he had written un-figlet while we were talking. We were shocked at the speed, but figured, hey, it's Dan.
"The algorithm is really slow though," he said. "You might have to wait up to a couple minutes."
We ran queries against it. Indeed it took at least a minute, sometimes two or three, but it always generated the correct answer. We were amazed. We lauded Dan for his impressive performance.
The next morning, our friend ran it again, and this time it hung for hours.
When Dan came online, we told him that his program broke. He confessed how his "un-figlet" worked. It emailed the input ascii art to him. He looked at it, and wrote the answer to a file which un-figlet polled. When un-figlet detected content in the file, it would print it out to the user's screen.