Wednesday, August 27, 2008

On Changing Tack...

In the world of sailing, the term 'tack' is fairly overloaded. In one sense it refers to the front bottom corner of a sail, in another it refers to the side of the boat on which the main sail is being carried (relative to the wind), and in yet another sense it refers to the action of turning the boat through head to wind (e.g. changing from a port tack to a starboard tack). When on a windward leg in a race, it's important to pay attention to variations in the wind direction that may force you to point the boat closer to the wind ("head up") or further away from the wind ("bear away") in order to stay on a close hauled (i.e. fast) point of sail. In sailing terminology, these are referred to "lifts" and "knocks". Generally, a knock on one tack corresponds to a lift on the other tack, so if you're frequently getting knocked, it's advantageous to tack (see, I told you the term was overloaded).

I've found that the same often applies in software development - a change in the way you are attempting to solve a problem can put you in a better position than you would have been with the original approach. I have been "knocked" for over a week now trying to regenerate the source code for the UML2 component of MDT in a runtime workspace. I've always done it this way because I typically need to use recent changes in UML2 itself to regenerate the UML2 source code. No matter what I tried (clean workspace, more memory, builder settings) I could not get one of the code generation templates to compile. What was most frustrating was that the same template compiled successfully in my development workspace.

So, I decided it was finally time to change my approach and make use of a PDE enhancement that was made as part of the recent Ganymede release. I used the 'dropins' folder as my workspace (e.g. -data "C:\Eclipse 3.4 MDT Galileo\eclipse\dropins") and the settings for my runtime workspace as the development properties (e.g. -dev "file:C:/Eclipse 3.4 MDT Galileo/eclipse/dropins/.metadata/.plugins/org.eclipse.pde.core/MDT/dev.properties") and, voila, I was able to bootstrap UML2 and my template compiled successfully. Not only did this solve my problem, but it also means I have one less workspace to configure and maintain!

No comments: