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.
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.
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!
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.
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.
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:
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:
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".
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):
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.
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.
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:
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:
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.
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.
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.
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.
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.