META is part of the DARPA Adaptive Vehicle Make program. I participated as lead software engineer for BAE Systems Burlington, MA. Our participation in the program lasted about 18 months and was the first time I’d interacted so broadly with academic participants.

Our team put together some pretty interesting ideas and demo’d software every 8 weeks.

The software we wrote for the project was done under a BSD like license per DARPA requirements, and so it is probably the largest amount of software I’ve written that I can not only show to people outside the project, but also reuse on other projects.

Here are the program deliverables, and my team’s specific contributions.

Note that I included MD5sums in the delivery, but DARPA chose not to post them that way.


I’ve been an occasional user of Mathematica since version 2.0. While it is a rare and lucky project that has enough math making it necessary to break out Mathematica, when it does happen it is nice to have the Swiss Army Knife of symbolic math and graphics manipulation there in my box of tools.


Spring Tool Suite

My preferred Java IDE is Spring Tool Suite (STS), which is a customized version of Eclipse. STS has good support for all of the Spring libraries, as well as good default support for Maven and Subversion.

X-Plane Simulation and Visualization

Single Integrated Air Picture (SIAP) was the first project I worked on at BA; a great idea to have all participants share information on aircraft location and identification. Our task was testing the SIAP software, and there were some nice simulation tools running on an open source HLA RTI. But there was no visualization, nor were there any accurate complex aircraft models. Airforce guys would come in and ask how do we know if the we can follow an intercept, or how will it look to the AWACS and so on.

Enter X-Plane.

Source X-Plane Website

Source X-Plane Website

I had looked for a flight sim that supported an external API which X-Plane did. This allowed me to connect X-Plane to the HLA RTI sim and provide completely realistic flight parameters for aircraft like the F-4 and F-15 and F-22, as well as some tankers and sensor platforms.

I could pick a plane and fly the mission and either inject the data live, or record it for playback latter.

Even better I could take generated aircraft data and visualize the flight with X-Plane. Nothing like checking your rotation matrices by watching a plane bank and fly.

Using X-Plane also added the wow factor to some of our demos, and completely stopped the question of our using valid flight models.


Repton splash screen for C-64 version.

Repton was my first large program and commercial success. The idea came from my best friend Dan Thompson who was working then at Sirius Software and busy finishing up another game, so he invited me to do the programming for Repton.

I did the most of the programming work on the Apple II version in 1982, sharing in the game and graphics design with Dan. The software was about 10,000 lines of ASM written with the amazing Merlin Assembler. A full print out took about 6 hours on an Epson-100MX. I’d start it in the morning, go to school and hope when I came home hope there had been no paper jam.

Dan and I did Apple II, Atari 400/800, and Commodore 64 versions. All being 6502 based they shared quite a bit of the code.

We sold something like 40,000 copies total.

External Links

Turtles all the way down

I am working a DARPA project called MRC, the BAE portion of which is called SOUND.

One part of this uses the enhanced Xen Flux Time Travel work, which looks to me like a great advance in debugging intermittent bugs.

To make it easy to test and integrate I am trying to run a guest VM inside of the modified Xen inside of VMWare Fusion on my Mac. This is to save me the trouble of acquiring and stacking more hardware into my tiny office.

I miss the days when I was confused because I had ssh’d into some server and then into another and could not recall which system I was editing files on.

simple java server monitor

Circa 2004

Update: Check out Nagios which is an open source service monitor. This looks like a good solution. Wish I had found it before I did my little project!

ServerMonitor is a small java program that monitors a server and sends email to the administrator when the server is not available.I have been having some reliability problems with a server that I depend on and wanted an easy way to be notified if there server had stopped running. This program is very simple to use.

Use Case Diagram

Deployment Diagram

The program consists of a single java file ServerMonitor.java [text] and a script smctl.sh to start and stop the monitor.

I need feedback regarding a service running on Server. I run a ServerMonitor daemon on Monitor that periodically checks to see if it can connect to Server on a specific port. If it can, I assume all is well. If not, ServerMonitor checks to see if Reference Host is visible. This is to distinguish between an actual failure in Server and a local problem with the connectivity of Monitor to either Server or Reference Host. If there is any failure to connect with Server then email is sent through Notification Server to the administrator.

Create a directory serverMon on Monitor and put ServerMonitor.java and smctl.sh in that directory. Then cd to that directory and follow these directions.

Set smctl.sh to be executable with $chmod u+x
Compile Servermonitor.java with $javac ServerMonitor.java
You should now have a directory that looks something like this.

[drew@drewsG5 serveMon]$ chmod u+x smctl.sh [drew@drewsG5 serveMon]$ javac ServerMonitor.java [drew@drewsG5 serveMon]$ ls -la total 16 drwxr-xr-x 5 drew drew 170 May 2 22:22 . drwxr-xr-x 11 drew drew 374 May 2 22:20 .. -rw-r–r– 1 drew drew 3617 May 2 22:22 ServerMonitor.class -rw-r–r– 1 drew drew 5794 May 2 14:22 ServerMonitor.java -rwxr–r– 1 drew drew 493 May 2 22:18 smctl.sh [drew@drewsG5 serveMon]$

Now you need to edit smctl.sh to set the relevant parameters.

# Edit these lines for your particular setup HOST=www.host.com PORT=80 INTERVAL=10 REFHOST=refhost REFPORT=81 ADMIN=you@localhost SMTPHOST=mail.localhost

To start ServerMonitor, $./smctl.sh start
To stop the monitor, $./smctl.sh

To see that everything is running correctly $tail -f log.out
You should see something like this:

[drew@drewsG5 serverMon]$ ./smctl.sh start [drew@drewsG5 serverMon]$ tail -f log.out Starting ServerMonitor. host:mail.host.edu port:25 refHost:www.host.edu refPort:80 interval:10 adminEmail:you@localhost smtpHost:mail.smtp.localhost [Mon May 03 17:18:31 PDT 2004] mail.host.edu seems to be running.

Note that only one email will be sent on server failure. When the message is received, you should examine log.out for details about the failure. Then I suggest that you stop and start ServerMonitor again to check for the next problem.

# TODO: check is pid file already exists – and ServerMonitor is already running
# so that we don’t start twice.
# Check if running before we try to stop the process. i.e. make sure calling
# stop twice is not a problem. Would be nice to verify that the pid we are killing
# is actually the ServerMonitor process!

Model Driven Architecture

Circa 2005/’06

Model Driven Architecture (MDA) is an OMG specified approach to software development intended to ,”…separate[s] the specification of functionality from the specification of the implementation of that functionality on a specific technology platform.”

I have had an opportunity over the last two years to become quite familiar with one large scale, leading edge development using MDA.

The short answer is, Brooks is still right. There is no silver bullet to software development.

What I seem to notice is that there is no lack of smart people working on the project and the main distinction between folks is the years of experience.


If you come across iUML or the corpse of Kennedy Carter, run away, the zombies will eat your brain.

Intel C++ and OpenMP Experiment Notes

From  Sept 2006:

The Problem

I have some legacy software in need of performance improvement. The software is single thread, single process. How effective are OpenMP and Intel C++ on the pathway to improvement?

I have the Intel C++ compiler (icc) available, which supports OpenMP along with some other auto parallelize features, and a four processor Xeon box to experiment on.

Now, I’m experianced enough not to expect a silver bullet fired out of my C++ compiler will kill the performance monster. On the other hand, there is some interest in finding out how hard it will be to refactor this software into a form that benefits from an SMP platform. If nothing else, shaking out the makefile to support an alternative compiler to the GCC 3.4.4 will make for a stronger build process. And, in looking over some discussion threads regarding the Intel compiler and this particular feature I see that icc will report on the loops in the code that are deemed safe for parallelization and will tell me something about why the other loops are not safe for the speed treatment.


So far I am still getting GCC to compile the code base cleanly.


The work was fun and seemed to be helpful in digging into the code, but eventually the client decided other issues, like clearly stating the problem were more relevant to success than doubling the speed of the code. And I could not agree more.