| Comments

Well PDC10 is over (note: head on over to the PDC site to view all the sessions).  There was a lot of talk about Internet Explorer 9 (and another preview update) as well as general web development.  There had been some reports on the 2nd day of PDC commenting about the shift in strategy about Silverlight.

You may have read the initial story from Mary Jo Foley which led to the tsunami of information about Silverlight being done, over and killed except for the Windows Phone 7 platform.  Other popular news outlets picked up on the story, reporting on it and adding their own, yet unconfirmed, statements to the situation. 

Please take a moment and click here to read the update from Bob Muglia about Silverlight.

Many of you have emailed me personally asking for information.  I sincerely appreciate your candor and contact in reaching out.  I’ve strived to be a transparent individual and an approachable one as well within the beast that is Microsoft.  I’ve never hid my contact information and do my best (not always successful) at responding to inquiries.

Please be sure to read Bob’s message above.  It re-affirms our commitment to Silverlight.  A number of us wanted to share our feelings immediately upon this news storm, but wanted to ensure that you heard it from the top.  I’ll add my own personal commentary here…

One email I got (in response to all this news hype) was from a CIO expressing concern about his decision to use Silverlight in a multi-million dollar application investment he was making.  He wanted to know if his bet would be a good one.  My response had nothing to do about which technologies are better than the other.  Here is basically what I shared:

This past year I decided to take a deeper role in the engineering side of Silverlight.  In making this decision I had to relocate to Redmond.  This involved me relocating my family away from our comfort zone and having to start completely new.  It was perhaps the biggest personal change in my life I’ve made yet.  My kids left their friends, as did we.  My wife left her close knit family in AZ.  My wife stopped a business she was just getting great momentum on before this decision.  We sold our house at a significant personal financial loss.  We moved to an area where home prices didn’t fall like we were used to and thus aren’t in a position of buying power.  You’ll forgive me if I say that no software project has made more of a bet on Silverlight than I have personally this year.

I don’t write this to ask anyone to have pity on me that I lost money on my house…I’m a big boy and understand what consequences mean.  I write this to hit more at the heart that I’m personally invested in the success of Silverlight.  I uprooted my family and a comfortable lifestyle to work closer with it.  I’ve made a big bet on Silverlight.  I hope to see it continue to grow.  I don’t have a crystal ball and nobody can tell the future in 5-10 years, but in the near term that I can tell you we’re invested in Silverlight.

Here’s some good reading:

Now, we’ve got a team busy working on the next version of Silverlight so we better get back to work and away from this distraction.

| Comments

Just a quick shout-out to congratulate the latest Silverlight MVPs to the program.  The Microsoft MVP (Most Valuable Professional) program is a recognition program that is in place to recognize and reward those individuals who have been identified by individuals (peers, Microsoft staff, etc.) as experts in their technology field and global contributors to the technology. 

Microsoft MVP logo

As of today (01 OCT 2010) we welcome some new folks to the Silverlight group:

All of these folks are great participants in the Silverlight ecosystem and their local geographies and I congratulate them for their efforts.  Be sure to check out all the Silverlight MVPs and subscribe to their blogs!  Thanks to all of you for helping make a great developer ecosystem!


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

| Comments

Seesmic logoToday, Seesmic more broadly launched Seesmic Desktop, a refreshed platform for interacting with various social media outlets like Twitter, Facebook, Google Buzz, etc.  Seesmic has been one of the leaders in this space providing client applications on various platforms across web, desktop and mobile and providing us with unified views of our interaction with others online.

You may have remembered seeing Loic on stage at MIX last year demonstrating their first preview of this updated platform and inviting developers to be a part of extending the shell.  That’s right…their platform is extensible!  A great application that I can also modify to my needs?  Double rainbow…what does it mean!?

I went to the evening social session at MIX to hear about how they would be enabling developers to extend the platform.  In introducing the concept of plugins, it was made clear that the Seesmic Desktop Platform (SDP) would be leveraging the Managed Extensibility Framework (MEF) that was to be included as a part of Silverlight.  Seesmic would define MEF contracts that as long as developers adhered to them (and of course implemented any required interfaces for actual functionality) then the plugin would be able to extend the platform.  The most grandiose idea can be simply stated as if you don’t like how Twitter is represented in Seesmic, fine…change it.  Of course, I suspect most people will be just fine with their implementation and choose to extend in other areas as I’ve done.

Seesmic Desktop 2

Admittedly I’ve got a vested interest in being excited about SDP…after all it is built using Silverlight.  However, I’m also very much into being a part of my online connected network via Twitter.  Prior to SDP I did not use Tweetdeck or some of the other popular multi-column ones…but was a user of Twhirl.  I loved the simplicity that it provided but did desire for slightly more.  I never got into Tweetdeck and honestly I don’t know why…it just never stuck to me in how I interacted online.  The thought of customizing my own experience, however, is what intrigued me to SDP.

I immediately got started writing some plugins, starting with something that I use often, a translator for reading messages incoming that aren’t in my native English.  Some may scoff, but when you monitor a lot of different things online, this becomes important as I don’t want to ignore things that might be interesting.  I chose to use Microsoft Translator services and in a few hours had my first rough draft plugin completed.  It was very rough (mostly because I desired a lot of things from Seesmic).  I showed Marco my warez and started to give feedback on what I think the platform needed for this specific use case as well as to make my life easier. 

Since then the platform has significantly evolved to accommodate most developers needs.  Seesmic has been very responsive on the developer forums for the platform to needs and questions.  Getting started writing a plugin couldn’t be easier for a Silverlight developer, but I’ve tried to make it even simpler (as I was sick of doing the same tasks myself).  I created some templates that you can download from the Visual Studio gallery that will help get you started.  Once installed you’ll see a nice new project template in Visual Studio:

Seesmic project template

This will stub out the initial shell you will need (you’ll still need to add the correct references to the SDP SDK).  From there you can add item templates for the base plugin type or other types: posting actions, timeline items, etc.  Here’s what my templates provide:

Seesmic item templates

These should give you some good jumpstart code to provide some of the necessary plumbing that would be required.  This is NOT a substitute from understanding the platform!  You need to read the docs and understand the interaction of the API with the platform to be successful.

TIP: When you add references to the Seesmic SDK assemblies, change their Copy Local attribute (in properties) to false so you don’t end up shipping them with your plugin.  Since they are already a part of the platform there is no reason to ship them with your plugin (and this makes your plugin size smaller).

To me, I think the easiest plugins to create are those that implement a URL shortener, posting action or a timeline processor.  These are the areas which would allow for very fast customization.  The account providers is likely the most time consuming as you could imagine as you are interacting with authentication schemes, etc. 

I’ve created a few initial plugins that you might be interested in and you can download them here.  I’m really excited about this platform and the fact that I can extend it to make my interaction with things I care about uniquely my own.  Install Seesmic Desktop today and start developing using the SDK!

| Comments

I recently got a note about a nagging issue in using StringFormat in XAML binding expressions and how it doesn’t honor the current user’s culture settings.  This is true that there is an issue in that it doesn’t in WPF or Silverlight.  If you don’t know what I’m talking about, Silverlight introduced the ability to use StringFormat in data binding expressions (WPF has had this since 3.5 SP1) so you could do some formatting in-line in your binding.  Like this:

   1: <TextBlock Text="{Binding Path=CurrentDate, StringFormat=Current Timestamp is: \{0:G\}}" />

This would result in text that would be formatted directly using your string Formatter without the need for code-behind or any generic ValueConverter.  This is a very helpful feature for formatting UI values as well as in some cases replacing ValueConverters for simple tasks.

The problem is that StringFormat isn’t honoring the user’s culture settings.  Take for example this complete XAML:

   1: <StackPanel x:Name="FooContainer">
   2:  
   3:     <TextBlock x:Name="CultureInfo" />
   4:     <TextBlock x:Name="UICultureInfo" />
   5:  
   6:     <TextBlock Text="{Binding Path=CurrentDate, StringFormat=Current Timestamp is: \{0:G\}}" />
   7:  
   8:     <TextBlock x:Name="CostField" Text="{Binding Path=Cost, StringFormat=Cost is: \{0:c\}}" />
   9:  
  10:     <toolkit:GlobalCalendar  />
  11:  
  12: </StackPanel>

This is being bound to a simple object that exposes two properties for the purposes of demonstration: CurrentDate (DateTime) and Cost (double).  Using my standard US-English settings and regional preferences the output would be:

StringFormat with default culture

Now, let me tell my Silverlight app that I have a different culture information.  I can do this without having to force a language pack installation of sorts and completely change my machine.  Adding the culture/uiculture params to the <object> tag does the trick.  I’ll change it to “de-de” for German.  Here is the new output:

StringFormat with explicit culture

What?!  Even thought the settings recognize a different culture, StringFormat is not doing what I expect.  I would have expected a different date display for German settings (d.m.yyyy) and a different currency display instead of dollars.

Unfortunately this is an issue in StringFormat right now, but there is a simple workaround that if you are creating a localized app you can add to your code that shouldn’t affect your default language settings either.  In my constructor I add this line of code:

   1: this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);

This tells the markup system to use the current culture settings as the UI language.  XmlLanguage is a part of the System.Windows.Markup namespace, so ensure you call that out explicitly or add a using statement.  Now refreshing my German settings sample I get:

StringFormat with explicit culture

as expected.  Changing (or removing the explicit setting of culture in my <object> tag) back to my default culture settings results in my US-English preferences being used and no need for me to change the XAML.

Hope this helps!

| Comments

A while back I had sent out an update on Twitter that I was sitting in a meeting reviewing some “top issues” for Silverlight as reported through various channels (official support, forums, social media outlets, blogs, incoming emails, etc.).  It really seemed to be a holistic view of incoming feedback from all over the place.  People asked if I’d share the issues we discussed and I thought it would be interesting to see what people are facing.  Interestingly enough, almost all of these are solvable and, at least in my mind, not ‘issues’ but learning opportunities (for developers *and* us).

So here they are…I think some may surprise you.

WPF and Silverlight feature parity

It’s a little weird to call this one an issue with Silverlight, but this was seen requested more often in these areas that it is worth calling attention to.  Some of the genesis of this angst comes from an expectation that WPF applications ‘just work’ in Silverlight and not understanding the areas of the subset in both XAML and the .NET base class libraries (BCL).  The other part is more of a future suggestion to bring the XAML platforms closer together.  Pete Brown had a good post in December last year sharing thoughts on this future roadmap: The Future of Client App Dev.  It is a good read.

In the interim, note that those parity type items people are requesting are being looked at.  Specifically, I’d encourage you to search for already logged suggestions and/or provide new ones of specific features you might like to see in Silverlight.  We’ve set up a place for you to do this at http://silverlight.mswish.net.  There is a growing list (yes, I need to ensure I prune the crap out more frequently) that the team looks at for futures planning.  This is for suggestions and not bugs.  For ways on providing feedback to the Silverlight team see my post on the subject.

Again, it is hard to call this an ‘issue’ but I wanted to list it, and call out that we are aware of this desire.

Silverlight and WCF configuration issues

As a beginner to Silverlight you’ve likely experienced this.  Start a new project, write a service on the web project, do Add Service Reference in your Silverlight project and you start coding away.  Life is wonderful, you’re getting results and you polish your application.  Then you move it to production and you start getting the dreaded NotFound issue.  You bang your head on a wall for a while trying to figure out why.  If you are lucky, you remember that the reference was to localhost, most likely, and you simply change it to the appropriate endpoint URI and you are on your way.

But this is frustrating right?  There has to be a better way?  Or perhaps you are having x-domain issues with WCF/Silverlight and you need a way to debug?  Or perhaps everything actually is configured and you have legitimate exceptions but they all surface as NotFound and you want to strangle someone?

Luckily, there are methods to solve these issues.  Yavor, the lead PM on these features for WCF/Silverlight, has commented on these specifically:

  • NotFound and faults
  • .clientConfig service URI issues
  • PollingDuplex
  • Debugging cross-domain errors

This is one of those issues that has answers, but they apparently are not surfaced well enough (or you tell me?  do people just not search the docs?).  I would encourage you to read Yavor’s post on the documented solutions and the plans/inquiries about the future and how things should work.  As an example, we are considering making the fault configuration the default by modifying the Silverlight-enabled WCF Service item template.  Take a look at his post and make some comments about the plans!

Installation and deployment

I’ve seen this a lot.  People saying that they have Silverlight installed and they went to a website that prompted them to install Silverlight, so they did (again) and they went back and were prompted again…rinse, repeat.  The other is that people (your users) aren’t getting prompted for upgrades properly or they aren’t working well with applications.

It is true that we put a lot of responsibility on the developer to customize the installation experience for the developer.  I’ve written about this a few times.  In fact, I called out what I believe to be the best encapsulation of the tenets of a good experience in what Netflix does: Silverlight Install Best Practices.  We have also posted a whitepaper on the Silverlight community whitepaper area for the Silverlight Installation Experience Guidance which basically incorporates these tenets into guidance and sample code as well.  This is a helpful whitepaper to understand the events of the plugin in upgrade situations and how easily you can handle them.

Most of the support issues we see are because the application isn’t properly handling these situations.  One could ask that why we, Microsoft, aren’t providing a better default template that includes all these best practices.  We’ve wrestled with this idea quite a bit actually.  In the end, we didn’t feel right now we could come up with a universal application template that would meet the needs of all app developers (different sizes, use cases for their Silverlight app).  Some things are easier such as media applications coming from Expression Encoder, for example, where we know the size and use of the application.  In fact, those templates have already been enhanced for a better experience than the default install badge.  It is still on our list to provide better out-of-the-box templates in Visual Studio, but we balance that with other features that are on the list for prioritization for customers.

In the end, this is a very solvable issue and again it appears that discovery of the solution could be better.  Help me understand how we can better surface this?

Silverlight browser support matrix

A little bit associated with the above install/deployment issue, we see reports of people saying Silverlight works with IE but not Firefox and also people saying “Silverlight doesn’t support Mac” and other claims.  Let’s be clear.  In the simplest terms we support:

  • Windows: Internet Explorer, Firefox, Chrome (SL4 only)
  • Mac: Firefox, Safari

The full support matrix with explicit versions, etc. is available here.  Where things aren’t working when they should (i.e., Firefox on Windows) that is things I want to know about.  There was an issue early on with Firefox and our detection script that application developers in some apps may never have updated.  This would have triggered the install badge instead of realizing it is already there.  However this was a Silverlight 2 issue and long since fixed.  Again, if there are apps that aren’t working in the supported matrix, I want to know about them!

Aside from that, we’ve never hid our support matrix.  On top of that Linux clients are provided support through the Moonlight project from Novell (and the Mono team).  Yes, at present Moonlight isn’t at 1:1 version parity with Silverlight, but they are aggressively working as fast as they can.  In fact we ensure that our detection script identifies Linux clients and points to the Moonlight installer, where appropriate!

Again, I think this is a solvable issue that is done with arming of information.  If we aren’t providing enough, where do you think I can do better?

Media-related errors

Are you seeing the 4001 AG_UNKNOWN_ERROR message too much in your media application?  The support issues coming in on this front are primarily for DRM-related situations.  In the most recent Silverlight release (4.0.50524.0) we enhanced the DRM-related media errors to provide a better differentiation to what they are and separate them from other issues.  These will now surface in 6000 series errors.

Even further we are making further diagnostics to other media-related error codes in a future servicing release to get even more granular based on feedback we’ve already provided. 

If you are a developer of a media-related application and are seeing media 4001 errors, please upgrade to the 4.0.50524.0 build and let us know if that helps.  If it doesn’t, please contact me and I’ll send you some diagnostic code to help get us better information about what is surfacing.

Summary

I personally found it interesting how ‘low bar’ these issues seemed to me.  Like I said, I believe them all to be solvable with existing solutions that apparently aren’t as discoverable to developers.  Some are actually in the docs though, but I have to admit as a developer myself how much I usually consider docs a last resource.  If you have ideas of how we can better surface these types of information, please share it.

So there you have it…the more top related issues to Silverlight (aggregate through various channels). What do you think?