Signing of from 2009 – looking back at a great year

2009 is drawing to a close and in less than 10 hours I’ll be in my tuxedo and drinking champagne. What a year from a personal and a professional perspective.

On the personal front the highlight of 2009, by far, was on 22 August where I got married to my lovely wife. 4 months into our marriage we’re having a blast. Not much have changed in our relationship which I take as a good thing. I’m looking forward to January and once again bringing her along for Lotusphere. I think she’s growing used to staying in the Swan and the fact that return guests get some good deals at the spa… 🙂 Apparently some sun and warm weather (crossing my fingers) in January doesn’t hurt either.

On the professional front it’s been a year of both many changes and new challenges. As previously the year really got kicked of at Lotusphere and it was very nice seeing all of my “collegues” again and hooking up. I’ll remember BALD, being part of the blogger program in those yellow bean bags, frost in Florida in January and the associated state-wide “panic”, giving a session with good reviews though having a high fever and missing 1,5 days due to sickness as the highlights of my Lotusphere 2009. Of couse being in the US for the inauguration also made it special. Being “on location” in Florida bar for Superbowl was also a very nice experience.

The rest of the year has been filled with a lot of consulting on Notes and Domino, Lotus Connections and other related Lotus products. It’s been very nice being able to share experience and consult on a wide variety of subjects. 2009 was also the year where I started doing a lot of teaching and we started doing Notes 8.5 Application Development workshops. I’ve been giving the workshop a number of times across Denmark during 2009 and it has always been a good experience. Of course some workshops has been better than others but I have always felt that I’ve given the attendees what they signed up for and all attendees have gone home amazed at the potential of the new Notes releases. If only more would take the time to learn Java – that’s still the Achilles Heel of IBM Lotus

Towards the end of 2009 I have also assumed the day to day management of some of the developers in the company. It’s been a big change from billing out 40-50 hours a week to mostly managing and planning. It’s also meant spending far more hours in the office which has been weird. I set a personal record this winter by having lunch in the office 12 days in a row. That’s a first in my 2+ years at IntraVision. The change of role has been fun but also a big change and challenge and something that I’m finding myself enjoying very much. I’m looking forward to the new year and getting more into that role.

In 2009 I have also enjoyed still being part of the Design Partner programme with IBM. It’s fun, educational and inspiring to be part of these conference calls and getting the inside story. The calls are something I look forward to attending and the debate is good and lively. Of course it’s also frustrating sometimes when IBM Lotus do something that we design partners just don’t get but that’s part of the deal. All in all I still find it very positive that IBM Lotus listens and lotusknows it makes a difference! 🙂

On the whole lotusknows thing I find it very positive that IBM Lotus finally got the message and starting being offensive. We still haven’t seen much, if any, of it here in Denmark but hopefully it’s coming at some point. There’s still a big need for air cover.

In November this blog turned 5 years and it was a milestone that were reached. As I wrote on that day, this blog is something I cannot imagine not having today. The blog and way it connects me with the community is amazing. Of course more and more communication moves from blogs to Twitter these days but it’s all good.

2009 was also the year where I finally got to finish LotusScript.doc version 2. It’s been a long time coming and it was very nice finally to get the new version out there. Expect interesting stuff to be coming your way in 2009 when I start leveraging the LotusScript.doc Java API in other contexts.

In three months TwitNotes turns 2 years – wow! Has it already been that long? Besides, of course, being my Twitter client of choice it has also served as a very good example in all of my speaking gigs as one of those new applications that are possible in the “new” Notes client. TwitNotes is an application that builds on the Notes foundation but reads and writes data in the cloud. Showing it as an example always raises some eyebrows until people “get it”. I used it as an example for the big IBM Software Day event here in Denmark this fall.

As 2009 draws to a close I’m doing another sidebar application that I hope will be useful for many of you out there although I’m mainly doing it for myself to increase my productivity. I hope to be able to reveal it by Lotusphere. It’s again a cloud-based application that integrates into the Notes experience to showcase just what’s possible with the “new” platform. Stay tuned…

Before I write too much I’ll wrap it up by wishing you all a very happy new year – see you on the other side. For those of you going to Lotusphere – see you there!

Bye, bye 2009…

LotusLive.com going commercial – what will that mean for Lotusphere presentations?

So I just received an e-mail from LotusLive.com about the beta moving on to be a 45 day trial. What will that mean? Well for me only that I will no longer use LotusLive.com which isn’t too much of a loss for me. The main issue is that I’ll no longer have access to the Lotusphere 2009 presentations which is a shame. I thought the beauty of having the presentations there was that they would remain there… Unfortunately not.

Want to join me in building a better Notes Java API?

One of the things that are the hardest for Notes Java developers transitioning to developing plug-ins for Notes 8 is handling threading. All access to the Notes backend classes must occur on the Notes thread using NotesJob or a thread statically initialized using NotesThread.sinitThread. This is cumbersome and prone to runtime exceptions making the development process slow and agonizing. Also most interaction is started from the UI thread making the need for handling the Notes thread all too common.

A far better approach, IMHO, would be to not require the programmer to handle the threading all together as there are solutions for this readily available. The solution isn’t hard to do.

In an effort to prove this point I sat down for an hour or so at Lotusphere (I know I’m behind in blogging this) and cooked up a wrapper API that wraps the Notes API and provides access to the Notes backend classes without the need to worry about threading. The Notes API is made up of interfaces which makes it even easier.

The whole concept with the wrapper is that the user can write code like this in an event handler

public void widgetSelected(SelectionEvent event) {
  try {
    // get value
    Session session = NotesPlatform.getInstance().getSession();
    Database db = session.getDatabase(null, "names.nsf");
    View v = db.getView("($People)");
    ViewEntryCollection vec = v.getAllEntries();

    // set value in label
    lblCount.setText("Found " + vec.getCount() + " contacts...");

    // return from event
    return;

  } catch (Exception e) {
    StringWriter sw = new StringWriter();
    e.printStackTrace(new PrintWriter(sw));
    txtException.setText(sw.toString());
  }
}

instead of doing stuff like this which includes two extra jobs and having to make sure that no Notes API access is done from the UI thread:

public void widgetSelected(SelectionEvent event) {
  // kick of Notes job to get data
  new NotesJob("Some job") {
    public IStatus runInNotesThread(ProgressMonitor m)
                               throws NotesException {
      // get value
      Session session = NotesPlatform.getInstance().getSession();
      Database db = session.getDatabase(null, "names.nsf");
      View v = db.getView("($People)");
      ViewEntryCollection vec = v.getAllEntries();

      // get count into final variable
      final int count = vec.getCount();

      // kick of new UI job to update UI
      new UIJob("Update UI") {
        public IStatus runInUIThread(IProgressMonitor monitor) {
          // set value in label
          lblCount.setText("Found " + count + " contacts...");
          return Status.OK_STATUS;
         }
      }.schedule();

      // return
      return Status.OK_STATUS;
    }
  }.schedule();

  // return
  return;
}

Besides being shorter code-wise the former code is also much easier to read and understand. The performance of the former is somewhat slower than the latter (“native” API) due to context switching but the fact that I could do this is 60 minutes proves that something can and should be done to make plug-in development easier. Imagine what could be done in more time. Tweaking for performance should be possible and easy enough. Also using this wrapper API could be a choice the developer makes – ease of use over performance… It could be a call I as a developer was willing to make.

This could actually be a good idea for a project on OpenNTF. If anyone is interested to join up on the project let me know – I’ll be interested in joining forces with someone.

Tomorrow I’ll blog about how this is done and just how easy it is.

Upgraded to Notes 8.5 GOLD

With Lotusphere 2009 and my session done I upgraded to Notes 8.5 yesterday from the beta version I have been using so far. Upgrade was uneventful and my Notes client is working fine today and my demos today went just fine. Only issue I have is launching Notes from Eclipse. When upgrading from previous beta versions I just had to update the JVM config, the install_id and the rcp_version in my Eclipse launch configuration but after upgrading to Notes 8.5 GOLD I’m getting strange JAAS errors (Eclipse not being able to locate the NOTES LoginContext configuration). I will have to look into this tomorrow when I’m in the office or simply change my Eclipse configuraion to use the Lotus Expeditor toolkit 6.2 instead of my own configuration.

Lotusphere 2009: A nice session review

Thanks to Andrew Pollack for this one:

This session, delivered by Mikkel Heisterberg — was tailor made for me. I’ve done no plug in development because despite knowing Java and knowing Notes, when it came to plug-in development I didn’t know where to start or what was really feasible. I know the information is out there, but it takes time to go find it and figure it all out. Mikkel put together a session that was absolutely everything I needed to know to start building plug-ins immediately — and not a single thing I didn’t need. This was all signal, no noise and perfectly leveled for someone in my position. Another developer I talked to on the way out called it “three months of head banging frustration skipped over as a result of reading a dozen slides.”