Advertisement

Microsoft PDC10 Announced–Book hotel early

So it appears we’ll be having a Professional Developer’s Conference after all this year.  Today we announced the PDC10.

Microsoft PDC10

Unlike previous ones in ‘conference cities’ this one will be held at the source of the information, on Microsoft’s campus in Redmond, Washington.  The price looks to be less than previous as well, so check out the details at the Microsoft PDC event site.

If you’ve never been to Redmond before, or if you have, allow me to give you some friendly advice.  If you think you might be coming, book a hotel room now.  Redmond isn’t a conference city like LA, Atlanta, New Orleans, etc.  That means there isn’t massive amounts of 50-floor hotels sprawling all over the place.  Here’s my tips (as a former frequent traveler TO Redmond) on where to stay.  This is my own personal advice based on experience.

NOTE: While some addresses may be in Bellevue, if you aren’t familiar with the area, know that Microsoft’s main campus in some areas spans the two cities (Bellevue/Redmond). 

Here’s some hotel options for you:

  • Homestead Suites – this is THE closest hotel to the main campus.  I’ve stayed here once.  And frankly I haven’t stayed since.  My experience is just one, but it wasn’t a positive one.  I know others who have stayed here with no issues though and enjoyed the stay.  These are suite-style rooms with a kitchenette usually and don’t have daily maid service.  It is relatively inexpensive though and good for a budget.  If you want to be CLOSE to main campus (i.e., you could walk to conference center), this is the place.  That being said, there is no night life :-).
  • Fairfield Inn, Courtyard by Mariott, Residence Inn Bellevue – these places are literally in the same parking lot.  It isn’t right on campus, but will be the next closest ones.  If you wanted to walk to campus you could, but it would be a healthy walk.  I almost always stay at either the Courtyard or the Fairfield.  They are clean, roomy, and have the amenities I desired.  I don’t think you can go wrong with any of these choices.  The Residence Inn provides rooms that are more suite-like for sharing with groups of folks.  These are all reasonably priced in the area.  Not a ton of nightlife around here either.
  • Redmond Mariott Town Center, Residence Inn Redmond – these are right next to each other as well and in the Redmond Town Center area – which is closer to downtown Redmond.  Town Center is like an outdoor retail mall/shopping center with restaurants, shopping, movie theater, etc.  It’s a good place if you need something around you.  Not everything is open always after hours, but better chances here walkable than other places.  This is not a walkable location to campus though.
  • Redmond Inn and Silver Cloud Inn – these are two other off-brand hotels that are in Redmond that a lot of business visitors use.  They are economical and generally no issues.  I’ve stayed at the Silver Cloud before and have had no issues with it.  The Redmond Inn is close to campus and you could walk if needed to.  These are more budget hotels.
  • The Heathman Hotel Kirkland – my favorite place to stay if you don’t mind not being in Redmond.  This place defines service.  Kirkland is a town just west of Redmond and would be a drive to campus (about 10 mins with no traffic).  The hotel is in downtown Kirkland which has a pretty decent local nightlife (weather permitting).  They have a courtesy driver that will take you places as needed (not sure if they will drive you daily to the conference center, but you might ask if you have a group).  It’s a modern, more contemporary hotel.  When my family comes to visit, if I don’t have room, I’m telling them to stay here.

There are others, of course, but I don’t have experience in them.  My guess is these will fill up fast.  Then you will be looking at downtown Bellevue (a drive) for a place or – worse – Seattle, which would not be ideal for a conference goer (but if you want nightlife, then stay in Seattle).  My guess is that the conference may be providing shuttles from certain hotels but I haven’t heard anything myself. UPDATE: I just heard no shuttles on this one, so my recommendation is pick close to campus or find a MSFT buddy who can pick you up :-).  Seattle metro area has great mass transit as well though!

I would recommend booking early if you want to be close to campus.  I’m sure these will sell out VERY quickly.  Redmond/Bellevue/Kirkland is a very diverse area with lots of multi-cultural eating locations and natural/organic food options as well (if you want Pho, check out Saigon City on Bel-Red Rd).

Hope this helps and see you at PDC10!


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

Quick Steps to displaying data using PivotViewer and Silverlight

Last week or so the PivotViewer control was released, which is from the Microsoft LiveLabs team.  It’s a Silverlight control that enables you to visualize data information in a DeepZoom type experience.  Be sure to check out the PivotViewer learning section for some initial information if you haven’t seen any demonstrations.

I received an email a few days back hoping for a more quick “how to” on using this control.  After all, it is a control for Silverlight and requires some implementation.  Honestly, I hadn’t even used it myself until I got that note.  I thought I’d jot down my notes in creating and consuming the simplest form of data and display using PivotViewer.  I say “simple” because you can get much more complex, but I wanted to simply show the quick steps.

Understand first that Pivot collections are a combinations of imagery and metadata that describe that imagery.  If you’ve ever seen the Hard Rock Memorabilia site that was done in early Silverlight days, this is the similar concept.

Step 1 – Get PivotViewer

The first thing you need to do is get the bits.  I’m going to assume you already have Visual Studio 2010 and Silverlight 4 Tools installed.  You can get the PivotViewer SDK at the PivotViewer learning section of the Silverlight community site.  Once you run the installer, the SDK will be installed to %ProgramFiles%\Microsoft SDKs\Silverlight\v4.0\PivotViewer\<RELEASE>.  There is a sample folder with source for an implementation as well if you want to look at it, but it has custom actions and things that you may not need.  My steps below are the “PivotViewer 101” steps to get a simple collection.  The sample provides more sample code to do other things with PivotViewer.

Step 2 – Get Pivot collection building tools

In order to use the control, you must have a Pivot collection source.  This is a specific data format in XML that the PivotViewer (and Pivot full client) use to understand the data.  The XML schema is documented here: PivotViewer Collection XML Schema.  As you can see it is fairly simple.  You could certainly build this by hand, but why would you when there are a few tools to help you!

There are 3 primary methods to create collection sources the way I see it: command-line, code library, and Excel.  The first two are most likely what any dynamic collection source will want to use.  These would be code-based approaches to looking at various types of data sources, appending metadata, and creating dynamically created collection sources or JIT-created ones as well.

The latter, using Excel, is the simplest.  The LiveLabs team created an Excel add-in to create the collection data using a familiar interface without having to really wrestle with the collection schema.  Once installed you have a new tab in Excel:

Excel PivotViewer collection tool

When you click the New Collection button on this tab, you’ll get a simple spreadsheet to start building your collection source.

Step 3 – Begin to build your collection data

For my sample, I’m going to use Bing’s wallpaper images from their last “Bing’s Best” Windows 7 themes.  Having my Excel sheet opened and already clicking on the New Collection function, I can now use the Import Images function to do this in bulk.  Now I don’t have to do this.  In fact, I can do one-by-one using the Choose Image function and select individual items.

I then wanted to provide a category column to enable my user to filter based on categories.  I used the Insert Column feature and gave it the title of Category.  These columns translate to Facets and if you see the schema definition diagram you will see that those visually translate to filters in the control.

Building collection data

Add your data until you are satisfied that you have all your data and metadata represented in this spreadsheet.  I only added one column but you could add more.  I am now complete and can choose to Publish my collection.

The result of the Publish function is that it will produce a file (CXML) and a folder of your DeepZoom-sliced images.  Remember this location of your data.

Step 4 – Build a Silverlight application implementing PivotViewer

Assuming you have the SDK installed, start a new Silverlight project in Visual Studio.  After that here were my simple steps:

Add reference to System.Windows.Pivot – add a reference to this assembly as this is where the PivotViewer control resides.

In my MainPage.xaml I then add an XMLNS declaration for the namespace and implement the control:

   1: <UserControl x:Class="SilverlightApplication164.MainPage"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   5:     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   6:              xmlns:pivot="clr-namespace:System.Windows.Pivot;assembly=System.Windows.Pivot"
   7:     mc:Ignorable="d"
   8:     d:DesignHeight="300" d:DesignWidth="400">
   9:  
  10:     <Grid x:Name="LayoutRoot" Background="White">
  11:         <pivot:PivotViewer x:Name="MainPivotViewer" />
  12:     </Grid>
  13: </UserControl>

That’s it for my simple scenario on the UI front.  I’m taking the approach that my app *is* the entire PivotViewer experience.

The next thing I wanted to do was make my simple viewer dynamic.  I wanted this same XAP to be used for any collection.  In my MainPage.xaml.cs code in the Loaded event I use the PivotViewer API and call the LoadCollection function:

   1: public MainPage()
   2: {
   3:     InitializeComponent();
   4:     Loaded += new RoutedEventHandler(MainPage_Loaded);
   5: }
   6:  
   7: void MainPage_Loaded(object sender, RoutedEventArgs e)
   8: {
   9:     string collection = App.Current.Host.InitParams["collection"].ToString();
  10:  
  11:     MainPivotViewer.LoadCollection(collection, string.Empty);
  12: }

You’ll notice that I’m getting a value from Silverlight’s InitParams model.  This enables me to send in the URL of the collection dynamically in my HTML hosting page:

   1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
   2:   <param name="source" value="ClientBin/SilverlightApplication164.xap"/>
   3:   <param name="onError" value="onSilverlightError" />
   4:   <param name="background" value="white" />
   5:   <param name="minRuntimeVersion" value="4.0.50424.0" />
   6:   <param name="autoUpgrade" value="true" />
   7:   <param name="initParams" value="collection=URL_TO_CXML" />
   8:   <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50424.0" style="text-decoration:none">
   9:        <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
  10:   </a>
  11: </object>

So I can re-use this XAP in many places and just change the initParams value in the <object> tag.  I build the XAP and now I can place it anywhere.

Step 5- Publish the result

The final step is to publish everything.  Remember the CXML file and the folder of images?  They need to reside somewhere.  Here are two critical things to note:

  • If they (collection CXML file and images) are not residing in the same location as the XAP implementing the PivotViewer control, it must have cross-domain policies (clientaccesspolicy.xml) in place persuant to the rules of Silverlight and cross-domain.  Otherwise it won’t work.  PivotViewer makes network requests and this policy is required by Silverlight in cross-domain situations.
  • You may need to add a MIME type mapping on your server in order to serve the CXML file.  I did (on Windows 2003).  I simply added a MIME type mapping for .cxml and gave it the content type of text/xml and it worked.

Once I have all that published, I can deploy my HTML page hosting the XAP and pointing to my collection source.  As an example, here is my final result for this: Bing’s Best Pivot Collection.  Notice how the Category column now shows as a filter source on the left.  Had I made more columns, there would be more filter options.  I also could have made more metadata and populated the HREF attribute of the data to actually link to something.

The cool thing as well is that any collection that works with the Pivot schema works.  You can find some samples at the GetPivot Developer site:

Using the project the way I created it, I can just input these URLs in my initParams to change the collection I want it to view.  I was also able to use the Microsoft Organization Pivot Collection that LiveSide created directly in this without modification as well: MSFT Organization Pivot in Silverlight.

Summary

After spending a few minutes with the control, the simplest display scenario is very simple.  In fact, creating the collection source I think will be the most challenging…to determine what is the appropriate metadata that you need and want to display to your users to interact with in your application.

You can download my sample project here: PivotViewerSimpleSample.zip

Hope this helps!


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

Silverlight Media Framework 2 released–integrate with Live Writer

Yesterday (7-Jul-2010), the Silverlight Media Framework v2 was released on Codeplex (yeah, it’s Open Source).  If you aren’t familiar with it, it is a Silverlight framework encapsulating the best practices for media playback for Silverlight applications.  It is both a framework and, in v2, they also provided compiled simple player XAPs that you can just drop in HTML.  If you are building apps, you’ll want to take a look at the framework in more detail, but if you want a solid media player experience grab the players too.

Since I use Windows Live Writer as my blogging tool, I wanted to share my workflow for embedding videos into blog posts (or other content that I can author using Live Writer).  First, grab the necessary tools:

Install the Dynamic Template add-in for Writer.  Next step is to put your ProgressiveDownloadPlayer.xap somewhere.  This doesn’t matter, as along as you know the URL to it.  I keep mine on my cloud storage share since I can re-use it in various places.  Once all those pieces are in place here is what I do.

Step 1 – Create the Dynamic Template

In order to create a template, you have to execute the Insert function for Dynamic Template to bring up the dialog.  Once there, choose to Edit Templates and give it a name.

Dynamic Template insert dialog

Then in the template code, copy this HTML:

   1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="640" height="480">
   2:   <param name="source" value="URL_TO_YOUR_PLAYER_XAP" />
   3:   <param name="background" value="white" />
   4:   <param name="enableHtmlAccess" value="true" />
   5:   <param name="minRuntimeVersion" value="4.0.50424.0" />
   6:   <param name="initParams" value="MediaUrl=<%= VideoUrl %>,AutoPlay=false,ThumbnailUrl=<%= ThumbnailUrl %>" />
   7:   <param name="autoUpgrade" value="true" />
   8:   <a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50424.0" style="text-decoration:none">
   9:       <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none" />
  10:   </a>
  11: </object>

And in the settings use these in this screenshot:

Code variables

Of course, replace with the URL to your player location.  That’s it, that is your template.

Step 2 – Prepare your media

I’m assuming that you already have media to display, but if you don’t, use your favorite media encoding tool to create the media and have the URL.  Note that it doesn’t have to be an absolute URL, but just understand the paths of your web app if you plan on using a relative URL.  Personally I recommend using an absolute one always.

Also the snippet above, while not required, implements the ThumbnailUrl (thanks Kevin) parameter for the player.  You’ll need a URL to a thumbnail image for preview.

Step 3 – Execute the template

Now that you have the template, you can use it.  Rather than talk about it, here’s an embedded video (using the process) demonstrating the process :-)…

Get Microsoft Silverlight

Simple, huh? Now of course you cannot see the final result in Writer (not sure why actually but I think it has something to do with the rendering techniques they use in authoring mode (hence the white box in the vid), but you can see the end result!

Summary

Silverlight Media Framework is awesome.  Live Writer is awesome.  Awesome+Aweomse = Awesomely Awesome.  Kidding aside, if you have similar workflows to me, this should help you.  It has streamlined the content publishing process when I need it in a simple, but efficient way.

Hope this helps!


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

Silverlight bookshelf from SilverlightShow

SilverlightShow.net is one of those great community sites providing information, tutorials and general developer information around Silverlight.  They’ve done a great job providing a spectrum of beginner to advanced topics on Silverlight development. 

At MIX10 I was talking with one of the brains behind the site (and Silverlight MVP), Emil Stoychev, one one of the ways they had been displaying book recommendations on their site.  It was a bookshelf view that I thought was cool and I wanted to use it for my own book recommendation list on my blog. 

NOTE: It was funny in talking with Emil because they had this bookshelf control for a while and then the iBooks app for iPhone/iPad came out and looked really familiar.  Of course, the user experience isn’t something entirely new for displaying this type of information, but it was cool to see consistency.

I asked Emil if I could use the control and showcase some of the work they do on that site.  They carved off a little area where I could manage my books and here it is:

SilverlightShow bookshelf

You can see it running live and interact with it on my Silverlight Book Recommendations link here on this site.  I think it is a lot better than just a standard list of links.  Now I just need to fill up the shelves so they don’t look so empty!

Thanks Emil and SilverlightShow!  And to answer in advance, I’m not sure if they plan on releasing this as a sample control or what…that is something you’ll have to head over to their site and ask them (and check out their material as well).



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

Smashing Magazine July 2010 Windows 7 Theme

July 1st is here…time for an updated Windows 7 Smashing Magazine theme pack!

Smashing Magazine July 2010 Windows 7 Theme

The July themes seem to be focuses on more 'summer' things.  Not as many Independence Day things as I would have suspected, but shows a good international design contribution.  So here is your July 2010 Windows 7 Theme Packs for wallpapers – unfiltered and uncensored – about 35 wallpapers in all.

For details on these and to see past ones, visit the Smashing Magazine Windows 7 Theme information for the specifications I used for the theme pack as well as previous themes.  Want to participate and submit yours?  Join in!


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

July 2010 Silverlight MVP Awards

Each quarter, new MVP (Microsoft Most Valuable Professional) candidates are awarded.  January 2010 is the first awards of the year and so I present the new/moved/re-awarded Silverlight specific MVPs:

The following have been renewed this year – congratulations and keep up the good work!

Congratulations to everyone above and keep up the great work of showing us what Silverlight is all about!


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

Top issues for Silverlight

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?



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

On leaving the Arizona community…

As I write this in my hotel room now on the eve of me leaving the state of Arizona, I am left with mixed emotions.  Most of them frankly are deeply personal which I’ll spare you the details.  However, it is here – specifically in the Phoenix metro area – that I grew the most technically. 

NOTE: Yes there are some Microsoft employees that live outside of the ivory towers of Redmond.  However, and to be frankly honest, when you work for a product team -- *currently* – it is fair to say that growth could be limited when you aren’t near the decision makers.  It is for this reason that I’ve decided to relocate.

Allow me to reminisce a bit…

Out of college I actually worked for my fraternity (Delta Chi for those interested).  I was immensely interested in educational leadership and traveled the northeast area of the country visiting undergraduate and alumni organizations to share my knowledge learned in the world of educational leadership.  It was through a freak accident…getting lost in Pittsburgh while trying to find Duquesne where my life took a twist.  I wasn’t paying attention and ran a red light in an intersection.  My car was met by another – otherwise known as ‘getting t-boned.’  Both of us survived fine although my car did not.  Through a series of other events within weeks I quit that job and was left jobless and headed back to Arizona where I had to beg my father for help (not really, my parents are great).  I also had met a lady that had really caught my attention.  I wanted to marry her quickly.  With no job, no prospects and no home, I asked her parents for her hand in marriage.  Yeah, I know. 

Anyway, I took a temp job with FHP Healthcare in Arizona (an HMO) doing data entry during their busy season (open enrollment).  I was informed that I was the 4th temp they brought in in as many days and they were way behind in the applications.  If I couldn’t cut it they weren’t going to wait.  I found this to be odd because data entry seemed really simple to me. 

SIDENOTE: My father was a programmer and always involved in IT.  I lived around it.  He brought home his ‘portables’ (basically a 27-inch TV dumb terminal) a lot and I was always around it.  I pretty much grew up around computers although never really programmed them much beyond BASIC.

Before lunch on that first day I had completed the stack that was provided me…about 1500 applications if I recall.  I told my supervisor who effectively called ‘BS’ on my and went to verify my work.  She was amazed and brought me in to the big boss’ office.  He asked why I was working as a temp and what my skills were.  Of course, my degree in Criminal Justice didn’t shine for an IT job, but he saw something in me.  He took a chance that I’ve been grateful ever since (thanks Charles!).  That week I was offered a full-time job as a junior analyst for the sales and marketing systems and worked under the wing of a programmer (our system was PowerBuilder at the time).

Fast-forward about 2 years I got the chance to join a consulting company, one of the biggest/best in the valley in Phoenix.  To date, it still has been the most fun place to work.  Ah the days of ordering random crap on Skymall to “test” the e-commerce updates (our company built their first site).  It was there that a group of us started to host impromptu meet-ups of like-minded geeks in the Microsoft world…’user groups’ as I would learn them to be called.  Some more driven folks like Scott Cate and Dan Wahlin put some more structure, organization and ‘official-ness’ behind them and the Arizona .NET User Group was formed a long while ago.  I’ve been involved in some way ever since.  I have fond memories of organizing and participating in DevDays events, working with partners and customers, building some of the most unused systems for large companies :-), and just having loads of fun working with great people.

It is through community that I’ve learned so much of what I know and, perhaps more importantly, what I don’t know.  My paths and aspirations eventually brought me to Microsoft about 5 or so years ago and here I stand now – headed to the mothership to be closer to my team.

I’m immensely grateful for those in the Arizona technical community that I’ve met and learned from over the years.  There is a lot of smart people here (well I think they are smart but I still can’t figure out why we all sit in the 115F temperatures!!!) that I admire a lot.  Whether it be Microsoft technologies, Linux user groups, Ruby, whatever the tech, I’ve learned a lot and I thank you.

The decision to leave Arizona was much more challenging on personal levels, of course, but along with my personal friends exists my ‘professional’ ones who I’ve had just as much fun with over the years.  I’m not sure if my paths will bring me back to Arizona in the near future, but until then – thank you Arizona.

I’m still working with Silverlight, still working with the community and hopefully taking a broader feature role in the coming versions.  My responsibilities haven’t really changed, but some were questioning my move so I thought I’d drop a note.  In a nutshell to Silverlight folks: your feedback has a smaller distance to travel from my inbox/blog/forums to those who make decisions!

I want more shell applications, especially for mobile

I just got back from speaking/attending the Norwegian Developers Conference in Oslo, Norway.  It was a great time and a well run conference.  Like many other conferences I found myself looking for two things I wanted on my mobile: the schedule and a map/guide for the city (I’ve never been to Oslo).  You see every time I take a trip, here’s what I do:

  1. Search for an app that contains the schedule (or offline version).  Ideally allows me to build my schedule and gets updates for changes
  2. Find the metro/map/guide for the city because I know I’ll be lost.

Rinse, repeat.  I do this every conference, trip.  And then I end up with a multitude of apps installed that are single purpose throw-away.  Seesmic Desktop platform has spoiled me in thinking of this eutopia of a single-purpose shell which can have pluggable content.  For Seesmic, this is my ‘social media’ shell.  But I want more now.

You see, at MIX10 there was a great mobile app that was created by Chris Hardy.  It was written in MonoTouch, nonetheless!  It pretty much did everything I would want in a conference app.  But after MIX it is kind of dead.  Uninstall. (Yes I know it looks like someone repurposed the app for a REMIX event, but same purpose…delete.).  Same thing after my trip to Berlin last year.  After that trip I didn’t need the metro rail map anymore.  Delete.

But then I head to Norway.  I want the Oslo guide/metro schedule.  I want a conference app.  There is both, but again they are separate apps.  Is my vision that far off?

I have been bugging Chris to modify his app to be more of a shell.  I like everything about the structure and think he should make it a basic “Mobile Conference Guide” app – enabling conference providers to publish a feed of their data and personalization (i.e., for background, icons, etc).  As an end user I would have one app installed.  I could then launch the app and (perhaps) browse a catalog of known events (organizers can publish to a specific feed location) or enter a URL to a conference feed that conforms to the data specification.  I don’t care if that data specification is OData, RSS, whatever – just have the app define a standard.  What conference provider wouldn’t love to just worry about providing data and not worry about providing the app?!  Am I way off here?

Same goes for travel guides (I’m guessing this one is out there and I’m just not finding it).  I have an app called “Metro” that allows me to subscribe to metro/public transportation for various cities in a singular app.  That’s great, but what about city guide information?  Restaurants?  Museums, etc.  I want more.  You know I want the Rick Steves travel app (does it exist and I’m just an idiot) with in-app purchases for more guides for other cities…all offline.

Anyhow, just a rant as I uninstall, yet again, two very useful apps after a trip.  Please bombard Chris with requests :-).



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

Hosting cross-domain Silverlight applications (XAP)

In the Silverlight world, there are two types of “cross-domain” things that may leave some banging their head against a wall for a while.  The first involves making network-based calls (WebClient, HttpWebRequest, etc) to services hosted on a domain other than the one that is the site of origin for the XAP.  This is solved by ensuring the service provider enables a clientaccesspolicy.xml file for their service.  More information here: Cross Domain Policy Files with Silverlight.

NOTE: “site of origin” is a term you might see a lot with regard to Silverlight.  This refers to the URI domain of the Silverlight XAP file.  For example: http://apps.mysite.com/sources/coolapp.xap might be a URI that you have for an app.  The site of origin in this is apps.mysite.com (more specifically it is actually the entire URI usually when people refer to this term).  This might help when you read things about cross-domain issues.

The second issues is one of hosting Silverlight applications (XAPs) on your site that are from a different domain.  What I mean here is that your site (www.coolwebapp.com) has an <object> tag for Silverlight plugin that has the Source parameter set to apps.anothersite.com/foo.xap.  This is essentially the cross-domain hosting situation.  What happens in this situation is that the plugin loads but the app does not, presenting in just a big blank space where the app should be.

A recent head-banger sent me a note and I sent him my items to check on how to solve this.  I thought I’d share.  When I see issues with this, I normally tell people to check for one (or more) of three things:

HTML Access

If the Silverlight application is doing anything to work with the HTML DOM of your hosting page, this is the first place to look.  Don’t know if this is happening?  If the Silverlight application uses System.Windows.Browser anywhere it likely does.  By default the tools and templates from Visual Studio generate the bar minimum <object> tag.  There is one property of the plugin, EnableHtmlAccess, that is set (essentially) to true for same-domain applications.  However, for cross-domain applications, you will need to opt-in for this adding this parameter to the <object> tag:

   1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2">
   2:   <param name="source" value="http://apps.somesite.com/foo.xap"/>
   3:   ...
   4:   ...
   5:   <param name="enableHtmlAccess" value="true" />
   6: </object>

By doing this, you are granting the XAP access to the HTML DOM of the hosting page.  Don’t say I didn’t warn you.

XAP MIME type

When the plugin loads a XAP from another domain, it checks what the MIME type is.  If it is not a valid Silverlight type, it won’t load the app.  This is a security mitigation.

If you are loading a cross-domain XAP, make sure the site delivering the XAP is delivering it with the appropriate MIME type: application/x-silverlight-app.  By default this is set in IIS7/Windows 2008, but not in IIS6/Windows 2003.  You can put this on the server level or the application level…wherever you feel comfortable, just as long as it is delivering it with the XAP. 

Obviously on non-Windows servers, this will not be set at all regardless of the version.  If you are getting a XAP from a Linux/Apache server for instance, the server administrator will want to add the type.  This is simple and you can do it at the global level in the mime.types file.  Or on a per-site basis you can do it by editing the .htaccess (or creating one) in the directory level that will serve the XAP and add:

   1: AddType application/x-silverlight-app xap

If you are using a CDN like Azure or Amazon S3 or something else and they don’t have the type associated, you will need to be creative.  Most CDNs enable you to set the MIME type (or Content-Type) on the file during upload.  For Azure, Silverlight should already be there.  For something like S3, tools like CloudBerry Explorer enable this feature for you (and actually already have a list of types built-in to their tool).

This situation (identifying the MIME type) can be quickly tested using a tool like Fiddler to see what the response and Content-Type are being delivered.  Fiddler is an indispensable tool…go get it, it’s free.

ExternalCallersFromCrossDomain

This is the black hole property right here.  This one is probably a last resort for most.  This property, in the Deployment node of your AppManifest.xaml file controls Javascript and HTML DOM access to scriptable objects defined in the XAP.  Like EnableHtmlAccess, for same-domain situations the setting is irrelevant, but in cross-domain hosted XAPs, the default is the NoAccess option.

To enable this you’ll need to manually edit the AppManifest.xaml file to add the ExternalCallersFromCrossDomain attribute.  There are two properties: NoAccess (default) and ScriptableOnly.  You’d want to *add* the attribute and set it to ScriptOnly.

   1: <Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
   2:             ExternalCallersFromCrossDomain="CrossDomainAccess" .../>

REMEMBER: This is is only if you need to.  Read the documentation to see if this applies to your scenario.

Summary

Sometimes debugging this stuff can be tricky.  Having the tools and knowledge makes this easier to track down.  Not all situations involve multiple of the above and if none of them fix it, then you might have another issue.  Hopefully this helps provide some places to look.


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

First time here? You are looking at the most recent posts. You may also want to check out older archives. Please leave a comment, ask a question and consider subscribing to the latest posts via RSS or email. Thank you for visiting! (hide this)