Author: lekkim
TwitNotes – version 1.0.3 released
It’s been a while since version 1.0.2 of the TwitNotes plugin was released but the new version 1.0.3 is here now. All good things come to those who wait! ๐ Installation instructions can be found here and update instructions can be found here.
The new version has a lot of new functionality that should make the plugin easier and more pleasant to use. The most noticeable new feature is probably that URL links are clickable and that you may now send direct tweets to other Twitters. This is however just the tip of the iceberg. A lot of code has been added due to the fact that some of the UI is custom painted to work around certain platform limitations. For a complete list of changes see below.
After you install version 1.0.3 from the update site you should see something like the below screenshot. Comments as always to the blog or by e-mail.
Additions
- The message author name is now clickable to allow you to filter the list to this author
- Twitter names in messages (e.g. @lekkim) are now recognized and clickable to filter the list of messages to messages by that user
- Twitter names are right-clickable so you can
- Start a new reply message to that user (start a new message with @<authorname>)
- Start a new direct message to that user
- Copy the name to the clipboard
- URL links in messages are now clickable and will open in the default browser
- URL links are right-clickable and can be copied to the clipboard
- Hover text shown when hovering over clickable link
- Added action in part menu to go with the above to reset the author filter
- URL’s sent through TwitNotes are automatically converted to TinyUrls using tinyurl.com
- Right-click option to copy entire message to clipboard
- Added direct message support to followers by adding “Direct!” button and drop-down with follow names
- Added API for thirdparty contributions to detect clickable links and associated actions
Fixes/changes
- Author images where image name has funky characters are fetched successfully
- Submit area providers are now encapsulated in their own Composite to avoid their layout to affect the greater plugin layout
- Tweet! button moved due to support for direct messages
- Renamed “Refresh data” action in the part menu to “Update”
developerWorks: Plug-in development 101
Are you ready to get going on development of plug-ins for the Notes 8 client (Eclipse)? If you are then look no further than this series of articles on developerWorks: Plug-in development 101. It’s a bit sad that it isn’t Notes 8 specific but hey it’s in the Open Source zone but even though you get the basics of the necessary steps for creating plug-ins.
Presentations from Dannotes
So I did both my sessions at Dannotes yesterday and then went very well. The sessions were back to back which was a little exhausting but I managed. My first session was on the business card system in Sametime from a developers point of view and the second was on composite applications. Only a minor Notes UI screw-up in the latter session when adding components to my composite application using the Composite Application Editor (CAE). Good thing I rehearsed the demos so I had the Notes URL’s cached in the dropdown.
I would share the presentations I used. The presentations are in Danish so they may of limited used to non-Danish speakers… ๐
Files
Quote of the day
“…the stuff you don’t know, you don’t know, is important…”
TwitNotes – update on 1.0.3 progress
Who said a long off-line commute isn’t productive. I have been adding support for clickable links in the UI so that web-links and links to other Twitteres will be recognized in the UI. Links to other Twitteres will also be recognized within the body of the tweet as well. Presently the click-action for web links is to open the link in the default browser and the action for clicking a Twittere, is to filter the UI to posts by that user (I have added an action in the part menu to reset any filter that has been added). Please provide input on this behavior if you have opinions about this.
I need to finalize the API for this before releasing but a 1.0.3 release should be right around the corner.

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…

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)