<< February 2008 | Home | April 2008 >>

Week in review

Man it has been a busy week. I had Monday off due to Easter (national holiday in Denmark) but since then it's been busy, busy, busy...

Besides being at a customer site all week incl. Saturday I hadn't really expected the level of interest there would be in the TwitNotes plugin for Notes 8. Of cause I expected some to install it and try it out but not to the degree I have seen and heard about. I certainly got to test the comment system on lekkimworld.com - boy I have received a lot of comments. I would like to say thank you to all those who commented and all those who have contacted me by e-mail. The level of interest has been astounding and flattering.

Looking back it has also been an interesting journey from a development perspective as it has certainly brought some of the strengths and weaknesses of the "new" Notes platform into the light. I don't think there's much doubt that the platform is powerful and there's potential but I was surprised to discover the level of difference in SWT performance and functionality across the different platforms (Windows XP, Windows Vista, Linux and Mac). It certainly takes some more consideration than plain ol' Notes development.

Today I'm spending some time helping out my girl friends dad install and configure a new computer. Other than that I hope to get some time to work on TwitNotes. Yesterday I did some for on the UI to detect and handle links in posts to make them clickable. It sounds and seems simple but now that the table data is custom drawn to handle text wrapping nothing is simple. I have the fundamentals done already though.

And the right term is...

I have been wondering what the "correct" term for the little menu that each sidebar plugin has so today I got in contact via Mary Beth Raven (via im.bleedyellow.com of cause). She told me that the IBM term for a sidebar plugin is a "sidebar panel" and the menu is called a "panel menu". So there it is...

Tags : ,

TwitNotes - v. 1.0.2 released

TwitNotes v. 1.0.2 has been released to the update site. This release fixes the row height issue, some minor label provider stuff and adds the source of TwitNotes to posts so the source show up as "TwitNotes" instead of "web".

This release also adds a "Clear author cache" action to reset the cache of Twitter author details during runtime. I use this to clear the cache if Twitter for some reason sends me incorrect images or I'm simply want to refetch the images. TwitNotes will cache author info for the duration of your Notes session otherwise.

TwitNotes - deploying in Sametime

Deploying the TwitNotes shelfView (aka sidebar) component in Sametime 7.5.1/8.0 yields a nasty stacktrace from the underlying platform. I thought everything should work across both platforms with everything based on XPD. I haven taken care not to rely on Notes 8 API's such as the topology service but I guess that would yield a bundle dependency issue and not a stacktrace like this.

Anyone seen similar?

java.lang.NullPointerException: The active part must not be null 
        at org.eclipse.ui.internal.expressions.ActivePartExpression.(Unknown Source) 
        at org.eclipse.ui.internal.PartSite.initializeDefaultServices(Unknown Source) 
        at org.eclipse.ui.internal.PartSite.(Unknown Source) 
        at org.eclipse.ui.internal.ViewSite.(Unknown Source) 
        at com.ibm.rcp.ui.internal.shelf.ShelfViewReference.createPartHelper(Unknown Source) 
        at com.ibm.rcp.ui.internal.shelf.ShelfViewReference.createPart(Unknown Source) 
        at org.eclipse.ui.internal.WorkbenchPartReference.getPart(Unknown Source) 
        at com.ibm.rcp.ui.shelf.ShelfPage.activatePart(Unknown Source) 
        at com.ibm.rcp.ui.shelf.ShelfPage.access$10(Unknown Source) 
        at com.ibm.rcp.ui.shelf.ShelfPage$7.handleEvent(Unknown Source) 
        at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source) 
        at org.eclipse.swt.widgets.Widget.notifyListeners(Unknown Source) 
        at com.ibm.rcp.swt.swidgets.SViewForm.internalSetMaximized(Unknown Source) 
        at com.ibm.rcp.swt.swidgets.SViewForm.setMaximized(Unknown Source) 
        at com.ibm.rcp.swt.swidgets.SViewForm.onMouseUpTitle(Unknown Source) 
        at com.ibm.rcp.swt.swidgets.SViewForm.onMouseUp(Unknown Source) 
        at com.ibm.rcp.swt.swidgets.SViewForm$4.handleEvent(Unknown Source) 
        at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source) 
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source) 
        at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source) 
        at org.eclipse.ui.internal.Workbench.runEventLoop(Unknown Source) 
        at org.eclipse.ui.internal.Workbench.runUI(Unknown Source) 
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Unknown Source) 
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(Unknown Source) 
        at com.ibm.rcp.personality.framework.internal.RCPApplication.run(Unknown Source) 
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(Unknown Source) 
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) 
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) 
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) 
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) 
        at java.lang.reflect.AccessibleObject.invokeL(Unknown Source) 
        at java.lang.reflect.Method.invoke(Unknown Source) 
        at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336) 
        at org.eclipse.core.launcher.Main.basicRun(Main.java:280) 
        at org.eclipse.core.launcher.Main.run(Main.java:977) 
        at com.ibm.rcp.core.internal.launcher.Main.startLaunch(Main.java:895) 
        at com.ibm.rcp.core.internal.launcher.Main.main(Main.java:1313) 
        at java.lang.reflect.AccessibleObject.invokeV(Unknown Source) 
        at java.lang.reflect.Method.invoke(Unknown Source) 
        at com.ibm.oti.vm.JarRunner.main(Unknown Source) 

TwitNotes - now an 'official' Twitter app

The Twitter team has approved TwitNotes as an "official" Twitter application so from v. 1.0.2 the source will show up as "from TwitNotes" as shown below.

Setting table row height in SWT

So it appears you can actually set the row height of a SWT table despite me previously saying you couldn't. The caveat is that it cannot be set on a per row basis. Row height is set using a Listener for SWT.MeasureItem and then setting the height property of the supplied event object as shown below.

// resize the row height using a MeasureItem listener
table.addListener(SWT.MeasureItem, new Listener() {
   public void handleEvent(Event event) {
      // height cannot be per row so simply set
      event.height = 67;
If need be you could compute the actual height using the GC.stringExtent(String).y and simply set to the biggest value you encounter.

Information from Custom Drawing Table and Tree Items at Eclipse.org.

TwitNotes - example of multiple submit area providers

As mentioned in the documentation TwitNotes is extensible using extension points. One of the extensions make it possible to contribute so called submit area providers that is functionality that can submit information. The supplied Twitter submit area provider is one example but if you add another the UI is simply augmented with a tabbed folder as shown below where there's two providers present.

Dependencies between OSGi Bundles

This article and some valuable IM'ing with Bob Balfe helped me solve my bundle dependency issues. Thanks again Bob.

Getting Started with OSGi: Dependencies between Bundles @ Eclipsezone.com

TwitNotes v. 1.0.1 available

TwitNotes v. 1.0.1 is now available from the update site. This release solves the following issues:

  • Text not wrapping on Windows XP (solved using custom PaintListener). An unfortunate side effect is that long posts with long words are being truncated - I'm working on a solution to this.
  • Image disappearing when selecting a row (solved by widening the image column as described here)
  • XML entities not being correctly unescaped that is posts show &amp; etc. (solved using Apache Commons Lang StringEscapeUtils.unescapeXml(String))
To update go to File/Application/Install and select "Search for updates of the currently installed features" and follow the directions on screen (almost like installing in the first place).

Comments welcome to this post.

TwitNotes - Installing on Mac

Vowe posted on how to install TwitNotes on Mac. Thanks.

TwitNotes - video on how to install

Hat off to Vaughan Rivett for posting a comprehensive video on how to install TwitNotes incl. editing the plugin_customization.ini file for those having that need.

TwitNotes - Update on text wrap issue

As reported on the comments to my earlier post there is an issue with the text not wrapping on Windows XP. The good thing is that I have reproduced the issue on Notes 8.0.1 on Windows XP in a VMWare machine so I can fix the issue. No guarantee as to when though I have a couple of conference calls this week... :-)

If you're running XP and not having the text wrap issue please let me know by commenting.

TwitNotes - ready for installation

TwitNotes v. 1.0 is ready for installation via a remote update site. Installation and configuration instructions can be found at http://lekkimworld.com/twitnotes. Be sure to read the Configuration section on how to configure your Twitter credentials.

Post questions as comments below. I hope the plugin works for you as well... :-)

TwitNotes update

TwitNotes is ready for distribution and I have the update site all lined up. Only problem holding me back releasing it is an issue I have with conflicting components from my sidebar plug-in and the Lotus Expeditor platform. My plug-in needs ship with Apache Commons HttpClient v. 3.1 and Apache Commons Lang v. 2.3. For some reason my versions of the components wont deploy to Notes 8 since the components conflict with the versions supplied with Lotus Expeditor. The funny thing is that it works perfectly when launching Notes from the Eclipse IDE.

If anyone has any ideas why this might be so please let me know. Maybe a feature patch? Other ideas?

Two interesting pieces of Eclipse news

  • Microsoft forges first official link to Eclipse
    "Microsoft Corp. today announced its first collaboration with the open source Eclipse Foundation by committing provide engineering support to allow the Eclipse Standard Widget Toolkit (SWT) use Microsoft's Windows Presentation Foundation (WPF). The move aims to make it easier for Java developers to write applications that look and feel like native Windows Vista, according to Microsoft."
  • BlackBerry embraces Eclipse
    "Research In Motion (RIM) has joined the Eclipse Foundation and released a BlackBerry plug-in for Eclipse that provides the ability to develop and debug BlackBerry applications without leaving the familiar Eclipse environment."

Tags :

Announcing TwitNotes - a Twitter plug-in for Notes 8

The below screenshot should speak for itself but in case it doesn't let me explain... Last night and tonight I have been writing a Twitter plug-in for the Notes 8 Standard sidebar. I got tired of using BeTwittered and really wanted a real Notes 8 sidebar plug-in as I have some other ideas I want to incorporate. Once I finalize the plug-in tomorrow and get it on an update site you can install it if you're interested.

Initial features:

  • Pure SWT application
  • Integration with the Accounts API
  • Preferences via Notes 8 Preference pages (auto refresh (yes/no), refresh interval, number of posts to show, refresh after posting).
  • Shows the Twitter profile image of the poster.
  • Posts to Twitter.

SWT @ Notes 8: Here we go again

As mentioned before Lotusphere 2008 I'm contemplating a series of posts on tips and tricks on developing Eclipse/SWT components for Notes 8. I has been a little quiet on this front since Lotusphere since it takes a little more time than I have been having lately to write these posts. Now with Easter on the horizon I'm planning to get a number of posts out there. I'm working on a number of posts on the subject and currently planning to address:

  • Logging
  • Debugging
  • Why OSGi is important
  • Preferences
  • Actions and ViewParts
  • OSGi services vs. Eclipse extensions
If you have other suggestions please let me know by commenting to this post.

Article: Designing composite applications: Writing an Eclipse component for IBM Lotus Notes

"This article introduces some helper classes so you can quickly build and deploy feature-rich, reusable, Eclipse-based components for IBM Lotus Notes. You also learn how to create a foundation upon which other components can be created quickly and easily."

Designing composite applications: Writing an Eclipse component for IBM Lotus Notes by Craig Wolpert and Jo Grant from IBM @ IBM developerWorks.

Preemptive support from Atlassian

As you can see from the comments to my post on Watching wikis, the support team from Atlassian found my blog post on the problems I was having with the RSS feeds for the IBM Composite Application wiki. How cool is that the support team goes looking from issues to solve?

Does anyone know how to get in contact with the guys at IBM who run the wikis so the issue can be resolved? As you can see Atlassian already created the support ticket to get you guys going.

Initializing Java Maps

Elias Torres: Initializing Java Maps

Tags :

OSGi for beginners

OSGi is a part of Eclipse and hence Notes 8+ Standard. It never hurts to know what you're dealing with. Hello, OSGi, Part 1: Bundles for beginners - Creating, executing, and managing bundles in an OSGi container

Tags :

Watch wikis

Bob Balfe just blogged about how you can access the underlying data model for Composite Applications and how he wrote up a page on the Composite Application wiki. This is great but did you know that you can subscribe to the wikis and be notified when new content is added? Also without Bob blogging about it. One option is RSS and another is by e-mail. While I prefer RSS the wikis doesn't allow that since the wiki (Atlassian Confluence) throws an exception due to a missing class.

caused by: java.lang.NoClassDefFoundError: 
 at com.atlassian.xwork.results.RssResult.doExecute(RssResult.java:41)
My guess is that the wiki is run on an IBM JVM and hence doesn't have the referenced com.sun class. Any way it's really bad form relying on classes in the com.sun namespace as they are not part of the official API so shame on Atlassian in this case.

Any ways for now e-mail notification is the way to go.

Contributing to a developerWorks wiki

Today I entered the IBM wiki world by contributing to the Composite Application wiki over at developerWorks. It all started with me having to figure out how to add menu items to the menu of a sideshelf component. I found the answer in the wiki (for those interested it's quite easy using the org.eclipse.ui.viewActions extension point). What I didn't find was an example of how to programmatically add actions which I also needed so once I figured it out I added the information to the wiki. Programmatically adding actions is useful if you don't know which actions to add at compile and/or deployment time.

So if you go to the page on creating sideshelf components you'll find a section on programmatically adding actions.

I really like the idea of the wikis and I really feel good after having contributed. Get some, give some.

P.S.: I know I'm still way behind blogging on my holiday compared to Ed Brill... :-)

Gone skiing...

to Avoriaz, France. I'll be back in a week.

Time Management

Ever since start of the year/Lotusphere I have been reading books and generally studying how to make better use of my time and better manage my time. I find I have an increasing number of things going on and an increasing number of things I want to have going on, but sometimes I run out of mental resources to manage it all. Part of this process has been thinking about what I do and how I do it. Part has been reading books like "Getting Things Done" by David Allen. This is a great book IMHO and it's dead on in many respects. While it's also available as an audio book I think it is worth the extra money of getting both.

Last night I watched the Randy Pausch lecture Time Management after it being recommended to me by a coworker. Besides being a brilliant lecture by what appears to be a brilliant man and gifted lecturer, he's also dying from cancer in 3-6 months which makes the topic of time management quite a paradox. Something to think about right there.

P.S.: There's also another lecture by Randy Pausch available on the web called Really Achieving Your Childhood Dreams. While I haven't watched it yet I'm definitely gonna do it. Soon.

Freaking cool

I know I've said it before and I'm sorry I can't tell you exactly why it it true in this case just yet why but with Notes 8 on Eclipse you have some freaking cool possibilities...

Re: (y) becomes _

I think it's a bug in the chat window display since inserting a space after the emoticon once you have written some more text displays the emoticon.

I did a video of the bug but for some reason Youtube wont convert it so please download it here.

(y) becomes _

Am I the only one where typing (y) in the Sametime chat windows doesn't result in the yes-emoticon but an underscore instead? We're seeing this across the office on Notes 8.0.1 Standard.

Update: Now :-D also turn into an underscore instead of a grin-emoticon and apparently it happens in both ends of the conversation. Restarting the chat doesn't solve the problem.

Bad news for extst.ibm.com users

After reading about the current state of affairs for the extst.ibm.com Sametime community at Adam Gartenbergs and Chris Pippins blog I must say that I'm a bit disappointed. How can it be that IBM choose not to support the latest and greatest of their flagship collaboration client on extst.ibm.com? Of cause it will happen at some point in time but why the wait? Simply get going, edit those sametime.ini files and while you're at it add the client ids for 8.0.2, 8.0.3, 8.5, 8.5.1...

I'm baffled!

Tags :

Notes 8(.0.1) against Sametime 7 limited use server

I'm at a customer site today where they are running Notes 7.0.2 but would like to experiment with (the new) Notes 8.0.1 Standard client. The upgrade of select users went fine but the embedded Sametime client was unable to connect to the Sametime 7 Limited Use server. After some searching on Google and in the developerWorks forums the problem was easy to solve thanks to posts there and some additional searching. I simply needed to add the client ids of Notes 8 and Notes 8.0.1 Standard to the sametime.ini and restart Sametime.

The steps are as follows:

  1. Find sametime.ini on your Sametime server - it's in the binary Domino directory. Open it in a text editor.
  2. Find the line starting with VPS_ALLOWED_LOGIN_TYPES in the Config-section.
  3. Append 1231 and 1233 to the end of the list (that is ",1231,1233").
  4. Save and close the file.
  5. Restart the Sametime services (tell staddin quit, load staddin).
  6. Happily log-in using Notes 8(.0.1) Standard. In my case it took a couple of minutes for the change to be picked up but as always being patient pays off.


Why you as a Notes guy or gal should care about Eclipse 3.4

First off this is quite a geeky post I suppose but bear with me - there's a nice screenshot at the bottom of the post... :-)


Tags : ,