Whilst I’ve been away I’ve had a bug report for the TDD timer queue code that’s available here. The report is completely correct and could result in a timer being scheduled out of sequence if it’s scheduled around the point when GetTickCount() wraps. I’ve coded up a fix but I need to write it up and post it. It may take me a while to do this as I have a lot going on in my life at present, if you need the fix sooner then drop me a mail.
I’ve been away skiing for a couple of weeks in Davos and St. Anton, the snow was pretty good in both places but Davos won out as a more civilised skiing experience. St. Anton was just too busy for me, I’m getting fussy in my old age ;). The situation in St. Anton wasn’t helped by the fact that when we arrived the off-piste was all a bit crunchy and skied out which meant that most people stayed on piste and then we had a big three day storm that kept the high lifts and links shut and meant that several of the accessible off piste routes were unadvisable due to avalanche risk.
An interesting piece here from Phil Haack about why they decided to use an abstract base class rather than an interface.
Versioning is always a complicated thing for library designers. I know that I’m lucky in that I don’t have a gazillion users of my libraries so I tend to make breaking changes rather than build up technical debt in the name of backwards compatibility but I’ve worked on software where we couldn’t do that and where binary compatibility was important.
For some time I’ve had a class which implements asynchronous file writing. It’s the basis for a logging class that some of my clients use. The class builds on several of the classes in The Server Framework and uses I/O Completion Ports and a thread pool to manage the overlapped I/O. Due to the way that I structure my servers you can often share the I/O pool that you use for your overlapped log writes with the pool that deals with the socket I/O.
The latest release of The Server Framework is now available. This release includes the following changes.
All code now builds with VC6, VS2002, VS2003, VS2005 and VS2008. The VS2005 and VS2008 builds support x86 and x64.
This is the first release built using continuous integration and there have been some project file fixes to fix incorrect output directories, etc so that x64 and x86 builds can be done in complete isolation.
I’m still reading the Richter book, highly recommended even if you’ve read one of the earlier versions. In fact it’s possibly MORE highly recommended IF you’ve read one of the earlier versions… It seems that lots of things have changed a little, and some things have changed a lot. Unfortunately the book doesn’t detail the actual changes. Note to publishers; I’d PAY for a slim book that DOES detail the changes between the APIs that are being discussed…
One of the problems I currently have with CruiseControl.Net is that some of my tests spawn multiple processes; such as server tests which run the development environment, which runs a batch file to start a server (or two) and then run a test harness which generates network traffic and then run a program to ask the server to shutdown cleanly. When these tests timeout in CC.Net they’re forcibly killed. Unfortunately due to how Windows processes work, killing the parent of a tree of processes doesn’t kill the children.
Here is another patch for CruiseControl.Net. This patch provides support for a Robocopy SourceControl provider. This gives a significant performance increase over the FileSystem SourceControl provider. To integrate this I needed to adjust how CCNet determined if an executable had succeeded, it used to rely on the exit code of the executable being 0 to indicate success, but Robocopy is more complex than that.
ProcessExecution-MultipleSuccessExitCodes-Patch.txt
And here are the source files and test harness for the robocopy source control provider.
I’ve just picked up a copy of Windows Via C/C++ (PRO-Developer) by Jeffrey Richter and Christophe Nasarre. This is ‘version 5’ of the book that started out as Advanced Windows NT (Advanced Windows). The book has been updated for Windows Vista and other changes that have happened since the last version, Programming Applications for Windows (Microsoft Programming Series).
I’ve decided to read it from cover to cover to refresh my knowledge and pick up on any changes.
I’m continuing to tune my continuous integration system. Today I switched the ‘deploy’ projects from using a CC.Net file system source control task to do the deployment to using Robocopy. This has sped things up nicely and made the deployments more configurable. One problem that I had was that the CC.Net “executable” task (the one that lets you run arbitrary executables) assumed that only exit codes of 0 were ‘success’ and Robocopy has a more complex strategy for exit codes (see here).