Category Archives: SNAPPS

It’s Back. Be there.

In a reprisal of the memorable “Great Code Giveaway” Lotusphere sessions (yes, it was always called Lotusphere for its 10-year run), I’ll be back this Wednesday Feb 22 at 2PM in Moscone West room 2006 with Karl-Henry Martinsson. Yes, another Swede. Like me. I’ll explain.

Hope to see you there!

teaser GCG 2017.JPG

Someone was missing in Orlando

So we had this insurance client 13 years ago. The whole SNAPPS gang visited their offices in Minnesota a couple times, me a few more times as necessary, and we did some great work for them for three or four years on Sametime integration and QuickPlace before they were acquired. Even after the main contacts had moved on, we kept in touch and saw them every year in Orlando.

We were introduced through my Lotusphere sessions. At every single “Great Code Giveaway”, every solo session, in fact every session one of the other guys gave, the main technical “Lotus” contact from this company would be there. Front row, every time. He must’ve come to 75 of our sessions over the years. This was a guy highly dedicated to learning everything he could to help him at his job. He asked smart questions, took notes, and basically was a fixture at our sessions for all those years. The kind of audience member that made a speaker feel good and even calm you down, knowing you could always look their way. He even came to Collaboration University twice in Chicago, and I think at least one Advisor conference back in the day. When I visited his offices, he’d be sure to take me out for a beer and extol the virtues of wild rice (Minnesota!).

I didn’t see him this year at IBM Connect, but given all the other people I didn’t see for the first time thought nothing of it. I’m sure I would have noticed had I been speaking, he was such a fixture in my audiences.

Today I discovered that my learned colleague, speaker calming element, and go-to audience member passed away last August from a rare cancer. He had been battling it for five years. He was just a couple years older than me, and left behind a wife and three daughters.

There are members of our community who are well-known, outspoken, “Champions”, speakers, authors, and general protagonists and antagonists. And then there are the members of our community who simply work hard for thirty years, don’t speak or write, don’t seek glory or notoriety, but rather spend their energies using, promoting, evangelizing and making better the technology we all love.

Let’s never forget that the latter far outnumber the former. The folks who do the day to day work, training, admin and development in companies, spend their spare time learning, and bring our solutions to the people on the front lines – and don’t get to walk away after a sale or an engagement – they are the real champions.

Rest in Peace, Randy Nelson. I’m pretty sure you have a front row seat.RandyNelson

A solution for Quickr clients who just want to keep working…

keep-calm-and-keep-working-32As mentioned below, IBM Lotus Quickr was discontinued in 2013 and its end of support date is now set at September 30, 2016. Anyone renewing maintenance from this month on will have a decision to make in the near term about whether it’s worth the investment, what is next, and what solution fits your situation(s) as a replacement for the longest-lived web-based document management solution out there. That’s marketing speak for good, but long in the tooth.

Here are my general thoughts on your replacement options. A full analysis is always recommended, of course, before you dive into any of these. Here you go:

  • If you have customization or applications, they will need to be rebuilt in a target system of your choosing. The smoothest path is Domino, but if you’re not a Domino shop it’s time to start planning the development effort.
  • If you’re ready to retire your Quickr places but need the data, SNAPPS has a solution to export places to the file system. (
  • If you are a Connections customer and using Connections Content Manager (CCM), IBM has a migration tool to move Libraries. It takes significant expertise to run and only brings over limited content, but it’s a start.
  • If you are a Connections customer and not using CCM, or would rather use Files and Activities, a custom solution for migration is the way to go. Contact SNAPPS for information.
  • If you are not a Connections customer, or are and don’t like the limitations in CCM, and either do or don’t have Domino, DOCOVA has a new offering for you. DOCOVA is a fully featured document management system with migration paths from Quickr, and even a path to a non-Domino version. This path lets you keep working with your content at a high level of security, customization and robust management. I’ve included their announcement video below for reference. Enjoy!

All good things must come to a late middle: Quickr End of Support Update

QuickrLogoTinyAs prognosticated in a previous post (yay for alliteration!) IBM has announced the withdrawal of support for Quickr:

Effective September 30, 2016, IBM® will withdraw support for the following part numbers licensed under the IBM International Program License Agreement:

Program number Program release name

So, start your clocks (if you hadn’t already in April 2013 when marketing was withdrawn)! A year for hundreds of companies with hundreds of thousands of users to plan and execute on a migration strategy, if you worry about such things as supported software. In some cases (such as regulated companies, SarBox, etc.) you have to, and will have quite a bit of planning ahead. High level, you will have to concern yourself with:

  1. Analysis of your current environment and usage patterns
  2. Quantification of customization, task and calendar patterns, and priority level
  3. Assessment of other in-house document solutions, or extranets if that is your use case
  4. Evaluation of available options from third parties – Microsoft, IBM, DOCOVA, custom
  5. Retirement / attrition planning and communications
  6. Development of a migration plan and communications
  7. Acquisition of licenses for a replacement platform / solution
  8. Technical services for migration of maximum available data
  9. Training and user adoption strategies on the new platform

Just another year in the life of a CIO!

You don’t know what you don’t know. You know?

StethoscopeOne of the most often asked questions about Lotus Quickr in its golden years has been “what do I have?” — meaning, on the server and in the places. This is the case with any self-service platform and has been especially pertinent with Quickr, as IBM has unintentionally made some of its migration requirements quite difficult to get your head around. A basic for-instance: the requirement that all workflows be complete before starting to migrate a place. Super, makes sense. Except that there’s no way to tell this in the product, no “outstanding workflow” view, and no simple way of determining for which places, rooms, and forms workflow is even turned on!

There are a myriad of other “requirements” and a list of things that do and don’t migrate to take into account — if only you could quantify and identify them. If you have 100 places, you likely have 500 or more databases including rooms. So in 500 databases, can you easily identify where you have lists? Active calendars? Tasks? HTML forms? None of these items migrate, so you probably at least want to know where they are in order to interface with the managers of these places to determine how active and important they are. At best, you’d want to produce a list of them, identify which are active within a certain time period, and through the application of a few algorithms be able to classify a Quickr place as a good, moderate, or bad candidate for migration — and then do the same for your archiving strategy.

HTML forms are my next best example. If you have done any customization in the 14 years you’ve been able to, you may have some of these powerful things lying around. They don’t migrate to CCM…or do they? In fact, it’s not impossible. Programmatically, you can convert the content in an HTML form to a simple form, then it can be migrated (assuming there’s attachments involved). The migration of simple forms to CCM is hoky, but it can be done…with some volume limits.

Having spent years making Quickr efficient, lean and mean for large deployments, I have access to SNAPPS tools that slightly modified can tell us just these things. Depending on volume, in fairly rapid fashion I can tell you how ready you are for a CCM migration, how much work there is to do, and estimate the percentage of your Quickr content that will be preserved. It’s part magic tools, part intuition, and part experience, like any in depth analysis.

I mention all this because I’m currently in different stages of this kind of analysis with four Quickr clients, all of whom just don’t quite know what they have. That’s the common factor, and the result of years using a powerful, self-serve, customizable platform like Quickr. In fact for two clients, I’m even running demonstration projects to migrate a single place to CCM in order to show them the results, but in a safe lab environment using LDAP mapping to a lab directory. I’ll be doing a lot of those next year as more companies are figuring out what they want to do with Quickr. And, I intend to post some of the results here as I go. For now, it’s the larger environments that are starting to get concerned with what I’ve predicted as an April 2016 end of support.

But don’t worry, with enough money you can keep that going too… 🙂

Question of the year: what to do with Lotus Quickr

QuickrLogoTinyIt’s been 16 months now since the end of marketing for IBM’s Lotus Quickr 8.5.1 (a less than desirable move, IMO, not that I’m biased). In that time, I have fielded questions from conference audiences and increasingly this year, clients and Quickr customers about what they should be planning to do. Sometimes, with Quickr applications or deployments in the thousands and tens of thousands of users.

As I’ve mentioned before, support will go on for a while – most likely guess is now until April 2016 – but not the kind of support you get with a current product. More of a “broken/fix if really necessary” kind of support, with fixpacks having slowed down to one every 3-4 months instead of monthly, support moving overseas (from me anyway), and barely any resources applied to anything but Severity 1 and 2 cases.

To answer those customers and inquiries, I’ve tried to help them classify themselves by their use cases with the following as a general guideline. Think of it as a 4-lane highway (apologies for the inside joke for old timers):

You are a: Level 1 Level 2 Level 3 Level 4
You use Quickr for: Basic document storage Simple forms, room and folder security Placetypes with UI, custom forms Business applications
Your best strategy is: Evaluate CCM for complete migration Consider simplification then CCM + Domino Possibilities: CCM, Connections customization, Forms Experience Builder, WebSphere applications Perform more detailed analysis and planning to determine path to replacement product(s) or SaaS offerings

In any of these cases, it’s quite possible you would have to combine strategies. As well, it’s always a good time to evaluate whether running your own operation with Quickr (which was fairly easy for most clients) translates well into running your own operation with Connections Content Manager (CCM) and all the admin, WebSphere, hardware and skills that entails. It may in fact be time to consider outsourcing to a SaaS provider like IBM SmartCloud or, on the application end of the spectrum, Intuit QuickBase. It’s important to ask these kinds of questions:

  • Do you use Quickr for an extranet?
  • Do you require more granular security?
  • Do you require greater use of forms?
  • Do you use Quickr for business processes?
  • Do you rely on more complex workflow?

Answers to these, and a degree of importance for each, will help you determine readiness of your Quickr environment – or part of it – for migration to “something else”.

Then there are those who just want to dump their files into SharePoint and start fresh with something new for the external collaboration efforts. I don’t blame you…it seems easy. It isn’t, but it seems that way. Quickr doesn’t have a native or even easily implemented programmatic way to export its contents (a conscious decision by IBM years ago) so third party solutions are part of the equation. There are very few, including a PDF-generating service I can offer, to get content from Quickr to the file system. What you do with it from there is up to you… 🙂

Looking back at the table above, I’ve found that in many cases, customers really have no idea what they have on their Quickr servers in terms of customizations. That’s because it was so easy to import an HTML form, create simple forms, or apply a custom theme (OK that last one wasn’t easy in the last version). And because o this, it’s important to review the server’s setup, purpose, and survey the place managers as part of a “discovery” of what they have…to come up with the best strategy.

When you next evaluate your Quickr strategy, feel free to use the above as a guide, and of course feel free to contact me for help doing it.

Thirteen must be my lucky number!

IBM Connect 2014With IBM Connect 2014 around the corner (we all know…it’s closer than the calendar leads one to believe!) the awesome content team folks decided to leak out some of the “Lotusphere” sessions early, a week at a time.

I’m very excited to have been chosen to speak again this year. And, I’m joining forces with my friend and colleague Mac Guidera to offer twice the goodness for the same price. 🙂

This will be my 19th “Lotusphere” and 13th as a speaker. Some years it’s been one big session, some in the past have been as many as nine sessions. Personally I enjoy putting a lot of effort into one or two so attendees get as much value as possible in an hour.

It’s also a year in which I’ve tried to focus more effort on strategy and cultural impact of the technical work we all do. I gave my first “non-industry” talk to groups of executives, and it resonated. They are hungry for the type of marketing-free strategy advice on a decidedly uncomfortable topic (technology) that normally takes hours of poring over analyst reports or months of study. That’s the kind of thing I enjoy distilling down to an hour or two.

But I digress, on to this year’s session. We’ve all been part of both successful and failed (or at least strained!) projects, and I have consulted with many companies that see the same challenges getting new initiatives off the ground. What goes wrong in pilot roll-outs? Is it all technical issues? [Hint: no.] What are the human factors involved, what kind of staffing does it take, and who are the absolute wrong people to be running pilots? Our session is all about increasing the likelihood of success when embarking on a Social Business Software pilot:

Running a Successful Pilot Program with Social Business Software

Much of the publicly available marketing and technical information on IBM’s collaboration solutions focuses on features, prerequisites, support and implementation details. In this session we’ll address success factors involved in running a pilot social software deployment.  Our topics include setting goals, gaining executive support, managing expectations, aligning with business strategy, measuring outcomes and defining success. More about business than PMRs, more about success than installation, this session is the perfect accompaniment to your technical education and will round out your best practices experience. Come join veteran speakers with a combined 35 years of experience and watch them try to wrap this up in 60 minutes!

Rob Novak is president of IBM Partner SNAPPS, has 20 years in the Lotus/IBM community, two Masters degrees in business and has delivered 50+ Connect/Lotusphere sessions in 13 years. Mac Guidera is a Social Workforce Strategist at IBM, and demonstrates Social Business adoption and integration into organizations that have an impact on their cultures and collaborative process.

So that’s our challenge for the next 52 days. Less weekends, 36 days. Less holidays, 31 days. Less lead time for IBM legal, 16 days. Less other client projects, 5 days. Less procrastination, about 45 minutes.

Crap. Uh, I have to go. Maybe write something. See you there!

Another success story on the iPad


Some of you may recall from my old blog, a few years ago I posted about the head of state of a certain unnamed country using our $9.99 app SnappFiles with a Lotus Quickr server to deliver public addresses and speeches. The setup was such that speechwriters could make changes up to the last minute on stage, and the speech could be reloaded in an instant. That was fabulous to hear, and was even moreso when I discovered (again, through the hush hush grapevine) that Steve Jobs actually responded to an email telling him about it. It’s difficult to convey how this admittedly succinct reply made us feel:

“Cool.  -Steve”

It’s all a part of history now, and a positive one it is. That said, one of the negatives about having a mobile app without registration or direct contact is that you almost never hear the best stories. Most of the time, you find out that a certain person or group has your app when there’s a support ticket raised. We’ve had very few of those, even though SnappFiles has been shipping for three years and has a steady monthly influx of new users. One came to my attention recently, however, and I thought I’d share.

Canada-iconAn entire trade delegation from a province in Canada recently took a trip to China. Finance Ministry, economic development team, support team, the whole crew. Did they take reams of paper? No. Just iPads, with the documents to support the entire delegation on a Lotus Quickr server back in Canada. Ready to be changed and reloaded at a moment’s notice based on the outcome of the negotiations.

Now I don’t know how those talks went or whether these countries are better off because of them, but I do know that the use of the technology and the agility of Quickr and SnappFiles in this situation is an incredibly good ROI on a ten dollar app!

I heard this story because during the trip, there was a connectivity issue (that resolved in a couple hours) and initially they thought the app could be involved, it wasn’t but I got the whole story as part of a call for help.

The moral of the story is, once in a while it pays to work the helpdesk.

New Kid on the Social Block

Jerald MahurinTo say Jerald Mahurin is a “new kid” is a bit misleading. Heck, he’s older than me and I’m practically antediluvian. However after nearly 20 years in the industry, having been my instructor when I first learned LotusScript in 1995, then with SNAPPS for the past ten years and currently its Vice President, it’s my pleasure to welcome Jerald to the not-so-yellow-verse community of IBM Collaboration Solutions bloggers.

His first article is a tutorial-level undertaking, in which he shares the fruits of his labor creating custom branding for IBM Connections Communities. This is a 10-printed-page article just to get you started

He’s promised me the next one will be shorter, but personally I like having a resource out there that is as thoroughly documented as this article. It took weeks of experimentation and wiki-diving, reverse engineering and Voodoo incantations to come up with the consolidated procedure he describes.

So welcome Jerald, and keep it coming! Now go on over to and say hello!

Tutorial – Extending the IBM Connections Rich Text Editor

connections_logo.thumbnailThe editing experience in IBM Connections is pretty good. IBM has incorporated the open source CKEditor across many products – Connections, XPages applications, Quickr, and more. But a little known and not-so-incredibly documented aspect of the editor is that it’s extensible. That’s right, CKEditor accepts plugins to enhance the editing experience in many ways.

Some of these are quite individual such as new buttons that bring open dialogs. Some take advantage of external resources like spell checkers. Others are analytic like word and character counters. And custom plugins, where some of the real value lies, can do things as cool as word and link replacement, application embedding, and custom pattern recognition. We’ve used this bit of trivia to create a suite of plugins called SnappLinks™, adding social linking and embedding to the editing experience.

In this tutorial I will explain how to do one of the more simple customizations, adding a plugin that gives the user a choice of content templates. It’s a nice example because of the obvious business ROI…and should open your eyes to the possibilities for editor extensions. In fact, you may want to use some of the ones already created by others…

Step 1: Familiarize yourself with CKEditor plugins

The first step to customizing the CKEditor is to familiarize yourself with the plugin architecture and the kinds of things developers are doing with CKEditor. The best way to start is by examining other plugins at . While it’s tempting to get carried away downloading and trying to apply these, note that given the way Connections editor is set up, they won’t all work, and the instructions will not make any sense!

Step 2: Download the “templates” plugin

The smiley plugin is available here  – just download and unzip, it will be self-contained in a folder. For the most part, all plugins have the same folder structure. Inside the main folder which will be named after the plugin, there will be the plugin definition file plugin.js. Some plugins also have other files like a readme.txt or, licenses for the more complex ones, maybe some source control or scratch files, etc. Four folders that are common to most plugins are lang (language files), images, icons (for the toolbar) and dialogs. The dialogs folder contains the main logic files for the plugin, in this case JavaScript.

A typical plugin folder structure

A typical plugin folder structure – yours may vary from this one.

Step 3: Create a path in Connections for the plugin(s)
In Connections, the path to resources can be quite confusing, since most of the files are already deployed as jars (zip files). And since by default there aren’t any customizations, figuring out where one goes can be a chore. A good start is in the Connections 4.0 or 4.5 API documentation, where an article on extending JavaScript has some clues. Most of the JavaScript used by IBM Connections is located inside one of the web resources JAR files inside the provisioning directory (typically CONNECTIONS_HOME/data/shared/provision/webresources), or inside the Common.ear file.

In our case, we are going to create a nice long directory path of:


Where CONNECTIONS_HOME is the directory where Connections code is installed — not the WebSphere app. In my case, it’s /opt/IBM/Connections.

Once this folder is created, we’re almost done right? Nope.

Step 4: Define the extra plugin

If you’ve spent some time with the CKEditor plugin documentation, and let’s face it, who hasn’t, you know to look for config.js. Not so in Connections, where we have a different method of defining plugins and consuming them, using similar syntax but not the same file naming structure. To discover where the CKEditor definition files are, we need to inspect the right jar file in CONNECTIONS_HOME/data/shared/provision/webresources (or Common.ear, but we can find it here).

For the sake of this exercise we are going to modify just the editor in Connections Wikis. It’s the hardest one to figure out, since there are additional plugins already there, and it has its own style of editor.

So first step, get a copy of CONNECTIONS_HOME/data/shared/provision/webresources/<version>.jar and unzip it locally. We need two files from this folder: resources/ckeditor.js and resources/scenes/CKEditor.js. Copy those to their own folder, keeping the scenes folder under the resources folder.

Next, we need to let the editor know we want to declare an extra plugin. Open the resources/scenes/CKEditor.js file and locate the following lines:

extraPlugins: dojo.getObject(“lconn.share0.config.displayMacrosGUI”) ?
‘wikilinking,quicklink,wikimacros,autogrow’ :

On both sides of the colon, add your plugin name:

extraPlugins: dojo.getObject(“lconn.share0.config.displayMacrosGUI”) ?
‘wikilinking,quicklink,wikimacros,autogrow,templates‘ :

Save the file.

Step 5: Modify a bit of code

As I mentioned, you shouldn’t expect the plugins to work straight away in Connections. Mostly, they’re being used by developers, so are very generic in nature and coding style. Connections adds a bit of mystery by combining configuration and definition files, then in some cases – as with wikis – having multiple files like ckeditor.js so that features can be injected into the editor. Blogs are the opposite, everything is in one file over there.

That said, I’m going to list out some code changes in the plugin.js file. It’s only a couple lines.

In the init function, you’ll see this:

editor.ui.addButton && editor.ui.addButton( ‘Templates’, {
label: editor.lang.templates.button,
command: ‘templates’,
toolbar: ‘doctools,10’

Well Connections wikis don’t like being told (from this file) what toolbar to use, and it really likes to be told the icon to use within this command. So we’ll change this to:

editor.ui.addButton && editor.ui.addButton( ‘Templates’, {
label: editor.lang.templates.button,
command: ‘templates’,
icon: this.path + “icons/templates.png”,
//toolbar: ‘doctools’

Next, go near the bottom of the file and find this (we’re not going to change it, just explain it):

CKEDITOR.config.templates_files = [
CKEDITOR.getUrl( ‘plugins/templates/templates/default.js’ )

All of the CKEditor stuff has configurations, and individual plugins can contribute to that configuration. But since we’re setting that configuration up in another place, we’re going to leave this here and rewrite it in the second ckeditor.js file. For the meantime, copy this bit to an empty document for reference.

In the case of this plugin, we lucked out and don’t have to modify the language file. I’ve found that most of them need a tweak to work with Connections, specifically adding another layer to the function. So we’ll skip that.

Now to the configuration file. That’s right, the “other” ckeditor.js (you can tell them apart in your editor because the names are case sensitive). Open ckeditor.js that you have right under resources, and find the section that starts with “dojo.mixin(CKEDITOR.config” which essentially means

Yo, Dojo, find the config bits of CKEDITOR and mix in this other stuff I’m about to throw at you!

You’ll see several lines in the toolbar_Wiki array with names and items. Choose a reasonable place on the toolbar like, say, “insert” and append (,’Templates’) to the end of the line. That’s a comma, and those are single quotes.

Now, we revisit our bit of config that we copied to a scratch document and insert it into this “mixin” using different syntax. Add the following after the toolbar_Wiki array. First, add a comma after the closing square bracket of the toolbar_Wiki array. Then, add:

templates_files : [
CKEDITOR.getUrl( ‘plugins/templates/templates/default.js’ )

See what I did there? I took the original CKEDITOR.config.templates_files “directive” in one place and reformatted it for the dojo.mixin syntax in another.

Note the lack of a comma at the end — JavaScript wants it this way, no comma after the last element before closing.

Step 6: Upload the modifications to the server

First, copy your lower-case ckeditor.js file to the server. Where, you might ask? Here:


Copy your CKEditor.js file to the server. Where, you might ask again? Here:


You can almost start to see the connection between the jar file and the ensuing folder structure for customization. Almost.

Last but not least, copy the entire “templates” folder, including your modified plugin.js, to the plugins folder you created in Step 3.

Step 7: Restart Connections and Test

Yeah, I know. Some tutorials say you can be an admin and restart just one or two servers from the WAS ISC, but I don’t buy it. 90% of the time for me, that doesn’t work, so I just restart. Your mileage may vary.

After restarting, armed with Firebug or Chrome Developer Tools, after dropping your browser cache, give it a go. Go to Connections Wikis, enter a wiki and create a new page. You should see a new icon to the right of the “Smiley” icon on the second row. Click it, and you will be presented with the following dialog if all goes well:

Content Templates let you insert pre-formatted HTML into the Connections rich text editor, and you can create your own templates!

Content Templates let you insert pre-formatted HTML into the Connections rich text editor, and you can create your own templates!

If all did not go well, retrace your steps. The most likely scenario is a missing or extra comma or semicolon. If it is working, check it out. You choose one of the templates, which organizes the content of the editor by pushing in HTML for you. The practical business uses are numerous – standardized templates for documents are kind of a no-brainer. Product sheets, resumes, you name it and someone, somewhere has a format for it.

So we’re ready for production, right? Well, sort of but not quite. It’s all working fine, but the customization “override” directory we’ve been using (CONNECTIONS_HOME/data/shared/customizations) is only supposed to be a temporary home for customizations during development. Technically, what we should do now is to wrap up our code, including replacements and additions, into an OSGi bundle (a JAR file with a special MANIFEST.MF file and some directories) and deploy the bundle into Connections.

But honestly, that’s another article. Or consulting. Whatever.

Next steps

Now that you have a template-aware editor, you probably want to add….templates! Well you can have a look at the code for this, it’s in the plugins subfolder templates\default.js (as we referenced in Step 5 above). My suggestion would be to create a new file, and reference it in the configuration by adding a new reference to it in the array (back when we messed with the dojo.mixin stuff…Step 5 also). You can create HTML templates to your heart’s content that way.