Friday, December 19, 2008

Azure Cloud Computing User Group December Meetings a Big Success

The Azure Cloud Computing User Group just finished its inaugural meetings in New York, Philadelphia, Chicago, Denver, Phoenix, San Diego, and Orange County. These meetings have been a great success with as many as 50 attendees in some locations. By next month, we're expecting to add meetings in Seattle, Los Angeles, Salt Lake City, Dallas, Houston, and Boston as well. Microsoft has helped out with meeting places and has been very supportive.

The presentation and demo apps for this first meeting have been posted on the CCUG web site. We'll be posting the schedule for January meetings soon as details are firmed up.

Tuesday, December 16, 2008

Dev Fabric Status Colors and Meaning

What do those color indicators mean in the Azure Dev Fabric? Here's a list:

Longer explanation: If you're running your Azure apps locally out of Visual Studio, the Dev Fabric is simulating the cloud environment for you. You can open the Dev Fabric icon by right-clicking the "gears" icon in the system tray. In the Dev Fabric console display you'll see your project, your role(s) (such as WebRole) and your instances. Each instance's status is shown with a colored circle. Since some of these statuses change rather quickly you don't always have a chance to hover over them and see their tooltip explanation.

Here's how the Dev Fabric console looks when it is happy (green):

A fun thing to do is kill one or more of your instances (you can do this using the Windows Task Manager, or en masse using a tool like pskill). Not only will you see a range of status indicators in the Dev Fabric, the instances will be recreated automatically by the fabric, which is very cool to watch happen. This gives you some idea of the intelligence that's wired into the cloud fabric.

Sunday, December 14, 2008

New on CodePlex: AzureLiveID

I've put a new sample on CodePlex that demonstrates Windows Live ID authentication for an Azure web application. "AzureLiveID" is a skeletal Azure web solution that implements Windows Live ID authentication and keeps user profiles in cloud storage. Allowing web users to reference an existing identify is an attractive alternative to forcing them to create yet another user id and password.

AzureLiveID is available on CodePlex.

Saturday, December 13, 2008

Windows Live ID Authentication for your Azure Web Site, Part 1

One of the many services made available to your Azure web applications is the ability to authenticate using Windows Live ID. This is an attractive alternative to forcing the user to create and remember yet another user id and password. You can also wire Live ID in to non-Azure web sites, but in this article we're going to focus specifically on how to Live ID-enable your Azure web application. In Part 1, we'll describe the user experience and the page flow model for Live ID authentication. In Part 2, we'll see what this means in code.

For an Azure web application, Windows Live ID authentication is based on 3-way cooperation between your web site, Windows Live ID, and your Azure project settings.

User Experience and Page Flow

The first thing to understand is the intended user experience. Let's walk through it from the vantage point of a web visitor to your Azure-hosted web site.

1. On your site, not signed in

When a visitor first comes to your site, your site likely won't know who they are unless they've been there very recently. Your site will offer a Sign In link (click the image for a larger view).

2. Live ID sign in

When the user clicks on your Sign In link, their browser will take them to the Windows Live ID system, where the user can sign on with an existing Windows Live ID or create a new one on the spot. Don't worry, you haven't lost the user as you'll see in a moment.

3. Back to your site, authenticated

Upon successful sign in to Windows Live ID, transfer is passed right back to your site. This time, the site knows who you are and is able to read account-specific information from cloud storage. Instead of "Sign in please", the site now welcomes the user with a cheery "Welcome, [Name]!"

Pretty cool, eh? Now let's see just how this magic is made to happen.

Page Flow

Now that we know what the experience is like, let's study the page flow from behind the scenes. Although the user experience seems to involve 3 pages, there are in fact 4 page states to consider as shown in the figure below.

Here's a blow-by-blow account of what happens.

1. On your site, not signed in

When a visitor comes to your site, your site may or may not know who they are. This is determined by a cookie. You include the Live Services IDLoginStatus control on your page, which displays a Sign In link if your Live ID identity is unknown to the site. if it does know who you are, the control will instead display a Sign Out link. Let's assume for the moment we don't know who the user is and the cookie is not found.

In the screen capture below, my site recognizes it does not know who the user is and alters the page display accordingly. This is evidenced by the "Please sign in with Live ID" message (set by code in my Page_Load method) and the Sign In link (provided by the IDLoginStatus control). Note you can control the appearance of the control to match your site's look.

2. Live ID sign in

When the user clicks the Sign In link, the IDLoginStatus control redirects the browser to the Windows Live ID system, where the user can sign on with an existing Windows Live ID or create a new one on the spot. Note the Windows Live ID infrastructure is only willing to participate if your site has been previously registered with it.

3. Authentication Handling

This next step is not apparent to the user but is an integral part of the process. Upon successful sign in to Windows Live ID, transfer is passed back to your site--but not to the originating page. Instead, a web authentication handler page is invoked. How does Live ID know where to direct control? You set up a "return URL" when you register your site with Live ID. Your web authentication handler page is given a unique ID (GUID) for the user and a cookie is created. This GUID is the key you use to provision account-specific data for the user.

4. On your site, signed in

The handler then redirects to the desired page. In this example, we go right back to the page we started on, Default.aspx. This time, the cookie exists and the site is able to read account-specific information from cloud storage keyed on the unique ID of the user we received in Step 3. Instead of "Sign in please", the site now welcomes the user with a cheery "Welcome, [Name]!"

That's what will happen if the user is a return visitor to your site, but what if it's a brand new visitor? In that case you won't find anything in cloud storage keyed to the user GUID and you can take an alternative action, such as welcoming the new user and directing them to set up a profile.

That's the deal, from a page flow standpoint. All we need to do now is get into the code. In Part 2, we'll show you how to implement this for yourself.

Wednesday, December 10, 2008

Azure Cloud Computing User Group

A national user group for Azure Cloud Computing has been started, and inaugural local meetings are being held this month at Microsoft offices across the country. Local meetings will be held every month.

The community site is

Initial locations where we have secured willing hosts and a place to meet are Seattle, Los Angeles, Orange County, San Diego, Phoenix, Denver, Salt Lake City, Dallas, Chicago, Boston, New York, and Philadelphia. Manyof these areas are having their first meeting this month, all should be meeting by January.

The December meetings are introducing the platform, after that each meeting will drill into a specific area. The meeting format is pizza and introductions, a short presentation, one or more code demos, and lots of discussion.

Here's the December meeting schedule:

San Diego12/11
New York12/15
Orange County12/18

I'm the national coordinator for the user group, so if you have any questions just send mail to me either via this blog or the community site. We hope you'll join us as we explore this exciting new area together.

Thursday, December 4, 2008

Azure Step-by-Step: Hello, Cloud

I've created the first in a series of scripted step-by-step guides for Azure demo applications that give precise instructions and screen captures. The first of these, Hello Cloud, is now available for download at the link below.

Azure Step by Step: Hello, Cloud

Here's an excerpt:



Tuesday, December 2, 2008

So Cal Code Camp - Azure Sessions

The next Southern California Code Camp has been scheduled for January 24th-25th 2009 at Cal State Fullerton (Orange County). Azure will be well-represented, with sessions from Microsoft, Neudesic, and others. I'll be presenting 4 Azure cloud computing sessions:
  • Azure Cloud App Demo: Social Networking Web Site
    Forget "Hello, Cloud", it's time to see something real and substantial. See a social networking site and the code behind it that runs in the cloud, uses cloud storage, and authenticates using Windows Live ID. It's Azure cloud computing in the real world.
  • Azure Cloud Application Model
    Microsoft's Azure cloud computing platform has a new role-based application model that can scale well at every tier. Learn about the model and see it in code.
  • Azure Cloud Security
    The Azure cloud computing platform offers compelling security capabilities. Learn how to integrate Windows Live ID with your web site. Learn how to integrate and federate enterprise security with your cloud application.
  • Azure Cloud Storage
    In this session we'll explore how cloud storage works on Microsoft's Azure cloud computing platform. This includes the ability to store and recall BLOBs, queues, and tables.

Hope to see you there!

Saturday, November 29, 2008

Why I'm Shopping Online This Year

The events in the news yesterday underscored how dangerous it can be out there in the real world. Oh, I'm not talking about the middle east or urban high-crime neighborhoods or other traditional hotbeds of violence. The new ground zero is the American department store during the Christmas shopping season. Yesterday I read in horror how shoppers at WalMart trampled and killed an employee. While my mind was still reeling from this, I was further shocked to hear two men had shot and killed each other at a Toys-R-Us. To take someone's life is tragic, but to do so in the name of competitive shopping takes us to a new low. I find myself suddenly motivated to do all my shopping online where I can steer clear of the animals.

Worker Trampled to Death in Wal-Mart Sales Stampede

Two armed men shoot and kill each other at a Toys-R-Us

Wednesday, November 26, 2008

Channel 9 video - Impact of Cloud Computing

There's a new Channel 9 video out on where Mickey Williams and I are talking about the impact of Azure Cloud Computing on developers.

ARCast.TV - Mickey Williams and David Pallmann of Neudesic on the Impact of Cloud Computing

Friday, November 21, 2008

Xbox Live Avatars

XBox Live underwent a major uggrade this week. One of the most captivating features is the addition of avatars. Forget the games, my family and I had a ball designing our own personal avatars. The avatar designer is slickly done, fun to use, and has oodles and oodles of choices for everything from hair style to the shape of your ears. Once you create and save your avatar on your XBox, it's also available for download from as an image file. Here's my entire family as XBox avatars:

The Sin of Verbosity and the Art of Brevity

I have much to say, but I'm going to make myself say it in less than 500 words. You'll see why.

One of the greatest gifts you can give yourself is self-improvement. Our shortcomings may be obvious to all around us but we can be blind to them. If you can recognize your shortcomings you can do something about them, and if you really work at it you can make some amazing and lasting changes in yourself.

One of my shortcomings is the sin of verbosity: taking too many words to say something. That is, using a much larger number of words to express something that really could be said in a much shorter and clearer way. Coupled with this is repetition, needlessly repeating what has already been said which is unnecessary because it has already been said. Do you see what I mean?

What's so bad about being verbose? It's just a few extra words after all. In fact, the driving force behind verbosity (at least in my case) is the desire to be precisely understood. To me it's always seemed downright dangerous to just say a few words: they might be understood incorrectly or incompletely. I now know that notion is completely backwards. Verbosity does not aid clarity, it impairs it.

Some people just downright hate verbosity. When my book Programming Indigo came out, one of the first reviews
rather unnecessarily went to great lengths to trash the book. While I think the attack was way overblown (many have told me they appreciated this book), it was clear the reviewer was mostly offended by verbosity and repetition. And to that I plead guilty.

When I worked at Microsoft, my superiors had little tolerance for verbosity, or for me. :) While there I learned a great deal about how to take raw information and distill it into its essence and communicate it in a concise way with clarity. This takes work. Whoever said "if I had more time, I would have written a shorter letter" knew what they were talking about: brevity with clarity requires effort and refinement. It may come naturally to a precious few, but the rest of us have to work at it. Especially the great unwashed, verbozos like me. Brevity of course is right in line with the larger concept of Less is More.

Am I over my verbosity? No way, I'll need to consciously work at it for the rest of my life. But as an ongoing student of brevity, I'm getting better at it. I sometimes take 30 minutes to compose an email, not to make it long but to make it short--and clear. And I was able to reduce this blog posting from its original 1000 words down to 460. That says a lot.

Wednesday, November 19, 2008

Debugging Azure Cloud Applications

At some point you will need to debug your Azure cloud applications. Here is some guidance on what the options are.

Local Debugging. First off, the general hope is that you'll catch and fix problems on your local box long before you place anything into the cloud. Locally you can use familiar tools such as the Visual Studio debugger and event logs and other tools to get to the root of problems.

Application Logs. However, it's possible to have an app that works locally that doesn't work when deployed to the cloud. What do you do then? You look at the logs for your application, that's what you do. Unfortunately this is something of an involved process today:
  1. You have to first find the Copy Logs button, which is lurking under your Configure button on the Azure portal. This hasn't been obvious to everybody.
  2. Clicking Copy Logs will copy your logs to your storage account.
  3. Lastly you need to run a program to read your logs out of cloud storage so you can view them. There is a sample in the Azure SDK called CloudDrive that does this. It is an exension to PowerShell. There is some work involved to configure, build it, and get it going the first time around.

No doubt this will become more streamlined over time, but it's what we have to work with today. Benjamin Day has written an excellent post that gives a blow-by-blow account of exactly what you need to do, including screen captures. You can also instrument your application to write to those logs using the RoleManager.WriteToLog method.

MSDN Forums. MSDN has a very good set of forums set up with several Azure categories. I've mostly been interacting with the Windows Azure forum, and I've found it to be a great place to go to get answers or help others. Moreover, Microsoft personnel have been fantastically responsive and helpful. So if the above methods don't help, post your problem to the appropriate forum. Between Microsoft and the community you'll likely get some help.

Tuesday, November 18, 2008

Is Cloud Computing Just Hosting?

I recently had a chance to chat with some I.T. people who had been noticing all this cloud computing buzz but didn't see what all the excitement was. Cloud computing seemed like a new word for an old thing: hosting. They knew all about hosting and had been using it for years.

Is cloud computing just hosting, re-branded? The answer is no. And yes. Really, it's hosting++. Let's dig in and see how cloud computing is like and unlike hosting.

  • Automatic Provisioning and Deployment. Like standard hosting, cloud computing gives you a place to run your applications and store your data in a managed data center. Unlike standard hosting, you aren't required to remotely connect to a specific set of machines and configure them yourself. Instead, you provide the data center with your code and metadata about what its needs are. The data center takes care of virtualization, provisioning, deployment, and load balancing for you--completely automatically. You never get involved in installing software or configuring servers. In Windows Azure, this is all controlled through a well-designed portal at
  • On-Demand Scaling. Like standard hosting, your cloud computing code and data is maintained on servers and storage devices. Unlike standard hosting, the scale-out of your code and data happens automatically, on-demand. If traffic levels increase, so does the instancing. If traffic levels drop, the number of active instances goes down. You can grow anytime, without having to requisition new hardware. Azure never wastes your money or the data center's hardware.
  • No Long Term Commitments. Like standard hosting, cloud computing costs something. In the case of Azure at least, you aren't required to make a long term commitment or sign a contract for a specified period of time such as one or more years. You pay for what you use, and you can stop anytime without penalty. It's computing done right.
  • Pay as You Go. Standard hosting often charges you for keeping machines and storage available regardless of the extent to which they are actually used. In Windows Azure cloud computing, you only pay for what you use. If you use more, you pay more. If you use less, you pay less. Just like how your electric or water bill works.
  • Additional Services. Standard hosting doesn't generally provide any new software capabilities, it's just an alternative place to run code and store data. Windows Azure does provide new software capabilities, and they are both numerous and compelling. Live Services allows you to tap into the Windows Live identity and contacts services. Geneva technology allows you to support enterprise customers and let them use their native security system; and you can even federate a mix of enterprises and security mechanisms simultaneously. SQL Services provides database services with new scalability options not available in the enterprise. .NET Services gives you a service bus, which allows for business-to-business publish/subscribe communication that is firewall friendly. .NET Services also lets you run workflow in the cloud. Windows Azure really is an operating system for the cloud, and Azure Services really provide applications with a fresh set of capabilities that are also easy to get at and combine.
  • Available, Scalable, Reliable. In the enterprise, some of the hardest things to do well are high availability, dynamic scalability, and high reliability. These things come "for free" with the cloud any time you use it.

Hosting is to cloud computing like radio is to color TV. There's nothing wrong with hosting, but the next generation is upon us.

Saturday, November 15, 2008

Overcoming Fear of Cloud Storage

Dr. McCloud here once again with another installment of Overcoming Fear of the Cloud. This time we're looking at the fear of cloud storage.

Concern about storing data in the cloud is one of the first objections to cloud computing that is raised by some who work in the enterprise. Usually the expression of concern is followed by a gentle but firm explanation of how vital, proprietary, and utterly irreplaceable this information is. The message is clear: the data is critical to the operation of the business; the data must be protected; and maintaining its integrity and availability is paramount. The enterprise goes to great lengths to ensure this.

The first thing I will say about this is, you may be right in some cases. Some data does belong in the enterprise, depending on the nature of the data and the organization and the regulations it is subject to. But that's a far cry from saying no enterprise data should ever go into the cloud. That's why I think Microsoft's vision, called Software + Services, makes a great deal of sense for the enterprise. S + S is all about recognizing that some software and data is best kept local, while other software and data is best placed in the cloud. Rather than dictating what the split should be, S + S says you are in the best spot to make that determination. Dr. McCloud likes to call this writing your own prescription.

We can use the existence of the hosting industry to demonstrate the idea of putting your data "out there" can work for businesses. The idea is neither new or unproven and is used successfully today by businesses of all sizes. For sure, you need to have a strong comfort level about the vendor, the storage practices, the fail-safes, the data protection policies, the service level commitment, the security arrangements, and the degree of control you have. Dr. McCloud prefers sound methods of treatment and so do his patients.

Learning more about how the cloud infrastructure handles storage should also encourage you. Let's look at Windows Azure specifically. When you store something in the cloud, it gets simultaneously written to several different places, each in a different fault domain. SQL Services and cloud blob/queue/table storage are designed to scale supremely and automatically. Many things that are commonly needed in the enterprise are also very difficult, expensive, and time-consuming to get right, such as high availability, sufficient scalability, disaster recovery, and dynamic adjustments to changes in traffic levels. These things come "for free" with the cloud platform every time you use it.

One last point, putting data in the cloud does not necessarily mean it vanishes from the enterprise. We'll likely be seeing some interesting patterns develop for synchronizing and safeguarding data that lives in more than one place.

Cloud storage is a good thing, and you don't have to feel like you're taking some tremendous risk to try it out as long as you exercise a little common sense. Dr. McCloud thinks this makes for an excellent prognosis.

Azure Tip: How to Get Cloud Storage Working Locally if You're Not Running SQL Server Express

If you're having trouble getting cloud storage to run locally on your box, this tip from Neudesic rock star Chris Rolon may help. It's especially likely this is your problem if the version of SQL Server you run isn't SQL Server Express.

If you're not running SQL Server Express, you'll need to change two values in the DevelopmentStorage.exe.config file which resides in C:\Program Files\Windows Azure SDK\v1.0\bin to have the correct SQL Server instance name (shown in red below).
  • The first is the DevelopmentStorageDbConnectionString value in the connectionStrings section.
  • The second is the dbServer value in the developmentStorageConfig section's third Service entry (the one named Table).

<add name="DevelopmentStorageDbConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentStorageDb;Integrated Security=True" providerName="System.Data.SqlClient" />

<add key="ClientSettingsProvider.ServiceUri" value="" />

<service name="Blob" url=""/&gt;
<service name="Queue" url=""/&gt;
<service name="Table" url="" dbServer="localhost\SQLExpress"/>

Note that the first entry uses "." to indicate local machine while the second uses "localhost."

Fear of the Cloud

Let's talk about fear of the cloud. Cloud computing is both new and big. This generates reactions ranging fear to doubt to outright skepticism in some people. This is natural as people struggle to get a handle on just what it is and what it means. How many big ideas of the past that we now take for granted in our everyday lives were initially greeted with skepticism or even outright mockery? Quite a few.

"Fear of clouds" existed before cloud computing ever came on the scene, and is known as
nephophobia. Interestingly, there are quite a few parallels between this real-world phobia, the fear of clouds, and its newer cousin, the fear of cloud computing:
  • In nephophobia, the patient can experience breathlessness, excessive sweating, nausea, dry mouth, feeling sick, shaking, heart palpitations, the inability to speak or think clearly, a fear of dying or losing control, a sensation of detachment from reality or a full blown anxiety attack. A select few seem to exhibit many of the same symptoms when confronted with cloud computing.
  • In nephophobia, the patient has to come to grips that they are fearful of something that poses no actual danger. The same is true of cloud computing: whatever area you're concerned about (data, security, reliability, management) is potentially done better in the cloud computing environment, and with less personal headache to you and your organization. Granted, some of this is true today and some of it will come as cloud computing platforms mature.
  • Treatment for nephophobia centers around "reality therapy", finding false constructs in the patient's mind and dealing with them, in effect reprogramming the subconscious. Likewise, a reality adjustment is a good treatment for fear of cloud computing: the more you understand about what it really is and how it works, the higher your comfort level is likely to be.

Fear of the cloud can take many forms, including fear of cloud storage, fear of cloud security, and fear of cloud reliability. In future posts we'll look at these aspects individually.

Dr. McCloud is here to put you at ease. Now sit back and relax so I can examine you with my nephoscope... aha, there's your problem!

Friday, November 14, 2008

What's Holding Back Cloud Computing

I saw this interesting Gartner slide in a blog posting entitled "What's Holding Cloud Computing Back?" Since I didn't realize cloud computing was being "held back" :) I paid some attention to it. Here's what Gartner listed as reasons, verbatim:
  • Service Management - technologies immature
  • Scalability - parallel processing, no problem; sequential processing, different story
  • Costs - economies of scale only go so far, unless customer is willing to trade data or advertising views for services
  • Culture - trust, chargeback, sharing
  • Connection - only as good as the Internet, unless you pay to harden your connection
  • High Availability - for workloads that are stateless, no problem; for stateful workloads, same issue as enterprises
  • Customization - difficult - at least with monolithic applications

Gartner is of course talking about the state of cloud computing generally as they see it. I thought it would be interesting to analyze whether these points ring true or not--and how deeply--with Windows Azure specifically in mind. Here's my take on it:

  • Service Management - technologies immature. It's true many of the technologies are immature, this is just the start of a big wave with many implications. A good example is SQL Services compared to SQL Server in the enterprise, the enterprise version is far more capable today. However, in the case of Windows Azure not everything is immature. Microsoft has been doing online for some time now, growing in the scale and variety and reliability of what they offer--and some of these properties have been using the data center infrastructure. In other words, the cloud platform Microsoft is offering is also used by Microsoft itself.
  • Scalability - strong parallel processing story, poor sequential processing story. This may be true of cloud computing offerings in general but here I think Azure has a very good story. One of the .NET Services in the platform is the Workflow Service. That would seem to address any kind of processing you have in mind, whether sequential, parallel, or a mix.
  • Costs - economies of scale go only so far. I'm not sure what they're getting at here, they might mean that there's only so much cost savings to be realized. Well, so what? It's still a refreshing set of new choices, and no one's taking the traditional choices away. Cloud computing--at least in the Microsoft vision of Software + Services, is not about abandoning the enterprise and traditional ways of doing things. The whole idea is have some software local and some software in the cloud. The beauty of the S+S approach is that each organization is free to make their own determination about what makes sense local and what makes sense in the cloud. Obviously, cloud computing going to have a stronger appeal for some more than others.
  • Culture - trust, chargeback, sharing. I do hear from some folks that they think the whole idea of putting software or data in the cloud is unrealistic, at least for their organizations. I guess my answer to that is threefold: 1. You may well be right, in your individual case. Some things just belong in the enterprise. 2. Secondly, the existence of a hosting industry testifies that some organizations are perfectly willing to put software and data "out there" as long as they can be satisfied about the security arrangements. 3. You might well change your mind down the road. Similar to web services, there are going to be the pioneers and the settlers in this new space. Not everyone's gong to be a pioneer, but the wave will likely hit everyone eventually one way or another.
  • Connection - only as good as the Internet. True enough. But in case no one's noticed, we're all becoming very dependent on the Internet. That includes how customers interact with your business.
  • High Availability - applications must be stateless. Well, that's true. The load balanced, virtualized, automatically provisioned nature of the platform needs stateless software to do well. But stateless has been a recognized best practice for some time now, especially in SOA, so this doesn't seem like a terrible restriction to me. And there are ways to pass state around even in nominally stateless applications.
  • Customization - difficult - at least with monolithic applications. Once again I'm a little unclear as to what's being said here. In the case of Azure, I can't think of any customization restrictions the platform forces on you as compared to using .NET on premise. There are, in fact, some very nice customization capabilities in the platform including the ability to simultaneous support different security systems through federated security.

Putting it all together, I think Azure stacks up quite well against where the rest of the industry is in cloud computing. No one's pretending platform maturity, but what does exist is already compelling and competitive.

Azure Assimilation Complete

I'm an Azure evangelist and I want everyone to know it. If you see this speeding by you on the freeway, it's me.

Monday, November 10, 2008

The Less is More Revolution

The Less is More Revolution
David Pallmann, Director, Custom Application Development, Neudesic

I'm making it official and declaring that we are now in the midst of a major revolution in computing, perhaps with overtones that extend beyond technology. I'm calling it The "Less is More" Revolution. It amounts to a major refactoring of how we do things, ...of how we do everything.

When I say "Less is More", you probably think instantly of
Apple, one of the great success stories in applying less is more as a design principle to hardware and software. If you're not a proponent of less is more, spending 10 minutes with an iPhone or an iPod will likely make a believer out of you.

But "Less is More" didn't start with Apple, nor does it end there. The phrase has actually been around since the 19th century. One of the founders of modern architecture who used the phrase often and believed deeply in simplicity of style was Mies Van Der Rohe, who dabbled in both architecture and furniture design. So less is more isn't new, but it is coming into full bloom.

"Less is More" certainly makes sense as a UI approach. The 80/20 rule frequently applies: you may find you can provide the important 80% of possible functionality with a mere 20% of the UI that you would need to cover everything. Not that this comes easily or automatically. It's not hard to make a simple interface that does simple things, nor is it particularly hard to make a detailed interface that does many things--but who wants to use either? What takes work and validation and refinement is finding the sweet spot where a simple and pleasing UI yields the most power for the user. That outcome is worth the extra effort it takes to get there.

Social networking web sites such as Facebook also demonstrate less is more. I and just about everyone else I know are on Facebook or similar sites constantly, and the primary activity is to update our "what are you doing right now?" status and view the status of others. From a computer science perspective, this is not exactly rocket science. From a social perspective, it's huge: I actually feel closer to friends and family today, many of whom are thousands of miles away, than ever. I feel more a part of their lives. It's a little thing with big implications. It's less is more.

The Agile Manifesto and accompanying interpretations are a good example of less is more in software development methodology. By focusing on what's important and reducing emphasis on the less important, you measurably accomplish more by doing less. In other words, less is more can be applied to process. This has great implications for improving business process itself as well as the technologies that support business process such as workflow engines.

"Less is More" has been popping up as a principle in web technologies as well. The influence of REST, an approach to simplifying the way data and resources are exposed on the web, is phenomenal. When I worked at Microsoft during the time when WCF was being developed, I don't think I heard the term "REST" once. Today, not only can WCF do REST, support for REST seems to permeate just about everything Microsoft is doing. Don't believe me? Search MSDN for "REST" and you'll get close to 500,000 hits.

"Less is More" and REST are both utterly pervasive in Windows Azure, Microsoft's cloud computing platform. Just about anything you could want to do with the cloud computing platform can be invoked or accessed as an HTTP REST URL. That includes database storage and queries with SQL Services. At the recent
PDC convention in LA, Don Box and Chris Anderson showed the attendees just how much they could accomplish using just REST and simple web HTTP requests. You can watch the video here.

In the cloud computing case, the "Less is More" effect is quite pronounced. As Microsoft extends its enterprise platform into the cloud, with new capabilities and new business models, you might well expect increased complexity in designing, implementing, and deploying software. Instead, there's less work involved. Things are just a lot simpler to get at and work with and combine and deploy, thanks to some great design decisions. I do have to admit "less" also rings true in another sense: there is less functionality available to you. Because the platform is so young, there are lots of things you give up. The cloud offerings aren't anywhere close to what the enterprise technologies give you, today, but they do give you the most important things. I'll readily admit SQL Services in the cloud appears to give me only a fraction of the functionality of SQL Server in the Enterprise in its present form. Of course that will change over time. The interesting point is, it doesn't matter. I'm going to happily use it anyway, because the "more" the platform gives me more than makes up for the "less": the way the platform is put together is so radically empowering that it's worth it to put up with functional omissions.

I'm thinking less is more is now a firmly entrenched and warmly embraced concept in the minds and hearts of consumers, meaning there's going to be more and more demand for it in everything from web applications to kitchen appliances. A growing portion of the public knows the difference between
overengineering and elegant design now from firsthand experience, and everything I'm observing indicates people will flock to refreshing alternatives in droves at every opportunity--even when there's some additional cost involved.

"Less is more" is sometimes defined as "minimalism", but I'm not sure I like that word as it suggests "doing without" or some sort of monastic asceticism. When less is more is done well, you don't feel like you've given up anything. Rather, you feel highly empowered and effective. When you encounter less is more engineering in your daily life on a regular basis, the sun shines a little bit brighter, the sky is bluer, and the birds are singing more loudly and cheerfully than ever. It's a good thing, and when you enter that zone you don't ever want to leave it.

Is less is more a discipline for designers, or is it a something to be mastered by every developer? I say it needs to be both. We clearly won't get less is more pervasively unless designers lead the way with this as a foremost principle, but less is more extends far beyond design, as we've already illustrated. Developers need to practice less is more every time they create a class, implement a function, or design an interface. Remember, less does not automatically lead to more: that result is never an accident. Rather, it's a by-product of conscious intent. For this reason, all developers need a firm understanding of the principle. Fortunately, excellent groundwork has been laid by Martin Fowler and others in advocating
refactoring. Less is more fits in with refactoring quite nicely.

What makes me think I'm right about this? These influences have been going on for some time, but my recent foray into Cloud Computing with Microsoft's Windows Azure platform is what brought it all into sharp focus. Exposure to elegance is contagious and addictive. Try it, you'll like it.

"I have made fire"

Cloud computing with Windows Azure is really cool, but you can't fully appreciate how cool until you've gone through the develop/test-locally/deploy-to-cloud/show-off-to-your-friends sequence for real. It's an amazingly empowering feeling to create an app (on a whim perhaps) and soon after have it running live where the world can access it--without having had to obtain and set up servers and domain names and all those other things that take time. Here's how I can best describe what it feels like:

In the film Castaway, there is a moment when Tom Hanks finally is able to get a fire built. Beating his chest, he proclaims to the world, "I HAVE MADE FIRE!" That's exactly how you will feel when you get your first cloud app running and deployed, no matter how simple your first effort is.

Last week, I made fire. Who knows what this week will bring!

Saturday, November 8, 2008

My First App in the Cloud: "Whatsup"

This week I wrote my first "real" Azure app and published it into the cloud. It's called Whatsup, and is available here on CodePlex.

"Whatsup" is a simple version of the "what are you doing right now" functionality you find on Facebook and other sites. Whatsup lets you post your name and status and view the statuses of others. Here's what it looks like.

When you access the page, you see the recent status of others. If you enter your name and status and click Post, the page updates to show your status top most.

Obviously this isn't a terribly sophisticated program, but it does make a nice transition from "Hello, Cloud" to something more substantail. You can actually build this app from scratch in front of an audience and deploy to the cloud in 30-45 minutes which makes this great for user groups and training sessions.

Whatsup is an ASP.NET application that also uses SQL Data Services for storage. I had planned to leave a hosted version of whatsup online for public access, but it appears the dev Azure accounts have a 1-project limitation :( ... and I need to move on to develop more apps.

Thursday, November 6, 2008

How to Deploy an App to the Azure Cloud, Step by Step

Once you've written a Windows Azure cloud application in Visual Studio and tested it locally, it's time to deploy it to the cloud. Here's how:

1. In Solution Explorer, right-click the cloud project and select Publish.

2. The publish folder for your application will open in Windows Explorer, showing a package file and a config file. You'll need those in a moment.

3. The cloud portal will open up in your web browser (you have signed up and received your cloud account, right? If not, go to right now and take care of it).

4. Either create a new project on the portal or select an existing one. You'll then be at the page shown below, which I'll refer to as the Environment Page. On the left is a Production environment, and on the right is a Staging environment.

5. If you have a Deploy button under the Staging environment, proceed to Step 6. Otherwise, click Delete to delete the previous deployment. After that a Deploy button should be visible.

6. Click the Deploy button under Staging and you'll get this Staging Deployment page.

7. Now click the first Browse button and select the .cspkg ("cloud service package") file from the Publish folder that opened up in Step 2. Then click the second Browse button and select the .cscfg ("cloud service config") file. Lastly, enter a label for the deployment, such as a version number.

8. Click Deploy and the process will begin. It may take a little while.

9. Once deployment is complete, you'll be back at the Environment Page and will have new buttons under Staging. Click Run to start your app running in the staging environment.

10. To access your app, click on the Website URL link (in red, contains a GUID). Your app will open in a browser window. Try it out and make sure it's working as you expect. You can repeat this entire process as many times as necessary if you need to make changes to your project.

11. Once you're happy with your app in the Staging environment, you can switch it over to Production. Just click the Promote button (blue circle with white arrows).

12. After a brief wait, your app has been moved to Production. It can now be accessed at its intended URL. You're done!

Windows Azure group on Facebook

I've set up a Windows Azure group on Facebook so fans of Azure can network. I'm also hoping this will drive awareness of the national user group that has just been launched and the local chapter meetings which will be starting soon in select cities.

Sunday, November 2, 2008

How to See and Say "Azure"

Last week, Microsoft unveiled the name of it's cloud computing platform, Windows Azure. Is this a good name or a bad name? What does it mean, how do you say it, and why did Microsoft choose it?

Azure, most people know, means blue. But which blue? Wikipedia somewhat unhelpfully first tells us the precise hue that azure is, then does an about face and admits it can be a synonym for blue in general, often sky blue or United Nations Blue.

"Azure is a blue color on the HSV color wheel at 210 degrees. Azure is the hue that is halfway between blue and cyan. Its complementary color is orange.

Azure is a near synonym for the color blue. Commonly it refers to a bright blue, resembling the sky on a bright, clear day.


In some color systems, azure is defined more specifically. In the X11 color system which became a standard for early Web colors, azure is a pale blue color. "United Nations blue", as it's called by the United Nations, is the light blue color of the Flag of the United Nations and of the helmets worn by the United Nations peacekeeping forces.

And then there's the matter of how to pronounce Azure. Is it "az'URE" (rhymes with "bonJOUR"), or "AZ'ure" (rhymes with... nothing). I fully expected when I checked to find both pronunciations listed, but it turns out only the latter pronunciation (emphasis on first syllable) is correct. So it's AZ'ure (āzh'ər). It may well have a different pronunciation in some other languages.

Hue and pronunciation aside, Windows Azure is an exciting cloud computing platform. At least, that's how I see it. And say it.

Friday, October 31, 2008

First Time in the Cloud with SQL Data Services

I just completed putting data into the cloud for real and getting it back out using SQL Data Services for the first time, and I wanted to share the experience.

I've been chomping at the bit to do some real cloud computing ever since attending a Software Design Review about 7 weeks ago. I could develop locally with the pre-CTP SDK that was made available to me, of course, but I didn't have a cloud account. The whole idea is to use the cloud after all, so cloud computing on your local box isn't terribly exciting. At PDC2008 the platform was branded (Windows Azure), the CTP given out (updated software), and most important of all you can now sign up for cloud accounts.

I finally received an Azure Services account invitation this week which allows me to make use of SQL Services and .NET Services. Apparently a separate but similar process will give me the ability to put applications into the cloud. In the meantime, I'll have to be content creating local apps that can use the cloud for storage, access control, service bus communication, and workflow (those last 3 are what .NET Services gives you). This is what the portal looks like once you've set up your account:

I decided to start with SQL Data Services. There is an SDK for SDS, which you can download from the SQL Data Services Developer Center. Included in the SDK is SDS Explorer, which looks like this:

While the SDS Explorer is rather simple, simple is all you need to use SDS. HTTP GETs and POSTs are what you use to retrieve, query, or store data using REST. There are other ways to access SDS, such as using C# or Ruby, but using REST from the SDS Explorer seemed appropriate for first-time experimentation.

This is definitely not your father's SQL Server:
  • There's a learning curve. There's a new authority-container-entity hierarchy you need to understand. Authorties hold containers. Containers hold entities. Entities are like tables, but records are really just ids and data. An entity can be homogenous where all data is similarly structured, or jagged. Fortunately the documentation explains this nicely.
  • Access using REST is simple. It's way different from what you're used to in the enterprise (not necessarily in a bad way), but I found myself comfortable using GETs and POSTs to store and retrieve data in no time.
  • It's fun. Once I finally stored some records and was abel to retrieve them, I felt a real sense of accomplishment. And it was fun. Granted these are baby steps, but you've got to walk before you can run. Performance was excellent.

I have to admit, this experience is warming me to REST. Those restafarians might be on to something after all.

Wednesday, October 29, 2008

Cloud Computing User Group

I'm involved in helping form a national user group for Microsoft's cloud computing platform, Windows Azure. A community web site is now up at where you can post info, ask questions, and share everything from ideas to code. Check it out!

The user group will also have local chapters. These can be in any location where someone is willing to host the meeting each month and find a place to meet. Microsoft consulting partner Neudesic has offered to provide meeting space in its locations. It looks like the first meetings, which could be within the month, will take place in Seattle, L.A., Orange County (CA), San Diego, Phoenix, Denver, Dallas, and Philadelphia. Thank you Neudesic!

Cloud Computing is a big thing, and it's going to take a community to pioneer it.

How Cloud Computing Will Affect Every Developer

I've been working on a talk / presentation called How Cloud Computing Will Affect Every Developer, with Microsoft's Cloud Computing Platform (Windows Azure) specifically in mind. I used it for the first time today and it worked well.

Today at the PDC, Mickey Williams and I gave this talk in the form of a conversation using this presentation for Microsoft's Channel 9 (Internet video). It should be showing up on the Channel 9 site ( soon, I'll include a link once it appears.

A PDF of the presentation itself is available here:

Here's an outline of the deck:
  • Level Set - Clearing up Cloud Terminology
  • Cloud Computing in a Nutshell
  • Microsoft's Cloud Computing Platform
  • Impact all Developers will Feel
  • Impact on Enterprise Developers
  • New Patterns for Business Apps
  • Cloud Service Application Model
  • EAI Developers
  • SOA Developers
  • SQL Server Developers
  • Web .com Developers
  • Computer Science / Grid Computing Developers
  • Consultants
  • Product Developers
  • Start-ups
  • Leveling the Playing Field
  • One Last Category... "I Don't Have a Use for Cloud Computing"
  • Summary

PDC2008 Report, Day 2 (Tuesday)

Day 2 of the PDC began with another keynote. This time the topics covered were Windows 7, .NET, WPF, and Visual Studio. There was also a technical demo by Don Box and Chris Anderson.

Windows 7 highlights (Steve Sinofsky):
  • Addresses lessons learned from Windows Vista and Windows Server 2008. It has had important work in the areas of ecosystem readiness, standards (CSS in IE), compatibility (UAC "went too far"), and better support for certain scenarios.
  • Remote desktop can support multiple monitors.
  • Task bar - small icon support, customizable shut down button
  • Action Center - you can change (or hide) all messages for all Windows subsystems
  • UAC slider (you decide how much you want)
  • Developers get ribbon user interface, jump lists, libraries, multi-touch support, Ink/speech support, DirectX improvements
  • Fundamentals: work to decrease memory,m disk I/O and power; and increase speed, responsiveness, and scale.
  • Memory sticks can be encrypted, so if you lose one no one else can do anything with your files.
  • VHDs can now be created from hard drive images easily. You can also boot natively from a Win7 VHD.
  • Better DPI controls and multiple monitor controls.
  • Improved magnifier. Win+, Win- to zoom.
  • Amazing project set up via Win+P keystroke.

Building Great Apps - Scott Guthrie ("ScottGu"):

  • Win7 apps - win32/c++: New Win7 APIs. MFC for Win7 - ribbon UI and multi-touch support.
  • VS2010 - IDE support for very large code bases. Multi-core app dev.
  • Windows apps with .NET - .NET 3.5 SP1 improvements: streamlined setup, start-up performance improvements, graphics improvement, WPF DirectX interop, more controls.
  • New WPF toolkit (for all versions off Windows). New data grid, data picker, calendar, ribbon controls.
  • Windows apps with .NET 4.0 - WPF improvements (multi-touch, deep zone, visual state manager). Fundamentatls and interop (in-process side-by-side support for multiple CLRs, managed/native code interop, dynamic language support, extensible component model). Improved tooling in VS2010.
  • VS2010 - changing over to be WPF based. Very extensible. Multi-monitor support. Refactoring support. Better test/developer workflow.
  • IE8 - improved standards support, web slices, visual search, accerlators, built-in tools for Javascript debugging.
  • ASP.NET in 2008 - dynamic data, REST, MVC support, Ajax/JQuery. Intellisense + JQuery downloadable now at
  • ASP.NET 4 - web forms, MVC, Ajax, distributed caching ("Velocity") in CTP stage now.
  • VS22010 for web development - code focused improvements / editor improvements, JS/Ajax tooling, design view, SS2 support, publishing and deployment, possible to maintain a separate config file for each environment.
  • Sliverlight 2 - Netflix Instant Watch is live now using Silverlight. Silverlight toolkit (charting, tree view, dock panelo, wrap panel, view box, expander, ....). Silverlight designer in VS2010. Working on Silver in or outside the browser.

In the technical sessions, I concentrated today on Oslo, whicih is about modeling. I'm going to post on that separately.

Monday, October 27, 2008

PDC2008 Report, Day 1 (Monday)

The PDC formally began today, as usual with a morning keynote talk by a number of Microsoft executives. Due to excessive LA morning traffic it took my hotel shuttle over an hour to get to the convention center which cost me the first half hour of the keynote but I was there in time for most of it. Ray Ozzie and Bob Muglia are excellent presenters.

As expected, the cloud computing platform has been officially announced and is the star of the PDC. The platform is being called Windows Azure and sports a light blue Windows logo.

Here's the architecture:
  • Windows Azure is the cloud operating system This includes a utility computing infrastructure, a basic API for things like storage, a new app model, and a powerful portal for uploading and managing cloud services.
  • Azure Services are building block services for applications. This includes Live Services, .NET Services, SQL Services, SharePoint Services, and CRM Services.
  • Above that are Software as a Service (SAAS) applications from Microsoft. The consumer ones are branded with Live and the business ones are branded with Online.

There is a web site for Azure,

After the keynote, the sessions kicked off many of which explore the cloud computing platform in more detail. But that's not the only thing at the PDC. There's also Oslo (about modeling applications), Dublin (making Windows Server into a superior app server), Surface (awesome table-top interactive graphical surface), .NET 4.0, and more.

I've known about the cloud computing platform details for about 6 weeks but was under non-disclosure. Now that the platform is public I can discuss it openly.

A national cloud computing user group community has been started at (not a Microsoft web site).