Over lunch spoons and wjl and I chatted about something I think subpar was working on a while ago. The idea is that if you want to encourage people to donate money to a project that will only succeed with a rather large investment in it, and which can't help but benefit even freeloaders that didn't donate, then offer the following deal: a person may commit $X, and if a certain threshold of commitment is reached, say $T, then the project is funded with all committed money. Otherwise, every committer receives back $(1 + ε)X. The person running the project risks $εT, but if every agent in the system is rational in a sort of minimaxing sense, then they will each commit $W/(1+ε) to the project, where $W is what it is actually worth in utility to each agent. Thus if the actual value to the community of the project is at least (1 + ε) times its cost, then it will be built.
Also we talked about random web stuff - spoons wanted something that would help people who travel a lot (to conferences, vacations, whatever) automate knowing when they are in the same city as friends of theirs who also travel a lot.
During the afternoon I read some papers about pattern compilation, and started hacking on a little pattern compiler myself. Played some piano at the William Pitt union, went to D's for hot dogs. Turnout was very high --- ofsusan and lincoln3 and Anthony Rowe, Cathy and Spoons, all the Dalzell folks and Steve, Lisa, and the other Jason. Good times.
After I got back I hacked on the pattern compiler some more, and what surprises me is that it seems to actually work, and it's not really that complicated. I have tuple patterns and slightly-suboptimal case patterns, in that I haven't got anything but two-way constructor tests working yet. However, the framework is all there to make it work. It makes me wonder if I am doing something seriously unambitious by accident, since this is supposed to be a final project for the class. It's really cute, though, the way it's working right now; with exhaustivity checking --- pretty much for free --- I get counterexamples when the match fails to be exhaustive, and redundancy checking should be easy.