Genii Weblog


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


Sun 31 Aug 2003, 10:31 PM
In a recent article in the New York Times, Henry Petroski, writing about NASA, makes the point that "failure is always an option", and that engineers understand this point, while managers often do not.  Additionally, he describes engineers as pessimists who basically understand all that can go wrong, while managers are optimists, who just don't see the possibilities.  I am not sure where software developers fall on this spectrum, in general.  I think, to the extent that we can be seen as a single group, that we fall somewhere in between.  We are much less bound by physical laws than engineers, but we are usually aware of the difficulty of making complex code do what we want.  I say usually, because there seem to be some developers who will promise anything and confidently assume they can deliver, then act surprised when delivery doesn't happen, or doesn't happen on time and within budget.

Now, I have always been proud of my ability to overcome the impossible.  I had a colleague at a former job who told me that whenever he wanted to be sure a difficult technical problem would be solved, he would make sure to tell me publicly that it was impossible.  I would then work all night to prove he was wrong.  No wonder he became a manager and I became an entrepreneur.  Yet, I sometimes wonder if we, as a theoretical group, don't borrow trouble for ourselves with this attitude.  Engineers come off as a somewhat more level headed group than software developers, partly because their failures are usually acknowledged early and in the factory.  Sure, there are exceptions, like the tires which came apart on the SUVs, but most engineering failures are caught earlier.  With software, our failures tend to be very public, since they are often caught by the public.  

Microsoft is in the midst of its new Trustworthy initiative, which is supposed to herald a new era of safe, secure software.  Unfortunately, so far they are mostly exposing just how untrustworthy they are at building secure software.  Part of their problem is that they have adopted the mantra "Failure is not an option".  Nonsense.  Failure is always an option, and the sooner we admit it, the sooner we build software that assumes it will be hacked, and guards against it, the sooner we work together with customers to manage the patch update system more sanely, the sooner we adopt a vigilance not seen yet in Redmond.  

Do other software vendors do better?  Some do.  IBM has always understand architectural integrity better than Microsoft, which lends a degree (sometimes a high degree, sometimes not) better security.  Other vendors do better or worse.  Open source software, which seems like it would be highly prone to hacking since the source code is available, is often surprisingly resilient, because everyone knows the source code is available, so the developers assume failure is an option.  At Genii, we understand the concept, but I don't know whether we walk the walk as well as we talk the talk.  It is certainly something we try to do, but, after all, failure is always an option.

Copyright © 2003 Genii Software Ltd.

Thu 28 Aug 2003, 06:23 PM
It is a good thing I'm not paranoid, or I might think that my government, which would never lie to me, and Britain's government, which would never lie to them, were hiding something about the highly coincidental power outage during rush hour in London today.  If I were paranoid, I might believe that this and the US blackout seemed a lot like warning shots across the prow by somebody who wanted to communicate something to us about our vulnerability.  Phew, I'm glad I'm not paranoid.

Copyright © 2003 Genii Software Ltd.

Wed 27 Aug 2003, 05:22 PM
Appearances aren't everything, in software or in "real life".  Lotus Notes reminds me of the Leaning Tower of Pisa, which has spent hundreds of years looking precarious, but never actually falls over.  Year after year, ever since about 1995, I have read reports and listened to the talking heads talk about how Notes and Domino are doomed.  The reasons vary, although it is often some combination of "standards" and web browsers.  Yet, here we are, it is 2003, the Notes client and Domino server markets both appear strong, there are companion products doing well as well, and the web browser with all its standards is still a weak imitation of the rich client experience.
 
In contrast to Lotus Notes is Microsoft Exchange.  With the wealth of Bill Gates and the unstoppable marketing prowess of Microsoft and the sheeplike devotion of the media, you would have thought Microsoft Exchange was a sure winner.  Again and again I have seen it declared the "inevitable victor" in any matchup with Lotus Notes (although the latest round of articles has shifted to .NET as the "inevitable victor" in any matchup), yet Microsoft announced today that support would be extended for an additional year for Exchange 5.5, clearly because nobody has bothered to upgrade to later versions.  Some say only 15% have upgraded.  On top of this, reports are that people don't really like Exchange 5.5, but tolerate it because of Microsoft pressure.  How long can that last in the face of ever more intrusive viruses and security patches that often break as much as they fix?

All I can say is, appearances can be deceiving.  The Old Man of the Mountain (shown here from 1885) looked like it would last forever, but a facade is just that.  What counts in the long run is not the appearance of stability, but the track record to prove it.  In that race, Lotus Notes is and continues to be the real winner, and that is why Genii Software continues to focus on that platform.

Copyright © 2003 Genii Software Ltd.

Mon 25 Aug 2003, 10:17 AM
It is hardly original of me to talk about the vulnerability of interconnectedness, given the recent massive black out in the north eastern US, and the various worms and viruses which have been taking down, or at least slowing down, internet connections all over the world.  As Daniel Gross writes in his article Degenerating Situation, "Recent experience suggests that this drive for economic efficiency has limits". I wonder about how this plays into the recent worries/thoughts/blogs about outsourcing/offshoring (see Tom Duff's comments or Robert Basic's comments for example, or articles such as  this article).

I must say, I am not inherently against multinational companies competing with local companies for consulting, programming and project management.  This tends to make both sides more efficient through competition.  I just wonder if the companies who are setting up offshore support centers are watching any of these events, along with terrorist attacks in India today, with some trepidation that the sheer separation between home office and support staff could lead to vulnerability.

Mind you, my web server is hosted in a different country two thousand miles from my office.  My customers are in 42 different countries all over the world.  My business depends on an internet that has shown some serious strain recently.  I am as vulnerable as interconnectedness can make me.  Yet that same interconnectedness meant that my website stayed up when my power was out.  My business has thrived although the local economy has suffered.  Through all the attacks, the sheer scope of the internet has proven it stronger than the electrical grids which have fewer alternate paths in case of failure.  So does the interconnectedness make us more, or less, vulnerable?  Similarly, does the use of offshore firms in countries such as India, Russia, Singapore, make us more vulnerable, or less?  On both counts, the jury is still out.

Copyright © 2003 Genii Software Ltd.

Sun 24 Aug 2003, 10:32 PM
This "Getting started..." series of articles shows simple code snippets to demonstrate how to use common features of the Midas Rich Text LSX.  These are not meant to be full fledged samples, for which you could go to the Midas Samples page, but rather small bits of code to show how to get started.  These articles will also appear in the Reference section of the Midas Help db in somewhat altered form.


The Midas Rich Text LSX lets you find, create, manipulate and extract doclinks.  The most common tasks are accessing doclinks and retrieving their values, changing one or more component of all doclinks in a rich text field, and adding a new doclink.  Below are some quick code snippets to show these tasks.  Additional information can be found in the Midas Help db along with information about the individual properties and methods which relate to doclinks.

Accessing all doclinks and getting their values
Set rtchunk = rtitem.DefineChunk("Doclink 1")
If rtchunk.Exists Then
   Do
      Messagebox _
      "Replica ID: " & rtchunk.LinkReplicaID & Chr(10) & _
      "View UNID: " & rtchunk.LinkViewUniversalID & Chr(10) & _
      "Note UNID: " & rtchunk.LinkNoteUniversalID & Chr(10) & _
      "Popup text: " & rtchunk.LinkPopupText & Chr(10) & _
      "Hint server: " & rtchunk.LinkHintServer & Chr(10) & _
      "Anchor text: " & rtchunk.LinkAnchorText, _
      0, "Doclink Information for " & rtchunk.Definition
   Loop Until Not rtchunk.GetNextTarget
End If

Accessing all hyperlinks (link hotspots on text) and getting their values
Set rtchunk = rtitem.DefineChunk("Hyperlink 1")
If rtchunk.Exists Then
   Do
      Messagebox _
      "Link hotspot: " & rtchunk.Text & Chr(10) & _
      "Replica ID: " & rtchunk.LinkReplicaID & Chr(10) & _
      "View UNID: " & rtchunk.LinkViewUniversalID & Chr(10) & _
      "Note UNID: " & rtchunk.LinkNoteUniversalID & Chr(10) & _
      "Popup text: " & rtchunk.LinkPopupText & Chr(10) & _
      "Hint server: " & rtchunk.LinkHintServer & Chr(10) & _
      "Anchor text: " & rtchunk.LinkAnchorText, _
      0, "Hyperlink Information for " & rtchunk.Definition
   Loop Until Not rtchunk.GetNextTarget
End If

Changing one component of all doclinks (e.g., changing view unid to use All Documents view)
Set view = db.GetView("($All)")
Set rtchunk = rtitem.DefineChunk("Everything")
Call rtchunk.ChangeDoclinks("", view.UniversalID)

Changing one component of all doclinks that match a specific component (e.g., changing view unid to use All Documents view if the replica id is the current database)
Set view = db.GetView("($All)")
Set rtchunk = rtitem.DefineChunk("Everything")
Call rtchunk.ChangeDoclinks("", view.UniversalID, "", "", "", Ucase(db.ReplicaID))

Creating a new doclink using AppendLink
Set view = db.GetView("($All)")
Set rtchunk = rtitem.DefineChunk("Everything")
Call rtchunk.AppendLink("", db.ReplicaID, view.UniversalID, doc.UniversalID, "Follow link by clicking here...")

Creating a new hyperlink (link text hotspot) using AppendLink
Set view = db.GetView("($All)")
Set rtchunk = rtitem.DefineChunk("Everything")
Call rtchunk.AppendLink("My link", db.ReplicaID, view.UniversalID, doc.UniversalID, "Follow link by my link...")

Copyright © 2003 Genii Software Ltd.

Fri 22 Aug 2003, 03:32 PM
Will you look what's happening to the neighborhood.  Just when you've got the porch fixed...


and the rhododendrons looking spiffy...


what happens but somebody moves in and disturbs the whole ambiance of the place...


Ah well, I guess nothing ever stays the same.  At least the bum is a fireman (and a good friend and co-conspirator), so we better all be friendly and take over an apple pie or something.


Click on his picture and you can even visit his front porch and see what he has to say...  Oh yeah, his name is Andrew, but you can call him Fireman Bob if you like...  Tell him I said Hi (he'll believe anything)...


Copyright © 2003 Genii Software Ltd.