| Comments

In a recent Twitter conversation I was having with Peter Laudati, it reminded me of another problem I’ve been having with iTunes and wondering why it isn’t working this way. 

First, here’s my setup (and logic):

    • I have one server (Windows Server 2008) at my house that manages my backup, music, photos, etc. (no it is not a Windows Home Server (yet)).
    • I have a public share there with Everyone read/write priveleges called “music” and it is shared out an accessible.
    • In each client computer I have iTunes installed at, I change the Library location to the mapped drive which is pointing to the share indicated above.
    • All is well.
    • Whenever new music is added in a CLIENT machine, it is added to the server (because the library is pointing there) and added to only that local client’s iTunes library – this is the problem Peter and I were discussing, the fact that iTunes doesn’t “monitor” folders to update it’s Library – you have to help it understand by adding.  Royal suck. (FYI, Windows Media Player has been able to monitor folders for about 9 years now.)

So that’s the setup.  Any activity in iTunes now basically uses this server as the storage…this includes podcast subscriptions.  This is all fine.  Until I want iTunes to actually honor my settings.  Here’s what I’m talking about:

As you can see in this image above, my settings say to keep “all unplayed episodes” but also as you can see, episodes that are played (as indicated by the lack of blue dot) are still there.  I’ve refreshed, I’ve ran the “updated podcast” function on the feed(s), etc.  Nothing…all played episodes are persisted.

So, dear Apple fans/experts/geniuses, why is this?  Is this because my Library is a network share?  Can iTunes not handle the fact that it isn’t stored locally?  I will point out that if I manually delete them via iTunes, it does, in fact, delete – so it isn’t a permission thing.  I’d love to take this to the ‘Genius Bar’ but obviously with a dependency on my network share it won’t be of much help.

If anyone knows the solution to this or the problem with getting iTunes to manually update libraries by monitoring folders, I’m all ears.

Yes, I’m aware that Songbird, and others are out there, but they have yet to appeal to me in their other features.

| Comments

If you haven’t been aware, there has been a team at Novell working hard to make a version of Silverlight for Linux.  This version, called Moonlight, has been in development since WPF/e it was first shown at the MIX conference (which by the way is happening in March with some really exciting stuff, so be sure to register for MIX09!).  Moonlight hit beta this past December 2008 and the team has already been working on Moonlight 2 which is the Silverlight 2 compatible version.

Right now, Moonlight 1.0 serves as a functional equivalent to the Silverlight 1.0 runtime, which was released a while back.  Moonlight 1.0 will not enable to you to view Silverlight 2 content right now.  If you want to track Moonlight 2 status, you can do so on the Moonlight project page (various links to Moonlight 2 hacking and discussion lists).

One of the things recently accomplished with this partnership was to enable the click-through install experience.  What do I mean by this?  Well most of the Silverlight templates use a single link for the installer.  In the background this maps to a function to detect browser, platform, etc. and deliver the right bits to the user.  In the event of an unsupported combination, this redirected to a page displaying the system requirements for the requested version of Silverlight.  With Moonlight 1.0 out in beta now, that function now detects the platform correctly and redirects the user to the Moonlight 1.0 install instructions.  In a recent survey I did, many of the respondents had requested this.  They didn’t expect that Microsoft would provide the installer, but rather that at a minimum it should redirect to the installer for Moonlight…which it now does. 

NOTE: Moonlight 1.0 is in BETA format.  Please understand that Moonlight is a project from Novell and any progress updates will be provided from them.  Since the product is in beta right now, read their documentation and caveats about any live deployment dependent upon Moonlight support.

Take a look at my experience below – I used an image of OpenSUSE which was built for me by the most awesome SUSE Studio.  I simply have a plain OpenSUSE image (with Mozilla) and connected to my network.  If the latency in the internet in the video seems slow, it is because it is a virtual machine on a laptop using a wireless connection – not exactly ideal conditions :-).  But as you can see even the non-optimized install experience (using the default install badge from Silverlight 1.0) does the redirection accordingly and I was able to get Silverlight content running on my Linux instance.

(you may want to choose the fullscreen option for better scale)
Install Microsoft Silverlight

I would imagine as Moonlight progresses (as well as progresses to v2) that this will even get better.  Our functions map to web handlers that the Novell team control so they have the ability to redirect their installers accordingly.  You can see that there are some nag screens that come up from Firefox (for security on installing web software as well as installing the XPI – these are both Firefox standard dialogs and not associated with Moonlight/Silverlight).

We plan on releasing some guidance samples on creating the best install experience using the Silverlight.js script.  Once we do, I’ll update a post/example to show the fullest experience on all platforms.  For now, I wanted to simply share this.  If the application requests the Silverlight 2 installer, then the handler on our end will still inform the user that Linux isn’t yet a supported platform.

It’s great that the Microsoft and Novell teams were able to partner to ensure some great continuity in experience.  It’s also great that some people have noticed…I found these comments from Joel Kelley on Twitter:

"MS Silverlight installation for FF on Linux is ridiculously painless. I' m impressed.” – Joel Kelly on Twitter

“I didn't finish it, but the installation for MS Silverlight seemed easier on Linux than Flash is. Well played, Mic rosoft. Well played.” on Twitter

I’m sure there are people that won’t like the process as well, but it is nice to see some positive comments for the Novell team.

| Comments

Got a great concept about Silverlight use, an application, utility, or just some knowledge you want to share but never had the place to put it?  The team at SilverlightShow have been having a contest they call Silverlight: Write and Win! and you can get some great Silverlight-related prizes such as Telerik and ComponentOne control licenses for Silverlight and WPF applications.

You have to simply write an article about your concept (application, control, whatever) related to Silverlight 2 and provide the code (under an OSI approved license) and you’ll be entered – submit as many times as you want.  The “judges” are a mix of community members and Microsoft guys that will be reviewing the content and code.

So what are you waiting for, enter the Silverlight: Write and Win! contest…you have less than 30 days left!

| Comments

Over the holiday this past week I got a ping from Scott Cate about some Silverlight media questions, namely a player and Silverlight Streaming.  The gist of the conversation was that the Encoder 2 SP1 templates and the SLS Plugin don’t play nice together (yet).  I know that the team has been testing some updates to the plugin for uploading Silverlight 2 templates to SLS, but for now if you tried to do that you’ll get a random error message that won’t make sense to you (something along the lines of template not found).

After talking with Scott and understanding his scenario more (media formats and CDN hosting – note: CDN=Content Delivery Network - specifically) we, well I, decided it might be a good idea to use an alternate player right now.  Of course I suggested the one that Joel and I worked on, but there are also many other out there.  I should also point out that the Encoder 2 SP1 templates also include a fully functional Silverlight 2 player with source code that you can use.  Scott took my player as a start (not sure if it will be the final one he uses) and we went to chatting about the implementation.  I first told him he could still use SLS and just upload the XAP, etc. but remembered that SLS doesn’t fully support an easy implementation of initParams just yet (it can, but a little workaround-ish right now).  After learning of the initParams, Scott wanted to host the player on his CDN and just pass in the media URI as the param (exactly what our player is built for).

I pointed to the instructions on the SL2VideoPlayer CodePlex site and we started implementing.  So Scott was going to have his pages delivered from his CMS system on his site (let’s call it foo.com) and have the Silverlight application delivered from his CDN (let’s call that mycdn.com).  Then the media was going to be hosted on another CDN (Silverlight Streaming).  We had three networks in play here: foo.com, mycdn.com and Silverlight Streaming.  In his site delivered by his CMS system he’d have the object tag for the player implemented something similar to:

   1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="640" height="480">
   2:         <param name="source" value="http://mycdn.com/myaccount/VideoPlayerM.xap"/>
   3:         <param name="background" value="white" />
   4:         <param name="initParams" value="m=http://silverlight.live.com/accountid/Bear.wmv" />
   5:                <param name="minruntimeversion" value="2.0.31005.0" />
   6:         <a href="http://go.microsoft.com/fwlink/?LinkId=124807" style="text-decoration: none;">
   7:              <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
   8:         </a>
   9:     </object>

Note that the source for the Silverlight application is a full URI to the CDN endpoint of the XAP file.  Also note the initParams which would point to the video file hosted on Silverlight Streaming (this isn’t the real URI, just a sample).  When rendered, we saw the Silverlight default loader (%age orb) and then a white screen – nothing.  WTF?!  Loading up my favorite tool for Silverlight network debugging we saw the XAP being delivered and loaded, but then the media file was not.

I then remembered that I may have forgot to tell Scott that any remotely loaded XAP needs to ensure that it is delivered with the correct content-type of application/x-silverlight-app to ensure that it would load properly.  We double-checked this and ensured it was (of course it was because it was already being loaded, but good to double check).  Then we couldn’t figure out why it wasn’t loading the media.

Aha!  I remembered that there was one snippet of code that was in there that does a check for a query string parameter.  In doing this, the Silverlight application uses the HTML DOM bridge to interact with, well, the HTML DOM.  This is what was causing the problem.  By default, remotely loaded XAP files cannot access the HTML DOM without the author explicitly allowing it.  So we had to add another parameter to the object tag, the enableHtmlAccess param.  I sent it to Scott in an email (after testing myself) and thought we were done.  He said it still wasn’t working.  Frustrated, we kept looking.  Sergey from the network team alerted me to a possibility of some character encoding issues.  Yep, that was it.  Here’s a screenshot from the code that wasn’t working:

Spot the issue?  The copied/pasted param quotes were not in ASCII encoding and thus I’m assuming HTML was ignoring it.  After Scott typed it out rather than pasting, it worked fine.

Phew!  Nothing like banging your head in the weeds of code when it is a little typo!

Summary

So if you are looking to host your Silverlight content on a CDN for delivery, make sure two things:

    1. The server delivering your XAP content must deliver with the correct MIME type: application/x-silverlight-app
    2. If there is any code in your XAP that does HTML bridge interaction, you’ll have to add the enableHtmlAccess param to either your object tag instantiation as a param, or to your createObject call if using Silverlight.js.

I hope this helps some!

| Comments

I’ve essentially only had 3 hobbies: computers, golf and SCUBA.  The latter is quite a bit hard to maintain living in a land-locked state in the desert.  The second (golf), however, is very easy to maintain, but long past are the days of free golf that I used to enjoy while working at a golf course and being a part of golf teams.  I now have to actually pay for it :-) -- and sometimes it isn’t a priority to want to go out in 120 degree weather and play golf (although that’s usually when my friends and I go).

Computers has been the easiest as it has also been my profession.  That’s not a good mix because it is hard not to “work” when your profession and your hobby are the same.  It’s caused conflict at home a few times and I’ve been remarkably surprised lately how I’ve been able to separate home and work (while working at home).  It isn’t easy but I’m getting better.

So that’s it.  That’s all my hobbies have ever been.  Pretty sad?  I don’t know…they’re fun and have kept me busy.  But this year I decided to diversify and start something new.  Most of this inspiration comes from my wife doing pretty much everything she desires these days: biking, swimming, triathlons, kayaking, photography.  She’s driven.  She decides on doing something and never slows down.  I realized that I needed to grab some of her passion.

Fender Stratocaster (custom)I was sitting around cleaning house a few months back and saw something in our front room (we call it the ‘front’ room because not a single piece of furniture has ever been in there other than our piano – so it isn’t really a family/living room or anything else) that has been nagging at me…a guitar case.  A few years back during the Visual Studio 2005 launch the theme was “rock the launch” for the events around the US.  Grabbing on to that theme I was a part of a team that engaged one of our customers, Fender, to create custom guitars with the launch theme.  Fender was incredibly awesome to deal with and even decided to try out their new body style at the time along with their new printing process for our project.  It was pretty cool to see our design basically make it to a giant guitar inkjet printer and on to an American Stratocaster guitar.  We made several of these commemorative guitars for the events for prizes and some also hang on Microsoft facilities in the western US offices.  The back of the guitar has some of the commemoration of the event/year as you can see in the photo here.

Interfacing with Fender for the project and working through some of the kinks in the new printing process, I was fortunate to be able to have one of the test run units which has been sitting in my room for 3 years.  I don’t know anything about music and have no skills in that area at all.  My wife is an excellent piano player and my 6-year old daughter is also now playing the piano.  I said to myself I either need to give this to someone who will appreciate it more than the case, or I need to learn how to play it!  I decided on the latter.  I have been taking lessons for about 2 months now and loving it.  My teacher is great and very kind as I’m not-so-kind on his ears.  It has opened up a new world to me and is quite a challenge, more than any of my other hobbies.

Guitars

The geek in me is never satisfied though so I’ve introduced some technology into the mix.  I found a great deal (ebay refirb) on an M-Audio Black Box, which has now been serving as my practice amp since I got it.  It definitely isn’t as sophisticated or cool as some others I’ve seen from some friends like Jason Mauer, but for the price I got a USB interface amp modeling device and a pedal (for which I have no idea yet what to do with of course).  I also have been using the piece of software on my Mac that has been completely useless to me until now: Garageband.  It took me a few minutes to figure out that I needed to change settings in a few different places for the Black Box to be recognized.  Now that it is, it’s a helpful learning aid to me as I can record my practices and review them later (as well as record the good ones for my teacher!).  It’s been a lot of fun learning to play.  This holiday I had hoped Santa was going to bring me a brand new Gretsch Brian Setzer Black Phoenix, but he must not have got my letter in time.  Probably a good thing since that is a hefty investment for him to make on a beginner.  I’m still determined though to get one, but will wait a while.  I did, however, decide to experiment with an acoustic guitar.  After some research I settled on Taylor as a great brand and then of course wanted the sweetest model 914e to add to my collection.  Again, totally impractical for a beginner.  But the research I did do found reviews that said the 110 model was a great guitar and an excellent entry-model for Taylor.  I headed down to my local music shop, Milano Music, and found that they had the 110e model in stock and on sale.  I played with it for a while and loved it…so I walked out with a new guitar.  Here’s my current crappy setup (I need to move them into a room so the kids don’t ruin them) in the picture (click on it for a larger pic).

Like I said, this has been a lot of fun – and addicting.  I hope to keep it up and get better every week.  I’ve been learning the basic 12-bar blues, Cream’s Sunshing of your Love, Neil Young’s Heart of Gold and I also present you with my first recording: Happy Birthday.  Maybe I’ll escalate from there :-).

It has been real refreshing to take a break from immersion in technologies like Silverlight and .NET and learn something completely new and challenging…I highly recommend it!


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