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...
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.
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.
- "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!"
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!
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:
- Traditional framed HTML
- A more comprehensive HTML report
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
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)
Now back to exporting...
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."
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.
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", _ "StockQuoteSoap_n4") End Sub Function GetQuote(symbol As XSD_STRING) As XSD_STRING Set GetQuote = Service.Invoke("GetQuote", symbol) End Function End ClassNow 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 Else 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 SubNow 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...
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."
Notes/Domino Best Practices: Transaction Logging, technote 7009309
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... :-)
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"...
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 'declarations Private pSession As NotesSession Private pDb As NotesDatabase Private pDoc As NotesDocument '/** ' * Constructor ' */ Public Sub New(get_location As String) 'declarations 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) Else '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 Else 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 Else 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 Else 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
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 Else MsgBox "failed to open document" End If If Not (doc Is Nothing) Then Call doc.Close(True) End If End Sub
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...
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!
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.
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...
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.
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.