I just had my uISV nightmare happen:

If you combine the following two conditions:

  • You have a free space
  • You have exactly as many words as are needed for the card (i.e. 24 for a 5×5 with 1 free space)

and you try to print, the printing thread crashes silently, due to an ArrayIndexOutOfBoundsException.  This shows up to the user as the program simply ignoring the print command.

This is about the worst thing that could happen to me at 1:30 in the morning, short of a crash bug.  Without the capability to print, the application is useless.  Printing is always the thing I spend the most time testing, but I typically test by loading up Wizards and when picking randomly.  I rarely get one that has exactly twenty-four words in it.  

Unfortunately, that behavior (filling the card exactly) is really common in actual use.  Blech.  Memo to self: need to start using JUnit before I touch anything in the bowels of the printing code ever again.

I tried fruitlessly to fix it, but there is little that can be done at 3 AM.  Thank God for Capistrano.  The whole shebang of my website, including the executables, can be rolled back to a known good version at the touch of a button.  And, while it is annoying as all heck, I had to push the button — the 2.5 executable is just an accident waiting to happen for anyone who downloads it, so I need to contain that and get to work on fixing it.

Memo to self: get ready to FedEx replacements to all four people who got CDs with 2.5 on it, and write passle of apologies to anyone who downloaded the trial in the last 24 hours.