At the morning standup meeting, noticed that my hands were dry. I wasn't convinced they were dry enough to cause concern, until I realized that I don't generally notice things like that. Remembered that I always have Chap Stick in my left front pocket. Applied it liberally. Chap Stick: not just for lips anymore (DISCLAIMER: product has not yet been approved for use on other chappable surfaces).

Fluxx at lunch at Wendy's with Christina and Amber. On a Fluxx kick. Haven't even owned it for a week yet. Getting my money's worth. Amber chose not to play a winning card because she didn't want the game to end. The rules don't say anything about only being allowed to play one game, and given that we played a half dozen games at lunchtime, I'm pretty sure she knows this. So no, I don't understand either.

Christina thinks I have an oral fixation, based on her apparently not having much else to chew on besides observing and analyzing my behavior, and also throwing foodstuffs for me to catch with my mouth from progressively larger distances. It seems her work doesn't give her enough interesting problems to lick. That really bites. Sorry — I suppose all of this humor is a bit tongue-in-cheek.

After turning the code inside out to make more sense (or so we thought), our tools sort of run again! But not quite. We forgot some silly things, fixed some of them, and left plenty more for later. But yay! We can maybe get this thing working right by the end of the week, so that we can leave it alone for a while and start mucking around ignorantly with the innards of the flagship product.

Speaking of which, one of the most egregious elisions from our little program thus far is “unit tests”, which are an automatic way to check that our code works the way we expect — especially when we go back and change a little bit of it months later, and don't particularly remember all the details. A nifty programming method, if one has the mental stomach for it, is to write unit tests first. When the new tests are then run automatically during a build, they fail (because there's nothing to test), and one makes them succeed by writing the needed code well enough to pass. Then, as always, more features are desired. So one writes new unit tests to define their expected behavior, the build again fails, and one writes the new features to assuage the test suite. And by this iterative process, good software can be gradually constructed.

But this is hard. Indeed, the discipline required to write unit tests is a major flaw in the above scheme. Writing tests first forces the programmer to define clearly how his program should work, which has the obvious benefit of forcing the programmer to think clearly before coding anything. But if the build process doesn't enforce the practice — if a lazy or perhaps overeager programmer can somehow bypass it and hastily set about transcribing his creativity to disk — then there's a logical hole in the software development process big enough for lots of bugs to crawl through. And even if there weren't, there's nothing forcing the tests to be meaningful, either.

That's a problem I don't know how to solve yet. In the meantime, we stretched and folded our directory tree, fiddled with Java's “packaging”, diddled the compiler's project metafiles, and whittled at the batch build scripts, to prepare for future growth, and for — what else? — unit testing.

Fluxx at dinner at Boston Market with Christina. Still on a Fluxx kick. Soon it will become so ordinary a happening that I won't mention it here. On a tip from Nathan, found a trove of Samuel Smith's concoctions across Mayfield at Tasty Pizza, and got one of each (including my beloved Oatmeal Stout). Then we watched Planet of the Apes while sipping of the good beer and keeping it out of the reach of the rampantly friendly cats. My reaction to the movie: thinking about what they wanted me to think about. Maybe it was thought-provoking when it was released, but now it's only meta-thought-provoking, and it hasn't aged particularly well.