<< August 2007 | Home | October 2007 >>

I think I'm decided

As mentioned I was considering whether to get a N95 or a Windows Mobile based phone to be ready for Notes Traveler and I think I'm set on the latter...

Tags : ,

6.5.6 fixes panic when doing DXL export

The following is a technote was sent to me from a LotusScript.doc user: LotusScript and Java code hangs Notes when exporting certain documents to .dxl/.xml. Only difference was that his client redboxed.

Anyways - upgrading to Notes 6.5.6 solved the issue.

Lotus Symphony mentioned on the Windows Weekly podcast

I listened to the Windows Weekly podcast today (episode 36) and Lotus Symphony was mentioned (from 28:55-32:30). The podcast is from the TWIT network. Besides being a very positive review, although they mention that it's still beta 1, they also mention that it's the same technology used in the Notes products. Very nice.

Some quotes:

  • "I'm excited!"
  • "But unlike openoffice.org and Star Office this Lotus branded suite is actually nice looking. It really is!"
  • "There's already in this early version a certain clarity and polish that doesn't exist in Open Office"
  • "It works on Linux AND Windows"
  • "For most people Office is a daunting purchase"
  • "It already is, as you said, more polished than anything Open Office or Star Office has ever come out with by far!"

Windows Weekly episode 36: The News from Redmond

Tags : ,

N95 vs. Lotus Notes Traveler

I strongly need a new mobile phone as the joystick on my Sony Ericsson is completely worn down due to wear and tear. I guess a couple of trips over the Pyrenees on bike in my back pocket didn't help either... Anyways - I have been looking at the Nokia N95 and it seems like a really nice phone I can see myself owning - built in Wi-Fi is very nice!. However with the recent announcement of Lotus Notes Traveler I seriously have to wonder if I want to commit to a Symbian based phone. Maybe Windows Mobile is the route to take so I'm ready come 1Q 2008...

On the other hand I'm not really an email-on-the-go! person so maybe I should opt for the Nokia. I'm torn!

Tags : ,

Lotus cancelling the Redbooks?

Rumors are circulating that Lotus/Mike Rhodin plans to pull the plug on the Lotus Redbook center. This can't and must not be true... Be sure to chime in over at the Business Controls Caddy...

Tags :

It's been quiet in LotusScript.doc land but...

...I have been hard at work and I'm getting close to a pre-release of LotusScript.doc v.2.

LotusScript.doc v. 2 is being completely rewritten from scratch (in Java), supports multi-threading and handles a wide array of new design elements compared to the 1.0.x code stream. The code and comment parsing is done and I'm currently working some of the more esoteric parsing bugs out.

One of the design goals for version 2 is also adding support for other output formats than the "traditional" framed HTML view. Writing custom output formats will also be possible using a template engine. I'm planning to ship the following documentation formats:

  • XML
  • Traditional framed HTML
  • A more comprehensive HTML report
  • PDF
  • DocBook

The main XML format is almost done and it's what I wanted to show of today and is what I'm showing above. Click the image (or here) for a larger version. The larger XML snippet shows:

  • Ability to see which subforms are used from which forms
  • Ability to see which embedded views are used from which forms/pages and what their singlecategory formula is (if any)
  • Support for buttons (anonymous and named)
  • Support for actions (in action bar and as shared actions)
  • Ability to see which shared actions are used from which action bars
  • Support for subforms
The list of new features is quite a lot longer including vast performance improvements but lets not get carried away. Of cause the XML format will also carry the code comments.

Exporting DXL for databases with Java web services

Today I needed to export a database application containing a web service written in Java as DXL. How stupid of me to think that I could do this with only Notes.jar on my build path... Doing such an export will make your code throw java.lang.ClassNotFoundExceptions unless you have the following libraries on your build path:

  • jvm/lib/ext/notes.jar (not much surprise there)
  • jvm/lib/ext/websvc.jar (due to missing lotus.domino.websvc.client.Service)
  • jvm/lib/ext/mail.jar (due to missing java.mail.Multipart from lotus.domino.ws.ServiceContext)
  • jvm/lib/ext/jsdk.jar (due to missing javax.servlet.http.HttpServlet)
  • jvm/lib/xml.jar (due to missing org.apache.xerces.parsers.SAXParser)
The above was found by diagnosing and reading ClassNotFoundExceptions in Eclipse at runtime since ClassNotFoundException is a runtime exception.

Now back to exporting...

Effective API Design presentation by Joshua Bloch

Although from JavaPolis 2005 this is still a very nice presentation by one of the gurus in the field of API design, Joshua Bloch. The presentation runs about 70 minutes but is well worth it.

Summary: "A well-written API can be a great asset to the organization that wrote it and to all that use it. Given the importance of good API design, surprisingly little has been written on the subject. In this talk (recorded at Javapolis), Java library designer Joshua Bloch teaches how to design good APIs, with many examples of what good and bad APIs look like."

Effective API Design

DB2 LUW Performance blog

DB2 Magazine blog on LUW Performance. For those not in the know when talking about DB2 LUW stands for "Linux, Unix and Windows" and testifies to the great difference between DB2 on LUW and zSeries/iSeries.

Discovering Notes 8: Web service enabled script libraries

In a recent edition of the LotusUsergroup.org newsletter Julian listed some of the new AppDev features of Notes 8. Among them were the new web service enabled script libraries.

Basically what you do is simply pointing a script library to a WSDL file and some stub code is automatically generated for you. Then when you use the script library from agents etc. the methods you call will automatically be forwarded to the actual web service without you worrying about SOAP, HTTP etc. It actually is that easy!

To test it out I found an example of a public stock quote web service (http://www.webservicex.net/stockquote.asmx?WSDL) and used that for an example.

Start by creating a new empty LotusScript script library. Now click the "WSDL..." button at the bottom of Domino Designer and simply select "Import WSDL". Now paste the above URL into the filename field and click Open (it's really nice that you can actually simply paste the WSDL URL into the dialog instead of first saving the WSDL to a local file). Now your script library should look like this:

%INCLUDE "lsxsd.lss"
Const n4 = "http://www.webserviceX.NET/"
Class StockQuoteSoap_n4 As PortTypeBase
  Sub NEW
    Call Service.Initialize ("HttpWwwWebserviceXNETStockQuote", _
    "StockQuote.StockQuoteSoap", _
    "http://www.webservicex.net/stockquote.asmx", _
  End Sub
  Function GetQuote(symbol As XSD_STRING) As XSD_STRING
    Set GetQuote = Service.Invoke("GetQuote", symbol)
  End Function
End Class
Now save the script library and call it "Stock quote".

Create a LotusScript agent and in Options import the script library (Use "Stock quote"). Now we want to call the script library which is done using code like this:

Sub Initialize
  Dim ws As New NotesUIWorkspace
  Dim sq As New StockQuoteSoap_n4()
  Dim symbol As String
  Dim symbols(2) As String
  symbols(0) = "IBM"
  symbols(1) = "JAVA"
  symbols(2) = "AAPL"
  symbol = ws.Prompt(4, "Stock symbol", _
    "Select stock for quote...", "", symbols)
  If symbol = "" Then
    Exit Sub
    Print "Using symbol: " + symbol
  End If
  Dim sh As New XSD_STRING()
  Call sh.setValueFromString(symbol)
  Set sh = sq.GetQuote(sh)
  Msgbox sh.getValueAsString()
End Sub
Now when you run the agent and you select a stock symbol it will actually automatically go out to the web service, get the quote and return it to the caller. All this with the code I just showed you. Nice!

Stand by for a post on the nitty, gritty details...

Eclipse PHP tooling

The Eclipse Foundation releases PHP tooling.

Quote: "Eclipse has long been enriched by the wide number of programming languages supported" says Mike Milinkovich, general director of the Eclipse organization. "The release of PDT 1.0 is great news as it will allow the estimated 4.5 million PHP developers to begin using Eclipse-based tools and greatly expand the entire Eclipse community."

Tags : ,

Notes/Domino Best Practices: Transaction Logging

Notes/Domino Best Practices: Transaction Logging, technote 7009309

Tags :

Discovering Notes 8: More spill-over from Eclipse

What's going on? Well that's the question... Did you notice the animated gif in the lower-right corner of your Notes 8 client that looks like this:

It is the new progress tab and by clicking on the orange ball you can get the progress bar to display in full screen mode like shown below. The cool thing is that you can see all the different operations that may be occurring at any one time. In this example below I'm only replicating but you can see that I just finished copying a database as well. In previous releases you only had the one progress bar at the bottom which meant that you couldn't see simultaneous operations.

If you click "Show" in the upper right corner of the tab, select Preference there's even more fun to be had... :-)

How to get hotfixes

Notes from Lotus Support: How to get hotfixes...

Tags :

Eclipse and IBM

It sure sounds like IBM Lotus plans to keep up with the Eclipse releases for the Expeditor and hence the Notes 8 platform. This is great. At least that is what John Head quotes Ed Brill as saying the the Collaboration University keynote. This is at least what I take from "Mac Beta in 8.0.1 ... Eclipse 3.4 required and not ready yet"...

LocationDocument LotusScript class updated

I updated my LocationDocument LotusScript class again for Location type (Local Area Network, No connection etc.) and for mail server name. It makes it really easy to quickly get at location document information from script.

See the original post for usage.

' * LotusScript class for interacting with location documents 
' * in the personal name and address book.
' */
Public Class LocationDocument
   Private pSession As NotesSession
   Private pDb As NotesDatabase
   Private pDoc As NotesDocument
   ' * Constructor
   ' */
   Public Sub New(get_location As String)
      Dim viewNab As NotesView
      Dim nn As NotesName
      Dim ini_location As String
      Dim location As String
      Dim comma As Integer
      'get session
      Set Me.pSession = New NotesSession()
      If get_location = "" Then
         'get the location from notes.ini
         ini_location = Me.pSession.GetEnvironmentString("Location", True)
         'parse out the location name if none specifed in the constructor
         comma = Instr(1, ini_location, ",")
         location = Mid$(ini_location, 1, comma-1)
         'use supplied location name
         location = get_location
      End If
      'abbreviate the name
      Set nn = New NotesName(location)
      location = nn.Abbreviated
      'get database and view
      Set Me.pDb = Me.pSession.GetDatabase("", "names.nsf")
      Set viewNab = Me.pDb.GetView("Locations")
      'lookup location document
      Set Me.pDoc = viewNab.GetDocumentByKey(location, True)
      If Me.pDoc Is Nothing Then
         Error 9999, "Location document not found in names.nsf"
      End If
   End Sub
   ' * Saves.
   ' */
   Public Sub Save()
      Call Me.pDoc.Save(False, False)
   End Sub
   ' * Property to get the backend document.
   ' */
   Public Property Get Document As NotesDocument
      Set Document = Me.pDoc
   End Property
   ' * Property to get the e-mail address.
   ' */
   Public Property Get EmailAddress As String
      EmailAddress = Me.pDoc.GetItemValue("ImailAddress")(0)
   End Property
   ' * Returns the name of the directory server.
   ' */
   Public Property Get DirectoryServer As NotesName
      If Me.LocationType = "3" Then
         Set DirectoryServer = Nothing
         Dim nn As New NotesName(Me.pDoc.GetItemValue("DirectoryServer")(0))
         Set DirectoryServer = nn
      End If
   End Property
   ' * Sets the name of the directory server.
   ' */
   Public Property Set DirectoryServer As NotesName
      Call Me.pDoc.ReplaceItemValue("DirectoryServer", DirectoryServer.Canonical)
   End Property
   ' * Returns the name of the Sametime server.
   ' */
   Public Property Get SametimeServer As NotesName
      If Me.LocationType = "3" Then
         Set SametimeServer = Nothing
         Set SametimeServer = New NotesName(Me.pDoc.GetItemValue("SametimeServer")(0))
      End If
   End Property
   ' * Sets the name of the Sametime server.
   ' */
   Public Property Set SametimeServer As NotesName
      Call Me.pDoc.ReplaceItemValue("SametimeServer", SametimeServer.Canonical)
   End Property
   ' * Returns the name of the mail server.
   ' */
   Public Property Get MailServer As NotesName
      If Me.LocationType = "3" Then
         Set MailServer = Nothing
         Set MailServer = New NotesName(Me.pDoc.GetItemValue("MailServer")(0))
      End If
   End Property
   ' * Sets the name of the mail server.
   ' */
   Public Property Set MailServer As NotesName
      Call Me.pDoc.ReplaceItemValue("MailServer", MailServer.Canonical)
   End Property
   ' * Returns the location type.
   ' * 
' * Local Area Network = "0" ' * Notes Direct Dialup = "1" ' * Network Dialup = "4" ' * Custom = "2" ' * No connection = "3" ' */ Public Property Get LocationType As String LocationType = Me.pDoc.GetItemValue("LocationType")(0) End Property End Class

Print from Adobe Acrobat using OLE

Just to have it somewhere... The code is from Visual Basic 6 with reference to the Acrobat TLD.

Private Sub Command1_Click()
    Dim doc As New AcroAVDoc
    If doc.Open("c:\test.pdf", "PDF Print") Then
        Dim numPages As Long
        numPages = doc.GetPDDoc().GetNumPages
        Debug.Print "Document has " & numPages & " page(s)..."
        If doc.PrintPagesSilent(0, numPages - 1, 0, True, True) Then
            Debug.Print "Printed document..."
        End If
        MsgBox "failed to open document"
    End If
    If Not (doc Is Nothing) Then
        Call doc.Close(True)
    End If
End Sub

Tags : ,

Is the Notes/Domino platform getting too complex?

Ben Poole posted a link to a rant on developerWorks (notes.net). The post addressed some of the same points that Nathan addressed some time back in his "Hourglass Community" post.

I think it is interesting that a post like this was posted to LDD not too long after Nathan posted about the same thing. I find it curiously interesting that the Notes/Domino platform turns more and more complicated and that the questions posted on LDD turn more and more basic... It could be that (real) developers simply get their information from other sources such as blogs and that those left in the forum really are the newbies. It could also be an indication that the platform getting increasingly complex is revealing to real problem for IBM Lotus.

How do we fix it? How do we get Notes/Domino developers to get smarter? It is really our, non-IBM'ers, job? Something to ponder over the weekend...

Tags : ,

Discovering Notes 8: Productivity gain from calendar ghosting and the sideshelf

I just discovered a very nice feature of calendar ghosting in the Day-at-a-Glance component - you can right click a ghosted calendar entry right in there in the sideshelf component and accept it right from there. Now that makes sense and saves time. Nice!

Discovering Notes 8: Spill-over from Eclipse

How's this for Eclipse spill-over and a "free" feature that, at least for me, is the feature of the week? Try pressing Ctrl-F8 in your Notes 8 client...

Pressing the key-combination will bring up a keyboard navigateable list of open tabs. Select the tab you need with the arrow keys (or press Ctrl-F8 successive times) and press Enter. It's basically the same as in Eclipse except in Eclipse it shows a list of active perspectives. In fact the Notes 8 client still refers to "perspectives" in the keyboard shortcut list.

Nice ha?

Lotusphere abstracts submitted

Just finished submitting a couple of abstracts for Lotusphere 2008. Subjects covered are Java, test driven development and DXL.

Now it's a matter of waiting...

New URL for comments feed

Hmmm... seems like one address did change. Since I scrapped my custom Pebble version the comments feed is now at the default Pebble location: http://lekkimworld.com/responses/rss.xml.

Upgraded blog software

I have just finished upgrading my blogging server software (Pebble) from a custom version of version 1.9 to a standard version 2.2. Apart from file truncation issues the migration went fine. RSS feeds should be at their normal address and basically no one should actually see the change unless they visit the homepage. The only items missing is my custom theme. If you experience any problems please let me know by commenting or by sending me an e-mail (lekkim [at] heisterberg.dk).

One nice addition to Pebble 2.x is the support for comment thread RSS feeds which is something I really think the developerWorks blogs should implement. Apart from this there is a host of new nice features.

Tags :