I semi-seriously considered doing NaNoWriMo, but I decided it wasn't a good idea to stack that on top of my other hobby programming projects I'm undertaking. I did get as far as the first sentence:

Ph'rillar hated his name.

I'm not sure if comedy-sci-fi is the best genre to NaNoWriMo, but hey, is there really a good genre?

(Maybe if "hackneyed and cliched" is a genre...)

Perhaps next year. Maybe with the new weblog system. Although I'm not sure "NaNoWriMo" + "internet kibbitzers" is a good combination.

On the blog note, I've started unit testing it in earnest. (I find that as awesome as unit testing is, when learning a brand new framework there is enough to worry about in the first few tens of hours without also stacking their testing framework on top; it is enough that they have one.) I blocked up on the difficulty of creating decent test data when you have complicated database structures with invariants that you want to maintain. For various complicated-but-good reasons, to test the act of posting a comment from scratch (initial database) with a non-admin user (which is the only thing in the DB initially) requires the creation of:

  • A Django user to correspond to that poster.
  • My Author wrapper around the Django user which adds things like your website and certain preferences.
  • An entry.
  • The text hunk for that entry. (The database of most weblog systems should be normalized so that a "text hunk", be it main entry, comment, wiki entry, etc. should be a separate table, with other things referencing it. This allows the text to be fully featured, for instance permitting several renders or representations, for all uses of that text, and is also the basic DB structure that will enable me to do the things to comments that I want to do, like promote them to main entrys. All I have to do is take the comment's "text hunk" and wrap the Entry information around it.)
  • A discussion for that entry.
  • The "discussion set" for that entry, which is required for complicated and boring reasons, the most important of which is SQL's basic inability to handle tree structures of arbitrary depth.
  • The rate-limiting structures on the Author. (I've created a general "limit" structure to prevent rapid posting or excessively large postings; it is an "account" that refills at a certain rate, implementing something like "credited one post per minute, max 5" rather than the dumber, more annoying "can't post for five minutes after previous post"; the idea is that a normal user basically should never be limited but that a spammer can't flood the site. The inability of programs to notice they are getting hammered is a pet peeve of mine.)

Setting up a post for testing is thus obviously a lot of code; I tie as much together as I can reasonably but it's a lot tougher than for simpler, less featureful/normalized models.

Fortunately, I've solved this problem to my satisfaction at work. Unfortunately, that solution is in Perl. Fortunately, the raw code for that solution is pretty simple and should actually be even simpler when Pythonified, so I'm taking some time to port that over. (The raw code is simple because the real magic is in the code structure it affords and empowers.) I'm thinking of releasing it as a "Python egg", because I've browsed around a bit and I have not been able to find an equally sophisticated solution to the problem already available. (A few tentative motions towards supporting simple test data, but not the kind of recursive structures I'd like to see, and each "simple test data" script is isolated.) More about this solution either when I brush it up for public release, or somebody emails me and says, "ohmigosh, I have that problem too, however did you solve it?"

I'd expect that by the end of November I might be rolling out the new digs; might be a bit before that if I figure out a good way to deploy the system in a way that it can be easily updated, so I feel like I can trickle the admin scripts in the background as I need them.

Also, for anybody who types content in textboxes for public consumption online, FireFox 2 has an integrated spellchecker now, about five years overdue. It's missing some oddly basic words, but otherwise, killer feature for people who post.