Genii Weblog


Civility in critiquing the ideas of others is no vice. Rudeness in defending your own ideas is no virtue.


Wed 8 Apr 2009, 11:58 AM
I was talking with another ISV, Mark Ramos of Granite Software, about the fascinating process of updating software created many years ago to work with later compilers, operating systems, versions of Notes, etc.  He originally created his well regarded and widely used Zmerge way back in 1994, and has thus had to update it through a whole series of massive changes to Notes, to various operating systems including Windows, and so forth.  He is now working on yet another update, this time to support 64bit Windows, I think.  Mark and I have talked before about the advantages of having been in the Notes API business before many others, because much of the internal workings were more visible then, so we learned before the distractions were so numerous, although we also had to learn by hacking and trial and error as we were often there before the APIs and documentation.

Recently, I have been grappling with one of the downsides of being early to the game.  When R5 was released, internal storage of MIME was new on the scene, and it was not documented in the API.  No structures, no rules, no guidance.  Unfortunately, I had a strong desire to handle the MIME anyway, since I wanted my Midas Rich Text LSX to be able to create MIME, so I hacked at it until I understand, figuring out the data structures and rules as I went.  Later, in 5.0.2, when the data structures were at last documented, I switched to them but used most of the same code as before, just slightly modified.  At the time, this was great to have, since I sold Midas to lots of companies who wanted to send MIME emails, and I had this long before that was possible with the base classes.

But this code also planted the seeds of my later troubles.  While there is nothing wrong with the code I wrote when running on Windows or AIX, it was not restructured to run on other operating systems the way the rest of Midas is.  There was no ODSLength(_MIME_PART), and you couldn't use ODSWriteMemory and ODSReadMemory the way you always should with composite data, so I had just hardcoded the procedures.  That worked fine until I started my port of iFidelity for Linux, and ran into problem after problem after problem.  It took me far longer to figure out what was going on then it should, partly due to distractions such as a trip to Europe and the flu, but once I realized that I was tripping over my own earlier cleverness, it only took a little bit to undo the damage.  Now I am testing completely on all three operating systems (Windows, AIX and Linux) to be sure I have not broken somethign else while fixing this.

So, there are pitfalls to being early, even as there are rewards.

Copyright © 2009 Genii Software Ltd.

Tags: