September 8th, 2006



Some people fix up old cars.
Some people collect old guns.
Some people trace their family lineage back hundreds of generations.

I wrote a POP3 server.

It's so refreshing how simple specs used to be just 10-20 years ago. Ever read the GIF spec, for instance?

"Modern specs aren't complex," you say, "they just have lots of dependencies, standing on the shoulders of giants!" Right. Except the giants more often than not have died already so the modern specs are instead carefully balancing on untold numbers of decomposing corpses.

I've wanted to graph this.

Imagine a scatterplot of RFCs. X axis is time. Y axis is number of words in the spec, inclusive all referenced dependency specs. (lazyweb?)

Anyway, I wrote a POP server because it was fun. I got to abstract out DJabberd's SSL code in the process into something I could reuse for this and Perlbal, which somebody on the mailing list keeps asking for. Not to mention cleaning up DJabberd. But I haven't done that yet. That'd be too productive.

Okay, I actually wrote it so people could pull down ESN's message center into their mail client, and stop bitching about mail not making it to them because the spam wars have broken SMTP. (well, it was broken before)

Internet Mail 2000, baby. Or something similar. Meng keeps saying "RSS Email" to totally confuse people, but I think he means IM2000. RSS's got the buzz tho, so maybe I see his angle.

Perlbal now supports concatenated GET URLs. Because the middle of the Internet is presumably broken, browsers don't enable HTTP pipelining by default, so if you're 80 milliseconds away from LiveJournal and we have 20 javascript files and 30 images... that's 50 * 160 milliseconds until you're getting your page. That's a long time. Europeans and Russians are probably used to it. So fuck it all, and throw away cachability, and do it by hand. Look at the front page of livejournal and view source. see those funky URLs? Later we should analyze common groups of dependent resources and serve them in isolated chunks for cachability. Or just serve all our JavaScript on all pages and have one cacheable resource.... that's just 500k or so. But then UAs have to parse it each time probably because they likely suck and don't cache a parallel parsed verson.

Back to the subject. dpopperd (uniquely named POP server) has a pluggable model. (model = "What is an inbox? What is a message?") At least that's the theory. Got sidetracked before I finished implementing it. Need to abstract out more of djabberd so I don't feel like I'm duplicating too much code. But presumably getting your friends page over POP is possible too. Not sure how useful that'd be. :-)

Okay, back to doing nothing useful.