Tuesday, February 19, 2008

Gadgets and Widgets in the Corporate World


It is interesting to see how Google, Yahoo and Microsoft are slugging it out for yours and mine eyeballs. One of the latest tactics is to deploy Gadgets or Widgets that you install either in an online composite portal page or better yet on your desktop.

I guess it is easy to get the composite page implemented on the Internet (check out http://dropthings.com/ - looks just like http://www.igoogle.com).

I am more interested in the desktop based composite applications or “Desktop Portals”. The idea is very simple – install some type of runtime environment which can allow installation of various gadgets/widgets – small self-contained applications and let users personalize them with their preferences. In return, you get to understand the user’s interests. If you are Google, Yahoo or Microsoft, you can easily track who you are and what your interests are and potentially target you with ads which you are most likely to view and click (ka-ching!).

Things get interesting for you as an application developer, when you are targeting both web world and desktop world and trying to keep things in sync. How do you develop a single gadget once and deploy it either on the web (say for iGoogle) and then also for running on the desktop? I am yet to do research on the existing products available from “Big Three” to see how transparent things are for them. At least Google states that these two are separate environments and require different tooling and technologies. I will confirm that in few days.

My Experience with Google’s Desktop Gadgets

I tried out Google’s Desktop widgets development and it looks pretty straight forward. There’s an XML file which describes the layout of various elements to be displayed (labels, buttons etc.) and then there’s a JavaScript file where you provide various event handlers. Then there’s the manifesto file – gadget.gmanifest – which provide metadata about the gadget. That’s about it. You double click this gmanifest file and it loads the gadget into the Google Sidebar. Obviously I just looked at the “Hello World!” gadget so I am simplifying things a bit but you can pretty much do anything including call native OS facilities. Google also created a lightweight IDE to let you visually develop the gadget a bit. However, you are better off using some other IDE of your choice. I recently found this Notepad++ (http://notepad-plus.sourceforge.net/uk/site.htm) as a Notepad replacement and it is awesome! Check it out.

Adoption of Gadgets within Enterprises

Now, going back to the Desktop gadgets: I could not help but think as to how can we bring this simplistic development paradigm to the corporate world! This is how I see things happening:

1. Build a lightweight runtime environment for desktops/corporate web portals to host gadgets/widgets. Let’s call it AcmeDesktop for Acme Corporation. This runtime should handle security, inter-widget communication, auditing, tracking and metering, service invocation (SOAP/REST etc.) and basic user interface styling etc.
2. Create a developer’s guide/cookbook and possibly a customized IDE (use Eclipse and provide plug-in for AcmeDesktop development.
3. Create an asset repository for hosting gadgets – extend Rational Asset Manager or similar products (LogicLibrary or ComponentOne or something similar) to host these gadgets.
Let’s power users develop composite applications by selecting the gadgets they want.

Examples of Enterprise Gadgets

I can think of few gadgets in the corporate world:

1. Dashboard gadgets – to display corporate KPIs or departmental KPIs
2. Unified communications gadgets – IM, Phone, e-mail etc.
3. Calendar and meetings gadgets
4. People lookup gadgets (and picking a person will trigger a message to the unified communications gadget for it to display that person’s status and whereabouts
5. Twitter for Corporations – A gadget to find out who is where at any given point of time – tie this to the security badges or RFID and you will be able to pinpoint the person you are trying to find (problem is that you can no longer hide!)
6. “To-do” gadget – For personnel doing repetitive tasks (such as case workers handling cases for health services), give them their view of Inbox through a gadget and clicking an item will open detailed application view (and if the application is built on the same platform then it will activate few other gadgets to display the demographics information about people involved in that case, case history gadget will display history info, case decision details gadget will display the decisions made and routing gadget will allow that user to route the case to somebody else).
7. Time sheet gadget – will allow you to easily keep track of time spent on various projects and also show a personal dashboard of the time spent by projects, by week, by day etc. Your boss will have another gadget which will show timesheet information for all the people reporting to him/her in an aggregated fashion.
8. Reminders/Alerts gadget – To remind you of all the corporate/admin stuff you have to do (like filling out the timesheet, completing the expense reports etc.)

Integration of SOA and Gadgets and related Ecosystem

Anyways, I digress – The point is that just like SOA’s value is in creating reusable services which can be composed into a composite application, I strongly believe that the next wave is about the gadgets and widgets which will internally use those services which were created when SOA was implemented and various services were created. All the issues that we saw with SOA – repositories/registries, governance, security and composition etc. will have to be revisited for gadgets/widgets.

I also see a move by Microsoft and probably IBM to create a generic “Corporate Widget Runtime” environment based on their technologies. Microsoft already has this in form of Vista Sidebar. This generic runtime will allow the corporate architects to customize it for their needs (e.g., enforce certain security standards, disallow removal of certain gadgets, enhance with additional auditing and tracking etc.) and then allow the building various corporate applications.

I also see various SaaS and product vendors providing gadgets/widgets which can be plugged into the generic “Corporate Widget Runtime”.

Realizing the Vision for Corporate Gadgets

So, what do we need to achieve this vision?

1. A standard describing the gadgets/widgets runtime environment. Does anyone remember OLE, ActiveX etc.? We need something similar but much more open and loosely coupled
2. Stronger typed and compile language to implement the gadgets/widgets. I guess JavaScript is “good enough” and may win in long run (like HTTP won over CORBA and RPC due to its simplicity)
3. A set of standards for inter-gadget communications
4. A standard and related framework to define, deploy and enforce various corporate policies for the runtime
5. A set of standards and development practices for gadgets and widgets (including registry/repository for storing and publishing the same)

Now, if you have not checked out, please review this W3C working draft - Widgets 1.0 Requirements W3C Working Draft 9 February 2007 at http://www.w3.org/TR/2007/WD-widgets-reqs-20070209/.

Nice start I guess! The document states:

This document specifies the design goals and requirements for a specification that would standardize the way client-side web applications (widgets) are to be scripted, digitally signed, secured, packaged and deployed in a way that is device independent.

Let’s see how this working draft gets matured over the period of time.

Available Technologies

For corporate developers, we have few choices when it comes to the Desktop Widgets.

If you really want to leverage an existing runtime environment, then Vista Sidebar is the de facto choice (unless you are an Mac shop then you can also use Apple Dashboard!). You can also choose Google or Yahoo runtime if you wish, however, I cannot comment on the richness of the platform, availability of APIs and the integrated policy framework.

If you want to build a “Corporate Gadget Runtime”, then you have following choices:

1. Use Microsoft .NET and WCF, WPF and WWF technologies – very rich set of development APIs and environment. It might be appropriate to develop the runtime using this but gadget development should be highly simplistic
2. Explore Microsoft Silverlight – the upcoming platform to compete against Adobe (This is a case of a traditional developer centric shop going into design world)
3. Adobe Apollo – Very rich environment for graphics and multimedia experience. I am not sure of their strengths when it comes to corporate development needs. May be in next year or so they will be mature enough – or if IBM or Oracle buys them out then it is a different story.
4. Eclipse Rich Client Platform – A very good platform to choose but you will have to simplify things significantly for your developers. IBM is betting on this and have built their next generation of Lotus offerings on this. Keep watching them.
5. I am sure there’s more that I am forgetting. I would love to hear your views/opinions on this.


Gadgets win hands down when it comes to simplicity of the development, deployment and use by end users. That is the huge plus for the gadgets.

The gadget development and adoption will be driven by the “Big Three” and corporations will eventually embrace them just like they have started to incorporate Web 2.0 technologies within their corporate IT strategies and infrastructure.

The corporate adoption of gadgets is a natural progression of the SOA; however, it will take couple more years before corporations start considering gadgets seriously.

A whole new ecosystem will get developed for gadgets driven by “Big Three” and supported by developers and SaaS vendors alike.

As I always say, we live in very interesting and dynamic times and things get much more interesting day by day. Until next time…