There is nice post on the CMS Watch that looks into the challenges of fitting the right product for the right need. Tony talks about the overlapping of functionality and how vendors are trying to pitch each product for different needs.

Check out the post here.
In today's market there is a huge demand for specialists and the IT industry tries to address this in a very "shoot yourself in the foot" way.

Usually, it starts with request/opportunity coming from one of the clients, that they require people with so and so capabilities/skills (let's call that skill X) with so much of years of experience.

The vendor's Pre-Sales force comes into action, pitches to the client with the proposal showcasing the capabilities of the company, how they are growing, their expertise in the technology "X" and how they have so many people working in the "X" technology.

The client is very impressed and asks for the profiles of the people who can be engaged for the assignment.

Now comes the problem. Pre-Sales team have done what is called Short Selling. Trying to sell when they have no inventory or people available on the bench with the skills. All in the hopes that if they are able to engage the client, they can do one or more of the following

  • Try to engage somebody from the market ( a la contractor)
  • Try training somebody in the company ( usually not possible within the short time frame
and the last resort
  • Fudge the resume of an existing person and make him an expert on the technology "X"
Usually the vendor is unable to hire people because people with "X" demands very high and if he does not get selected then you do want to be saddled with him. Next option is to train or fudge the resume. In both case, when the client interview's the person, the person is found lacking and in the end the whole client experience is shattered with the vendor. The client becomes wary of the vendor and on the whole, damaging the entire relationship.

My Qs, is Short Selling the right way.

We all do some sort of short selling in our lives. Claiming to be able to do things, which we never ever have done.
WebSphere Portlet Factory is a powerful and flexible tool for rapidly building portlets on top of a service-oriented architecture. Developers are able to quickly and easily leverage their company's core assets, automatically assembling them into custom, high-value portlets.

The book cover the specific techniques and best practices approach for developing portlets using WebSphere Portlet Factory. The book uses a fictitious company scenario to show how to build a Customer Self Service and Customer Representative application.

The book covers the following topics:
- Installing and configuring the Portlet Factory development Environment,
- How to create and consume data services from SQL, Domino and a Web Service,
- Step by step guidance for creating the portlets and enabling inter-portlet communication,
- Advanced UI design techniques, including the use of AJAX for type ahead functionality and working with the DoJo Builders,
- Enabling the use of Profiling
- Deployment Production Considerations, and
- Troubleshooting and Debugging techniques

The book can be downloaded from here.
The findUsersByAttribute() method can only be applied on string type attributes. This is a method in the PumaLocator class. If this method is used on an attribute that is not of type string, then the portal logs might display an EJPSG0008E exception.

The findUsersByAttribute() method can only be applied on string type attributes. Therefore, non-string type attributes such as follows cannot be used as a valid search attribute:

* "manager",
* "secretary",
* "seeAlso" (dataType=MemberIdentifier),
* "createTimestamp",
* "modifyTimestamp" (dataType=Date),
* "jpegPhoto" (dataType=ByteArray),
* "ibm-firstDayOfWeek", and
* "ibm-firstWorkDayOfWeek"

The error recorded in the logs appears like the following:

Search criteria is invalid. manager=uid=theManager,o=default organization ...
Caused by:
EJPSG0008E: Search criteria is invalid. manager=uid=theManager,o=
default organization

This is a limitation of the findUsersByAttribute method.
Using Java™ API for XML Web Services (JAX-WS) technology to design and develop Web services yields many benefits, including simplifying the construction of Web services and Web service clients in Java, easing the development and deployment of Web services, and speeding up Web services development. This tutorial walks you through how to do all of this and more by developing a sample order-processing application that exposes its functionality as Web services.
  • Google adds presentation capabilities to Google Docs
  • IBM planning to release Lotus Symphony to take on MS Office. Beta version already out. Check out the review here.
  • Yahoo buys out Zimbra. This acquisition marks the entry of Yahoo in the Collaboration Enterprise space

Exciting time for users as more options become available to them. Tough times for MS as it hits there bread and butter business
Everyone downloads or creates or copies so much of data ( documents / files / install ables) and what not on to your desktop that over a period of time, one tends to forgot what all data you have. Now, one can install utilities like Google Desktop Search or Yahoo Omnifind Search Ed or other similar products but then these products do not allow you to tag your data as you want and still file wherever you want. How good it will be if we can tag data and then search for the same using those very tags Web 2.0 style.

The best option would had been Google Desktop supporting the tagging facility. They already index data, adding tags information on top of it would have been very easy. Alas, this is still a dream.

Then I looked around and tried to search if there are other utilities which can offer similar functionality. I stumbled on these.

1. Tag2Find
One can easily download and install the utility. It provide its own window where one can search for file and apply tags to the same. One can also import directories where based on the directory names, the utility tries to generate the tag names. It also provides explorer integration where you can right click and see the tags applied on that file.

Being a third party tool, every tag related action has to be within the application window. I know, there is nothing they can do about that. Windows Vista was meant to come with category based search capability, but they dropped the feature.

Overall it was easy to use and works fine for the functionality it meant for.

2. DocTagger
This one works for MS Word Docs and MS Power Point only. Integrates within the editor. Works well, but the scope limits it to business users only - who work only on word docs and ppts.

3. File Tagger
Paid option, hence could not try. Supposedly tags all the product installable you might have downloaded/purchased over the time.

4. FoundIt
Still in beta. Installs on your machine but works off their web site, which is a bad idea. Privacy concerns are a major issue. Further, if I am not online, I will not be able to access the data. The utility allows you to tag pre-defined set of file extensions ( doc, pdf, ppt, xls, images, email). Uses the google desktop API for searching the data on your desktop.

Overall, I am disappointed. Tag2Find is the best among these lots. But then tagging all that data on the desktop itself is a nightmare. Best way is to start tagging which all data you reference and start build the tag database

Many portal developers have used WebSphere Portal to create cooperative portlets that share events and data to enhance the user experience. For example, a selection submitted in one portlet could cause updated information to display in multiple related portlets, helping the portlets to stay synchronized in their presentation. This functionality is implemented on the server and relies on the portlets submitting action requests to the server so that it can perform the data transfers before the page is refreshed.

This approach starts to break down as you add Ajax functionality to portlets because you dynamically update the data displayed by a portlet without submitting an action request or refreshing the page. This article shows how to use the Dojo JavaScript toolkit to share data and events between portlets in the browser, providing cooperative support to dynamically updated portlets.
The article details on how to clone an installation of IBM® WebSphere® Portal V6 that has been configured for specific deployment needs. How one can create personal standardized installation of WebSphere Portal and use it as a template to mass-produce additional pre-installed and pre-configured portals.

Check out the article here.
Scalability has mostly been a factor of Hardware. But here I am trying to list down some of the Software Design Elements that will go a long way in deciding how scalable the application will be.

  • Minimizing resource contention Contention for resources is the basic cause for all scalability problems. Insufficient memory, processor cycles, bandwidth, or database connections to meet demand would result in an application that cannot scale. For example, when performing transactions that involve resources that are scarce and thereby subject to contention, use those resources as late as possible. The shorter the amount of time that a process is using a resource, the sooner the resource will be available to another process. For example, return database connections to the pool as soon as possible.If possible, do not even use a contentious resource. Sometimes a process uses a transaction that does not require a resource when performing a function. For example, methods that require a transaction should be placed in a component separate from ones that do. As a result, you can avoid creating a transaction when it is not needed.
  • Process Differentiation A process should never wait longer than necessary. Each time slice that a process is using a resource is a time slice that another process is not able to use that resource. One can place processes into two separate categories, synchronous and asynchronous.There are times when applications must perform actions synchronously. Some actions may need to wait for an action to return a result before continuing, or they may need to verify that an action was successful to ensure atomicity. That is, all of the actions associated with the operation must completely fail or succeed before performing another operation. However, when applications are limited in this manner, resources become a source of contention that negatively impacts scalability.One way to achieve scalability is by performing operations in an asynchronous manner. When operating asynchronously, long-running operations are queued for completion later by a separate process.
  • Commutability The application design should try to incorporate the principle of Designing for commutability. Two or more operations are said to be commutative if they can be applied in any order and still obtain the same result. Typically, operations that you can perform in the absence of transaction are likely candidates. The less transaction oriented the operations are, easy it is to scale up the application.
  • Interchangeability The whole idea here is to move the state out of the components. As you add more state to the componennts, they become less interchangeable. Requiring components to maintain state between method calls defeats interchangeability and, ultimately, scalability is adversely impacted. Instead, each method call should be self-contained. Store state outside the component when it is needed across method calls. When calling a method of a stateless component, any state required by that method can either be passed in as a parameter or read from the storage. At the end of the method call, preserve any state by returning it to the method caller or writing it back to the storage. Interchangeability extends beyond resource pooling. Server-side page caching for a Web application will most likely increase its scalability. Although personalization can give a user a unique experience, it comes at the expense of creating a custom presentation that you cannot reuse for another user.
  • Partitioning The application will also look to partition resource and activities. By minimizing relationships between resources and between activities, one can minimize the risk of creating bottlenecks resulting from one participant of the relationship taking longer than the other. Two resources that depend on one another will live and die together. Partitioning of activities can help ease the load that you place on high cost resources. For example, using SSL entails a significant amount of overhead to provide a secure connection. As such, it is sensible to use SSL only for pages that actually require the increased security. In addition, Web servers dedicated to the task could handle SSL sessions.Transactions provide another opportunity for partitioning of activities. By separating methods that do not require transactions from those that do, you do not needlessly impose the overhead required for a transaction on methods that do not require one.However, partitioning is not always a good choice. Partitioning can make your system more complex. Dividing resources that have dependencies can add costly overhead to an operation.

This presentation, originally given by Stephan Hesmer and Thomas Schaeck at Lotusphere 2007, defines Web 2.0, compares Web 2.0 sites to Web 1.0 sites, discusses related technologies such as AJAX, REST and Dojo, and tells how WebSphere Portal leverages these technologies. You see how IBM uses WebSphere Portal and these technologies to support its own internal community. You see how WebSphere Portal V6 enables many Web 2.0 capabilities today, and you get insight into where Web 2.0 support in WebSphere Portal is headed in the future.

The ppt can be downloaded here.