The commoditization of technology has reached its pinnacle with the advent of the recent paradigm of Cloud Computing. Infosys Cloud Computing blog is a platform to exchange thoughts, ideas and opinions with Infosys experts on Cloud Computing

« April 2012 | Main | July 2012 »

June 27, 2012

Microsoft can extend its Windows run on the Cloud.

While I am preparing my trip for Microsoft World Wide Partner Conference (WWPC) 2012 happening in Toronto during second week of July, I was referring to the notes which I captured during the previous events.  What really caught my eyes were some key messages delivered during 2010 WWPC which happened at Washington DC. Steve Ballmer in his key note mentioned that Microsoft is transforming itself into a cloud services company and 70 percent of Microsoft developers are working on cloud services. This was followed by the message to partners to "Lead with cloud, Build, Tell, Sell and Support".  Microsoft's big bets on cloud were clearly evident throughout the partner conference in 2010 where 70% and more of the sessions were around Microsoft cloud products be it Public or Private Cloud and SaaS or PaaS offerings. It was the first wave of Microsoft message to partners to gear up to support its Windows run on cloud.  

If you look back, this strategy from Microsoft didn't happen overnight. The preparations started way back in 2005 when Ray Ozzie released an exciting internal memo to Microsoft employees outlining the competitive landscape, the opportunities and future steps for Microsoft's strategy to deliver on a portfolio of seamless software + services. I recollect majority of us during that timeframe ignored it and continued implementing Windows XP's, Windows Server 2003, Office 2003 and kept exploring the power of .NET applications and XML web services on premises.

Later during 2008 Ray further advanced his software + services strategy and highlighted the power of choice for business while embracing cloud, which set the beginning for the enhanced set of products and services from Microsoft extending its powerful in premise story to cloud. This was followed with an announcement of Windows Live and Microsoft business productivity online services. This was the beginning of cloud being one of the mainstream focus. 

The 2011 WWPC which happened in Los Angeles highlighted Microsoft's huge investments on building data centers across the world and the product line enhancements to entice adoption. Today I believe Microsoft has become one of the largest and most influential players in the cloud for enterprise, SMB and consumer space.   Windows Azure today is mature and extensive, unlike the competitors provides both IaaS and PaaS capability. Microsoft has turned its most influential Windows based business productivity application "Microsoft office" as a cloud app. Along with this Microsoft also offers its most popular collaboration and messaging suite comprising of Microsoft Exchange, SharePoint, Lync  as a SaaS solution branded as O365.  To add to this is its recently unveiled SaaS offering "Microsoft Dynamics" CRM online. They also have the right synergy across public and private cloud for Identity, virtualization, management and application development.  Earlier this week Microsoft announced its acquisition of Yammer a social networking company to extend its cloud services with best-in-class enterprise social networking.  What more do we need to believe that Microsoft will extend its run on Cloud ?

I am sure the 2012 WWPC will have more exciting announcements re iterating their strategy as a cloud services company. 

June 26, 2012

My road trip for the Windows Azure Spring Release

I am just back from a roadtrip to Chennai, the capital of the state of Tamil Nadu in South India. Chennai is one of the IT hubs in India, that houses thousands of  IT professionals. Initially, I was reluctant to leave the cool and comfortable mediteranean climate of Bangalore to go to Chennai for a day, a city that is famous for its sweltering heat and humidity. I went there because of two primary reasons - I got to speak to over 1000 Microsoft technology enthusiasts, something I always enjoy. The second reason, but more important one was that it was the occasion of the the Windows Azure Camp,  The event that happened on June 21st was the official announcement from Microsoft of their much awaited enhancement around Windows Azure (Spring Release). Microsoft has been unveiling this spring release the world over and it is an important event for developers and IT professionals and technology decision makers to discover and familiarize new services and capabilities of the Windows Azure platform. Beyond this it gave them a platform to interact with Cloud experts who work and enable these technologies across multiple use cases to address the real world scenarios.

 

I was invited because Infosys is one of the top System Integrators across the world for Windows Azure. That I was the only Cloud Technology expert from any SI to have been invited and be part of this launch keynote made it more special. I just decided to share my experiences and success stories with clients on Windows Azure. I shared our views on how the enhanced platform can address broader client scenarios. With the spring release Windows Azure has become equally exciting for both developers and Infrastructure experts. Windows Azure will no longer be just a platform as a service (PaaS) which was a developers panorama, will have a new capability that will function as Infrastructure as a service (IaaS) that will run Windows and Linux instances and their related applications. There has been some major enhancements to the existing services as well new service addition. With this Windows Azure can be a preferred platform for Dev / Test environment as well as lifting and shifting Windows and Linux VM's.

 

The earlier PaaS capability is now known as Azure cloud service, new IaaS capability is called Azure Virtual Machine and there is one more capability for hosting websites which is known as Azure websites. Beyond this there are few new network caging capabilities like Azure connect and Azure virtual network to enable cross premise connectivity scenarios. It was an excited and packed crowd of around 1000 who turned up at the Chennai Trade Center for the event, dominated by the developer community along with infrastructure experts. The folks with whom I interacted were keen to know how enterprise clients are adopting the public platform and how the platform addresses their security and other compliance requirements. Few of them expressed that application mobility in a hybrid scenario with VM's moving across on premise and cloud will be really exciting in addressing most of the scenarios they come across with their clients. Few of them were keen to know the e commerce possibilities. The dev and test scenarios especially SharePoint and SQL servers were also highlighted.

 

As I left the city in the evening, the heat and the humidity of Chennai were forgotten, what remain in my memory was the promise of this new cloud offering from Microsoft, enriching experience of interacting with over a 1000 enthusiastic cloud technologists  and how excited everybody is about what the Cloud can do for enterprises worldwide.

 

The Cloud is real and underway and it is not going away, let's embrace it with both hands and enjoy the benefits.

June 18, 2012

Providing user defined status code and message in asp.net MVC action and handling it in jQuery

Suppose in an asp.net mvc application, from a controller action we need to return user defined status code and message instead of general http status codes like 200, 401, 500, etc.  Example of such scenario is when we want to return some application specific validation error message and code. There quite a few ways but among those, I liked the below two options because here we may avoid explicitly throwing and catching exception.

One point I would like to mention is, whenever we provide any status code (say 2001) other than those from 200 series, it is considered as erroneous response.

Approach:

Server Side Code:

Once any validation is done and any specific error message is to be returned, set the http response status code as:

public JsonResult SomeAction()

{

                JsonResult result = new JsonResult();

                ...

                //Once any validation is done and error condition is identified

                if(someValidationError)

                {

                                Response.StatusCode = 2000;

                                result= Json("user defined error", JsonRequestBehavior.AllowGet);

                                //or any user define class in the JSON result holding the error message along with any other info to be conveyed

                }

                return result;

}

 

Or

public JsonResult SomeAction()

{

                JsonResult result = new JsonResult();

                ...

                //Once any validation is done and error condition is idenfied

                if(someValidationError)

                {

                                Response.StatusCode = 2000;

                                Response.Write("user defined error");

                                result= null;

                }

                return result;

}

 

Note- If simply the Response.StatusDescription is edited, the .net framework considers it as a "internal server error" and the provided StatusCode will get overridden by 500

 

Client Side code:

 

In the client side code, e.g. a Javascript function calling the above controller action:

 

function GetData() {

                $.getJSON('/controller/SomeAction', null, function (data) {

                //if the execution happened without any error or if no user defined StatusCode is assigned

                //i.e. in case of Success, this part of code is executed by default

                })

                   //in case of error or explicit assignment of StatusCode

                .error(function (jqXhr, statusText, errorThrown) {

        alert("in error");

        alert(jqXhr.status); //- the custom code e.g. 2000

        alert(jqXhr.statusText); //or  alert(statusText); - error

        alert(jqXhr.responseText); // - the custom message or the serialized JSON result

       

       // in case responseText has serialized JSON object then de-serialize it as

       // var data = $.parseJSON(jqXhr.responseText)

                                           //and then bind the information to the right control

 

                })

 

                .complete(function () {

        alert("in complete");

        //any common execution i.e. for both success and error

                });            //';' to be provided to the last event, i.e. if complete is not used then ;  should be at the end of error event above

}

Happy coding...

June 15, 2012

Windows Azure Table storage- How to handle CAUTIOUSLY nullable data types

Azure table allows nullable type for int, string and also bool. But we need to provide special attention while updating a table entity.

For example, for a table entity - Student with properties as:

String name

Int? employeeId

Bool? IsActive

For the first time if I pass "null" for the nullable properties, it will get inserted. But if I first provide some not-null value for the concerned nullable property and then later want to update it with a null value, the old value will get retained because the table service will assume as if no data is provided. And if we really want to update with null then the default approach will not work. So to handle such scenario, in the Save operation we need to pass a change-option as:

TableServiceContext. SaveChanges(SaveChangesOptions.ReplaceOnUpdate)

This will do insert-or-replace instead of insert-or-merge and thus the concerned property will get updated with null value.

"Save changes" method without any parameter works like insert-or-merge where (for an existing entity) provided property will be updated and for others old value will be merged/retained. And thus when null is passed for any property it is assumed as if it is not provided.

So, this is an approach to work with table entity in which for any property, if null is even considered as a valid value.

Happy coding...