Usability - Productivity - Business - The web - Singapore & Twins

By Date: October 2012

The AppStore Conundrum

Legend has it, that Alistair, at a certain IBM event, challenged Nathan to saw controversy among the assembled participants. Nathan complied and succeeded by mumbling "We need an AppStore". So far the legend, we will never know, did this happen that way. Nevertheless the question remains:
" Does Notes need an AppStore?"
After all Apple has one for both OS/X and iOS, Microsoft has one for all flavours of Windows 8, Nokia has one for Symbian, as have Amazon and Apple for Android. There are AppStores for Firefox and Chrome. Clearly Notes need one too! There are attempts around already. Not so fast!

When looking at the AppStores one can see a pattern:
  • Applications are installed on local devices (or browsers)
  • If a server component is involved, it is provided in the cloud (outside the enterprises' firewalls)
  • The bulk of applications are for personal and social use
  • There are 10 to 100 thousands of applications
  • Most of them are free or low priced, designed for volume markets
  • AppStores mostly created a market, where there was none before
So how does Notes compare? With a few exceptions Notes applications are for collaborative use inside a corporate firewall and require a server component. A lot of Notes application are bespoke. IBM claims about 140++ M licenses sold, which is a way smaller target market than a whole OS or browser platform, who except the existing players would come along?
So there is no new market to be created. Administrators jealously guard their servers (not discussing the merits of that here). So all things a AppStore does enable more or less doesn't apply to Notes. Case closed! Not so fast!

There is room for improvement how applications are handled on the Notes platform. Two examples:
  1. In the Notes client I can hit Ctrl+N pick a template with a one line explanation, pick a server and arbitrary file name and get greeted with an error: "Bad boy, don't do this - anyway we won't let you"
  2. Have you tried to install the Connections Files Plug-in? Once you found it, download, expand, hack the plugin-customization.ini, install (Yes the admin could do that, but it is a drag
So my simple wishlist would be:
  • A new Notes.ini parameter NewDatabaseDialog=<some notes url here> and an IBM sample implementation for it (yes a more modern implementation of this). It would allow new predefined applications to be deployed more quickly than any manual process. Some accountability and "do you still use this" checks can be build in at gusto of the customer processes. Eventually a sync option with a vendor repository could be build in
  • A default toolbox.nsf created on each server install or upgrade. The database would have the extended functionality to be able to host (as a proxy) entries from remote repositories (e.g. by IBM, OpenNTF or our ISVs) and periodically check for updates (and download them for staging - think a little like RPM or DEB management in Linux)
  • A reliable automated patch management for the Domino server (but that's a slightly different story)
  • A revised home page for browser access, running on top of the application that provides the dialog of my first suggestion. It would provide access to the existing applications and the mechanism to request new ones
So users wouldn't interact with an AppStore in the wild, but the process of getting apps and tools deployed and keeping them current would be much more streamlined. Once all of that is in place and starts to make a difference I would revisit the AppStore question.
What's your take?

Posted by on 28 October 2012 | Comments (2) | categories: IBM Notes Lotus Notes

IBM Forms 8.0 Workshop - enroll for free!

From my capable colleagues from IBM developer works comes the new IBM Forms 8.0 workshop:

Workshop Abstract

In this workshop, you will learn about the key features provided in IBM Forms version 8 with the focus on the new IBM Forms Experience Builder. Using the IBM Forms Experience Builder you will learn to use the simple web-based user interface  to develop interactive form driven applications, integrate role based security, implement the integrated lightweight routing for approvals and notifications, explore personalized integration with WebSphere Portal, and leverage open standards utilizing REST API services.


Do you need an effective method to capture and validate end user input, in real time, either from the Web or in stand-alone applications?  Are you in an industry that requires an exact match to existing web applications or paper forms to meet government or industry regulations?  Is there a need to upgrade the end user experience to eliminate input errors so that only validated and required data is collected by your application or service?  IBM Forms V8.0 automates forms-based business processes to help improve efficiency, customer service, and time to value making you more responsive to customer and market needs.  IBM Forms V8.0 enables Line-of-Business and IT users to collect data and automate processes via agile web-applications as well as classic document based forms applications in one nicely integrated package which can also be utilized on iOS and Android tablet based devices. A new key feature in IBM Forms version 8.0 introduces IBM Forms Experience Builder which provides the following benefits to line of businesses and IT users:
  • Exceptional web-based data collection applications
  • Easy-to-use, web-driven creation of compelling, data collection user interface
  • Lightweight routing for approvals and notifications
  • CSS-based styling
  • Easy integration with REST Services via REST API
In this workshop, you will learn about the key features provided in IBM Forms version 8 with the focus on the new IBM Forms Experience Builder. Using the IBM Forms Experience Builder you will learn to use the simple web-based user interface  to develop interactive form driven applications, integrate role based security, implement the integrated lightweight routing for approvals and notifications, explore personalized integration with WebSphere Portal, and leverage open standards utilizing REST API services.

Events highlights

This workshop highlights the following technologies and how to develop and deliver a customised web-based forms solution with IBM Forms 8.0 product suite:
IBM Forms Experience Builder adds higher value to web engagements by enabling Business and IT to create solutions for social business and collaboration
  • Strengthen customer relationships with engaging experiences
  • Reduce time to market by deploying complete data capture solutions with routing capabilities
  • Drive operational efficiencies with smart data collection
  • Understanding the value IBM Forms Experience Builder offers to solution developers and services providers
  • Exploring features of the IBM Forms Experience Builder
  • Integrating services that exist with  IBM WebSphere Portal
  • Learning the human centric routing for forms applications provided by the integrated routing and notifications feature
  • Data centric solution for rapid application development and collecting data and handles high volume transactions
IBM Forms Sever, Viewer, and Designer adds higher value to system of records in business processes and improves end-to-end processing.
  • Improve efficiency by automating paper-based processes
  • Reduce transaction times and operating costs
  • Get auditable with digitally signed business records
  • Document centric solution for storing digital signatures in a self contained document
  • Investment protection through tighter integration with IBM portfolio including IBM Customer Experience Suite, IBM WebSphere┬« Portal, IBM FileNet┬« Business Process Manager, and IBM Case Manager


Currently this training is available as:
  • self-paced education. Complete the enrollment form. You will receive an enrollment confirmation e-mail. Our Support Team will send you a separate e-mail with details on how to proceed. Participants download the training materials online and reserve a hosted lab image for a week to work through presentations, demonstrations and lab exercises at your own pace.
  • Live event enrolment. To enroll in the classroom format, select the desired date and location. There is no charge to attend. 25 Oct 2012 - 31 Dec 2013 (English)
  • To inquire about this workshop or other ICS workshops send an e-mail to icsedu@us.ibm.com with the following information: Name of workshop, Questions, Work e-mail address
In case you wonder what IBM Forms actually is: it is IBM's implementation of the XForms standard using XFDL (Extensible Form Definition Language) for layout. An IBM Form contains data and layout, so a form will always render in its original format (which is important for legal documents). Furthermore it can be digitally signed with overlapping signatures (basically countersigning of signatures to tamperprove electronic records.

Posted by on 26 October 2012 | Comments (0) | categories: Software

Mastering XPages released - in Chinese

Chinese companies are one of the fastest growing adopters of XPages. Being cut of from a lot of blogs by the Great Firewall of China, having a good reference for XPages is essential for their success. So a team from the China development lab (CDL) teamed up to translate the standard reference into Chinese and make it available to all the smart engineers behind the GFW.
XPages Team
Congratulations to the team!

XPages in Chinese

Posted by on 24 October 2012 | Comments (2) | categories: XPages

If you think decomposition is from CSI, stop writing code!

I like coaching developers to write better code, but sometimes it is too much. So here it goes:

If you think decomposition is from CSI, STOP writing code!

So, it is off my chest. Simples rule of thumb:
  • if a function doesn't fit on a printed page, it is too long
  • A function does one thing. If you loop through a document (or record) collection call a function with the individual document as parameter
  • Use objects and inheritance with a factory class instead of monster case structures with copy/paste code duplication
  • Refuctoring was meant as a joke
  • The functions that declare a variable clean it up, not the called functions
  • Global variables are evil unless you have 7 good reasons to have them
When you write your code in JavaScript use JSHint (someone port this to SSJS please), when you write Java, look at Crap4J. Unfortunately there is no free one for LotusScript, but you could use Visustin to visualize your functions - 3m image size would definitely be too long.

Want to improve? Attend a computer science 101 class at a good university and some programming lessons. This is the 21st century, it won't cost you (other than your time): Keep in mind: for every function line you write over 100 lines a kitten must die.
Update: Lydia advised me on broken links with CodeAcademy asking to link to her Phython courses article in return. Thank you Lydia

Posted by on 15 October 2012 | Comments (3) | categories: Software

(Browser) Client side XSLT transformations

In the beginning there was HTML aehm XML ahem SGML and the world was good (anybody remember the 6150 RT?).
It gave birth to HTML and XML and XSLT to transform between them and the world was good. We would get XML data and render them either client or server side (like my favorite XForms implementation) into HTML.
Only brave ones would do this client side since an XSLT transformation is heavy and requires the mastery of yet another set of set theory based languages (XPath, XSLT).
Luckily JSON arrived and we now have a rich selection of template engines. I like fill.js which leaves the template markers untouched, so it can repeat the template transformations, I even ported it to Java.
But template engines only make sense when you control both ends of the pipe. Quite often data might only be offered in XML/ATOM or its specialization oData. IBM Connections, IBM Forms (and other IBM products), SAP and software from Redmond all provide REST APIs that deliver ATOM or oData formats.
To incorporate that into your application you need a script that retrieves and transforms the data and a XSLT stylesheet. Go read the article and download the Dojo script, I'll wait.
The data I'll transform is the todo list from IBM Connections 4.0 from Lotus IBM Greenhouse (Don't have an account? Sign up today, it's free).
The ATOM stream with all todos lives here: (it will show all todo you can see, not only your personal ones, you would need to add a filter parameter to limit them). And here's the sample stylesheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"
   xmlns:snx="http://www.ibm.com/xmlns/prod/sn" xmlns:os="http://a9.com/-/spec/opensearch/1.1/"
   xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:thr="http://purl.org/syndication/thread/1.0"
    <xsl:template match="/">
        <xsl:apply-templates select="atom:feed" />
    <xsl:template match="atom:feed">
        <div id="todocontent" class="tabContent" style="display:block">
            <h3><xsl:value-of select="atom:title"/> (last update <xsl:value-of select="atom:updated"/>) </h3>
            <xsl:variable name="numentries" select="os:totalResults" />
            <table class="lotusTable lotusClear" border="0" cellspacing="0" cellpadding="0" summary="There are a total of ${numentries} entries">
                    <xsl:apply-templates select="atom:entry" />
    <xsl:template match="atom:entry">
            <td class="lotusFirstCell">
                <xsl:element name="img">
                    <xsl:attribute name="border">0 </xsl:attribute>
                    <xsl:attribute name="src"><xsl:value-of select="snx:icon"/></xsl:attribute>
                <xsl:element name="a">
                      <xsl:attribute name="href"><xsl:value-of select="atom:link[@type='text/html']"/></xsl:attribute>
                    <xsl:value-of select="atom:title"/>
                </h4><div class="lotusMeta">Created by <span class="lotusPerson">
                    <xsl:value-of select="atom:author/atom:name"/></span>
                    <span class="lotusDivider" role="separator">| </span>
                    <xsl:value-of select="atom:published"/>
                    <span class="lotusDivider" role="separator">| </span>
                    <span class="lotusTags">Tags: <xsl:apply-templates select="atom:category" /></span>
                <xsl:if test="snx:assignedto">
                    assigned to <xsl:value-of select="snx:assignedto/@name"/>
    <xsl:template match="atom:category">
        <xsl:value-of select="@term"/>,
As usual YMMV

Posted by on 15 October 2012 | Comments (0) | categories: Show-N-Tell Thursday

How much effort will you spend on old browsers?

The JavaScript demi-god Douglas Crockford is attributed with the statement: " the browser is the most hostile software development environment ever imagined " (I think he made that before mobile phones were around ). The problem is not only that there are different engines for HTML and JavaScript, but the fact, that older browsers are still around. Chrome and Firefox have build-in upgrade enggines and IE9++ looks quite decent. So users could do with a little reminder and encouragement (and if it is just to pick up the torches and pitchforks to march to the IT department).
For the friends of Bootstrap here's a little code snippet that nicely fits just behind the body tag in your HTML page:
  1. <!--[if lt IE 9]>
  2. <div class="alert alert-block alert-error fade in">
  3.     <button type="button" class="close" data-dismiss="alert"> &times; </button>
  4.     <h4 class="alert-heading">There is browser trouble ahead! </h4>
  5.     <p>Modern web application require modern browsers.
  6.        Older browsers are insecure and cause needless development effort,
  7.        we rather spend for better functionality. We are sure you understand! </p>
  8.     <p>Update today:
  9.     <a class="btn" href="https://www.google.com/intl/en/chrome/browser/">Google Chrome </a>,
  10.     <a class="btn" href="http://www.getfirefox.com/">Mozilla Firefox </a>,
  11.     <a class="btn" href="http://www.apple.com/safari/">Apple Safari </a> or
  12.     <a class="btn" href="http://www.beautyoftheweb.com/try-it-now">Internet Explorer 9++ </a></p>
  13. </div>
  14. <![endif]-->
Others take more drastic measures. Luckily IE6 usage is down to 0.4% in the US (and 6% worldwide), now rinse and repeat for IE7, IE8 and old versions of the others

Posted by on 04 October 2012 | Comments (2) | categories: Software