« February 2011 | Main | April 2011 »

March 31, 2011

Time is "RIPE" for a new way of designing 'Smart' user interface

This blog is in the series of blogs around the "Smart" user interface and how the expectations from the users have been maturing over time.

I firmly believe that the Maslow's hierarchy of needs is very much applicable in the world of IT and software solutions as well. The only difference is that we are talking about "user needs" from "IT" perspective instead of "psychological" as proposed by the theory. The users till date have been able to meet their Physiological, Safety, Love/Belonging and Esteem needs. What they need now is the movement to the next level of "Self-Actualization" (and i can assure you this is level which beats itself as a certain level is achieved and we start looking at the next best).

I talked about some of the users' comments in my last blog and earlier on how it all started here. Having highlighted the need, the next step is to share the framework that we have developed to help our clients "extend" the current application features (till they become features of the product themselves) on a case-to-case basis.

Each of the "dimensions" which define the need for a "sensitive" response in the user interface are inter-related though not-necessary related in a hierarchy though they may look like at the onset (more details on it later, not covering that in this blog to avoid diversion from the main thoughts).

The RIPE Framework
This framework is nicknamed "RIPE" and you will soon see why! We have broken down the "Sensitive" paradigm of any User Interface into 4 parts based on the activity for which a user interface is needed -

 

RIPE.jpgThe figure below explain the 4 components of RIPE by taking a simple example of a "Financial Journal Posting" process which a typical accountant will do for any kind of financial transactions. For e.g. - the user in a particular department may have bought some stationary for official work for 200 USD; the same has to be entered in the right category and the expenditure attributed to the right department. The diagram explains what the user interface can give at various stages/states and at various times of execution of the same cycle.

 

process.jpgThe figure is self-explanatory. It shows the same transaction happening across 2 different roles (accountant and approver) at 2 different times - one during the normal business cycle and one during the month-end closing process. The process steps maybe are same, but the treatment of states and the needs from the user interface are different as shown in the figure. This example was just to simply explain how powerful this framework can be in terms of its utility and can be applied to any role, process, stage, state or time. We have lot of exciting cases where we have used this in real-life scenarios. Please do contact me in case you need more information around this.

Long live "sensitive" user interface!

 

-------------------------------------

This blog is part of a 3 blog series around the "Sensitive" user interface. You can read the other 2 blogs here -
Part 1 When will my ERP experience be 'smarter'... the Time Sensitive Paradigm!
Part 2: Taking ahead the thought of "Sensitivity of User Interface " in packages

Is cloud computing same as putting things Online?

All those just boarding the cloud train, may have posed this question to themselves or to others who may have a know-how on cloud. Being a Cloud SME myself, I have faced this question several times. This post is an attempt to clear some of the confusion that exists around this specific topic.

Continue reading "Is cloud computing same as putting things Online? " »

March 30, 2011

Changing partition key in Windows Azure Table Storage

You might have faced a situation where you have defined your partition key logic initially and due to some reasons you need to change your partition logic to something else.


Read on to know how you are going to handle such situations.

 

I have an application for which the Partition Key has been defined as the names of all the months.

 

PartitionKey = "January";

PartitionKey = "February";

---

PartitionKey = "December";

 

Now, I want to change the partition key logic. I want to change the partition to something like - "January2011", "January2012" etc.

 

Changing partition key is not possible in Windows Azure.

 

The only possible way is to delete and add the existing entity with a new partition logic.

 

Table.DeleteObject(entity);

Table.SaveChanges();

entity.PartitionKey = new PartitionKey();

Table.AddObject("entity", entity);

Table.SaveChanges();

 

One possible reason for not being able to change the partition key is that all the entities with same partition key are clustered together and now if we change the partition logic then all the clusters must be reconfigured.  

 

Reference:  http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/8f609080-eac1-4e4c-99c3-4bb9e6d76c9d   

 

 

 

Performance of range queries on a Windows Azure Table Vs a Normal Database Table

Most of the times in a normal database a full table scan occurs when an index is either not used or there is no index on the table(s) being used by the statement (SQL or Oracle statements). Full table scans usually return data much slower than when an index is used. The larger the table, the slower that data is returned when a full table scan is performed.

In case of a Windows Azure Table, every row (entity) will have a Partition Key and a Row Key (defined below) which will be defined during creation of the row (entity)


Partition Key Property

Tables are partitioned to support load balancing across storage nodes. A table's entities are organized by partition. A partition is a consecutive range of entities possessing the same partition key value. The partition key is a unique identifier for the partition within a given table, specified by the Partition Key property. The partition key forms the first part of an entity's primary key.

Row Key Property

The second part of the primary key is the row key, specified by the Row Key property. The row key is a unique identifier for an entity within a given partition. Together the Partition Key and Row Key uniquely identify every entity within a table.

The Azure Table Service would use the Partition Key to identify which partition servers to send the query to and would then use the Row Key as an index to identify the data. Provided your range query identifies only a subset of the data this would not result in an entire table scan.

EXAMPLE:

Let's say my table stores blog entries. The entries have reversed ticks generated from the time the blog entry was posted as the row key. As for the partition key, all the blogs from 2007 have the letter 'A' as the partition key, those from 2008 have letter 'B' and so on...

Now depending upon the query we get different cases:

Case1: (Partition Key = C and Row Key = SomeTimeStampValue)
This provides the entire index which enables it return the single row

Case2: (Partition Key = B and Row Key > SomeTimeStampValue and Row Key< SomeTimeStampValue)

Looks up partition key B and returns rows where row key ranges from the two time stamp values 

 

Case3: (Partition Key between B and D)
Looks up partition key B through D and returns all rows. So it does scan the partitions ranging from B
through D but not the entire table

Case4: (Partition Key between B and D & Row Key > SomeTimeStampValue and Row Key< SomeTimeStampValue)

This results in scanning all rows (entities) for partitions between B and D.

Case5 (Worst case Scenario): (Row Key > SomeTimeStampValue and Row Key < SomeTimeStampValue)
This results in scanning all partitions too since the partition key has not been used.

For all the above cases in a normal database, it involves an entire table scan.

Configuring Azure development storage for team development scenarios

While developing applications in a team environment, it is important that the development team has access to a shared data store. And if you are building cloud applications targeting the Windows Azure platform, dev fabric along with the dev storage are the key components which stimulate the Azure platform aka cloud on the local development environment. However, as far as the dev storage goes, the default storage endpoints are configured to listen for requests received to the local host (127.0.0.1). As a result of which the dev storage is not accessible from remote locations.

By default the Azure development fabric is configured as follows:

•Blob Service: http://127.0.0.1:10000
•Queue Service: http://127.0.0.1:10001
•Table Service: http://127.0.0.1:10002

To access the Azure development storage from another machine, follow these steps:

1.Open the devstore configuration file ~Program Files\Windows Azure SDK\v1.3\bin\devstore\DSService.exe.config:
<services>
  <service name="Blob" url="http://[IPAddress]:10000/"/>
  <service name="Queue" url="http://[IPAddress]:10001/"/>
  <service name="Table" url="http://[IPAddress]:10002/"/>
</services>

2.Update "IPAddress" tag of the Blob,Queue and Table URLs, pointing to the machine running the devstorage
<services>
  <service name="Blob" url="http://202.75.100.89:10000/"/>
  <service name="Queue" url="http://202.75.100.89:10001/"/>
  <service name="Table" url="http://202.75.100.89:10002/"/>
</services>

3. Shutdown / Start the Development Fabric

The development teams are now in a position to access a shared dev storage from their local development environments

Note: Check the devstore on the remote machine is in a "Running" state before trying to access it from your application

New ways to surface data from SharePoint 2010

SharePoint 2010 is business collaboration platform for the enterprise and internet. The current version is the 4th generation product from Microsoft stable. SharePoint adoption has grown heavily in the last 2-3 years starting with MOSS 2007 but it is increasing with SharePoint 2010.  Customers are adopting SharePoint as an application development platform.  Different types of data is being stored and managed within SharePoint. Even the amount of content is getting bigger and bigger. Until now, it was little bit challenging to surface the data stored in SharePoint within the applications that are not hosted on the same server as SharePoint. The only way that was possible was to use built-in web services or develop custom web services. There have been many new enhancements in this version of the product. As I come from development background, I really like some of the enhancements that help improve developer's productivity especially the new ways to surface the data from SharePoint within applications. 

The developers can leverage new Client Object model which is a subset of the types/members available in Micorosft.SharePoint namespace in the server object model. There are different flavors of the Client Object Model that can be used within JavaScript, Silverlight and .Net managed application. Although it does not provide the entire set, it contains enough APIs which can be used to access most of the data from the platform. The object model is very easy to use as compared to web services available in SharePoint.

Client Object Model allows one to easily access data stored in SharePoint from different types of applications / services like Silverlight, desktop applications or web applications hosted in a different server. This has enabled to create Rich Internet Applications and mashups by surfacing the data from SharePoint within these applications. To learn more about how Client Object works or how it can be used, do read the nice article from Eric White

Then there is OData

 There is a new Web protocol to surface and access data from different sources (not really new. It got the current around end of 2009). I have been looking at OData for a while now. I really like OData as it is built on existing technologies like HTTP and AtomPub and allows easy access to data from different sources. This is released from Microsoft under Open Specification promise to allow anyone to freely interoperate with OData implementations. Microsoft has released APIs to develop producers as well as consumers based on this protocol. Producers are the services that expose the data while consumers are the services / applications that access this data.

One of the coolest features that I like in the SharePoint 2010 is the support for OData. This means SharePoint has new services that expose data related to all the lists and documents based on OData protocol. The neat thing here is that any OData enabled client can access now SharePoint data. How cool is this? Developers can easily leverage client libraries available to develop rich applications that consume SharePoint data. Client libraries are available for Silverlight, JavaScript, .NET, Windows phone 7 and the list is growing. The end point that exposes the data in SharePoint is available at the URL - http://<SiteURL>/_vti_bin/listdata.svc which can be consumed by client application as a service. One can also leverage the OData URI conventions to access the data.  

I am not sure how many are leveraging this protocol already to surface the data from SharePoint repositories. I expect more products from Microsoft as well as 3rd Party services / applications to support this protocol in the future. I really encourage people to go out and give it a try. Please visit OData portal for more information

March 28, 2011

HTTP Error 404.17 - wcf service from Azure development fabric

If you happen to get the following error while accessing a WCF service hosted in Azure dev fabric,

"HTTP Error 404.17 - Not Found. The requested content appears to be script and will not be served by the static file handler."

Here is what you should be taking care of.

What solved this problem is enabling "Windows Communication Foundation HTTP Activation" feature from control panel.

111010_0815_HTTPError401.png

March 11, 2011

Taking ahead the thought of "Sensitivity of User Interface " in packages


I had blogged around this topic earlier where i had exposed a thought which i think is very important from the 'user perspective'. you can check out the post at "When will my ERP experience be 'smarter'... the Time Sensitive Paradigm"

In a recent meeting with a CIO of a large company operating in telecom domain, a very important point came up. The users in the organization has an ERP being used for handling all financial, invoicing, customer and vendor management, sales, purchasing, billing, etc. The organization was looking at adding a new feature in the product to support the relationships with the suppliers (a.k.a. Supplier Management System). From a SI perspective there are multiple solutions which are best-of-breed, additional modules from ERP provider and also there were add-ons from 3rd parties. However, none of these were striking a chord with the users.

The CIO was trying to rationalize the application portfolio (have blogged around the EXIST framework for this here) but the users were not listening. The reason was simple - "lack of personal touch". The erstwhile package solutions were more to 'only handle transactions and masters'. Over time as this feature became common and the users got used to it; the game moved to the next level where  the users have started demanding a more 'personal' system - a system which behaves 'intelligently' and takes off the burden from the end users to some extent (the transaction have to be done by the users, unfortunately till date there is no shortcut there).

Here are some of the statements coming out from discussions with users and have been put here verbatim -

  • "in today's world of interactive web pages, phone apps, twitter and facebook - it looks as if i am working on a 1 room sized computer"
  • "why is that people do not feel the need to be trained on facebook, twitter, MS office and likes - we just evolve and learn on the go"
  • "even my kid knows that he needs to put on the tennis shoes every Wednesday before the coaching class, but my million dollar ERP doesn't seem to know i am going to do financial closing today"
  • "my system gives me buffet options - take a pick from all i have but does not give me an À la carte options"

You may find some of them funny, some absurd and some irrelevant; but do try and understand the plight of some of these users. They are not asking for the moon. This discussion is not around a better user interface but a 'smarter' one. It need not be as 'slick' as the social media sites; but it need to be 'practical' and 'sensitive'. The users are simply asking for a framework where the applications can be finally 'smarter' and consider the users 'a part of the entire transaction processing' rather than a 'pure doer'.

With the preview of next generation ERP and press announcement around the release dates of the new version of Microsoft Dynamcis AX 2012 there has been a sea change in the way some of the above aspects are handled in the product. I would not say that all the above "smartness" has been built in; but defintely the product framework is now more in-line with this aspect of "intelligent user interface" You can now have a feel of something coming up with good features and a framework which can be moulded to meet the objetives.

The screenshot below shows a sample user interface for a Customer Form with 'smart' features.

AX2012.png

Anyways, more on this later as we explore more features of AX 2012 and upgrade our solutions on the new version.

Keeping in line with the current discussion, i would soon be posting a blog around the framework we have developed for enabling "Sensitive" user interface for the end users. In between, if you have come across any such situation at your organization, please feel free to share the same. Looking forward to hearing back more from peers.

Subscribe to this blog's feed

Follow us on

Blogger Profiles

Infosys on Twitter