Friday, September 30, 2011

My HTML5 and Windows Azure Sessions at SoCal Code Camp Los Angeles 10/15-10/16/11

SoCal Code Camp Los Angeles is coming up October 15-16 2011 at the University of Southern California. I'll be there, both giving and attending sessions. The two sessions I'm giving are Getting Started with HTML5 and Windows Azure Design Patterns, both on Saturday afternoon (detail below).

Several of my Neudesic colleagues are also giving talks. Robert Altland is covering Mobile web development with HTML 5 and jQuery Mobile. Muhammad Nabell is covering WPF Styling Architecture. Oleksiy Tereshchenko is covering Introduction to functional programming using F#. By the way, we're always looking for top notch developers at Neudesic. If you're going to be at SoCal Code Camp and are interested in working with us, please speak to me or one of my colleagues who are presenting.

Code Camp is a great event, and if you're a developer in the LA area you should seriously consider attending. What makes it great? First off, there's a lot of great information shared about many technology subjects that are hot today. Second, it's absolutely free. Third, it's open for anyone to be a presenter so it's a climate of peers informing peers as well as experts expounding on what they know.

Getting Started with HTML5
Saturday October 15, 12:15pm, SLH-200
Hearing a lot about HTML5 but not sure what it means for web development? Wondering how to get started with it? In this session, David Pallmann will explain the transformation of the front end that's going on with HTML5 and the blurring between web, tablet, and phone applications. You'll see compelling examples, gain insight into where the web is going, and get pointers on how to get started with HTML5 development yourself.

Windows Azure Design Patterns
Saturday October 15, 2:45pm, ZHS-159
David Pallmann, Windows Azure MVP and author of The Windows Azure Handbook, will review Windows Azure architecture and share design patterns for applications, hosting, storage, relational data, communication, network, and security design patterns. He'll also give away a copy or two of his Windows Azure Handbook and point you to online resources and samples.

Saturday, September 17, 2011

The Web Server is Dead

Are you sitting down? I thought you should hear this from a friend. Well, there’s no easy way to say this but… the web server is dead. Yes, dead.


You don’t believe me? That’s fine—denial is the first step in the grief process. Come on, you say, there are over 250 million web sites out there and they are being served up by something. True enough. Web servers matter very much, as a part of infrastructure. But your application web server, that dedicated back end hosting your web application, that’s an endangered species. Web software is losing its affinity to specific web servers. To put it bluntly: your web application and your dedicated web server are getting a divorce. Now you seem to be getting angry—good, that’s the second step in the grief process so we’re making progress already. I think you’ll see over time that this is all for the best. These things happen for a reason. Allow me to explain further.

THE WAY WE WERE

Your application software and your web server once had what seemed like a perfect relationship. The web server was a good host for your web software, and in turn your web software gave the web server purpose. This arrangement had a lot going for it: your web software had a definite home, a place to live with a well-known address. It was good. It felt so right. It made sense.

The Way We Were: One Kind of Client, One Back End


THE WAY WE ARE

But today’s web has different demands. The combined effects of devices, HTML5, social media, virtualization, and cloud computing are transforming the characteristics and design of web applications so much, they’d barely be recognizable to our former selves of 5, 10, or 15 years ago. Let’s consider four aspects of these changes that are contributing to the demise of your web server: extreme distribution, separation of concerns, elastic infrastructure, and global scale. A good term that captures these trends is connected devices, continuous services.

The Way We Are: Connected Devices, Continuous Services


Extremely Distributed Applications. Web applications are becoming extremely distributed. On the front end, their reach is extending to support not just browsers on PCs but various devices such as phones and tablets. On the back end, multiple services and data stores are needed, often involving third-party providers. Housing all of this in one place is no longer viable, realistic, or even desirable. Moreover, web clients are more capable and assertive these days, and are able to consume services directly rather than having to go through the “home web server”. As a larger part of our web applications move over to the web client side, more of our workflow and logic moves with it.

Separation of Concerns. Many functions traditionally considered the domain of the web server are being separated out as independent services, often provided by other parties. To use security as an example, identity has traditionally been handled by the application code in partnership with the web server. A more modern approach to identity makes use of identity services from one or more identity providers. Another example of pressure to separate into multiple services is the increasingly popular CQRS pattern, which might compel you to implement reading and writing separately and deploy those services at different levels of scale.

Elastic Infrastructure. Virtualization was the first big step in destroying application-server affinity. With our servers becoming VM farms, we can easily relocate them to any available hardware. With continued advances in virtualization, some extremely sophisticated “private cloud” capabilities are developing. For example, the upcoming Windows Server 8 will allow you to pool your compute, data, and network resources and virtualize them in preferred allocations for multiple tenants. It can even relocate VMs while they are running. That’s a prime example of servers still being very necessary, but acting in the role of infrastructure rather than being strongly associated with a specific application.

Cloud computing takes elasticity even further. In the public cloud, once you have uploaded an application package or VM image, you can instantiate or remove server VMs on a moment’s notice. For example, on the Windows Azure platform you can request N compute instances and typically the VMs will be allocated, provisioned, and ready for use within 15-20 minutes. The cloud operating system, called The Fabric in Windows Azure, ensures you have the requested amount of resources but the individual VM instances and the machines hosting them can change over time.

Virtualization advances and the elasticity of cloud computing are too big to ignore. Those physical application servers that have become virtual servers are now able to float over a fabric of shared infrastructure. Applications are no longer tethered to specific machines and neither are VMs.

Global Scale

It used to be that global scale and worldwide presence of web sites was only the concern of the large, multi-national corporations. Today, everyone wants their web applications to run anywhere and everywhere. Thanks to developments like cloud computing and content delivery networks this is not only feasible but affordable. To bring content such as images and video closer to consumers, we can use content delivery networks which utilize a worldwide infrastructure of edge cache servers. To bring our applications and data closer to our users, we can deploy to multiple cloud data centers around the world. To use Windows Azure as an example, there are multiple data centers in North America, Europe, and Asia you can deploy to. The platform also has a Traffic Manager Service which can route user traffic to the most appropriate data center based on locale or other criteria.

Maybe You Don’t Want This World?

Perhaps all of this sings to you, as it is does to most of us in the tech world. Then again, you might be saying to yourself, “That’s not for me; I’m very happy with the way I’ve been doing things and don’t want to change.” Well, okay, let’s work through the bargaining, depression, and acceptance stages.

You can’t fight the fact that the web is changing nor is it something you can afford to ignore. The influence of HTML5, smartphones, tablets, virtualization, cloud computing, and social networking are each huge in their own right, and the combined effect on the web is truly transformational. The web is changing our lifestyles, and that includes the people who use your web site, whether they be customers, employees, or the public. If you want to stay relevant to your web users, you must change with them.

Conclusion

Web servers are more important than ever, but the way we use them has shifted unmistakably, so much so that we must pronounce the traditional web server dead. The extreme distribution of our applications and growing separation of concerns means a plethora of services has replaced the monolithic web server. The move to elastic infrastructure and global presence means we don’t have to be concerned about which servers we’re running on or even where they are located.

There, I told you it would all work out for the best. We salute you, Web Server, but it’s all about connected devices and continuous services going forward.

Friday, September 16, 2011

Live from the BUILD Conference – Windows Azure 1.5

While a lot of BUILD was focused around Windows 8 and Windows Server 8, cloud was not ignored. Windows Azure figures into the revised Microsoft platform strategy and there are also some updates and announcements around Windows Azure that came out this week. There were also some good sessions on Windows Azure given at the conference which will be available for online viewing shortly.


First off, strategy. The common vision that interconnects everything shown at build is "connected devices, continuous services" -- and cloud services figure prominently in that equation. And while there is some direct integration to Windows Live Services in Windows 8, Windows Azure plays an equally important role. It's the place to host your own application services and data with worldwide scale. In addition to Compute, it's valuable services for Storage, Relational Data, Community, Networking, and Security are essential infrastructure.

Here are significant Windows Azure announcements made this week:

Windows Azure SDK / Tools for Visual Studio 1.5. The updated Windows Azure SDK 1.5 includes an overhauled emulator for local development, performance improvements, validation of packages before deployment, bug fixes, and expanded command line tools. Enhancements for Visual Studio allow you to profile your Windows Azure applications, create ASP.NET MVC3 web roles, and manage multiple service configurations in a cloud project.
Service Bus Released / AppFabric SDK 1.5. Some exciting updates to AppFabric Service Bus have been in preview for most of this year which include brokered message features such as queues, topics, and subscriptions. The updated Service Bus is now released, and to go with it there is a new AppFabric SDK 1.5.
Windows Azure Toolkit for Windows 8. For those getting an early start on Windows 8 development, the Windows Azure Toolkit for Windows 8 provides the same kind of cloud service support Microsoft released earlier this year for various phone platforms.
Windows Azure Autoscaling Application Block. This is a code block that helps you auto-scale your cloud applications. It is currently in preview and the code is available in binary or source code form using nuget.
Updated Management Portal. The Windows Azure management portal has been improved. In particular, the SQL Azure data management area of the portal has been overhauled and enhanced.
Geo-replication of Windows Azure Storage. As you may know the 6 Windows Azure data centers can be considered pairs (2 in North America, 2 in Europe and 2 in Asia). Your Windows Azure storage is now replicated to the "other pair". This is automatic and isn't something you can visibly see or manage, it's there for failover in the event of a catastrophic data loss in a data center. There's no extra cost associated with this, it's simply another level of protection Microsoft has added to the platform in addition to the triple-redundancy we already enjoy within each data center.

My colleague Michael Collier covers some of these features in a lot more detail on his blog. The Windows Azure platform keeps getting better and better, and it's nice to see the pace of work on improving it hasn't slowed any.

Thursday, September 15, 2011

Live from the BUILD Conference – Windows Server 8

After Day 1 of BUILD being so momentous, I was honestly expecting a letdown on Day 2. What could possibly compete with the wealth of exciting information we got about Windows 8? I’m happy to report that Day 2 was packed with oodles of great announcements and demos about the back end (server, cloud) and developer libraries and tooling.


Moreover, the “front-end” coverage on Day 1 and the “back end” coverage on Day 2 are linked through a comprehensive strategy of “connected devices and continuous services”. This phrase, much easier for all audiences to parse and understand, is a big improvement over “software + services” or “platform as a service”. It beautifully reflects the device/HTML5 revolution that is happening on the front end and the cloud computing revolution on the back end. Rarely have I seen this much collaboration and shared vision between the teams at Microsoft. It’s really refreshing!

There was a whole lot shared on Day 2, and once again it will take some time to really absorb it all. For now, I’m going to focus on Windows Server 8 and cover the rest in additional posts.

Windows Server 8

Just as we have a new client OS on the horizon with Windows 8, a new version of Windows Server is in the works as well: Windows Server 8. If Windows Server 8 is about one thing, that thing is “private cloud”: it has extremely advanced virtualization features such as the ability to relocate running VMs, and the management is implemented in an extremely user-friendly way. Here are the highlights on Windows Server 8:

Overhauled User Interfaces. Windows Server 8 has some nice management interfaces that are friendly and approachable.
IIS. IIS has application platform improvements. I haven't learned the specific details yet.
HA. You can build small-size clusters that have high availability.
Private Cloud. Windows Server 8 is a virtualization platform, allowing you to create a private cloud on top of your existing on-premise infrastructure.
Live Migration. Relocate a VM’s hard disk storage to another location, even a remote location, while the VM is running.
Multi-tenancy. Windows Server 8 deeply understands multi-tenancy, allowing you fine control over how you provision compute, storage, and network resources for application workloads.
Storage Spaces. This feature allows you to manage multiple drives connected by Serial Attached SCSI (SAS). For example, you could form a single storage pool from a dozen hard drives, then partition that into multiple virtual drives. This was demonstrated to be easy to manage (“You don’t need a PhD in storage to be able to use it”).
Parallel Networking. Windows Server 8 can leverage multiple NICs simultaneously to strongly boost throughput and to provide fault tolerance.

As you can see, Windows Server 8 is a real tiger! --and I’ve only scratched the surface. Check out this InfoWorld article for a more detailed overview and get a view of the new UI from this PCMag.com article. I also really encourage you to watch the Day 2 Keynote from the BUILD site. MSDN subscribers can download a developer preview of Windows Server 8 right now.

With Windows 8 and Windows Server 8, Microsoft has pushed the envelope on what an operating system should do and how it should do it, in a ground-breaking way. Together with cloud services (Windows Live, Windows Azure, Office 365), they make the vision of “connected devices, continuous services” more than just a neat idea: they make it reality.

Wednesday, September 14, 2011

Live from the BUILD Conference - Windows 8

On Tuesday the BUILD conference got off to a roaring start, and it was all about one thing: Windows 8. After an unprecedented amount of secrecy and mystery, we finally got our first real look at Windows 8. Except it was more than a look--Microsoft spent the entire day going through the goals, user experience, application model, and development platform for Windows 8 in much detail. You can watch the keynote yourself on the BUILD site and the session videos will also be posted there as the week progresses. I can tell you already that this is one of the most significant developer conferences Microsoft has ever put on: the amount of good stuff shown was staggering and overwhelming and I'm still absorbing it. There was so much vision, style, and creativity shown I thought I was at an Apple conference! Best of all, a Windows 8 developer preview has been released that you can get now at http://dev.windows.com.


Windows 8 Highlights
There was so much new information shared yesterday it's going to take a while to sort it out and digest it--but let me give you the highlights now.

PCs and Devices. Windows 8 will run equally well on ARM devices like tablets as it will on PCs. Given that some people are calling this "the post-PC era", that's important!
Touch support is really important and is baked into everything. It was stated, "in the future a screen that doesn't support touch is a broken screen". However, mouse and keyboard remain fully supported throughout. The touch support is way more than simply emulating what a mouse does--it's extremely sophisticated and well thought out based on extensive usability research.
Metro. Windows 8's default interface is called Metro, but you can also get to traditional views like the desktop we are used to today. Watch the keynote and you'll get a good sense of what Metro is like. The key phrase is "fast and fluid".
Metro App Model. There's more to Metro than the operating system - there's also a new app model. A Metro App follows a comprehensive set of design and interaction rules and uses a new runtime API called WinRT. Metro apps give up the entire screen to content and are "chromeless". Some people were joking that it is ironic that the new Windows doesn't have windows!
WinRT. The WinRT runtime supports C++, C#/VB/.NET, and HTML/CSS/JavaScript equally well as first class citizens. Essentially the Windows APIs are now available to all of those development environments. XAML is strongly supported, not just for Silverlight/.NET but even for C++. An alternative to XAML is HTML/CSS/JavaScript.
Contracts allow apps to cooperate in such activities as search, sharing, and picking. An application manifest describes a Metro app's capabilities.
Tools. Visual Studio 11 and Expression Blend 5 strongly support WinRT. Blend even lets you work with native HTML5/CSS.
App Store. Windows 8 includs an App Store - which gives developers access to a market of 450 million people!
Cloud support figures prominently in Windows 8. Although Windows Live services were given the spotlight, Windows 8 apps can obviously also make use of other cloud services such as the Windows Azure platform.

Windows 8 and HTML5
What I'd expected to hear was something along the lines of "a Windows 8 app is natively an HTML5 web application" but that's not the story at all. Instead, there is a new kind of app, a Metro app, and you can create equally good Metro apps in everything from C++/XAML to C#/XAML to Javascript/HTML/CSS with no difference in capability or development tool support. From the standpoint of keeping pace with inevitable changes while not alientating existing developer constituencies, this was nothing short of brilliant.

How does an HTML5-based Metro app differ from an HTML5 web app? In these ways:
• Packages - a Metro app has to be "packaged" and needs an application manifest.
• Not a Web App - although Windows makes use of the IE rendering engine, a Metro app is not a web app, it's a Windows app.
• WinRT - If you want to do more than what a sandboxed web app can do, you need WinRT which can be accessed directly from JavaScript.
• Metro styling - the design guidelines for Metro expect your app to conform to specific display, interaction, and form factor guidelines.

Although I was hoping for a "less proprietary" HTML5 story on Windows 8, this is still a big deal: I can create web apps in HTML5 and leverage that code to also create Windows 8 Metro Apps.

Tablets
Those who made the trip to attend the conference in person were certainly rewarded--this year's give-away was a Samsung Galaxy tablet with a developer prreview of Windows 8! It includes a wireless keyboard, a tablet stand, and an AT&T 3G data pass. Microsoft stressed that this tablet is powerful enough to be a development machine and is configured that way. There have been give-aways at past PDC conferences but this one is a real home run.

Monday, September 12, 2011

Live from the BUILD Conference - Expectations

I'm in Ahaheim (home of Disneyland) this week for the Microsoft BUILD conference, which kicks off tomorrow. I'll be providing updates all week on my blog and also on twitter (@davidpallmann).


This year's conference, which replaces the traditional PDC conference, is shrouded in mystery! The web site says next to nothing about the agenda (right now, anyway), and having just registered hasn't provided any enlightment--my event guide says nothing about what the sessions are. Well, it'll all come out tomorrow in the 9am keynote, which anyone can tune in to.

We do know Microsoft will be talking a lot about two things: Windows 8 and HTML5. I think HTML5 and what that means for the Microsoft development roadmap is the big story here, and that's certainly not unrelated to Windows 8. Here are some expectations and questions I hope to have answered:

Windows 8 Unveiled. We'll surely see and learn a lot about Windows 8, an OS that will serve users of PCs and "post-PC devices" like tablets equally well.
Write Once, Run Anywhere (and Everywhere). I think we'll be told that going forward, "a Windows App = a Web App = a Device App", thanks to HTML5* (the asterisk indicating related technologies like CSS3 and JavaScript). I'm hoping Windows Azure cloud services are tied in to that story!
IE9 and HTML5? Microsoft has made a big deal about IE9 and HTML5 in the last year, but it seems IE9 scores somewhat low when you visit HTML5 compatibility testing sites like html5test.com, and even the IE10 Test Drive Preview scores pretty low. Many of the cool HTML5 demos I find online don't work with IE9 today. What's up with that?
Silverlight. How should Silverlight developers think about HTML5? Is there anything planned that will integrate Silverlight with an HTML5 world in any way?

While Windows and front-end web development may be in the spotlight at this show, I'll bet there will be interesting news on the Windows Azure front as well. I plan to cover all of it and share here, so stay tuned!

Friday, September 9, 2011

Windows Azure Design Pattern Icons Update - Now Resizable

Not too long ago I released a set of Windows Azure Design Pattern Icons, which are related to my Windows Azure Design Patterns web site and upcoming Windows Azure architecture book (Volume 2 of The Windows Azure Handbook series).

Since making these icons available for download, I've been gratified to see many people using them. I've also had some requests for something that is resizable. I've gone ahead and updated the icon download zip file to also include Enhanced Windows Metafile (.emf) files that you can resize nicely in tools like PowerPoint and Visio. As you can see from the example below, this vector format allows you to resize these icons without pixellation.

Enjoy!

Monday, September 5, 2011

When Worlds Collide #2: HTML5 + Cloud = Elasticity²

In a previous post I’ve written about the dual revolutions going on in web applications: HTML5 and devices on the front end, and cloud computing on the back end—how they influence each other and are together changing the design of modern web applications. In this post I’ll talk about an aspect both share, elasticity.
Elastic Scale of the Cloud

Elasticity is a term frequently used in cloud computing. Amazon Web Services even named their compute service “Elastic Compute 2”. Elasticity means we can allocate or drop resources at will: if we need more servers or more storage, we ask for the resources we want and have them minutes later, ready to use. If we’re done with a resource, we release it and stop paying for it. This is all self-serve, mind you: there’s no bureaucratic process or personnel to go through. Elasticity is one of those defining characteristics that sets true cloud computing apart from traditional hosting.


Using the Windows Azure platform as an example, there are several levels of elasticity available to us. The elasticity most often spoken of is the ability to change the number of VM instances in the roles (VM farms) that make up your hosted cloud application. There are other areas we can consider elastic as well: we can make our individual VMs larger or smaller, choosing from 5 different VM sizes that give us varying amounts of cores, memory, and local storage. We can choose from a variety of database sizes. We can even scale our application to a global level by deploying it to multiple data centers around the world and using a traffic manager to route access, based on locale or other criteria.

Elastic scale can be enlisted manually, where you simply request the changes you want interactively; or it can be automated, where you programmatically alter the scale of your cloud application. You might change the size of your deployment based on activity levels you are monitoring; or you might be able to anticipate load changes by something very predictable like the calendar and well-known seasonal patterns of behavior. Elasticity isn’t just important for scale reasons: it’s also an essential ingredient in the cloud’s cost model, where you only for what you use and only use what you need.

You can think of the cloud, then, as a very big rubber band: one that lets you run as small as a tiny, barely-costs-anything “caretaker” deployment all the way to global scale that can service millions. A change you could put in effect the same day you discerned the need for it, by the way.

Elastic Experiences in HTML5

Although we often use different words for it, web applications can be elastic too—but in a different way. Modern web sites can and should be responsive: that is, adaptive to a variety of devices, screen sizes, aspect ratios, and input methods. The philosophy, movement, and features behind HTML5 promote and enable this notion of elastic experience. While it’s not uncommon today to implement web applications individually for browsers and mobile devices (either as m. sites or native device applications), where we’re heading is to more typically implement a site once that runs on a PC browser as well as a touch tablet or phone. As our world becomes more and more about smaller devices and larger screens, and using more than one device to access that world, this “write once, run anywhere” approach is simply to going to make more and more sense and minimize expense. Not always, but much of the time.
The elasticity of experience is not only about adapting to smaller size or larger screens, though: there are a host of related considerations. Layouts have to change to suit aspect ratio and orientation; the form of input and navigation can vary from mouse and keyboard to touch; some font choices are unusable or look ridiculous on extremely small or large displays; some functional aspects (such as the availability of JavaScript) aren’t always available. What is needed then is more than mere fluid layout: applications need to make intelligent decisions about many things in order to maximize their usefulness and usability in whatever context they find themselves. Historically there has been a widespread belief in the need for “graceful degradation,” where you give up features and aspects of the intended experience with more limited devices; the new thinking turns this around to say we begin with a very decent and tuned experience even on limited devices and practice “progressive enhancement” as we get larger screens and the availability of more features. For a very good treatment of this subject, see Ethan Marcotte’s inspiring article and book on Responsive Web Design.

So you can also think of web sites done in the spirit of HTML5 as a rubber band, too: one that’s all about the elasticity of layout, navigation, and progressive enhancement, providing good experiences without compromise that bring out the best in whatever device you happen to be using today. Actually, a more fitting analogy than a rubber band is a gas. A gas? That’s right; remember what you learned about gases in high school physics? A gas will expand in volume to fill its container no matter what its size and shape. Go and do likewise. And you thought you’d never use Boyle’s Law in real life!

Elasticity Squared: The Combined Effect

As we’ve seen, both the front and the back end of modern web applications share this characteristic of elasticity. There are even more dimensions of elasticity we could discuss, such as the elasticity of data, but we’ll save that discussion for another time.

In software design, as in many areas of life, there is often the “can’t see the forest for the trees” problem where you have to decide whether to focus on the big picture of how you serve your user constituency vs. the individual experience you are providing. All too often one gets attention and not the other on projects. When you join the new web with cloud computing, you bring together two disciplines that naturally pay attention to each area. Together, HTML5 and cloud computing bring elasticity to both the individual and the community they are a part of.

Next: When Worlds Collide, Part 3: HTML5 + Cloud = Location, Location, Location