Gadgets are small applications, general with an UI, which perform a very specific task. In the Java world, for example, they are known as applets, and were very popular when Java started. However, due to poor Java performance, applets never become very successful and eventually failed. The attempt of bringing RIA applications{#bs8p} to the browser world was postponed till Ajax came into play.

Google gadgets is Google approach to gadgets, and it comes in two flavors:

  • Google Desktop Gadgets. Features a google-like search engine for the desktop, and a rather wide toolbar or panel where to stick small applications, that means, gadgets. There is a wide variety of gadgets ranging from TODO lists to weather forecasts and music control players. Honestly I think is nothing new, we got them in Linux since WindowMaker or Afterstep, but what make gadgets special are that they are thought to be easily integrated with internet services.
  • Google Internet Gadgets, which are those we can add from iGoogle{#nq7:}. iGoogle aims to be a perfectly customized front-page for websurfers, where they can organize and arranged gadgets providing the services they need. It is possible to add new tabs, group gadgets by category, and access to tons of information without bothering getting to a specific web page. Although the potential is huge, most gadgets are just RSS/Atom feeders.

It is also important to highlight that Google is not the only provider offering this kind of tools, other sites such as NetVibes{#t_-g} are also very popular among users.

Both type of gadgets are based on Javascript/HTML plus and specific XML language from Google for managing settings. In the case of internet gadgets, an API for easing Javascript programming, or fetching contents from the web is provided. The desktop gadgets SDK, comes as well with an API but more oriented to bring mechanisms for communicating gadgets with desktop resources such as video, audio, system, etc. Standard Javascript programming is recommended for building desktop gadgets (by using standard Javascript we can guarantee our gadget will run in different environments). By the way, Google desktop gadgets have been released recently for Linux{#anmy} under an Apache Open-Source License.

These last days, Google internet gadgets have brought their attention back to me. Watching David Glazer’s talk at Google IO{#e6-d}: “OpenSocial Specification: What’s Next for OpenSocial”{#n_ik}, I learnt google internet gadgets will become one of the pillars OpenSocial{#qncl} will rely on. OpenSocial is an initiative based on open standards, with the goal of providing a non-proprietary technology framework where to build social-enabled applications. Basically, is the attempt of Google plus other social-network sites, some of them big players in the industry such as Linked-in, MySpace, Friendster, SalesForce, etc…to fight against the fearing and growing dominance of Facebook{#v3.h} as social platform.

From a technological point of view, Facebook gadgets are server-oriented. That means, they must be hosted in a server, where they work alike any other web application. Since Facebook is mostly programmed in PHP, Facebook gadgets are generally programmed in PHP as well, although bindings for other languages exist. Despite the need of a server where to host our Facebook mini-application, gadgets have not stopped springing out since the Facebook Developer Platform{#m3j:} was released. The Facebook developer community looks very active with lots of events being organized worldwide (take a look at Facebook Developer Garage Barcelona{#mo44}). Talking about Facebook apps, I found very revealing this article from Ben Lorica, “Facebook App Categories Ranked By Usage”{#lf95}, at O’Reilly Radar{#kcnu}. If you are interested in social networks I strongly encourage you to take a look at this figures (I would like to see other numbers from other social sites).

On the contrary to Facebook gadgets, Google internet gadgets can run either on a client as well as in a server. Of course, they are hosted in a server, more precisely in some hard-disk at Google’s facilities, but you do not need of an external provider where to host your gadget, as it happens with Facebook. You can do all your work by maybe interacting with other internet services and mixing contents together. In case you need to store user specific data, then you may need a server (basically a storage provider and an API to interact with).

Finally, although it lacks social-enabled features I tried Google internet gadget API and this is the result: Go Movies!{#me4l} It is a gadget for checking what is on cinemas nearby your town. It retrieves data from Google movies{#id-9}, and present them as a list of movies (can pick movie theater), adding new links to IMDB{#xid-} for movie information and YouTube{#olmh} for trailers. Unfortunately, it seems Google movies is one of those obscure Google services (like Google music search{#bhzg}) which have not been yet gdatized. To turn things worse, the html result page is not well-formed, that means any chance of querying the document using XPath{#pak1} should be discarded. I went old-school for this time and parse the document using regular expressions (luckily enough, Javascript regexp are 99% similar to Perl regexp). Some parsing fails when a ñ or Ñ character occurs or when UTF-8 characters happen (sorry for my beloved Japanese xDD).

Further reading:

At the Forge – OpenSocial and Google Gadgets