Frustrated with the lack of open source recommendation systems available (there are none, really) and having had experience with NetPerceptions, a high-end, commercial, super-expensive ($25,000 per year) recommendation system, I'm about to begin writing my own. I've already written a sort of bare-bones recommendation system for my job, but it had no concept of affinity groups; it just queried the database, building a list of what other people expressed interest in that had also expressed interest in whatever current item the result set was on. Like I said, very basic, but it works well.
This one, however, will have to be in C++: I have no intentions of writing something in C and dealing with its lack of objects, plus I haven't written C for at least 5 years now. Ironically, I've never written a large scale C++ project. Heh.
The guts of the project are pretty straightforward: based on a whole lot of data, figure out correlations in said data. Fortunately, all of this can be fairly well abstracted -- the application need not know you're dealing with users and products, since everything can be based off of some arbitrary number, thusly allowing the whole thing to be used for pretty much any purpose.
OK... so the end result must: