More thoughts on Orca

Everyone seems to be jumping on the story of the Romney campaign’s “Orca” debacle. But it seems to me that this is not really a new story. It’s a story that’s been repeated over and over again thousands of times, in large companies and small, not to mention government agencies.

Tell me that you haven’t heard this one before:

  • To begin with, you have a CEO who is a great visionary. (Everyone tells him he is, so he must be.) He doesn’t know much about Information Technology, but that’s OK–you can hire people to handle that.
  • The CEO is approached by an IT consultant who proposes a great new system, something that has never been done before, which will run rings around the competition.
  • The consultant has never actually developed a system of comparable complexity but the CEO is impressed with his vision. He tells his people to give the consultant everything he needs.
  • Because of the great strategic importance of the project the team accepts an extremely aggressive development schedule. It just has to be ready by the drop-dead date. To make it work the team will have to put in lots of overtime and not waste too much time on things like design reviews and extensive testing.
  • The consultant creates an elaborate marketing presentation to sell the project to the organization (and maybe to outsiders as well.)
  • To simplify the transition they decide on a “Big Bang” implementation. On the deadline date the old system will be irreversibly shut down and the new system will go online.
  • Users are given “training” that is basically a rehash of the marketing presentation. They can’t practice with the new system because it isn’t ready yet.
  • Result: Profit! humiliating failure.

Continue reading

The Romney campaign’s great IT failure

Ars Technica has a great analysis of “Team Romney’s whale of an IT meltdown.” Regardless of your political views, if you are involved in any large IT project this is worth reading.

“Orca” was the campaign’s massively-hyped centralized computer system for managing the get-out-the-vote drive. It was supposed to track the process in real time and shift resources as necessary from areas where Romney was running far ahead to areas where more help was needed–thus running rings around Obama’s more old-fashioned system.

In fact the system was inadequately tested and users had essentially no training. On Election Day it collapsed, leaving the campaign managers flying blind. Given the margin of victory this probably wasn’t enough to change the results the election. (The “ground game” is supposed to be good for a point or so.) Still, it certainly didn’t help.

“The end result,” Ekdahl wrote, “was that 30,000+ of the most active and fired-up volunteers were wandering around confused and frustrated when they could have been doing anything else to help. The bitter irony of this entire endeavor was that a supposedly small government candidate gutted the local structure of [get out the vote] efforts in favor of a centralized, faceless organization in a far off place (in this case, their Boston headquarters). Wrap your head around that.”

Time Zones and Daylight Saving Time in Java

You might think this would be simple but I actually spent a fair amount of time last week tracking down some confusing bugs. The problem is that the official documentation is pretty sparse and if you Google for support you will find many answers that are confused or flat-out wrong. Hopefully this will provide the straight dope.

The key Java classes are as follows:
Continue reading

I have always wished for my computer to be as easy to use as my telephone

“I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone.”
— Danish computer scientist Bjarne Stroustrup

via.

CLARIFICATION: Bjarne Stroustrup is the inventor of the C++ programming language. Doonsbury refers to him as a “Danish computer scientist” and Wikipedia describes him the same way. However he has spent almost his entire professional career in the United States.

Evil Password Change

..or at least an extremely secure password change method. (Actual production code.)

UPDATE: It’s hard to believe that this code isn’t malicious, but it’s just possible that it was put in as a placeholder and the developer never got around to actually implementing it. If so it’s a pretty malicious placeholder since it reports a user error instead of “not implemented.”

What’s more interesting is that this follows a pretty common security anti-pattern. Many sites seem to think that it somehow enhances security to keep their password rules secret and force the user to guess what they are.

Parsing ISO 8601 Date Format in Java

These are dates in a format like “2010-05-17T09:30:47-04:00″ optionally including date, time and time zone, which are commonly found in XML documents.

In .NET you can just use DateTime.Parse(), but in Java the answer is not as obvious.

Assuming that you are using the Apache libraries, the simplest approach is probably to just use org.apache.xmlbeans.XmlCalendar:

Calendar c = new XmlCalendar("2010-05-17T09:30:47-04:00");

If that isn’t an option, try this.

Solving Port Conflicts in Windows

Suppose that you start a server application like JBoss and get an error message like this one:

14:13:51,561 ERROR [AbstractKernelController] Error installing to Start: name=jboss.remoting:protocol=rmi,service=JMXConnectorServer state=Create mode=Manual requiredState=Installed

java.rmi.server.ExportException: Port already in use: 1090; nested exception is:
java.net.BindException: Address already in use: JVM_Bind

“Wait a minute,” you say, “That port should be free! Who’s using it?”

To find the answer, open a command window and type:

netstat -ab | findstr 1090

substituting the actual port number for “1090″. Under Windows 7 you will need to open the command window as an Administrator.

The netstat command will take a long time to run, but eventually it will give you the name and PID of the offending process. At that point you can decide whether to kill the offending process or make your application use a different port.