| Comments

i had previously written about creating custom expression encoder templates and integrating them into the encoder workflow (if you haven't read that, check it out, very simple process).  my process was simple and followed the "CASE" methodology*.

Copy
Always
Steal
Everything

basically i would encode a video file to get the output of the encoder template, then blast away all the xaml in player.xaml, and create your own media player skin.  really the only thing you need to know is the 'well known names' for certain controls (the most common of which i outline in my blog post.  i've received comments and questions about how to get more into the code and curiosities of what else could be done and what is going on under the hoods to the bindings of the well known names.  all this magic happens in baseplayer.js -- a file included in the encoder templates.

problem is that baseplayer.js is a crunched/optimized javascript file and really not human readable in a short time at least.

now the expression encoder team has went one step further.  they've released a 22-page document outlining the process for creating a custom template that is bit more 'official' than my simple steps, but essentially encompasses the ideas.  what is great is this document includes all the well known names that you might want to implement as well as descriptions on how to override default behaviors as well -- i've included a direct link to the document at the end of this post.  one of the most valuable things i like in the document is a visual layout of a player and the well known names mapped so you can see them:

in addition to that, the team has provided a debug version of baseplayer.js as a supplement to expression encoder (the debug version comes with a EULA so be sure to read it -- only licensed users of expression encoder may use this debug version.  this means it is human readable :-).  this should help you understand the bindings more and determine what (if anything) else you would want to do.

so take a look at my previous post if you haven't, then download the docs and debug version if you have expression encoder to start building your templates today!

File: Developing Silverlight Media Player Skins
File: BasePlayer.js debug version

| Comments

just saw in my feed reader...a cheat sheet by keith rull for LINQ.  keith purports that this isn't a definitive list by any means but says:

"It consist of a few snippets that you might commonly do when doing LINQ processing."

he uses this for his most common tasks.  when i first start learning anything new, i do the same thing keeping snippets around to help me remember certain things.  as an example, can't remember how to do the paging?  use keith's cheat:

//take three records
var takeThree = listOfPerson.Take(3);

//go to the 10th record and then take 3 records from there
var skipTenTakeThree = listOfPerson.Skip(10).Take(3);

thanks for posting keith and look forward to your updates!

| Comments

one of the great things about being a part of a community is being able to affect other communities.  during these installfests that are happening around the country, some have remembered the time of year and thinking of ways to give back to other communities.

my counterpart in chicago, dave bost, set up accepting donations for toys for tots at some of his installfests.  when i read that i thought that was such a great idea.  we (the royal we as in the technical communities) often only think of our bits/bytes and i think this was a great inspiration to help others.

turns out my local user group is also already thinking in that way as well!  scott cate had partnered with interface technical training to do an eBay auction benefiting children and technology.  Interface is a managed gold training partner for microsoft (among other things they do as well) and a HUGE supporter of the local technical communities...all of them.  so this year they've donated 2 vouchers for training courses for the auction.  now, you might be thinking, "i can get training anywhere" and you might be right.  one thing i like about interface is they are never satisfied with the norm :-).  their dev trainers are names you might have heard of before: dan wahlin, mike Palermo, simon allardice, jennifer campion.  yeah, a few names on the circuit, authors, MVPs, and rockstars.  their content is specific and not canned.  this really is a great opportunity to learn from the best.

so scott set up an eBay auction for these vouchers.  the winner(s) will get some great training.  what does it benefit?  well, scott has chose to take the proceeds and purchase computers for children organizations to help replace older ones or perhaps introduce something new to these children.  great idea.  keeps the geek in all of us :-).

so if you want to bid on some great training and benefit some kids, bid on the auctions!

| Comments

remember that feature i was mentioning that is a plugin for expression encoder?  you know the one that enables you to publish the output immediately and directly to the silverlight streaming service?

well, how would you like to write your own encoder publishing plugin.  perhaps you have a process with a content delivery network?  or have some custom process you want to implement in your own workflow (save as an encoder job file, etc.) for ongoing media encodings?  james clarke just announced a quickstart guide on developing publisher plug-ins for encoder.

the code looks relatively simple to implement:

[EncoderPlugin("Zip Plugin from scratch","Enables output to be zipped")] 
    public class ZipPublishPlugin : PublishPlugin 
    { 
 
        public override object CreateAdvancedSettingsEditor() 
        { 
            throw new NotImplementedException(); 
        } 
 
        public override object CreateStandardSettingsEditor() 
        { 
            throw new NotImplementedException(); 
        } 
 
        public override void PerformPublish(string rootPath, string[] filesToPublish) 
        { 
            throw new NotImplementedException(); 
        } 
    }

need to implement settings as a part of your plugin?  no problem.  the settings user interface is implemented using some XAML that you mark up so something like this:

<TextBox Height="23" Margin="0,14,2,0" Name="textBox1"  
         VerticalAlignment="Top" 
         HorizontalAlignment="Right" 
         Width="200"> 
  </TextBox> 
     
  <Label Height="23" HorizontalAlignment="Right"  
      Margin="0,14,200,0" 
         VerticalAlignment="Top" 
         Width="61">Folder:</Label> 
     
  <Button Height="21" Margin="0,0,100,11"  
      Name="reset" VerticalAlignment="Bottom"  
      Click="reset_Click" 
      HorizontalAlignment="Right" 
      Width="66">Reset</Button> 
     
  <Button Height="21" HorizontalAlignment="Right"  
      Margin="0,0,13,11" Name="browse"  
      VerticalAlignment="Bottom" 
      Width="66" 
      Click="browse_Click">Browse</Button>

turns into something like this in the user interface:

very cool.  what would you use this for?  perhaps FTP, some blog API, or like i previously mentioned, some process with a CDN already.  i use amazon s3 for a lot of my storage and i'm thinking of hacking up something from encoder to amazon s3 to play around.  of course i've got a few things on my mind at the moment and this is all i needed was another toy to play around with!

at any rate, there's a 10-page doc walking you through the process of writing a plugin.  you can get that doc here.  it's an easy read and i think you'd be able to whip something simple up quickly just to get the feel for it.

have fun!

| Comments

of course if you are already a part of the broader .net user group community, you've seen this already.  but if you aren't (shame on you), you should head on over to azgroups.com and look at the event on the 20th of December.  be sure to sign up to the AZGroups mailing list as well for updates and future events.

at the phoenix (tempe) installfest, people who are registered and attend will receive a special trial DVD of visual studio that will enable them to get a visual studio 2008 professional licensed copy sent to them as participating in this event...pretty sweet for being a supporter of the user group communities!