Michael's profileBrownie PointsBlogLists Tools Help

Blog


    June 03

    The “Green” Movement

    I know people feel the need to be environmentally conscious. I do as well. But let’s get past the BS. Very few companies are “Green” for the sake of being “Green”. IBM spelled it out nicely with their commercials, the CEO doesn’t want to hear about going “Green” until he realizes that it can impact his bottom line (going green means a savings on energy bills). I’m all for that! I’ve been a major proponent of leveraging virtualization at our office. in the hopes that I can snag one of the servers that get decommissioned from consolidation we can reduce our carbon footprint and save on hardware maintenance costs.

    I came back late Monday night (or early Tuesday morning depending on your view) from an extended weekend in Chicago -- well technically it wasn’t the weekend for me since I was still working to finish the final stretch of this pretty interesting project at the office – and noticed that the dumpster that is normally in the parking lot was gone. Thinking nothing of it I bundled the garbage that had accumulated in the rental car (it gets better mileage than the family car so I’m being “green”), placed it in the pen where the dumpster normally would be and proceeded to unpack the family and dump the girls in their respective beds.

    I get home from work and find a notice on my door from the management community saying that per a previous notice the dumpster behind our unit had been removed and we were to use a centralized community trash compactor. Any further “infractions” would be penalized by a fine. Mind you this centralized garbage drop off is a good five blocks away from my unit.

    So I call and ask them if they really expect me to carry my trash 5 blocks in order to get rid of it. “Well most people just put it in their car and drive it there.” I’m not even going to go into my reaction regarding the thought of putting garbage in my car to drive to their dumpster (like it’s laundry or something) Here’s the punch line. They had the nerve to say on the notice this was part of their “Green Initiative” in “reducing carbon footprints by having one site for the waste company to pickup from”.  Really? You’re telling me that having 500+ Apartments load their car up with garbage and drive out of their way to dump it reduces the carbon footprint? Even IF it did, that’s not what I signed up for when I put my name on the lease. That’s tantamount to me looking at the apartment and seeing the Washer and Dryer in unit, signing the lease based on that and halfway through the lease, they take my Washer and Dryer away.

    By the way I feel sorry for the people who live in the units next to the central dump because it’s overflowing (grossly undersized for being the only dumpster in the entire FRIGGIN SUBDIVISION) and I’m sure it stinks and attracts rodents. But hey we’re saving a ton by making our residents do the work we’d have to pay for normally “Green”. So, if you don’t feel like hauling around trash for a quarter mile as part of your lease, I’d advise steering clear of Main Street on the Monon Apartments. I’m sure once they start realizing potential residents are choosing not to stay because there’s no nearby garbage unit, they’ll suddenly revise their “green” strategy. Until then they’re just another company using a buzz word like “Human Resources” thinking that it will cover up the stench of what they’re doing.

    April 06

    Blend Behaviors FTW

    In this post I talk about Blend Behaviors and how they can be leveraged to execute a command without any code-behind.

    Read more at the new blog

    March 20

    Baking Up Another Batch

    Mix ‘09 just ended today. Microsoft announced some amazing stuff there. I’ve got some samples I’m working on to share with you, I just didn’t have enough time to finish them for a zero-day release. What am I excited about from Mix?

    Silverlight 3

    Silverlight 3 has a lot of features that make it compelling not only as a Flash alternative in web scenarios, but the new out of browser experience presents a good case for using Silverlight as your default client framework. And the cross platform capabilities are just the icing on the cake. There are more goodies to talk about with Silverlight 3 as well, like:

    RIA Services

    I’m extremely excited about the scenarios enabled by the RIA Services Framework. RIA services acts as an application service layer between your UI and your application tier. There is a lot to talk about with this, but I like what I see, and so should the EF naysayers. I can’t do it justice here, but I do have a full post in the works about it. While you’re waiting, there’s a Hand’s On Lab for Ria.

    Azure

    There’s a lot to talk about with Azure from the announcement that SQL Data Services will support standard ADO.NET (and other TDS capable clients), to Windows Azure supporting PHP and Full-Trust code and beyond. I’ll save that info for my other blog.

    Blend 3

    There is not enough I can say about Blend 3! The WPF team has always talked about the Designer-Developer Workflow. Blend 3 takes it to another level. The most compelling feature of Blend 3 is Sketchflow. The best description I can give of Sketchflow is a digital storyboard for mocking up an application that happens to produce a working application. Trust me you’ve got to see this! There are a metric ton of other new features in Blend (and that’s just what’s in the Preview), but Sketchflow is the most intriguing to me.

    So that’s what I’m excited about from Mix ‘09. What has you buzzing?

    February 28

    Mozilla Lab Concept Series, Aurora, and Flow

    In this post, I talk about the Mozilla Lab Concept Series, particularly Aurora, and how Flow fits into the picture. Read more here.

    February 24

    Refactoring to Patterns: WPF Edition Part 1 The Vision

    I need to come up with a shorter title. Yesterday A few days ago, I gave some background on “Flow”, I know you guys are itching to get into some code; but remember we’re also attempting to talk about engineering software. Code is just one part of the engineering process.

    I know there has been a lot of disdain lately for "”Big Process” or over documentation. But there are some documents that are worthwhile whatever methodology your subscribe to. One of those documents is the project vision and scope. Essentially, your project vision provides guidance for what the goals of the system are. As a rule of thumb, when considering a requirement ask “does this align with the project vision?”

    I don’t believe much in process for process’ sake. I think Jeff Atwood said it best (in a post that I read as a result of my experiment), there is no recipe for the perfect program. Patterns, practices, and principles are not prescriptive, blindly following them is akin to trusting Google maps to get you to a destination in a strange town during construction season. In many cases, you’ll be just fine, but there will be those times when you wish you were more familiar with Milwaukee the town you’re driving through.

    That being said, I feel that creating a project vision is an essential first step in starting a software project. The process (like making a business plan) makes you think, “Why am I doing this?” In many cases, a well-written vision will help you sell a project to management. In other cases, the vision serves as little more than than a daily reminder of what you’re trying to do. From a project management perspective the scope portion of the vision helps the PM decide if a feature is in or out for a project. Of course it can be adapted to fit whatever process you’re using. So if you’re doing agile or iterative development, you’d have a broad project vision and scope as well as a more narrowly focused iteration scope that says what’s in for a given iteration.

    Up until now, my vision has been somewhat amorphous. The summary on the project page for “Flow” on codeplex is the closest I have to a project vision. Let’s rectify that situation.

    First Draft

    “Flow will be the most awesome software ever created. It will be able to read the user’s mind, anticipating what they want to do and respond accordingly. Flow will be so perfect that people will be willing to spend their life savings to acquire it.”

    Although it would be great for “Flow” to possess these qualities, this doesn’t work very well as a product vision. Before we dissect it, we need to know what qualities make a product vision good. Fortunately, there is a lot of material available for someone learning about project management. Of course, one of my favorite starting points over the past few years has been Wikipedia. After a few steps of searching (which would be shareable within a completed version of “Flow”), I found the SMART acronym. Basically the product vision should be:

    • Specific: state the vision in clear terms, making a precise definition of what’s expected from the final product
    • Measurable: in other words it should be quantitative rather than qualitative.
    • Achievable: you can set all the goals you want, but if their outside the realms of reality, they’re pretty useless
    • Relevant: if you’re making a toaster, your customer won’t really care if it can be used to steam press their clothes (unless you’re selling one of those Swiss Army appliances you know what I mean)
    • Timely: if you don’t put limits on delivery of your product, you’re likely to be lapped by the competition

    I hope you can see why my original vision isn’t very SMART. Usually faulty goals within a vision aren’t that obvious. They’re more insidious like “…the best toaster on the market”. (Coincidentally, if you’re asked that question on an interview, they want you to question the definition of the best, not go about proving that it is.)

    Once More With Feeling

    Anyway, let’s try again to envision “Flow”.

    “Flow” will be a desktop portal that provides a single point of entry to a users’ information while synchronizing it between their devices. Here are the desired traits of Flow:

    • Extensible:  Flow will expose a plug-in architecture that enables extension of the application to include data from other information sources as well as different methods of visualizing that data.
    • Social: Flow will allow users to share their data with their friends, family, co-workers, and the general public.
    • Personal: Flow will allow users to take control of their information, enabling them to annotate, link, and tag it.
    • Contextual: Everything we do with our computers has a context, Flow will help users preserve that context so that when they are distracted or need to switch contexts they can easily return to what they were doing.
    • Discoverable: Flow will help users discover new features of the application and/or plug-ins for the application that will help them get more done. Think last.fm or Amazon recommends except for plug-ins.
    • Accessible: Flow will provide a framework that makes it easier for information to be organized and presented for the impaired.

    There we are, I think our vision meets the SMART guidelines, with the exception of Timely. We haven’t placed a time frame on the release of Flow. It’s somewhat difficult for me to time this. I have a day job and family. (Including a new child on the way.) My heart wants to have the first version available by June. Reality says it will most likely be a Beta in September and V1 at year’s end.

    Of course all of that could change should more people volunteer to help (it is an open source project after all). Even then, there is a limit to how effectively the work can be distributed. We’ll see what happens though.

    February 23

    Static Reflection: Say What?

    There’s a new oxymoron going around call Static Reflection. The basic gist is that by using expression trees you can do things that appear to be dynamic but in reality are checked at compile time. Like for instance, getting the name of a property for firing an INotifyPropertyChanged.PropertyChanged event. My colleague, Jon Fuller, showed me his code for Method Guards and my first comment was that this would be a great tool for implementing INotifyPropertyChanged. He informed me that he already went there and showed me that code as well.

    I wasn’t too happy with the idea of wasting your sole base class on NotifyPropertyChanged so I suggested that we use extension methods instead. After a bit of finagling with the framework (Events don’t like to be fired from outside their declaring class), here is the result:

            public static void SetProperty<T>(this INotifyPropertyChanged source, 
    						Expression<Func<T>> propExpr, 
    						Expression<Func<T>> fieldExpr, 
    						T value)
            {
                source.SetProperty(propExpr, fieldExpr, value, () => { });
            }
    
            public static void SetProperty<T>(this INotifyPropertyChanged source, 
    						Expression<Func<T>> propExpr, 
    						Expression<Func<T>> fieldExpr, 
    						T value, 
    						Action doIfChanged)
            {
                var prop = (PropertyInfo)((MemberExpression)propExpr.Body).Member;
                var field = (FieldInfo)((MemberExpression)fieldExpr.Body).Member;
                var currVal = (T)prop.GetValue(source, null);
                if (currVal==null && value==null)
                    return;
                if (currVal==null || !currVal.Equals(value))
                {
                    field.SetValue(source, value);
                    var eventDelegate =
    			(MulticastDelegate) source.GetType().GetField(
    				"PropertyChanged",
    				BindingFlags.Instance | BindingFlags.NonPublic).
    				GetValue(source);
                    Delegate[] delegates = eventDelegate.GetInvocationList();
                    var args = new PropertyChangedEventArgs(prop.Name);
                    foreach (Delegate dlg in delegates)
                    {
                        dlg.Method.Invoke(dlg.Target, new object[] { source, args });
                    }
                    doIfChanged();
                }
            }
    
    

    Now you can use a strongly typed NotifyPropertyChanged declaration without using your base class

        public class PersonStaticReflection : INotifyPropertyChanged
        {
            private string _firstName;
            private string _lastName;
            public string FirstName
            {
                get { return _firstName; }
                set { this.SetProperty(() => FirstName, () => _firstName, value); }
            }
            public string LastName
            {
                get { return _lastName; }
                set
                {
                    this.SetProperty(() => LastName,
                                     () => _lastName,
                                     value,
                                     () =>
                                         {
                                             // do something useful here
                                         });
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
        }
    

    For those concerned, you can statically cache the PropertyChanged field in a dictionary mapped to the object type so that you only have to reflect on it one time.

    February 18

    Refactoring to Patterns: WPF Edition Part Zero

    I guess I should give you some background before I go much further. The application we’re discussing here is called “Flow”. The name is metaphoric in several ways. The first metaphor is Flow as in a flow of thoughts or stream of consciousness. The second reference is to the work of Mihály Csíkszentmihályi, who has written a lot of books about the concept of “Flow” – a state of total immersion in one’s activities.

    Stream of Consciousness

    My first impetus in designing “Flow” was dissatisfaction with my browsing experience. I wanted an application that would capture my stream of consciousness as I browsed the web – creating a mind map if you will. For an example of what I mean, read one of Jeff Atwood’s posts and open a new tab for every link in the post (to keep it fair only use the self-referencing links you can also skip any links that you know are dupes). Then do the same for each tab you’ve opened. Once you’ve done that you’ve got a pretty good approximation of how my browser looks at the end of a given day.

    image

    Totally lost in my tabs is a good way to trace my path through coding horror. Imagine that my tabs represent a lengthy night of researching for a term paper, or digging into news on a company for deciding whether to invest my life savings in an IPO, or case research that could make sure that a defendant doesn’t get off on a technicality.

    This idea really hit home with me and I started typing about it. 4 hours and one thousand words later, I had a vision for what for lack of a better term I called a Streamcatcher. Shortly after doing this, I received a newsletter from Infoq.com pointing to an article about stream-oriented User Interfaces (was it really back in July when I first started doing this). My jaw dropped. It was as if someone had read my vision and written an article about it. Further research revealed that the idea of a Stream-oriented UI has been around for quite a while now.

    I started making a basic object model for an application that could visualize your browsing history as a graph of nodes and stumbled across a WPF panel for displaying a graph of objects. The next weekend I had a prototype browser that built the graph as you browsed.

    Anyway enough blabbing from me. Here is the original prototype I made so that you can get a picture of where we’re going. Ignore the ribbon. It doesn’t do anything. I was just experimenting with it and never bothered to take it out. Also the network graph component that I’m using will expire in 30 days after you first use the app, making the application useless. There is no way to save your graph. Right now it’s just a prototype. I’ll be uploading the code to the Codeplex project and starting the new codebase there as well.

    To get started, place your mouse over the green dot and click on the button that appears. That will take you to google.com to start searching. An interesting search term is “flow psychology” (no quotes). I posted a video showing how flow works in an earlier post.

    Now if you’ll excuse me, I have 40 tabs of Coding Horror to read.

    February 17

    Refactoring to Patterns: WPF Edition

    To some it may appear that I have abandoned client side development for Azure. Nothing could be further from the truth. As I'll tell anyone who will listen, I'm just like a kid who's opened his presents on Christmas and found a new toy to play with. After playing with the new toy for a while, eventually I'll remember my old favorite and start playing with it again. (The real fun comes of course when I start playing with both together). It's not a Buzz Lightyear vs. Woody...it's more like Megatron vs. Galvatron. Anyway, I had to come back to Megatron at some point or another. And a recent thread within the WPF Disciples mailing list gave me that impetus. I've recently realized how effective refactoring can be for getting working code out rapidly while still addressing maintainability. My experiments with refactoring resulted in a technique I like to call "context sensitive architecture."

    A Practical Application

    I'm not a huge fan of contrived applications, but sometimes we do what we must. This won't be one of those times. Let's say you have an application that could provide a rich view of your digital life and how that digital life is connected. Let's say for now the application could show contacts and bookmarks. Finally, lets say that the application wants to allow the user to add and edit contacts and bookmarks. How do you enable these scenarios? One way would be to create a CreateContactControl, an EditContactControl, a CreateBookmarkControl, and an EditBookmarkControl. I guess we want to allow the user to View their contacts and bookmarks. Now we have to add a ViewContactControl and a ViewBookmarkControl. What happens when we add RSS Feeds and Podcasts to the mix? Now we have to create six more controls and integrate them into the system. What's worse is that the main app has to know about each and every control in order to display them at the appropriate time. Of course we could use plug-in model to alleviate some of this pressure, but this could end up generalizing your application to the point where it is little more than a shell. There's nothing necessarily wrong with that, but I still think there's a compromise between the two extremes. Sometimes that compromise isn't very obvious. Hence, we use refactoring and iterative development to discover the compromise.

    The First Iteration

    The first iteration of a project should be used to implement what is called a "vertical slice" or two. This will allow us to realize the benefits of Agile development with the first delivery. Getting working software into the customer's hands quickly provides a compelling argument in favor of Agile development. I would actually recommend that you start with a minimal core team (2-3 members) for the first few iterations, this will enable you to minimize the overhead due to collaboration as the team takes its first steps into a new domain. It will also allow a few patterns to emerge before ramping up the velocity. Because you're targeting a smaller amount of functionality for the iteration, you might want to do a shorter iteration. I think two weeks should be adequate.

    Before we go any further, let's try to visualize this app with a pair of its scenarios: "Add a Contact" and "Add a Bookmark". The "Add a Contact" story is very simple: "As a user of the application, I want to be able to enter information about a contact for later retrieval and viewing: his or her first and last name, and email address." Likewise the "Add a Bookmark" story is equally simple: "As a user of the application, I want to be able to store information about a bookmark for later retrieval and viewing: the URL, and title of the bookmark."

    Based on these stories, we have identified two entities for our domain model: Bookmark and Contact. Here is the Bookmark:

       1:  using System;
       2:   
       3:  namespace Flow.Model
       4:  {
       5:      public class Bookmark
       6:      {
       7:          public Uri Address { get; set; }
       8:          public String Title { get; set; }
       9:      }
      10:  }

    The Bookmark is very simple, consisting of a Uri and a Title. We will probably identify more information that would be interesting to capture for a bookmark in a later iteration. For now, we want to get working code into the hands of our stakeholders as quickly as possible. Our second object of interest is the contact:

       1:  using System;
       2:   
       3:  namespace Flow.Model
       4:  {
       5:      public class Contact
       6:      {
       7:          public String FirstName { get; set; }
       8:          public String LastName { get; set; }
       9:          public String EmailAddress { get; set; }
      10:      }
      11:  }

    Let's make a pair of controls for creating new bookmarks and contacts. Following the WPF developer - designer workflow, I will make the first pass on the UI simplistic and straightforward (relying on my designer to beautify it later).

    After a few minutes in Blend, followed by some cleanup in Cider, I came up with a rather straightforward, minimalistic UI with the primary elements defined for optional elaboration by my designer:

    image

    image

    Now that I have a way to create contacts and bookmarks. I should allow the user to view them. That’s easy enough. Let’s make a ListBox that shows the collection of contacts and another pair of controls that are read only. Rather than worrying about persistence at this point we’ll just store the information in memory.

    So What Next?

    We’ve delivered some basic functionality to our customers. More importantly, we have started the first path in our journey together. I will be placing the code on Codeplex. In addition I will be posting a screencast of me writing this code (once I figure how to get Camtasia to co-operate with me). This is something I’ve wanted to do for quite a while now. I just couldn’t find a project that I was compelling enough that would be able to grow from a very simple solution to a very interesting WPF application. I will reveal more about it over the upcoming weeks; in the process documenting the evolution what I feel is a very interesting application. Tune in for more info.

    February 06

    Starting the New Year With a Bang!

    Yes I know it’s February already, but this should show even more how big the start of this year has been for me. First and foremost is the big announcement that the new year brought.

    MVP_FullColor_ForScreen

    First and foremost, I’ve been named an MVP in Client App Development (for my community contributions with WPF). This is an incredible honor for me. In addition to the title, being an MVP provides me an opportunity to have better interaction and feedback with Microsoft especially with regards to my specialization. According to the program guidelines, the award is for my past activities and I am not required to do anything else.

    However, I want to leverage this opportunity to the fullest and will continue my community contributions going forward, both with regard to WPF and Silverlight as well as with Windows Azure.

    USAltNET

    Second, as an organizer for our local Alt.NET User Group, Indy Alt.NET, I’m excited about a few recent developments with the group. Chief among those being named an official INETA group – something that surprised me seeing that there was already an INETA group in the Indianapolis area. We are coming on our first anniversary and have seen our attendance stabilize at around 25 per meeting. With almost a year under our belt we have sat down and started a few initiatives.

    One major decision will be to incorporate as a non-profit organization (an idea we had thrown about for a while but were too busy with day to day operations to act upon). This action will allow us to apply for grants and begin some community outreach initiatives that we are all excited about. It will also make us more attractive to potential sponsors as certain donations to us will be tax deductible.

    Another initiative has been a marketing and sponsorship drive. We are trying to grow organically, but we have noticed that we have a chicken or egg scenario. Therefore, we are pushing our growth on multiple fronts. So far we are getting good feedback from our efforts.

    Our biggest initiative about which we are all very excited is planning for a local conference. More on that later ;)

    SEP-logo

    But wait there’s more! I just finished my first year with my current employer, Software Engineering Professionals. Management announced a number of initiatives here that are pretty exciting for me. I can’t necessarily talk about them right now, but it reaffirmed my decision to come here. I can honestly say that I have grown dramatically since I’ve been here. It is an amazing place to work, and I’m excited to see what the future has in store.

    SEP-logo

    Finally, my family is counting the days until our latest addition is expected to arrive.

    Like I said, this year is starting off with a bang…and there’s more to come. I’ll keep you posted with new developments.

    November 03

    As You’re Coding .NET

    I’ve put a summary of the buzz around Windows Azure on my blog. Will be creating more content soon. Working on an Azure Based twitter aggregator to feed the sections of AzureCoding.Net Maybe with some sync thrown in for good measure. I’ll be posting back here with the UI related stuff. For the most part, you might want to start looking there for my Cloud Topics and here for everything else.

    Announcing Azurecoding.net

    I am head over heels about Azure and the Live Services. I love it so much that I’ve gone ahead and registered http://www.azurecoding.net Depending on your pronunciation of Azure, you might chuckle at the name. So what are my goals for the site? I want Azure Coding .NET the place to go for news, articles, tutorials, and discussions about Windows Azure and the Live Services including Live Framework, SQL Services, and the .NET Services (we might even talk a little bit about how “Oslo” fits into the picture). I’m going to fire off the first few volleys with some in depth talks about Live Framework, and .NET Services.

    Like desktop Windows development, there are too many specialty areas within the cloud development ecosystem for one person to be a master of them all. So I’ll be bringing some friends along. No matter how compelling the topic is, a website is only as good as its community. I will definitely look for ways to engage the community. Look for more on that later!

    October 31

    PDC 2008 All Good Things…

    Well it’s done! What a wild week it has been. From the announcement of Windows Azure, and the .NET/SQL Services to the new features of Windows 7 to upcoming features in WPF/WCF/WF 4.0 and let’s not mention Oslo and “M”. Thank you everyone for following along with my trip, both here and on Twitter. It’s been a blast. I got to finally meet some people I hadn’t met before in person. And of course I met a lot of new names and faces.

    PDC 2009 has been announced and I highly recommend that whether by hook or by crook, you find your way down there. Yes you can view all the sessions and information online. But you can’t get the Windows 7 bits yet. You also can’t get a live services/azure key yet. You also miss out on the experience of being with a crowd of smart developers congregating in one place. And of course there’s no substitute for actually being in the room when Ray Ozzie says “…so we’re pleased to announce Windows Azure.”

    Personally, I’m extremely excited to finally get my hands on the Live Mesh (now Live Framework) SDK. I have a compelling story to tell with the mesh. And I think it just might change the way you look at your computer! Anyway…enough about my plots for world domination. Plain and simple…PDC is all about catching the wave of new technology and riding it to success. There is a ton of content on the web discussing the “Long Tail” of software development. Jumping on the new tech announced at PDC will help you stay ahead of the long tail. It’s somewhat risky, because we all know what happened to WinFS (rest in peace). But on the other hand, picking the next WPF (even if that happens to be literally the next WPF), can be a very rewarding experience. Ask Josh Smith, and other WPF luminaries.

    Hopefully, everyone is stoked and excited. And you’ve already run over to the Azure website to signup for your keys. If nothing else, you’ll get a free web host for the duration of the CTP.

    October 29

    PDC 2008: Mesh Services Architecture and Concepts

    Okay…I couldn’t live blog the whole thing…there’s a lot to take in…but here’s the gist. Mesh takes care of a LOT of complex stuff so you don’t have to be concerned with it.

    3:00 Introduction:
           
    Mesh is a concept whose time has come
            It takes the Windows platform to the next level
            Allows windows to take advantage of the cloud and the many devices a user has
            This talk mostly about Mesh Architecture
    3:04 Agenda
           User Experiences
           Concepts
           Architecture
           Planning and Deployment
           Implementation
           Operations, Experiences, Lessons learned
           Future
    3:05 Quick Demo Using Mesh
    3:10 Key Capabilities
            Provisioned State (Accounts)
            User-data storage (including replication and synchronization)
            Communications and presence (P2P when possible…fall back to relay when not)
            Notifications (Single channel for asynchronous push)
    3:13 Provisioning in the Mesh
            Identity is provisioned during web signup
            Device provisioned during software installation
            Device claim – relationship between user and device established
    3:14 REST in the Mesh
            Common metadata for all resources (Uri, LastUpdateTime, Etc.)
            Resource lives within collection (scope for grouping resources and tracking changes)
            Both resources and collections are represented as feeds and items
            Links allow navigation from one resource to another.
    3:17 Provisioned State Services
            Account Service is a “Facade” for accessing accounts, devices, and apps.
            The client provides a local cache.
    3:18 Folder Synchronization in the Mesh
            Items in data feed represent files (files are the resource)
            A data feed mapping tells Mesh that a given device wants to synchronize with a given feed
            Permission scope defined on mesh object for sharing feeds
    3:21 Understanding FeedSync in the Mesh
           Bi-directional replication provided through schema and semantics.
    3:23 Getting really deep into how Mesh client is implemented using the Live Framework
    3:27 Architecting the Mesh Services for Scalability
           Primary scenarios for scalability concerns
           Startup
           Resource change (initiator)
           Resource change notification (recipient)
           Content replication
              This can take advantage of P2P scenario
    3:31 Scale-out strategy
           Partition by user, device, and mesh object
           Use soft state to minimize i/o load
           leverage http semantics for caching, change notification, and incremental state transfer
    3:35 How to Partition resources
           Every resource has a stable canonical URI based on its resource identifier
           Mapping a resource id to its home DC requires a lookup in a replicated database
    3:37 General Design Principles
           Use commodity hardware
           Partition for scaling out
           Loose coupling across roles
    3:38 Deployment
            2 Dual Core sockets
            8 GB RAM
            2TB HDD
            Windows Server
            New machine come on line…fabric is copied to it and it joins the cloud
    3:43 Scale Unit Layout

    PDC 2008 BB19 Live Blog

    10:30 Observations
             There is a huge diversity of devices
             Change of seasons…Computing used to be about My Computer
             Now digital life spans multiple devices –>My Mesh
             Data is everywhere, in the cloud, on devices
             Data is shared
             Applications now Span Devices
             They are now more social
    10:34 Challenges of today’s applications
             Composing data across cloud services and devices is complex
             Creating an ‘uber’ schema…relating information across disparate applications
             Making data AVAILABLE everywhere
             Keeping it synchronized
             Writing communication code that can span these devices
             Dealing with async updates and managing state
             Different programming models
             Resource management across the different devices.
    10:39 An approach Live Operating Environment
             Composition Engine
             Schema in the Cloud
             Takes care of the plumbing
             In the cloud and on all devices
             Unified Programming Model
    10:40 10k foot view of framework
    10:41 Demo…it’s all http!
             No one wants to make all the models the same, just a unified way of using them.
             Using HttpRequest to interact with Live Mesh (as demoed at Don/Chris keynote yesterday.
             More benefits using the Live Operating Environment
    10:48 Live Mesh supports Always online and Occasionally connected scenarios
             Talking to the Live Operating Environment handles both scenarios seamlessly.
    10:51 Demo same code talking to Live Operating Environment
             Can request from the environment whether you are currently connected
    10:53 Inside the Live Operating Environment
             Is host independent
             Service proxies – provide abstraction layer between LOE and service providers
             Pluggable Synchronization Engines
             Scheduler
    10:56 Services Provided by the Framework
             Script Engine
             Formatters
             Resource Management
             Filesystem Management
             P2P Communication
             HTTP Communication
             App Engine
             Throttling
             Analytics
             Authorization/Authentication
             Notifications
             Device Management
    10:58 Programming model layered over it all
             Resources & Relationships
             Resource Ext
             Naming and Addressing
             Wire Formats
             CRUD
             URI-LINQ etc.
    11:00 Everything is a Resource
             They are addressable by standard URI methods
             All HTTP Methods are Supported
    11:01 Resource Scripts
             DSL for AtomPub and FeedSync
             Grammar includes statements for CRUD, sync, control flow and data binding
             Powerful batching model
             Pre/Post triggers associated with resources
             Programs serialized in JSON and POX
             Native XAML and DLR bindings coming up
    11:03 Control Flow
             Sequence…statements executed in order
             Interleave…parallel operations
             Conditionals
             Looping
             Assignment
    11:05 Authoring Scripts
             Build statement DOM
             Compile it
             Execute
             Can store named scripts for later execution
    11:06 Resource Script Demo
             Script select random images from flickr create a live mesh folder and store the images in the folder
             Programming resource script very similar to programming CodeDOM
             Compile the script, gives multiple output formats (JSON, POX)
             Because it’s a DOM based language…almost any modeling tool can be used to create a Resource Script
             Loaded Resource Script in python sent the request over http and was able to run as is without any special conversion.
    11:19 Data Extensibility Demo
             People want the ability to take their data where ever they want.
             Need to decide what data is a competitive advantage for your app vs. what’s useful to make available to other apps
             Think of Geographic Location with Mesh enabled car
             Data definition done using attributes DataContract
             Stored geolocation and retrieved using mesh.
             Viewing information using Live Framework Resource Browser.
             Viewing data in XML Format
             Viewing data in JSON format
    11:35 Tips n’ tricks
              Blow away local store to start fresh
             Metadata Store in SQLCE
             RMB helps debug client/app problems
             Monitor size of Assembler vs MR directory is lightweight way to measure progress of synch
             Collecting logs will help you send issues. Mesh team looks at all logs!        

    PDC 2008: Day 3 Keynote Live Blog

    The Future of Research

    8:30-8:45 History of research at Microsoft
           Microsoft Research started in 1990
           Microsoft had just broken 1B in revenue when MSR started
    8:45 MSR Mission Statement
            Expand state of the art in technology
            Bring advances in research to product ASAP
            Heavy participation in Academic Community
    8:46-8:50 Organized for Innovation
            MSR is structured like a University
            Open Research environment
            Engage the Research Community
            MSR has 850 PhD researchers!
            MSR pulls in world class talent
            Strongest research company in CompSci field.
            Largest PhD internship program in the industry
            More Graduate research hours at MSR than many Universities
    8:53 Driving Technologies into products
            Many of Microsoft’s offerings (e.g. DirectX, Windows Media) started in MSR
            TabletPC, Cleartype, SQL Data Mining, among other examples
            CCR and DSS Toolkit started as MSR Robotics tools.
    8:56-9:00 Value of MSR To Microsoft
            Source of IP and new product technologies
            Generates about 25% of Company’s patents
            Problem solving
            Able to bring a strong brain trust to bear on difficult product
            Can keep abreast of trends that MSFT should follow
    9:00 Research –> Agility
            Can respond more rapidly to change
            Address new technologies, competitors, and business models rapidly
    9:01-9:07 Research and Software Engineering
            MSR has made incredible investments in improving SE
            SLAM – static verification of source now provided as Static Driver Verification in Vista DDK
            Proof of program termination now possible because of MSR
            CHESS, Code Contracts, Pex, Z3, and Proof of Church’s Thesis over 70 year old problem
    9:07-9:10 DryadLINQ harness power of clustered computing. Single query can be spread across thousands of nodes.
            The same progam can run single-core, multi-core, and cluster.
    9:10-9:13 Research for energy Introducing Feng Zhao
            Computers can be made more energy efficient
            Computers can be used to improve energy efficiency of things we use
            Energy efficient computing compelling area of research in Comp Sci
            Programming for using less resources is also programming for energy efficiency.
            Showing special sensor for collecting environment information
    9:13-920 Demo of sensor grid collecting temperature data from Keynote hall over the course of conference
            Showing a time lapse of heat map collected from sensors over the Monday Keynote.
    9:20 MSFT uses sensors in Data Centers to help monitor cooling and efficiency of HVAC
            Can use data to optimize placement of high workload units within DC
    9:23 Sensing in the wild
            SenseWeb: WikiPedia of Sensors
            Can share instrumentation and data for communities of scientists and hobbyist
    9:25-9:30 Demonstration of SensorMap
            Showing sensor data mashed up with Virtual Earth Map.
    9:30 Environment Sensors can be useful in multiple scenarios
            Data Centers
            Buildings
            Environment
    9:30 Research in Healthcare
            Using genetics for personalized healthcare.
            Based on genetic makeup, the same medication that heals one person can kill another
            Unlocking the human genome possible within next 2-3 years.
            Using graphical models to gather more Useful data from genetics
            Fighting HIV using computer learning (same technique used to fight spam)
    9:33 Video creating a vaccine for HIV using Machine Learning
            discovered that HIV mutates based on individual genetics
            discovered that some parts of HIV serves as a “decoy” tricking the immune system to waste resources on them
            Microsoft’s Research has lead to advances in Medicine
    9:36 Research in Education
           
    Virtual Classroom
            Robotics
            Computer Science Curricula
            World Wide Telescope –Virtual Observatory
            Enabled amateur astronomers to discover new astronomical phenomena before Professionals
            New release of WWT Equinox
    9:40-9:44 Video Demo of Equinox release
            3D View of Solar System
            Zoom out to surrounding stars in galaxy
            Go view new release available now
            Final Montage…zooming out to view entire visible universe!
    9:45-9:48 Discussion about children learning to program
            Boku proect with Matt MacLaurin
            What is Boku – lightweight programming for kids
            Integrating gaming and programming
            Why programming for children
            Programming is actually a life skill.
    9:48-9:56 Demo of Boku
            All Programming done with the Xbox 360 controller
            Icon based language program logic
            Rule based model…all rules evaluated at once.
            Characters can respond to joystick movements.
    9:56 Video Montage of Boku Creations
    9:57 SecondLight Interaction Beyond Surface Steve Hodges
           Showing what appears to be a basic surface unit
           Second projection showing on tracing paper held over the surface!
           You have got to see this!!!

    PDC 2008: You Pick the Sessions

    My live blogs have been somewhat popular. To thank everyone for following me, today (and tomorrow) I’m going to do something different…I’m going to the Keynote today for sure. But after that I’m having a hard time selecting what sessions to visit. So for today and tomorrow, I’m going to let you pick my sessions. Now because the Internet is sketchy at times, the simplest way is to send a direct message or reply to me at http://twitter.com/browniepoints. I will tally the votes and go to the session with the most votes and live blog it. Go to the public PDC timeline to view the sessions coming up. Vote for the session in the NEXT time slot only…I’m not going to try to tally all the sessions across all the time slots. I will update this post when a timeslot is closed out and what the results are. Okay…those are the rules…voting for the 10:30 AM Timeslot begins Now Here are your choices

    • BB14 SQL Services Futures
    • BB19 Live Services: Live Framework Programming model
    • BB38 .NET Services: Connectivity, Messaging, Events, and Discovery with the Service Bus
    • ES12 Exposing Connected Home Services to the Internet Via Windows Home Server
    • ES14 IIS 7.0 and Beyond: The Microsoft Web Platform Roadmap
    • ES31 Showcase: Windows Azure Enables Publishing Services
    • PC25 Windows 7: New APIs for Building Context-Aware Applcations
    • TL06 WCF 4.0 Building WCF Services with WF in .NET 4.0
    • TL26 Parallel Programming for Managed Developers with VS 2010
    • TL57 Panel: The Future of Programming Languages
    • TL58 Research Concurrency Analysis Platform and Tools for Finding Concurrency bugs

    If nobody votes I will be attending BB19 or BB38 Remember…please send only the number via DM or reply at my Twitter account browniepoints. I would allow you to post it here…but because spaces allows people to post anonymously, people will be able to stack the vote. Please only vote for sessions in the above list. The timeline has the abstract for the session. Voting closes at the end of the Keynote (10PM Pacific, 1PM Eastern) to give me time to tally the results and head to the winning session. So you have two hours to pick and vote. I will post the new list of sessions for the next slot and the winning session here between sessions.

    Also since there is only a 15 minute break between morning and lunch sessions. I will skip them. I need energy to keep up the pace. I think that’s everything. Let the voting begin…you have two hours to send me your preferred session for after the keynote. Remember all I need is the session number and you must send it to me via DM or reply on my twitter account.

    Edit...I only got three votes for the first timeslot...all for different sessions. Plus one from the missus. Since she voted for BB19 which is one that I listed for the alternative if no one voted...we'll go with her choice. Next up Live Framework Programming Model!

    October 28

    PDC 2008: Day 2 Keynote

    8:30-8:34 Montage of Windows/Silverlight apps
    8:34 Welcome Ray Ozzie
    8:35 Yesterday was about services. We introduced Windows Azure. Focused on infrastructure
    8:36 Today will be about client facing software.
    8:37 The PC has become ubiquitous. It’s easy to take its presence for granted.
    8:38 Once in a while you take a step back and reflect on how it has changed over the years.
    8:39 Like the PC, the Internet has become something we take for granted. But the PC and the Web are fundamentally separated.
    8:40 Our objective is to bring the PC, Web, and Mobile together in new ways.
    8:41 Some of the power inherit in the PC
            Full access to displays and peripherals
            Natural UI and common controls
            Personal Experience, etc.
    8:42 What about the web?
            Provides a common way to find, and interact with people
            Common way to access and share information
            Common way to connect devices
    8:43 Now the phone?
            Phone is always with you
            Easily access
            Can detect where you are
    8:44 Bringing the strengths of all three platforms together, provides a much more powerful app.
    8:45 Microsoft is focused on making tools to program across the three platforms easier while still leveraging their strengths.
    8:46 Windows is the core offering for desktop development
    8:46 For the web, IE8, the ASP.NET platform, and now Silverlight provide a rich programming environment
    8:47 And today we will introduce a way to bring the web to the desktop and make a web app installable.
    8:48 Let’s get started
            Windows 7 and Live Wave 3 Steven Sinofsky
            Development offerings With Scott Guthrie
            Live Services with Dave Treadwell
            Software + Services with Office
    8:50 Introducing Steven Sinofsky
            I’m all that’s between you and windows 7 demonstration.
    8:51 Think of how Windows 7 can personalize your experience with your PC
            How it can connect your devices
    8:52 Julie Larson-Green Windows 7 Introduction
            New taskbar – Brings window switching and quick launch to one place
    8:53-9:10 Demonstrating Windows 7
            Demonstrate opening MRU from the new taskbar
            Desktop docking
            Re-ordering icons on taskbar
            New Windows Explorer
            Can search across computers, devices, etc.
            Home-networking simplified
            Homegroup all devices on home network automatically available
            Homegroup deepdive
            New Lightweight Windows Media Player
            Explorer, Media Player, and Media Center share a common library
            Playing music from a different computer onto a networked device
            Windows 7 Device Stage shows everything you can do with a device in one place
            Can view all devices you have access to.
            Desktop personalization and themes
            Notification area full control over system tray
            Action Center queues notifications until you feel like dealing with them instead of annoying popups
            Touch in Windows 7 Showing HP TouchSmart Already available.
            Mouse commands repowered with touch. Word 2007 without any knowledge of touch can take advantage of new touch commands
            IE 8 is touch aware, can take advantage of gestures, on screen keyboard
            Paint with Ribbon interface
            Finger painting in Windows 7!
    9:13 Windows Live Essentials and Services overview
    9:15-9:20 Engineering Windows 7
            Learned a lot with Vista
            Received a lot of feedback
            Focused on hardware readiness (7 not a new kernel so a lot of the devices that work with Vista now will work with 7 tomorrow)
            Standards Compliance
            Security
            User Scenarios
    9:21-9:25 Developing for Windows 7
            Ribbon UI consistent look and feel with windows and office
            Jump List integration and Libraries Deeper Richer integration with Windows
            Multi-touch, ink, speech. Augment the user experience with your software
            DirectX take advantage of hardware power. Not just for games anymore!
    9:25-9:26 Partner Video Autodesk Multitouch CAD
    9:26 Windows 7 Fundamentals

    Decrease Increase
    Memory Usage Speed
    Disk I/o Responsiveness
    Power Usage Scale

    9:30 Laptop, 1 GHz Proc, 1GB RAM runs Window 7 still has half of its memory available
    9:31-9:37 Cool features of Windows 7
            Bitlocker encryption on a USB Memory Stick
            Includes group policy for requiring Bitlocker on all USB Drives
            Natively mount and manage VHDs
            Can open VHD
            Can Boot from VHD directly.
            High DPI easier to Manage
            Monitor settings easier (e.g. orientaton)
            Improved Magnifier tool
            Windows+P Easy switch of dual monitors
            Dual monitor Remote Desktop
            Shutdown button customization
            Turn of windows subsystem messages.
            UAC settings…similar to IE security zones
    9:38-9:42 Path to RTM
            Pre-Beta available today: install it and play with it.
            “E7” Blog: give feedback
            Beta: feature complete-not final but all features…available early 2009
            Feedback tool in beta: rapid way to give in context feedback of what’s not working for you
            CEIP: Tracks usage anonymously helps MSFT get real world usage of Windows 7
            Release Candidate to RTM
    9:43-9:45 Call to Action
            Install Windows 7
            Develop for 64-bit
            Focus on Fundamentals
            Integrate with Desktop
            Evaluate new APIs
            Code Website to support IE8
            Get Live Beta
    9:45 Introducing Scott Guthrie: Developing for Windows 7
    9:46 Windows API available to both managed and native code
    9:46 Developing with Win32/C++
    9:48 With .NET
            3.5 SP1 Improvements
            Streamlined Setup
            Startup performance
            Graphics improvements w/ wpf
            directx/direct3d
            more controls
            3.5 SP1 will be natively installed on Windows 7
    9:49-958 Application Demo
           WPF Ribbon control shipping this week
           Ribbon has support for WPF commands
           Using native WPF navigation to traverse history of photo viewer.
           Skinning the look and feel of the application using themes.
           Supporting Windows 7 Jumps from WPF Can Declare tasks using App.Xaml
           Multitouch from WPF UIElement supports touch natively!
           Demonstrating DirectX Effects on any control
           Touch enabled theme.
    9:57 Announcing Final WPF Datagrid and Calendar, and CTP Ribbon Control!
    9:58-10:02 .NET 4
           WPF Improvements: Multitouch, deep zoom, Visual state manager
           In-process side by side support
           Managed/native interop
           Dynamic Language support
           MEF
           VS 2010 Built on WPF
          
    Better TDD support
    10:02-10:05 Demo of VS 2010
             Code Editor is WPF
             Easier plugin model with MEF
             No registration necessary…just copy add-ins to directory and VS can load it.
    10:06-10:12 Customer Demo
             Tesco: World’s Largest Online Grocer
             Tesco @ Home
             Rich Client for planning meals and automatically adding necessary ingredients to your basket
             Barcode scanner using Webcam!
             API Available soon
    10:12 .NET Continuum
             One platform to target a range of platforms…desktop, web, mobile
    10:13 Web Dev Improvements
             IE8
             ASP.NET Improvements including MVC framework
             jQuery support in VS
    10:14 Can download jQuery intellisense support now!
    10:15-10:18 ASP.NET vNext and VS 2010
             Web Forms improvements
             MVC update coming in VS 2010
             Distributed Caching (“Velocity” in CTP today)
             Better deployment scenarios publish to dev, test, staging, prod.
             Application and SQL!
    10:18-10:23 Silverlight 2
             Over 100 Million installed users
             NBCOlympics.com average user watched videos for 27 Minutes on site
             IIS Smooth Streaming
             AOL Mail built fully with Silverlight
             Netflix online viewing using Silverlight
             Announcing Silverlight Toolkit including Charting Control using Open Source License!
             Silverlight Designer in VS 2010
             Silverlight 3.0 coming next year.
             Silverlight running external to browser!
    10:23 Introducing Treadwell to talk about Live Services
    10:24-10:34 Here’s the Wind up.
    10:34  And the Pitch Announcing Live Framework

    October 27

    PDC 2008: Hands On Lab Azure

    Decided to do an Azure Hands On Lab. From my first steps with it, I'm impressed. Of course I've written what amounts to hello world...but from the Cloud ;) Remember you can download the SDK from http://www.Azure.com now!

    PDC 2008: The Future Of C# (Live Blog)

    The Big Story in C# 4.0 is Dynamic Programming. Not just Dynamic Typing but also

    • optional and named parameters
    • better COM Support
    • and Co and Contra-variance

    The enabling tech for C# 4.0 is the DLR. It provides Dynamic Programming in the .NET environment (CLR). This allows .NET not only to talk to DLR based code, but also JavaScript, COM, Ruby, etc. C# 4.0 and VB.NET 10 will have support for the DLR.

    New ‘dynamic’ keyword tells the compiler that an object will be dynamically typed. At compile time the type is dynamic, at runtime the object type is finalized. DLR leverages custom Binders to enable dynamic invocation.

    Demonstration of cut and paste from Javascript to C# Changed a few keywords and the Javascript code is now C# code!

    How is it done? IDynamicObject, implement an interface and your external application can now be invoked by DLR. For example you can enable a PropertyBag that can be invoked as standard properties. Optional (finally!) and Named Parameters can declare default values for parameters. Enables VASTLY IMPROVED COM Interop! CLR now provides automatic Interop eliminating need for PIA!

    Implicit conversion from Dynamic variables to more strongly typed variables.

    Demonstration of simplified usage of Office Automation API from C#

    .NET arrays are co-variant…but not safely. Generics are not currently co-variant (IEnumerable<String> cannot be used where an IEnumerable<Object> is expected even though String derives from Object). Safe co-variance enables these scenario for output side generics only. Similarly contravariance enables a like structure for input side generics.

    Variance supported for interface and delegate types. Supported through statically checked definition-site variance. Not supported in value types. Not supported for out and ref parameters.

    Beyond 4.0. Metaprogramming! Using the compiler from the platform. This will enable Metaprogramming REPL, Language Object Model, Embedding DSLs. CSharpEvaluator use the compiler as a service from code. Dynamically compile and run code from code.

    Demonstration: declaring a delegate dynamically and invoking it statically.

    Demonstration: simple C# console

    Demonstration: defining and manipulating a windows form dynamically!

    PDC 2008: Lap Around Azure Live Blog

    What is Azure?

    It’s an Operating System for the Cloud. It allows a developer to remove concerns for scalability, service upgrades, high availability and other concerns so they can write code that addresses their functionality.

    Windows Azure provides an analog to a desktop OS but on a set of connected servers:

    • Abstract execution environment
    • Shared file system
    • resource allocation
    • programming environments

    Plus support for utiility computing

    • 24/7 operation
    • Pay for what you use
    • Simpler, transparent administration

    How Does this Apply to Features?

    1. Automated Service management
    2. Powerful Service Hosting Environment
    3. Scalable and available cloud storage
    4. Rich familiar developer experience

    Demonstration

    Highlighting simulated cloud environment on desktop. You can test out what will happen when you deploy before you go to the cloud.

    Automated Service Management

    What’s in the Service Model?

    • Service Topology and size
    • Health Constrants
    • Configuration Settings

    Maintaining Service Health

    • Keep A service responsive and healthy in the face of failures and upgrades
    • How?
      • Detect failures, and violations of health constraints
      • Replace failed/missing resources transparently
    • Made possible by abstraction
      • Service declares logical resources in the model
      • APIs map logical resources to physical entities
      • Abstraction makes services agile

    The Bottom Line

    • A balance between power and ease of use
    • But if needed you can access the raw system
    • More info at ES02 and ES19

    Scalable Available Cloud Storage

    Simple, essential storage abstractions

    • Large items of user data
    • Service state
    • Service communication

    Points of Emphasis

    • Massive scale availability and durability
    • Geo-distribution and geo-replication

    Not a Database in the cloud

    More info Sessions ES04

    Rich Familiar Developer Experience

    • Simulated cloud environment on the desktop
    • Support for a variety of programming languages
    • Ecosystem of tools and support
      • Integration with VS, and Eclipse
      • Loging, alerts, tracing
      • Samples, documentation, MSDN, forums

    Putting It All Together

    Azure provides powerful scalability through a simple architecture. It allows you to go from 25 users to 250 thousand with a few clicks. You can leverage the patterns of SOA to take your application to the cloud.

    Part 2 Azure Services and Your Application

    Microsoft Approach to Azure

    Provide a flexible platform with internet scale

    Base it on Internet Standards

    Extend Your Existing Knowledge and Code

    Interoperability

    Uses Internet standards to enable access from multiple environments (e.g.Java, PERL, Ruby)

    Demonstration

    Although Azure will work with multiple environments this IS a Microsoft Conference.

    Litware existing ASP.NET application wants to scale to the cloud.

    Identity Management

    One of the first and easiest steps into Azure Services is to take advantage of Federated Identity Management. The developer no longer has to be concerned with authentication for their application. Can enable federation through windows live ID or ADFS (vNext or current). Demo using live ID
    Demo using ADFS: User signs into Windows and their account is federated to the application.
    Demo using ADFS vNext

    Look at the Code

    Litware application configured through “Geneva” to trust Azure Identity Services.
    Enabling Claims Based Authorization in 3 lines of code.

    For more info on Identity
    Review Session BB11 Online
    BB55 Later

    Live Mesh Servces

    Consumer Identity Management? Infocard in the Cloud?
    Update profile information in one place…all applications that use it automatically updated.
    Pulling back the reins more about Mesh during the keynote.

    Service Bus

    Let’s look at the internal (code facing) services of Azure

    Azure provides an ESB in the Cloud
    What does it take to fire a message on the Azure Service Bus
    Authenticate to the Service
    Point to the Endpoint
    Open the channel
    Send the message Very similar to WCF development

    On the other hand listening for a message follows a similar pattern.

    Internet Service Bus

    More detail
    Sessions BB02 and BB38

    Workflow Services and Declarative Programming

    Taking WF to the Cloud
    Similar designer to the existing WF designer.
    Fire, receive, and respond to events declaratively
    Use the same workflow that you run on a desktop now get implicit scalability and availability
    Management Portal for Workflow Hosts.

    SQL Data Services

    Sorry I missed most of this section due to network issues. Up next WF 4.0!