Friday, November 5, 2010

Long time no blog...

So the last blog entry I had was way back in February of 2008...a lot has happened since then.

In the real world, some skunkworks projects I've been playing around with have included:
  1. Tapping into POSIX message queues on Linux by using a custom shared library interposed via LD_PRELOAD. By intercepting calls to mq_open() and mq_send() it's possible to create "shadow" message queues and send messages to both the intended and shadow queue. This allows for non-invasive analysis of messaging between software components.
  2. Playing around with Python again. GDB 7.x now supports Python as a scripting language, so it is possible to develop application-specific pretty printers as well as other GDB commands in python. Also developed some Python code to parse Link16 messages in textual form to support post-mortem analysis.
  3. Using Mercurial for managing source code of my own software projects. In the past I'd used RCS, CVS, or a little SVN for managing projects on my home systems; those have all since been replaced by Mercurial (hg) repositories. Mercurial supports a wide range of usage scenarios ranging from single-user projects to distributed projects on the scale of Solaris.
  4. Played more with VirtualBox and with VMs running a slew of guest OSes: OpenSolaris, NetBSD, FreeBSD, and newer Fedora releases.
  5. Contributed to Illumos, a new open-source project taking the last available source code drop of OpenSolaris before Oracle closed it. It had been 5 years since I last used Solaris, and a lot had chanced since then. The goal for Illumos is to "liberate" the remaining closed-source pieces and serve as the foundation for any number of open distributions. So far I've ported the FreeBSD 'tail', and applied fixes in the CIFS area of Illumos. Time permitting I'm on the lookout for other user-space things to work on, though that may change soon due to the "day job". After years of doing C++ development it's been an interesting challenge going back to straight C again.
Professionally I'm still a Software Architect on a Tactical Data Link program (CLIP) developed at Northrop Grumman; we've been in prolonged test/integration mode but are now approaching some new development. In the spirit of continuous improvement I've had some time in the background to think about things that can be done differently this time around, as it's always great to avoid a "Death March":
  1. Leveraging things from open-source development. While we won't be able to take advantage of a distributed CM tool like Mercurial, there are some other lessons to be learned and tools to consider: continuous integration via a build manager like Hudson, web-based peer review of changes using something like the Webrev tool from OpenSolaris development, and a web-based source browser like OpenGrok also from OpenSolaris.
  2. Looking into improved testing and test coverage of new and existing code. In previous lives I've used PureCoverage and on the current project we have had C++Test available as a unit test framework. On the topic of test coverage, something that looks promising is the gcov instrumentation option available with GNU g++ along with the lcov front-end from the Linux Testing Project, which is capable of generating web-based reports on code coverage.