At the Google I/O conference this past week, they announced Google Wave.  Almost immediately, I started seeing Twitter replies, blog posts and various articles talking about how Google Wave is going to kill Flash/Silverlight/JavaFX.  None of these made sense to me…and at that point I’d yet to see anything about Wave anyway.  I posed a few questions on Twitter as to why people felt Wave was an RIA platform killer (that’s what I was reading into a lot of the buzz against things like Silverlight).  I got more confused with all the replies :-).  So I had a moment this morning to listen to the Google I/O Wave keynote.

I first heard Vic Gundotra come out and describe Wave as a “…personal collaboration and communication tool…” followed very soon by an introduction of Lars Rasmussen who immediately also came out and introduced it as a “…communications and collaboration tool…” as well.  Hmm, okay, so it’s a tool?  This is where I was at so far less than 10 minutes of the presentation.  In fact everywhere it is being described so much as a tool rather than a platform.  In their post they help differentiate a bit more calling it a product, platform and protocol.  The keynote session finally got to this point as well.  Great, now I get to learn about the platform.

After about 40 minutes of the presentation I’ve seen a very interesting project/product, but haven’t seen it as a platform that is replacing anything like Silverlight.  Stephanie Hannon, the lead product manager, unveiled the Wave product as an HTML5 application built using Google Web Toolkit (GWT).  Since GWT can be used today, I was curious what aspects were HTML5 in the app – I didn’t feel they elaborated at all – someone correct me if they did please.

At least 40-50 minutes of the demonstration was all about the Wave experience, a lot of looked to me like a tight(er) integration of Gmail and Google Talk…both of which are products I admire and are great examples of rich web applications.  There absolutely were some cool features such as the real-time communication updates (no more waiting for Tim is typing).  The “playback” feature was pretty cool/fun to see as well, but I’m not sure how much I’d use it.  Obviously demos at conferences are contrived and so as cool as it was, I can’t wait to test it out in the “real” interwebs.

The drag/drop feature of images from desktop to the Wave was also cool and raised my eyebrow.  Then Stephanie points out that this is something HTML5 cannot support and that feature requires Google Gears.  They mentioned they are working on a proposal to HTML5 to accommodate.

The other promise of Wave was that it would be “open” – a phrase that seems to have become a buzzword among anything web.  Open at what level I wonder?  Even Lars himself mentioned that they would “…open source the lion’s share…” of the Wave product experience (and demonstrated one minor skin customization).  But what isn’t in the lion’s share I wonder.

So the product got a lot of attention then about 20 minutes or less of the platform/protocol.  The platform seemed to have been demonstrated with the use of gadgets (embedding a map in the Wave, embedding the Wave in Blogger, etc.).  In fact the only aspect of the platform I felt was shown was embedding (they even referred to an embedding API).  The protocol also claims to be open.  Great!  There were some minor demonstrations of this (I admit, kind of hard to ‘show’ a protocol), but didn’t really get emphasis I felt.  So of 3 pillars of the Wave announcement, really only one of them (product) got any real depth.  Granted (and they admitted several times) that the whole Wave concept is in early form and limited access given to developers.  Frankly I was surprised no Android-Wave integration was shown.

From a product standpoint, it looks like a fun collaboration tool.  I have some concerns about the user experience like collaborating with LOTS of people.  Their UI seemed to make use of avatars and make the assumption of collaboration of 3 or less.  I routinely collaborate professionally with large groups and personally with groups more than 6 (think homeowner association).  What does Wave look like with groups or large collaboration…could a Wave look so spaghetti that it becomes unusable?  I suppose that is the intent behind playback.

Nothing that I personally saw (and I’ve yet to get my hands on it) led me to draw comparisons/conclusions to Wave threatening RIA platforms like Flash, Silverlight or JavaFX.  Sure, Wave as a product is a demonstration of a great web app/RIA…but that’s an implementation, not a platform.  So is HTML5 really what people are talking about here?  Okay, help me understand how HTML5 Wave in the scenarios they demonstrated?  Even they admitted that some of them were using Gears.

One of the more forwarded articles was one by the Zoho executive staff titled Microsoft Silverlight vs Google Wave: Why Karma Matters.  Sridhar in that article should really change the title.  It’s misleading and he doesn’t prove the point of the title.  What he explains is the buzz behind early alpha like Wave versus early stuff from Microsoft.  The excitement around Google announcements is generally huge and positive (although some don’t think it’s the cat’s meow) contrasted with Microsoft releasing something and everyone usually being a skeptic.  Sridhar tries to draw some analogy to Silverlight, but I think fails.  He’s just throwing more FUD around Microsoft in general.

What I also find interesting is this buzzword of “open” – something Google is praised for.  Let’s take a look at Google Wave Federation Protocol.  What’s open about it is that they’ve created something and put it out in specification form (and put a .org domain around it).  If that is the definition of open, then why is Microsoft hammered for XAML?  We have a spec out there?  What about C#?  Heck, that’s an ECMA standard.  I see a bit of a double-standard here.  I’m not saying that organizations like Google and Microsoft shouldn’t continue this practice…in fact, the opposite.  But it does seem odd that a protocol built to serve a specific need that wasn’t already available in existing standards is being praised when that is what other organizations have been specifically slandered for in the past.  Seems odd.

So is Wave going to threaten RIA platforms?  I don’t know.  Is it even an RIA platform?  I just think that all the messages about how Wave is pushing out things like Flash, Silverlight or JavaFX are unfounded at this point.  They all serve purposes.  Is HTML5 really what people are talking about here?  Fine, then draw that comparison and put some meat around it.  As far as I could tell, HTML5 is a working draft still.  To me as a developer (and as a user) this means that even once ratified as a standard, browsers will have to decide to support that (I know some have already)…and even beyond that-people have to use those new browsers.  The slowness of standards leads me to believe that RIA platforms will be around a while as there is some flexibility in providing RIA frameworks from commercial vendors.

If I’ve misunderstood something, please correct me.  I really want to make sure I’m seeing the whole picture.  But in the short days after a keynote only demonstration that was admittedly baked, I’m not sure the sky is falling for RIA frameworks and platforms.


This work is licensed under a Creative Commons Attribution By license.

If you looked at the updated RIA Services Business Application template which had the authentication built-in, you may have seen the login screen with a little icon next to the password field:

Biz App Login Template

When you hover over this some helpful information displays in tool tip form:

Tooltip Helper

So how did that get there?  The power of the data annotations.  If you look at your model definition, you can add a DisplayAttribute and provide some additional information.  Let’s take a look at a simple example.  Here’s the simple model:

   1: public class PersonModel
   2: {
   3:     public string FirstName { get; set; }
   4:     public string LastName { get; set; }
   5:     public string EmailAddress { get; set; }
   6:     public string Gender { get; set; }
   7:     public int Age { get; set; }
   8: }

and the DataForm generated:

DataForm with no Attributes

Not too helpful.  Now, let’s modify our model with some attributes:

   1: public class PersonModel
   2: {
   3:     [Required()]
   4:     [Display(Name="First Name:")]
   5:     public string FirstName { get; set; }
   6:     
   7:     [Required()]
   8:     [Display(Name = "Last Name:")]
   9:     public string LastName { get; set; }
  10:  
  11:     [Display(Name = "Email Address:", 
  12:         Description="We do not sell your information!")]
  13:     public string EmailAddress { get; set; }
  14:  
  15:     [Display(Description="Used for demographics")]
  16:     public string Gender { get; set; }
  17:  
  18:     public int Age { get; set; }
  19: }

And here is the new auto generated DataForm:

DataForm with Display Attributes

Much more friendly to the user, and from a code perspective, we wouldn’t have to change how we work with our model.  We get some free visuals and functionality with some simple attribute properties.

Also, did you know that you could bind multiple items to the DataForm and get automatic paging and add new functionality?  Given this code:

   1: ObservableCollection<PersonModel> people = new ObservableCollection<PersonModel>();
   2: for (int i = 0; i < 10; i++)
   3: {
   4:     PersonModel p = new PersonModel() { FirstName = "First" + i.ToString(), LastName = "Last " + i.ToString(), Age = i };
   5:     people.Add(p);
   6: }
   7:  
   8: DataBrowser.ItemsSource = people;

Check out what is generated:

DataForm multiple data binding

Notice the pager and add new buttons.  Nice.  If you’re wondering how to get more granular control over the field displays, it is similar to DataGrid in that you can turn off auto generation of fields and provide your own implementation through custom DataFields:

   1: <datacontrols:DataForm x:Name="DataBrowser" Width="400" AutoGenerateFields="False">
   2:     <datacontrols:DataForm.Fields>
   3:         <datacontrols:DataFormTextField Binding="{Binding FirstName}" 
   4:                 FieldLabelContent="First Name: " />
   5:         <datacontrols:DataFormTextField Binding="{Binding LastName}" 
   6:                 FieldLabelContent="Last Name: " />
   7:         <datacontrols:DataFormTemplateField FieldLabelContent="Age">
   8:             <datacontrols:DataFormTemplateField.DisplayTemplate>
   9:                 <DataTemplate>
  10:                     <TextBlock Text="{Binding Age}" FontSize="24" />
  11:                 </DataTemplate>       
  12:             </datacontrols:DataFormTemplateField.DisplayTemplate>
  13:             <datacontrols:DataFormTemplateField.EditTemplate>
  14:                 <DataTemplate>
  15:                     <TextBox Text="{Binding Age}" />
  16:                 </DataTemplate>
  17:             </datacontrols:DataFormTemplateField.EditTemplate>
  18:         </datacontrols:DataFormTemplateField>       
  19:     </datacontrols:DataForm.Fields>
  20: </datacontrols:DataForm>

Hope this helps!


This work is licensed under a Creative Commons Attribution By license.

In a previous post I wanted to call attention to the multi-targeting and design surface improvements for Silverlight developers with Visual Studio 2010 Beta 1.  There has been some comments on that post and a few emails and Twitter replies as well with some great follow-up questions.  I thought I’d post a sort of what works with what information to help you navigate Betaville as a Silverlight developer.

NOTE: We’re talking about Beta technologies here.  That means things may not work, that you shouldn’t count on them for production releases at this time, etc.  In the ‘release early, release often’ mantra of things, I know Microsoft may not follow the ‘often’ side of things, but we sure do release early a lot of things.  It is important to have a perspective that this is for mutual benefit, but also remember that it is beta and things may just not work in harmony.

Being an early adopter usually means you are on the edge.  Standing on that edge of technology comes pain with betas at times.  Add to that multiple beta technologies and you may feel like you are pulling your hair out constantly.  Me too.  Here’s the spectrum of things for a Silverlight developer from a current (as of May 2009) perspective.

Silverlight 2 Development

Silverlight 2 has been released for a while now (since Oct 2008) and is production-ready for you to use.  There is full tool support in both Visual Studio 2008 SP1 (just install the Silverlight tools for VS2008) and Blend 2 SP1.  Both VS2008 and Blend 2 can share project files in harmony and edit back and forth.

The recent Visual Studio 2010 Beta 1 (referred to in this post VS10 so I don’t have to keep typing out beta) will also support Silverlight 2 development.  The Silverlight tools will not install on top of VS10 and you’ll get a warning if you try.  If all you want is Silverlight 2 development in VS10 right now, install the Silverlight 2 SDK and the Silverlight 2 developer runtime.  That’s it…you can then develop Silverlight 2 applications.

Silverlight 3 Development

Silverlight 3 is currently in beta as are the associated tools (Silverlight 3 tools for VS2008 and Blend 3).  A lot of people have been working fine with these in beta and everything works well.  VS2008 can author SL3 projects and Blend 3 can open them no problem.  Both of these are still in beta right now, but it is important to know that Silverlight 3 release tools will be VS2008 and Blend 3.

For VS10 and Silverlight 3, the situation with the tools is similar to Silverlight 2.  The Silverlight tools installer will still not run on VS10.  If you want to add Silverlight 3 development to your VS10 environment, you can follow my previous post instructions, which basically is to install the SL3 SDK and SL3 developer runtime.  At this time, VS10 will only target Silverlight 3 beta and will also not run the .NET RIA Services bits that you might be using.

What about Blend and Visual Studio 2010 Beta 1?

With VS10 there are some caveats.  With VS10 you can create multi-target solutions.  You can see this when you create a new project in VS10:

Visual Studio 10 multi-targeting

Now for the caveat.  If you select .NET Framework 4 in VS10, and then open your project in Blend 2 you will see this warning:

Blend warning on opening VS10 solution file

In my experience under simple circumstances you can still open it and work with files.  Here’s where beta life starts getting confusing.  If your Silverlight application is just the application, you will see the above warnings and should be able to edit (regardless of if your target in the new project window was .NET Framework 4 or 3.5).  Now, if you also added a web project to your solution and open it in Blend 3 Preview, you will see this:

Blend warning on opening up .NET 4 project

Indicating that the web project type is not supported at this time in Blend 3.  The solution will open in blend (if you say yes) but your web project will have a “?” next to it and read (unsupported project).  You’ll still be able to edit the Silverlight application, but not do anything with the web project.

What about WPF projects then?!

If your target selection was .NET Framework 3.5 then you’ll still get the first warning, but should be able to work with the project.  If your target selection was .NET Framework 4, then you’ll get the unsupported warning and won’t be able to work with this.  Oddly enough, Blend 2 will open the .NET 4 project, weird.  In either route, when you compile in blend you’ll see this note:

   1: Project file contains ToolsVersion="4.0", which is not supported by this version of MSBuild.  
   2: Treating the project as if it had ToolsVersion="3.5".

That should tell you something if you think Blend 2 is going to build your .NET 4 project just because it will open :-).

Why is it this way and when will it all work?

Ah, the magic crystal ball.  If we could get all the teams on the same ship cycle it would be easy, but it just isn’t that way right now.  Basically VS10 went into beta 1 lockdown before certain things for Silverlight and Blend tools were able to hit certain milestones.  So given that, here’s where we stand.

NOTE: Expression Encoder outputs either Silverlight 1.0 or Silverlight 2 templates and the output are completed projects.  If you open up the source for an Encoder project it will prompt the VS10 upgrade wizard, or in VS2008 just open for you to edit (assuming you have the Silverlight tools installed)

For Blend 3 and VS10 projects to work in harmony, an update to the Expression Blend 3 preview that supports Visual Studio 2010 and .NET Framework 4 projects is expected to be available in Q3 of 2009.

For VS10 and Silverlight 3 RTW/.NET RIA Services working, we’re looking at an update to VS10 would be needed and we haven’t determined a timeframe on that just yet.

What should I do?

Well, as a Silverlight developer, I’ve given my opinion already.  Until that update for VS10 happens to enable Silverlight 3 RTW and .NET RIA Services development, I think the best option will still be the released tools for the environment (VS2008, Blend 3).  Consider VS10 something to look at, but not ready just yet for full Silverlight 3 development.

For other project types like ASP.NET, WPF, WinForms, etc. you’ll still be able to multi-target in VS10 and most of these are released right now so you should be in a decent environment.  WPF caveats above still apply as most WPF developers also rely on Blend as a tool for their projects.

Summary

I know this is totally confusing and it sucks.  After re-reading this, my own head spins.  It is easy for us to say it is the pain of an early adopter…and it is.  By sitting on the edge with beta technologies we take risks and have to determine our own rewards.  Knowing this information should help you be informed about your projects.

  • Silverlight 2 + VS2008 + Blend 2 development: released, available, working
  • Silverlight 2 + VS10 + Blend 2 development: available, working (VS10 in beta)
  • Silverlight 3 + VS2008 + Blend 3 development: available, working (Silverlight 3 and Blend 3 in beta)
  • Silverlight 3 + VS10 + Blend 3 development: available, working with caveats (Silverlight 3 beta only, no RIA services)
  • WPF + VS10 + Blend 3 development: available, caveat of Blend 3 will not open .NET 4 projects from VS10

Remember, virtual machines can be your friend!  For some more general Visual Studio 2010 and .NET 4 training information check out the training kit here.  For information regarding ASP.NET MVC and VS10, check out Phil’s post.  Hope this helps!

Well today was the public release of Visual Studio 2010 Beta 1.  It is the first time developers will have the chance to take it for a spin and kick the tires.  I wanted to share some information specific for Silverlight developers with regard to Visual Studio 2010 Beta 1.

Visual Studio 2010 is the first IDE that will support two key features for Silverlight developers: multi-targeted Silverlight development and editable design surface for Silverlight.  The second point also comes with things you might expect (like data binding wizards and dialogs as well – I’m lumping all of that in to ‘editable design surface’).  To get started there are a few things you should know.

First, if you are installing from a “clean” environment (perhaps a virtual machine, etc.) and want the multi-target support, here’s what you’ll do:

  1. Install Visual Studio 2010 Beta 1
  2. Install Silverlight 2 SDK (if you attempt to run the Silverlight 2 tools installer it will fail with an error message…just install the SDK).
  3. Install Silverlight 3 Beta SDK (again, don’t attempt the tools installer as it will fail)
  4. Install Silverlight 3 Beta Developer Runtime

Once you have done this, you now have a Silverlight 2 and 3 development machine for Visual Studio 2010 Beta 1.  Congratulations!

Hey, where’s my multi-targeting?!

Be patient.  When you create a new project you’ll see just the standard Silverlight application templates.  Select that first and then you will see the multi-target option in the next dialog:

Visual Studio 2010 Silverlight multi-targeting

Once you select this option you will be starting development using that runtime version.  So remember, it is after you select a Silverlight project type.  If you want to change the target version runtime after you’ve created a project, just right-click on the Silverlight project, choose the properties and you’ll see Target Silverlight Version and can change it there.

What about the editable design surface?

Once you have a Silverlight project ready, you can use the design surface for editing and dragging/dropping UI elements, arranging layout, etc.:

You can also now select items on the design surface and manipulate binding or other properties in the ‘normal’ Visual Studio way (property panes, dialogs).

Hey, what happened to my Silverlight Templates…and what about .NET RIA Services?!

For right now in Visual Studio 2010 Beta 1, the Silverlight Navigation Application template is not available as a part of the SDK installer (it’s actually a part of the tools installer…which you can’t run for VS2010 Beta 1).  If you want that template, just export one from Visual Studio 2008 and import it into this environment.  It will then show up under the My Templates section.

.NET RIA Services also will not install for VS2010 Beta 1 right now.  So if you want to play around with those bits, stick to VS2008 SP1.

Both of these are known and will be resolved in the future.  Hopefully you understand that the products are in varying beta stages (VS2010, Silverlight 3 and RIA Services) and are not in sync right now.  Kind of a pain, but it’s the sting of early adoption I suppose.

My Recommendation

So what should you do?  Well I do think you should try Visual Studio 2010 and play around with it.  If you need RIA Services development, then stick with Visual Studio 2008.  If you have the ability to run a second machine or a virtual machine, I recommend putting Visual Studio 2010 in that environment.  For Silverlight 3 we will be targeting VS2008 SP1 for release.  Obviously the team is working on supporting VS2010, but for beta 1, we just couldn’t get it in time.  So I’d personally recommend sticking with VS2008 as your primary dev environment for all Silverlight 3 goodness…and run VS2010 in a separate space to play around with. 

Hope this helps!

I’ve not hidden my love affair for Netflix both as a consumer and as a Silverlight developer and how they’ve implemented the technology.  Long before the instant watch came to the desktop and the XBOX, there were a lot of folks wanting the Netflix experience on their Windows Media Center boxes and extenders.  One such person was Anthony Park (who is now with Netflix as of this writing), who picked up a the MyNetflix media center plugin a while back.

Well, today Netflix officially has a Media Center solution for their customers.  I just got done firing my media center machine up and started the process of getting Netflix on the box.  It showed up under the Program Library and I followed the minimal instructions to get it working…restarted Media Center (not the machine) and boom, done.  I love how the branded experience of their application matches their online app as well as their overall brand identity very well:

Netflix Media Center Login

After logging in, I’m able to view my Instant Queue, DVD Queue, genre’s and new releases. 

Netflix Media Center DVD Queue

Once I find a movie from one of the categories not in my queues, I can even add it at that point!  Nice!

Netflix Media Center Add to Queue

Once you choose to watch a movie through the experience, you’ll notice something familiar – yep, that’s Silverlight powering the playback of the Netflix Instant Watch feature in Media Center.  Nice.  This is a great continuum story for the platform and for Netflix to be able to re-use their platform and their custom implementations in various areas: online (browser), XBOX, and Media Center.  Very cool to see this.  I still think the coolest feature of Instant Watch is how all the experiences are synchronized…I can pause anywhere and pick up another medium (XBOX) and start where I left off – awesome.

NOTE: It looks like at this time it is Media Center for Vista only and Windows 7 RC machines are not enabled.  Additionally, I am guessing that the same licensing rules apply for the media content, so probably only US customers. 

Kudos to the Netflix team for enabling this feature and extending their reach to where (and how) people want to view their media.  If you want to figure out how to enable it on your media center machine, you can watch this video (just try to disregard the creepy mitten-wearing hands…odd): Get Netflix on your Media Center.