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

By Date: August 2011

Custom Controls in XPages

Well designed Custom Controls (we just got 64 new ones) and a set of good libraries can accelerate XPages development tremendously. Of course preparation takes time and it takes some enlightenment to be ready to invest the time to get them right. As a quote from the London Developer Co-op states: " Dirty still remains when Quick is long gone". Some of my insights into custom controls (from various stages of interacting with them):
  • Custom Controls are like subforms
  • Custom Controls have parameters
  • Custom Controls allow a higher level of abstraction
  • There are better ways than currentDocument for Data
  • There can only be ONE: Custom Controls and HTML ID
  • Parameters cut both ways
  • Knowing Dojo helps
  • JavaScript is interpreted - changable at runtime
  • Writing code that writes code is like Inception
  • The JSF and HTML life cyle is important
  • Sharing custom controls is easy
  • Custom Controls are fun!
What makes a custom control
This is the summary of my AusLUG presentation.
Update: The session is concluded, I posted the slide show on prezi and below enjoy:

Read more

Posted by on 29 August 2011 | Comments (3) | categories: XPages

What trains and servers have in common - bandwidth

Practising deduction and investigation with my kids I raised the question: " Does a MRT station need more entry or exit gates?" (MRT is Singapore's local train/subway operator). So we came up with:
  • People reach the station at their own time, but together in a train, so much less people will at any given time want to enter concurrently than want to leave concurrently
  • unless of course the station caters to an event, where visitors leave at the end and want to enter the station
  • Depending on the time of day streams might be reversed. From 8am to 9am everybody wants to leave at the Central Business District stations, while 17:00 onwards they want to enter
  • Depending on the frequency of trains and the gate capacity you need more holding area in the station. If you increase the frequency of the trains too much you won't get enough people through the gates in time to fill them
  • How fast can one individual pass the gate (a.k.a access latency)?
MRT solved that dilemma by having gates that can be switched on demand and once the ticket presentation at the gate (we use contactless tickets) exceeds a certain frequency the gates switch to an "stay open" mode which allows passing through at almost walking speed. In Munich there are no gates, you even could run in, but that invites to cheating and the city of Munich has a team of people randomly checking tickets on trains which always feels akward.
CPU power growth has exceeded I/O growth /
Similar considerations are needed in server design:
  • Like in a train system (where you have: train capacity, train frequency, station capacity, gate/platform thruput, access path capacity etc.) a server system has CPU speed, CPU throughput, Cache capacity, storage throughput (commonly referred to as storage I/O) and network throughput (using Ethernet and its CSMA/CD protocol throughput declines with number of network participants, this is why we have all these expansive switches)
  • Increasing the memory bandwidth by moving from 32 to 64 Bit doesn't make a system faster (your car doesn't get faster because your lanes widen from 2 to 4), but more able to handle higher demands e.g. with concurrent access or larger reads. It is like switching from a 2.8T lorry (truck for the American readers) to a 8T truck. Both are (in Germany by law) limited to a top speed of 80 km/h, but when you move the later does only need to make the distance once. Of course if your system was memory-bus or memory challenged in the first place 64Bit will help instantly
  • Your CPU gets pretty bored (trains stay empty) if you can't get data in and out fast enough. What I see a lot are blade centers, virtual machine clusters or private clouds that have abundant CPU, so-so network bandwidth and (almost criminally) lacking storage I/O capabilities (not this one). This might relate to past memories where CPU tended to be the bottleneck (often today when a CPU maxes out it is due to I/O wait cycles)
  • Data in and out both covers storage as well as network access. And the question How much bandwidth does a Domino server need? still missed the part "for this amount and type of payload and that response time expectation". If your network bandwidth doesn't scale, you can still change strategy
In conclusion: Your first order when planning a server, a virtual environment or a cloud:
Take care of your I/O!

As usual YMMV

Posted by on 27 August 2011 | Comments (0) | categories: Software Technology

LiveText and HashTags

Without vendor backing, a UN sub committee or never concluding standard consortia the standard for inline tagging has been established. It is the humble hash (or pound) sign: #. There is a bit of wobble if it should be lower or CamelCase, but the consensus on the # tag is universal. Using the Notes client's LiveText capabilities we can put hash tags in our applications or eMail messages to work.
Unfortunately the way to success is blocked by Regular Expressions which are a member of the three occult mysteries of IT ( Map-Reduce and XPath expressions would be the other two). There are approximately 10 people who really understand them: the one who came up with them and the other one is hiding. Luckily there is StackOverflow, the online Regex Tester and SourceForge's Regulator (courtesy of Roy Osherove).
Ideally the regular expression would give us access to the hash tag with and without the leading #. After probing around and testing what I found on StackOverflow I settled with \#([A-Za-z0-9_-]+)(?![A-Za-z0-9_\]-]). One free Starbucks beverage of your choice if you can explain that one in plain English .
To put this to use you need to perform 3 steps (you can do them inside the wizard, but we split them out here for greater clarity):
  1. Configure a content type
    Right Click on the My Widgets Toolbox
    Right click on the "My Widgets" toolbox and select configure Content Type. We will have 2 parts to the content: the full content including the # Tag and the content without it.
    The HashTag Content Type
    I named the two properties content and tag but you are free to name the second as you deem fit (don't change the first one). Eventually (if I can figure this out) I will add a 3rd property that returns the tag all lower case.
  2. Configure a recognizer
    Configure the recognizer
    The regular expression is \#([A-Za-z0-9_-]+)(?![A-Za-z0-9_\]-]) which roughly translates into: "give me everything that starts with a # and has more than one letter/number/dash in it, return it also without the #. You assign group 0, which stands for "all of it" to content and group 1 to tag". Now we are ready for some action(s)
  3. Configure an action for your content (more about that below)
Repeat step 3 for every target you are interested in. Once you have completed all of this LiveText will highlight your hash tags and offer you all configured actions:
Hash Tags with 3 configured actions
As an example we search for Tweets with that tag.

Read more

Posted by on 21 August 2011 | Comments (3) | categories: Show-N-Tell Thursday

Query your Out-Of-Office status using a web service

In a more distributed working environment presence information becomes more and more important. In the consumer space you "check in" using various services, in the enterprise world where is less important than how, where how stands for: available, busy, unavailable etc. In the Lotus IBM Collaboration world we have multiple sources of status: the Sametime status, your IBM Connections status updates, the IBM LotusLive status and - for longer periods - your email out-of-office status. All but the last can easily kept in sync thanks WildFire. Integrating the OOO service proves a little more tricky since it isn't exposed in a neutral API. So in a first step I designed a web service that can retrieve one or more OOO Status messages. In its first cut it ignores the OOO subject or the id of the requestor, but once you got the base version running it is easy to extend it. A few caveats:
  • You can (and probably should) place that web service in its own database. Access control to that database defines who can access that service
  • You will need the OpenLog library in that database
  • The service should be signed with the server ID, so it can read all mail files
  • If you want to make it run across servers, you need to configure the servers to trust each other (check the Admin help for that)
  • Since web services don't cache anything it is not the most performant option, so there is improvement potential
  • There are 2 methods: one for just one status and one to retrieve a batch of them

Read more

Posted by on 21 August 2011 | Comments (2) | categories: Show-N-Tell Thursday

Capabilities and Perception

When I ask around how people perceive my capabilities I often get back " You are the NotesSensei, the know-it-all XPages expert close to the equator" (or something similar). While it certainly boosts my ego to be recognised as an expert in one field, it awfully feels like a case of one of the blind men describing an elephant (with my current weight I surly qualify as one). It is a dilemma that plagues me for quite a while.
In a recent internal discussion with a manager I've been told: " Your technical credentials are impressive, so you must lack on the business side". What an interesting conclusion. I ran my own business, started of way below zero funds and survived, I moved to another continent, rebuild my business with no contacts when I came here and survived. I survived law suites, fraudulent business partners and quite a number of organisations that looked down on my business (" Will you be still around next year?" - Yes I was and they were gone). But being technically sound I was put into the "must lack in business" drawer. I wonder what a typical manager's survival rate would be, if stripped of all minions that do the actual work.
A lot of times people act surprised when they learn that I didn't study computer science but studied economics during national service and thereafter attended law school (later in Franfurt), where I dropped out the year my father died (and settled with his debt I started my first company). I learned negotiating the hard way then.
Constant learning was always something I enjoyed, so naturally I soaked up the then nascent field of eLearning. While running the first company, where we build PCs from components as well as our very own hardware, I honed my interpersonal skills by becoming a GPK certified " Counsellor for personcentric development" (Read about Carl Rogers to get an idea what personcentric means).
Yes, there was a lot of technology along the path. I administered a IBM System /36 and helped law firms and a large Credit Management Company to manage their software (working with some political talent there). There I wrote COBOL and dBASE/Foxpro applications that seamlessly transferred data between PC and the IBM system. I advised software companies that served the legal market.
I wrote a mini ERP for a precision engineering and manufacturing company, while providing network support for a large chemical company (so I know networks from PC-LAN, Novell, LAN-Manager to SNA).
Airlines (that was cool, got a private tour visiting a Concorde, unfortunately grounded only), advertisement agencies and retailers were in my customer list (I know a lot about variation management in office furniture, made me a USM Haller fan). I wrote (in VB) the advertisement positioning module for a private TV station.
I worked as a "holiday rep" in Aldiana providing PC training in the early days (the machines had 2 Floppy drives only), taught me a lot about people and picking orders and how to break down complex topics into digestible units. My biggest public recognitions don't carry my name, but have my impact written all over them: I designed eGovernment software (C++, J2EE, XForms, webDAV, Oracle) that won a German price and eLearning software (in VB.NET) that won an APICTA award. I build social software when it wasn't called that for knowledge sharing and I never shy away from implementing change (which falls firmly into the soft skills dimension).
So there is more to me than "The Notes expert". While I carefully crafted the visibility of this expertise, I haven't shown much of the other areas since it opens the opposite trap: " With that broad knowledge he can't be a deep expert" (despite all HR mumblings about T-shape skill development). What should I do? Stay tuned.

Posted by on 14 August 2011 | Comments (3) | categories: After hours

Neurotic Leadership Programming

I wrote about Gunther Dueck, one of IBM Germany's CTO before. Since the book Direkt-Karriere is only available in German, here's my summary (you could buy the Direkt-Karriere eBook and run it through a translator, but that most likely won't be fun):

Direct Career - the easiest way to the top*

* If you are not familiar with the concepts of irony, sarcasm, cynicism or persiflage neither the book nor this review are for you. Stop reading now!
Dueck suggest to anybody who is interested in having a corporate career to make it the personal top priority and focus on achieving it. He clears the common mis-perception that one gets promoted for performance. Reality is that promotion is tied to potential and proving potential by performance is an time consuming and expensive detour on your career path. Focus on just showing potential directly. It saves a lot of work and accelerates career moves. When we look at management theory, the enterprise pyramid looks like this (page 47 in the book)
The typical management pyramid
The functions of every level are clearly mapped out:
  • Employees: They are the backbone of the enterprise. Their work generates the revenue, brings in the deals and fulfil contractual obligations. From time to time managers of all levels fall back into "employee work", be it to set an example or to sell to their peers in other organisations.
  • First Line Managers: Drive the Enterprise. Guide, motivate and drive employees.
  • Middle Management: Run the Enterprise. Ensure orderly conduct. Watch over rules, reports and regulations. Make sure everything works as designed and doesn't change. Core principle: "You get what you inspect"
  • Executive Management: Change the Enterprise. Integration of the corporate divisions, initialise and manage corporate initiatives
  • CEO: Reinvent the Enterprise. Devise strategies and instill enthusiasm into customers, share holders, employees are the rest of the universe (Steve does it well, but not this Steve)
Now Dueck agues that every level of management is related to a neurotic disorder. He suggest instead of becoming a neurotic one should just play one. This is important since every level of management requires a different type of neurotic disorder. The main difference between a neurotic in therapy and a manager: the manager's neurotic behaviour is highly successful and accepted in society. Let's have a closer look.

Read more

Posted by on 14 August 2011 | Comments (2) | categories: Business Omnisophie