<< January 2010 | Home | March 2010 >>

Lotus Traveler calendar invites on iPhone caveat

Just after we had our main Domino servers in the office upgraded to 8.5.1 FP1 I looked into doing to Lotus Traveler configuration updates required to be able to process calendar invites on the iPhone. I did the changes, restarted Lotus Traveler but were unable to see invites on my phone. I messed a little around with it but with no success. Today however I heard other iPhone-enabled colleagues mention that they processed invites on their iPhones. WTF!!

Tonight it hit me why. I have been using the Notices mini-view in my Inbox to show calendar invites for easy processing. Having invites show up in the mini-view apparently blocks the invites from reaching my iPhone because after disabling the use of the mini-view in the mail preferences and sending an invite from my private e-mail/calendar system the invite appeared right away on my iPhone. So there it is - problem solved.

Automatically redirect iPhone users to the mobile UI of Lotus Connections

If you're running Lotus Connections 2.5 and you installed the mobile interface you really should redirect your mobile users to this interface and not have them remember the URL to the mobile interface. By default users need to specify http://<hostname>/mobile to access the mobile interface (see bleedyellow.com/mobile if you want to see what it looks like) which is not what you want. You want it to happen automatically. To accomplish this simply use mod_rewrite to automatically redirect the user based on the User-Agent of the accessing browser (much like setting the default feature).

To add a mod_rewrite rule to automatically redirect iPhone users add the following to your httpd.conf and restart IHS. Doing the same for Nokia S60 users should be equally easy if you know the User-Agent for those phones.

RewriteCond %{HTTP_USER_AGENT} "^Mozilla/[0-9]\.[0-9] \(iPhone.*"
RewriteRule  ^/?$ /mobile [R,L]

Easy isn't it?

Remember Lotusphere Comes To You next week in Copenhagen and Århus

If you missed Lotusphere 2010 then do remember that Lotusphere Comes To You next week in Copenhagen and Århus. Among others I'll be no stage at both events to talk about Lotus Connections and how you may get started easily whether that be with an on-premise solution (Lotus Connections) or a hosted solution (LotusLive Engage/LotusLive Connections). You may sign up for LCTY 2010 here.

I'm a certified Lotus Connections 2.5 Administrator

It's official - I'm certified! How cool is that?! The certification exam was quite hard and the questions range from Websphere Application Server administration questions to administering the individual features to configuring security to deployment scenarios. There's a huge deal of things you need to know and the infocenter was my friend throughout preparing for the exam. Don't bother taking the exam if you haven't worked with the product for a while and put in the hours preparing.

I must admit that this is my first ever Lotus certification as I've never had the need before. While studying for this exam my view on certification has changed a bit. Before taking this exam I heard all the stories about certification and how it was about know exact UI wording etc. This exam was nothing like that. The question was very valid and made you think quite a lot and base your answer in your knowledge of the product. An exam as it should be. Another benefit is that I've read about areas of the product I otherwise wouldn't have and I've discovered quite some stuff that I need to implement or configure at customers. All very nice.

Single-sign-on with Lotus Connections for Windows users

Just stumbled over this new article on the developerWorks site on how to configure SPNEGO for Lotus Connections to allow SSO for Windows users. Should be an interesting read. For more information see Configuring single sign-on for IBM Lotus Connections in the Kerberos environment on the site.

Trying a move to the Mac

This week I'll be trying a move to the Mac as Per Henrik Lausten (@perlausten) was kind enough to lend me his Macbook Pro until Thursday. I've had it for a couple of hours now and it's already becoming easier. One of my pet pives is keyboard navigation which is something I really want and need. I'm a keyboard kind of guy so being able to navigate applications using the keyboard is going to one of the deciding factors. Finding links like this sure makes it easier but the judge is still out.

I'll post more as I progress through the week.

Tags :

Managing my calendar workwise and personally - this is how I'm trying to do it

So I have an iPhone and work with calendars on a daily basis so I'm constantly looking for new ways to work with them. For a long time I have been pondering the separation of calendar usage between my work and private life. Ideally they should be separate but viewable together. Up to now I haven't really found a solution that worked and have been using my Notes calendar for everything using it both from my Notes client and my portable device (aka cellphone). The main problem with that was that there was no easy way to allow my wife, family or others to peek into my calendar on an adhoc basis. I know there's stuff like Tungle but lets face it - it's still in beta and it will be some time before it's Wife certified... :-)

As of yesterday I think I have the solution though.

Part of Notes 8 is how easy it is to federate calendars into the product calendar by adding either iCal, Google calendars or the like into the calendar using calendar overlays (much has been written about that so Google away if you need more info). I have been perfectly happy with my current setup (using my Notes calendar and Lotus Traveler for everything) up to now but using an iPhone finally pushed me over the edge. The reason? Well there is no way to mark an appointment on the iPhone as private. It does however have the concept of multiple calendars. Whether that's a shortcoming in the iPhone I'll leave up to you.

However much I like my colleagues I don't think they necessarily should have the possibility to see, or be burdened with, what I'm doing on my own time so not being able to mark appointments from the iPhone as private has been an issue for me. When I created appointments on my iPhone (during my weekly calendar sync with my paper-calendar using wife) I had to remember to edit the appointments afterwards in Notes and set the private flag which was cumbersome and a hassle. Plus forgetting it made me ripe for ridicule from my colleagues when they saw what my wife made me agree to!

Yesterday I decided to do something about it and investigated it again. I moved my private calendar to my Google calendar after discussing it on Twitter with members of the community incl. Per Henrik Lausten (who is also my new McDaddy and Mac pusher). Now I'm using CalDAV to federate/sync my Google calendar to my iPhone. My Notes calendar is already there using Lotus Traveler and appointments are easily distinguishable as work appointments are in red and private appointments are in blue. In my Notes calendar I simply use a calendar overlay to display my private calendar alongside my work calendar using the same color scheme. My private calendar is even available offline by checking a box - does it get any sweeter? For me it's as near to perfect as seems possible now.

I want to thank the community on Twitter for pointing me in the right direction. If you want to see how to configure CalDAV on your iPhone I suggest 'How to Sync Google Calendar With iPhone Calendar' as an easy way to get started. Happy Friday!

Doing Java plugins? Then you need to checkout this OpenNTF.org project

Props goes out to the Java UI Team (Ryan Baxter, Adam Geheb, Stanton Sievers) for publishing the Java UI API Exerciser plugin showing how to use the Java UI API for the Notes client. If you're doing Java plugins for the Notes client you definitely want to check it out. Installation is also very easy because it's signed and as such also serves as a showcase on how plugin deployment works when it's fully transparent.

More info can be found on the catalog entry.

Notes 8 Utility plugins

From time to time I come across some functionality I think should be part of the Notes client but isn't. If it's really a big pain point for me and I can implement it myself I do so as a Notes plugin. I've implemented a number of such plugins over time but few have ever been published. Since I get requests for similar functionality from time to time I decided to create a page and publish the functionality there as I find the time and dig out the code and polish it of. I envision the list growing over time so do come back! :-)

If you got suggestions let me know.

Further reading: Notes 8 Utilities

I'll be speaking at Lotusphere Comes To You (LCTY) 2010 - Denmark

I'll be speaking at Lotusphere Comes To You (LCTY) 2010 in Denmark - both at the event in Lyngby (2 March) and the one in Århus (4 March). IBM Denmark already blogged about the event where Chris Crummey will be presenting the keynote.

Actually showing the password prompt when developing Java for Notes

If you're developing console applications in Java that access Notes resources and you're testing them in Eclipse you have experienced the following. You run your application to test it from Eclipse. It accesses a Notes resource and you haven't granted 3rd party applications access in the Security settings so it causes Notes to ask you for the password - only the Console view doesn't accept input... Bummer! :-(

Fortunately there's a solution to this which I'll show below.

Disclaimer: I can in no way take credit for this tip as I didn't discover it. The credit goes to Karsten Lehmann who posted it in the Design Partner forum.

The solution is not to make the password prompt go to the Console view but pop up a password entry dialog instead. The way to do this is to initialize the Swing UI framework before running your application as I do below (see code in bold).

import javax.swing.SwingUtilities;
import lotus.domino.Session;
import lotus.domino.Database;
import lotus.domino.DocumentCollection;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;

public class Main {

  public static void main(String[] args) {
    try {
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {}
      });
      
      NotesThread.sinitThread();
      s s = NotesFactory.creates();
      System.out.println("Name: " + s.getUserName());
      Database db = s.getDatabase("server1/Example", "names.nsf");
      DocumentCollection dc = db.getAllDocuments();
      System.out.println("Docs: " + dc.getCount());
      
    } catch (Throwable t) {
      t.printStackTrace();
    } finally {
      NotesThread.stermThread();
    }
  }
}

Developing Java plugins and applications for Notes on 64 bit

I just upgraded my Thinkpad from Windows Vista 32 bit to Windows 7 64 bit and besides being amazed at the speed improvements (thanks to moving of Windows Vista) I needed to think about how I develop Java for Notes in general. When moving to 64 bits there are some things you need to consider if, and only if, you install the 64 bit version of the Java Development Kit (JDK) as I did. You need to consider stuff for two reasons which I'll address in turn.

Please note: This blog post will focus on 64 bits Windows 7 as that's what I'm running now but I suspect it will apply to other Notes platforms such as Windows Vista, Linux and Mac as well. I'm not using Lotus Expeditor Toolkit so I can't confirm the following is but a wise man told me that XPD Toolkit doesn't support 64 bit JDK's so in that case you need this as well as my "Configure Eclipse 3.4 for Notes 8.5.1"-guide as well.

Notes is a 32 bit application

Say you install a 64 bit JDK and try to run an application that access Notes using local address (NRPC; a client or server installed on the same machine) such as the following:

import lotus.domino.Session;
import lotus.domino.Database;
import lotus.domino.DocumentCollection;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;

public class Main {
  public static void main(String[] args) {
      NotesThread.sinitThread();
      Session s = NotesFactory.createSession();
      System.out.println("Name: " + s.getUserName());
      Database db = s.getDatabase("server1/Example", "names.nsf");
      DocumentCollection dc = db.getAllDocuments();
      System.out.println("Docs: " + dc.getCount());
      
    } catch (Throwable t) {
      t.printStackTrace();
    } finally {
      NotesThread.stermThread();
    }
  }
}
The code will compile fine but when you run it you'll see a message like the following (plus a stacktrace):
java.lang.UnsatisfiedLinkError: C:\Notes8\nlsxbe.dll: 
   Can't load IA 32-bit .dll on a AMD 64-bit platform
The problem is, as the message explains, that you cannot load a 32 bit DLL (remember Notes is a 32 bit application) into a 64 bit Java Virtual Machine (JVM). The solution is to install a 32 bit JDK instead and run the application using this JDK. Remember that it is perfectly valid and possible to install multiple JDK's on a single machine and it fact that's what I'm doing.

Developing plugins for Notes 8+

Developing plugins for Notes 8+ on 64 bit Windows is also somewhat different from doing it on a 32 bit Windows system. Of course you need Eclipse but here's the first difference - you need to use a 64 bit version of Eclipse if you're using a 64 bit JDK. The reason is that Eclipse uses SWT (Standard Widget Toolkit) for the user interface widgets. The reason SWT looks so nice on any supported platform is because it wraps the native, C-code, platform widgets. So remember that and grab a 64 bit Eclipse. Once that's installed and working with your 64 bit JDK configure Eclipse as you normally would but with a small difference that will cause your code not to compile (my Eclipse complained about not be able to resolve org.eclipse.swt.widgets.Shell).

As you may know, you specify the bundles you depend on when developing your plugin and in turn you also specify which environment you run in. This is how Eclipse knows which versions to the bundles to put on the class path but since you're running 64 bit Windows and Notes is 32 bits it will be a problem. The fix is however very easy to implement and only means tweaking the target platform setup to explicitly set the architecture you're running on to "x86" and not "x86_64" which is the default if you're on a 64 bit JVM. Where to set this differs a little between Eclipse 3.4 and Eclipse 3.5 but the concept is the same.

  1. Open the target platform setup
  2. Edit the "Environment" settings
  3. Set the architecture to "x86"
Once this is done the workspace will be rebuilt and everything should work just fine. Mine did anyway... :-)

Back to our standalone Java application

If you need to run a Java application that accesses Notes locally from within an Eclipse instance (lets face it - who writes Java code without an IDE these days?) you also need to use a 32 bit JVM although you very well may be running 64 bit Eclipse in a 64 bit JVM. The JVM used to execute an application from within Eclipse is the JVM you setup in the build path. To set it simply right-click the project, choose Build Path -< Configure Build Path... and replace/edit the JVM library used.

Conclusion

I hope the above is clear - if not let me know using the comment system. I'll soon be blogging about using Eclipse 3.5 for your Eclipse development instead of the current version 3.4. Stay tuned.