When not reading up on website construction or web-based languages, I have been working on my current book. Right now, the word count sits at 35,698 and it's moving along well. I still have no idea how this one is going to end but I do have several possibilities. The story itself will usually point towards a satisfactory ending as I continue to add to it.
If you've been reading my blog or know me personally, you know that I'm a Microsoft Access developer. For the past couple of years, I've had a very stable system of programs that perform my automatic updates. This system needed some changes to make it easier to maintain as well as to improve the response time for changes made in the monitored data sources. Adding new automatic reports was especially difficult. I created a new set of programs using most of the original code and rolled them out last week. Unfortunately, I failed to perform the multi-day testing I said I would.
The code tested fine in development and seemed to run okay in production. I never put a new program into production on a Friday and I'm very lucky I did not. There was a tiny little bug in a single line of code that caused a bit of an embarrassing flurry of emails to upper management. One of my reports is scheduled to run at 0445 in the morning. The report generator used to check for reports to run every 3 minutes. Immediately after midnight, the code noted that the 0445 report had not run for the day. The check to see if it was actually scheduled to run was not correct and the report began sending itself out once every 3 minutes until 0445.
I saw it when I came into work at 0530 and I also stopped another report that would have run until 0600. The bug is one that is known to many programmers and is called a day-crossing error. I failed to test it properly. The corrected version has been running without error for more than a week now and I've also set the timers to check for a new report every 10 minutes instead of every three. The timer logic was copied from the database updater which continues to run every 3 minutes.
Luckily, nobody seemed to be too upset and I sent out an apology later in the day after I gave people enough time to clear out the email storm I caused. I also got a call from corporate IT and had to explain to them what had happened. When you write complex programs like these, errors are bound to happen. The key is to respond to them quickly. The entire system is built to alert me to errors when they happen. I also now ensure I get every single email that is sent out and I get it sent to my home address so I'm always in the loop.
Time to get back to preparing for a family picnic we are hosting.