So today I get to go get money out of savings to cover that lot. Which is why, after all, one has savings. But it's an awfully dull and virtuous way to spend the money when we could've used it to buy Shiny Toys ;) Of course, we could still buy Shiny Toys with more of the savings, but Shiny Toys are a lot harder to justify (which is how come we have savings, virtue obviously counts for something ;) ).
Most of Tuesday was spent playing Civ, but I took a break from it yesterday and worked on my Quake3 log analyser program some more. It now outputs the same stats in the same format as the previous program did. Unfortunately, the numbers aren't quite the same. Some of this is because the previous program didn't take into account name changes, so if a player started off as UnnamedPlayer and renamed to, say, Jarel, partway through then it would count UnnamedPlayer as playing a game when actually he logged on then renamed. So in the new stats UnnamedPlayer has played fewer games as only once did someone connect as that and not rename. But I'm not sure why sometimes the kills and deaths are different. In trying to debug that I also discovered that Quake3 reuses the numbers it uses to refer to players in a game, and I'm using those numbers (rather than names) to identify players (and cope with renames). I think that's why Gribble & Flayer have different games played totals between the two programs (that's the actual example that I identified, we kicked the bot before Gribble connected and so Gribble came on as player 0 which had previously been Flayer). I think I worked out last night before I got to sleep how I was going to do that - on a client disconnect line I need to shift the player info to a different entry (say 0.1 rather than 0, or 0.n if we've had more than one 0 disconnect) and iterate through all the data shifting all references to killing/being killed by player 0 to player 0.n. Don't think it happens that often, tho. But until I fix that I can't tell if it accounts for the other oddities. And of course I don't know which program is right - I'm going to have to identify a test case on a smaller number of games that I can inspect by hand if fixing re-use of numbers doesn't eliminate the differences.
And in the evening we wrote Christmas cards. Only half a dozen or so left to write, but we have no addresses for those people. I've sent emails asking those who I don't see online, so hopefully I can finish that off soon.