Monday, February 25, 2008

Desktop and Gadget Sharing

One cool feature that is often overlooked in Smart Space is its ability to share desktops and gadgets with other users. To help understand this feature you need to understand what I am talking about when I use the term 'desktop'. I am referring to Smart Space desktops not Windows desktops. Smart Space Desktops are simply a collection of gadgets and services that a user has self-assembled. The user can have many of these 'sets' of gadgets that they can switch between throughout their working day. Back to the sharing part… Sharing these desktops with fully configured gadgets is a powerful feature. Imagine a financial analyst creating a desktop full of useful gadgets and passing it to everyone in their group, or an IT administrator creating a set to push out to the executives.

There are 2 major ways to do this. The first I call the 'thumb drive' method; the user creates a set of gadgets on a Smart Space desktop and then saves that set to a file (archives it). This file can be passed around in email, on thumb drives, or even on floppy disks (does anyone have one of these?). The second I call the 'push' method, in this scenario the user creates the set of gadgets and then tells Smart Space what user should get it (uses the collaboration engine). The users will then get a toast message (taskbar notification) that they have been passed and new desktop and then they can install it.

Either way is great for sharing content and will help customers deploy a unified application across their enterprise.

Monday, February 11, 2008

Personal Substitution Variables

A cool feature of the Smart Space SDK is the ability to create a set of global Smart Space variables that can be used by any gadget. These are essentially name value pairs that are called LocalProperties in Smart Space.

I used this feature in my latest batch of Essbase gadgets. I wanted the ability to set the Time dimension member for all of my Essbase query gadgets in one place and not have to go to each gadget to change this member. I knew that one option would have been to use the Essbase Substitution Variable functionality found in the Essbase product. But I did not want to make this a variable for all Essbase users which is what the Essbase Substitution Variable would provide.

I created a simple MyVariables gadget that allows the user to create personal variables.

These variables can then be used by other gadgets. In the case of the Essbase gadgets, I implemented a special syntax whereby any member name that is preceded by two ampersands (&&TODAY) represents a local variable. When constructing the query, the Essbase gadget then makes a call to Smart Space whenever it encounters a member name with this syntax to get the value of that variable. It replaces the syntax (&&TODAY) with the variable value (“20080823”) and issues the query.

This is another example of the great new benefits of having Smart Space running on your client. It is the analytical footprint that will allow for powerful new capabilities such as creating your own personal substitution variables.

public String getPreference(String key)
return Services.PreferenceManager.LocalProperties.Load(key);

public void savePreference(String key, String value)
Services.PreferenceManager.LocalProperties.Save(key, value);

public void deletePreference(String key)

public void getPreferences()
String[] sPrefKeys = Services.PreferenceManager.LocalProperties.GetAllKeys();

ListViewItem item = new ListViewItem();

foreach (String sPrefKey in sPrefKeys)
String sPrefValue = getPreference(sPrefKey);
item = this.listViewVars.Items.Add(sPrefKey);
catch (Exception e1) { }

I Just Want to Ride a Bike…

I came across an article in Hemispheres Magazine (UAL publication) about this time last year. The article was about cycling, and last February I was just getting back into cycling after a long break from it, so I was intrigued. Aside from getting back into cycling I was also buried in everything Smart Space attempting to build and launch this new product. I was shocked how much this article related what I was doing in software to what Shimano was planning to do for cycling. The article started off talking about how the Lance Armstrong era of cycling was over and the wave of high end bike sales was coming to an end in the U.S. So Shimano went off to figure out how they could get people to again love the sport of cycling and therefore buy more products. The conclusions they found is where all the similarities came. They found that people had very fond memories of cycling and really enjoyed the idea of it but could not wrap their head around the complexity of what cycling has become. Things like 10 speed cogs, carbon forks, STI shifters, and clip less pedals had started to overwhelm the average cyclist. The basic conclusion was that people just wanted to ride a bike; simplicity. This is what I really related to; the goals of Smart Space are in line with this, end users want simplicity. Many end users don't want to worry about connection settings, indexes, caching, dimensionality, etc. they just what to know how their travel expenses will impact the department's budget for this quarter or get the status of their sales pipeline. I saw that the key for Shimano and Smart Space was in simplicity. So whenever I think about a feature or plan out a new gadget I think about the idea that people just want to ride a bike.

Here is the article so you can decide for yourself if the concepts really relate: