The Latest Blog
send me a comment

SnappFiles 1.0.3 ECM Support (Thursday, Mar 11)
[ permalink ] [ e-mail me ] [ ]

SnappFiles -- the Lotus Quickr file viewer for iPhone -- has now been updated to version 1.0.3 on the App Store. Features and improvements since the original 1.0 release include:

While I personally like the download counter the best (so I know if I'm almost done with a large file download on a slow network, or if I should give up), I think the ECM support is probably the most interesting.

Here's what IBM has done. For the Content Manager and FileNet P8 products, IBM has created "Services for Lotus Quickr" components that make these ECM systems accessible as repositories for Quickr 8.1.1. Because of the way they've implemented the services, these components ALSO make CM8 and FileNet accessible to lightweight end-user clients like the Quickr Connectors and SnappFiles, even if Quickr is not the front-end. You can talk directly to the "Services for Lotus Quickr" layer and access the ECM system.

As announced at Lotusphere, there is also an equivalent connector for Alfresco's open-source ECM. Works the same way: install the services and access Alfresco directly from the Connectors. Or, now, your iPhone.

If you've already installed SnappFiles, go the App Store and grab your update; otherwise you can just download it fresh and start using it. Either way it's still free.

Cleaning The Coffee Pot (Monday, Mar 8)
[ permalink ] [ e-mail me ] [ ]

It may come as a surprise to some of you that my coffee pot at home is not always sparkling clean. I have a Cuisinart 12-cup coffee maker that brews directly into a stainless steel carafe. This very conveniently produces a pot of coffee that stays warm almost all morning without getting "burned" by a heating element underneath the pot. It is also almost impossible to clean because the neck of the carafe is very narrow and the stainless steel isn't as stainless as one might hope.

So, to clean this thing, we've tried all sorts of soap-and-scrubber methods, vinegar and baking soda solutions, and my wife even took out the steamer this past weekend to blast the coffee stains off the inside of the pot. Still stained.

Finally, I did what I should have done in the first place: search the Internet. The answer was amazingly simple:

Voila, a sparkling clean coffee pot, no scrubbing required.

One-Day iPhone Developer Training In April (Friday, Mar 5)
[ permalink ] [ e-mail me ] [ ]

In case you missed Rob Novak's announcement, we (at SNAPPS) are offering a one-day iPhone developer training class on April 16th. It's limited to only 15 people, it's very reasonably priced, and the details and registration link are at http://iphone.snapps.com.

As a summary (i.e. -- something you can copy-and-paste for your boss), here are the salient details:

Also, I should have my iPad by then, so we'll talk about that too. ;-)

As Rob mentioned last week, people have been asking for a while if SNAPPS offers focused hands-on training, and we finally decided after Lotusphere this year to clear some time out of the project schedules and give it a try.

Earlier that same week, Viktor, Troy, and Jerald will also be heading up a three-day workshop-style Lotus Quickr Development Bootcamp to give developers a solid understanding of how Lotus Quickr works and how to write (and maintain) Quickr applications. If you're evaluating Lotus Quickr or if you need to understand how it works, this workshop is a fantastic place to get a solid technical overview. As of today there are only 9 seats left for that one, and the early pricing for both ends next Monday. So go bug the boss!

SnTT: Multi-Platform File Launch With LotusScript (Thursday, Mar 4)
[ permalink ] [ e-mail me ] [ ]

There's all sorts of interesting code scattered throughout The Great Code Giveaway database from this year's Lotusphere. Here's one snippet that's useful for people who do a lot of programming for the Lotus Notes client: multi-platform (Windows/Mac/Linux) code to launch a file using the user's default program for opening that file type:

Option Public
Option Explicit
Uselsx "*javacon"

Sub Initialize
	Dim workspace As New NotesUIWorkspace
	Dim response As Variant
	Dim fileName As String
	
	response = workspace.SaveFileDialog(False, _
	"File name", "All Files|*.*", "", "")
	If Not Isempty (response) Then
		fileName = response(0)
		Dim jSession As JavaSession
		Dim jClass As JavaClass
		Dim jMethod As JavaMethod
		Set jSession = New JavaSession()
		Set jClass = jSession.GetClass("org/eclipse/swt/program/Program")
		Set jMethod = jClass.GetMethod("launch","(Ljava/lang/String;)Z")
		Call jMethod.Invoke(, fileName)
	End If
End Sub

I realize that there are Windows API calls to do the same thing but, you know, I have a Mac, and no matter how hard I try I can't get those pesky Windows API calls to work on my Mac.

I've tested this (lightly) on Notes 8 and 8.5. No idea if it works on pre-8 versions of the client -- LS2J functionality has been available since v6.5 but I don't know how long org.eclipse.swt.program.Program has been there.

Installing Domino 8.5.1 On CentOS 4.x (Friday, Feb 12)
[ permalink ] [ e-mail me ] [ ]

In my spare time this week, I've been building a new Domino 8.5.1 test server on a Linux VM. Yes, I know I have an exciting and enviable personal life.

For reasons that would be too boring to explain, I was installing Domino on a CentOS 4.x server rather than a 5.x server (CentOS 5.x being a pseudo-supported version, since RHEL 5.x is supported). This naturally caused problems. For the sake of Google searchers who might have some of the same problems I did, I documented the issues I had installing Domino on Linux, including a happy ending in which the installation was successful.

About SnappFiles: Quickr On Your iPhone (Tuesday, Feb 2)
[ permalink ] [ e-mail me ] [ ]

SnappFiles: Quickr On Your iPhone Late last week, we got notice that my pet iPhone project (SnappFiles) got approved for download on the Apple App Store. Yay! We got hundreds of downloads in the first 48 hours and some great feedback so far.

What is this SnappFiles thing? It's a way of accessing your Lotus Quickr files from an iPhone or iPod Touch (or, in a few months, your new iPad). Works with Quickr 8.0 and higher, both the Domino and the Websphere versions. It uses the native iPhone viewers to display files, so any file format the iPhone can natively view can be used to open a Quickr file.

For a general description of what the app does, Rob Novak -- owner and intergalactic leader of SNAPPS, aka "my boss" -- did an excellent overview on the day it was released, and Paul Mooney has a nice writeup with lots of screenshots. I also put a short demo video up on YouTube, if you're a visual learner:

A few common questions we've received in the past several days:

Links To My Lotusphere Session Materials (Sunday, Jan 31)
[ permalink ] [ e-mail me ] [ ]

Sorry it took so long for me to post my Lotusphere session files. Slides and other related materials for the sessions are available for download at the SNAPPS download site. Just click on the "Lotusphere 2010" link in the left-hand navigator and go from there. They are also linked to from the Presentations page on this site.

One of the things that took a really long time was getting the 11 minute video of how to create a native iPhone app to an acceptably quality for viewing. The video I played during the session was over 3 GB in size (super high-def to get the best quality on the big screen in the session room). I obviously couldn't and didn't want to upload such a giant video to Vimeo, partially because it was too darn big, and partially because Vimeo was going to scale it down after it was uploaded anyway, so you automatically lose quality. Here are the settings I ended up using:

Video output settings for upload to Vimeo

That produced a 231 MB file, and it looked good enough for me after upload and processing. I'm actually not crazy about the audio quality (too much sibilance, I also have several vocal tics that would have been good to edit out), but after messing with the video settings and waiting 2 hours for each new output file and many more hours for each upload, I finally just called it "done".

Lotusphere Blur and About My Sessions (Wednesday, Jan 20)
[ permalink ] [ e-mail me ] [ ]

As with every year, this seems like the busiest Lotusphere ever. I've barely slept and I haven't... stopped... moving... All good stuff, but a few side effects of that:

First, I'm going to do a writeup of the conference after it's over. There have been some interesting announcements this week -- I'm sure you've read about them on many of the other blogs on PlanetLotus, so it's not like you're missing the whole confence just 'cause I'm not blogging it. However, I was lucky enough to be in the blogger program again this year, which has given me some access to people and information that might make for a few interesting comments when I get to do my writeup.

Second, me and Bruce have recorded two Taking Notes Podcasts already during the conference, and we'll be doing at least one more before we go home. Take a listen to those to hear some of my current thoughts on the conference.

Third, I presented my iPhone development session this morning and there are a couple things to mention as far as that goes:

Finally, speaking of sessions, here are the two sessions I'm giving tomorrow (Thursday):

Disney Boardwalk Map (Monday, Jan 11)
[ permalink ] [ e-mail me ] [ ]

General Lotusphere reference: here's a nice map of the Disney Boardwalk, with relative positions of the Swan, the Dolphin, and the Yacht & Beach Club (click on the drawing for a larger version).

Disney Boardwalk Map

I think there's a shortcut between Y&B and Dolphin if you go over the parking lot and through the woods, but that's not clear on this picture. You can probably figure it out with a Google satellite map of the Dolphin though.

Domino DXL and Agent Restrictions (Wednesday, Dec 23)
[ permalink ] [ e-mail me ] [ ]

Consider the following snippet of Java code, which loads the DXL of a Lotus Notes document into an XML DOM parser for processing:

Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
lotus.domino.Document doc = db.getAllDocuments().getFirstDocument();

DxlExporter exporter = session.createDxlExporter();
exporter.setOutputDOCTYPE(false);    // avoid restricted access errors
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
org.w3c.dom.Document domDoc = factory.newDocumentBuilder().parse(
    new ByteArrayInputStream( exporter.exportDxl(doc).getBytes() ));
doc.recycle();

When you run this on a Domino server in an agent, the "exporter.setOutputDOCTYPE(false);" line is important. If you do not include that line, your agent will need to have a runtime security level of "2. Allow restricted operations" to avoid getting java.lang.SecurityException and lotus.notes.AgentSecurityManager errors -- and the ID it runs under will need to have unrestricted access on the server. If you do include that line, the agent can run under the standard runtime security of "no restricted operations".

That's my experience on a Domino 8.5.1 server anyway. If this lesson has been covered already, I either didn't see it or had to learn it for myself.

Misbehaving Dojo Dialog (Thursday, Nov 19)
[ permalink ] [ e-mail me ] [ ]

I was adding some functionality to a web form the other day and ran across some unexpected Dojo behavior. For simplicity's sake, let's say that this is the form I was working with:

Notes form and HTML, before Dojo dialog

That's the Notes form and the resulting HTML code. I decided to put one of the fields in a Dojo dialog, just to fancy it up a bit (there was actually a better reason than "fancy it up", but that's a good reason for my example here). To do this, I added a little HTML around the field like so:

Notes form and HTML, after Dojo dialog

All was good, you could click a button to display a dialog and enter information into the field, and the world kept spinning 'round. The only problem was, when the web form was actually submitted, there was no data in the field that's in the dialog. If I didn't use a Dojo dialog the field got submitted fine; if the Dojo dialog div surrounds the field, the field data was empty. Weird.

Looking at the HTML above, it all looks good. There are a few extra tags on the page, but nothing that should clear out the field data or anything. I even wrote some JavaScript to make sure that the field data was there after the dialog closed (just in case Dojo misplaced it somehow). Still looked good. Then I looked a little closer with Firebug:

Notes form and HTML, seen using Firebug

Ah ha! Look at where the form is, and look at where Dojo moved the dialog div. The div is now beneath the form. So the field isn't inside the Form block at all now. So when you submit the form, the field doesn't get submitted because it's no longer a part of the form. If that doesn't make sense, consider the fact that there can be multiple forms on a page, each one submitting only its own fields.

My answer ended up being that I added code to copy the dialog field text to a hidden field that was still inside the form, so the field data still got submitted. There are probably other ways to work around this too. Ultimately, it just showed me that it's essentially impossible to debug web forms without Firebug these days.

Oh, and the same thing will happen if you do this on an XPage too. Dojo is an equal opportunity HTML rearranger.

UPDATE: make sure to check the comments for some other good ways to work around this problem.

Sign Up For The Teamstudio Spotlight Awards (Wednesday, Nov 11)
[ permalink ] [ e-mail me ] [ ]

You have less than a month to sign up for the 2010 Teamstudio Spotlight Awards.

2010 Teamstudio Spotlight Awards

This is the third year they're doing the awards, and it's simple to enter. Here's the process:

If you'd like an example of a winning application, Theo Heselmans won last year with a very polished Domino web survey app.

Also, even if you get to the demo stage, you will NOT be asked for source code or intellectual property related to the application, so don't worry about that. Teamstudio is just looking for companies that do interesting things with Notes/Domino because those are people who can really use their tools. And if your company is "shy" about being named in a contest like this, that's okay too (notice that the second place winner in last year's press release requested anonymity).

FULL DISCLOSURE: I am one of the judges for the contest.

Sample Database from IAMLUG/UKLUG (Monday, Oct 26)
[ permalink ] [ e-mail me ] [ ]

At IamLUG and UKLUG, I did a session called "Free Your Data" that discussed various methods of importing and exporting data to/from Lotus Notes. Here is the sample database from that session:

  • FreeYourData.zip
  • It's got Java and LotusScript agents with examples of using CSV, ODBC, XML, JSON, OLE, and Web Services to import and export data. There is also a page with an example of using the Bluff JavaScript graphing library.

    LS2J Example Database Update (Friday, Oct 23)
    [ permalink ] [ e-mail me ] [ ]

    Way back in 2004, I posted an LS2J example database to demonstrate how to call Java from LotusScript using the LS2J technology that was new [at the time] in Lotus Notes 6.

    I've recently had a few e-mail questions regarding that code, so after 5 years of letting that database gather dust I made some updates to the code to fix the following problems:

    If you're interested, download the database and take a look.

    Fletcher Capstan Expanding Tables (Wednesday, Oct 21)
    [ permalink ] [ e-mail me ] [ ]

    This is just incredibly cool:

    Fletcher Capstan Expanding Table

    It's a round table that expands in a crazy, geometric way when it's rotated around. Here's a video:

    It's called a Fletcher Capstan Table, custom built to order by DB Fletcher Design. No prices. If you have to ask, you can't afford it.