<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Method ~ of ~ failed</title>
        <link>http://timheuer.com/blog/Default.aspx</link>
        <description>ramblings from the digital underbelly</description>
        <language>en-US</language>
        <copyright>tim heuer</copyright>
        <managingEditor>tim@timheuer.com</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <creativeCommons:license>http://creativecommons.org/licenses/by-nd/3.0/</creativeCommons:license>
        <image><link>http://timheuer.com/blog</link><url>http://s3.amazonaws.com/timheuer-img/PIC_0012b.jpg</url><title>Tim Heuer</title></image>
        <geo:lat>33.227266</geo:lat><geo:long>-111.610876</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/timheuer" type="application/rss+xml" /><feedburner:emailServiceId>260231</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item>
            <title>Write Silverlight, win XBOX</title>
            <category>community</category>
            <category>developer</category>
            <category>live</category>
            <category>silverlight</category>
            <category>web</category>
            <category>windows live</category>
            <category>games</category>
            <category>ria</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/286354087/create-silverlight-games-win-xbox.aspx</link>
            <description>&lt;p&gt;Want a &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;-branded XBOX console?  Yeah, me too, that would be cool.  Well, there isn’t one of those, but there is a chance for you to show your Silverlight prowess and win some cool stuff.&lt;/p&gt;  &lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px" height="169" src="http://assets.devx.com/ria/xbox.jpg" width="240" align="left" /&gt; The &lt;a href="http://www.devx.com/RIA/Door/35735"&gt;RIA development portal&lt;/a&gt; at &lt;strong&gt;DevX&lt;/strong&gt; is currently &lt;a href="http://www.devx.com/RIA/Door/37507"&gt;running a contest&lt;/a&gt; (which ends next week, yikes, hurry!) for creating games in &lt;strong&gt;Silverlight 2&lt;/strong&gt;.  The contest seems relatively simple:&lt;/p&gt;  &lt;p&gt;Step 1: Create wicked cool game in Silverlight 2   &lt;br /&gt;Step 2: Host it on Silverlight Streaming&lt;/p&gt;  &lt;p&gt;How simple is that…oh yeah, except for the ‘creating game’ part.  There are a few places to help you get started creating games in Silverlight.  Check out the &lt;a href="http://silverlightrocks.com/Community/blogs/silverlight_games_101/"&gt;Silverlight Games 101&lt;/a&gt; site which has some great posts and pointers to help in creating casual games.  &lt;/p&gt;  &lt;p&gt;The prizes are an &lt;strong&gt;XBOX 360&lt;/strong&gt; (sorry, not Silverlight branded), an 80GB &lt;strong&gt;Zune&lt;/strong&gt; and a game bundle including &lt;strong&gt;Halo 3&lt;/strong&gt; and Mass Effect.&lt;/p&gt;  &lt;p&gt;So head over to the &lt;a href="http://www.devx.com/RIA/Door/37507"&gt;RIA Run site&lt;/a&gt; and get all the details to get submitted by &lt;strong&gt;15 MAY&lt;/strong&gt;!!!&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f40998a0-8a83-4e49-bac1-16a42ade7816" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://technorati.com/tags/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://technorati.com/tags/gaming" rel="tag"&gt;gaming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/silverlight+streaming" rel="tag"&gt;silverlight streaming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ria" rel="tag"&gt;ria&lt;/a&gt;, &lt;a href="http://technorati.com/tags/devx" rel="tag"&gt;devx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14393.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=Oheklk"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=Oheklk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=XNgY4h"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=XNgY4h" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=AEgthH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=AEgthH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/286354087" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/05/08/create-silverlight-games-win-xbox.aspx</guid>
            <pubDate>Thu, 08 May 2008 21:11:19 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14393.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/05/08/create-silverlight-games-win-xbox.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14393.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14393.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F05%2F08%2Fcreate-silverlight-games-win-xbox.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/05/08/create-silverlight-games-win-xbox.aspx</feedburner:origLink></item>
        <item>
            <title>New and great Silverlight examples</title>
            <category>developer</category>
            <category>mix08</category>
            <category>mix</category>
            <category>silverlight</category>
            <category>ux</category>
            <category>wpf</category>
            <category>winfx</category>
            <category>web</category>
            <category>visual studio</category>
            <category>expression</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/286155081/great-new-silverlight-applications.aspx</link>
            <description>&lt;p&gt;There are some really great application concepts emerging using &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;.  I cam across two that I feel are really demonstrating great use of the technology, both in the code as well as attention to detail in the user interface.  Both of these examples make great use of layouts, controls, etc. within Silverlight 2 to show what is possible with some imagination and the platform.&lt;/p&gt;  &lt;p&gt;The first is the “&lt;a href="http://mtm.viatecla.pt/"&gt;My Travel Management&lt;/a&gt;” site which leverages real travel information to represent the scenario of looking at flight arrangements.  It definitely is a twist on the &lt;strong&gt;Silverlight&lt;/strong&gt; Airlines, providing a little more detail (and real information) about flights as well as unique visualizations on changing your travel parameters.  It uses somewhat of the Office 2007 ribbon style for creating user input options and then displays the results with what I think is a well done visualization of information.  Play around and you’ll see what I mean:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mtm.viatecla.pt/"&gt;&lt;img src="http://s3.amazonaws.com:80/timheuer-img/mytravel.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The second is a newcomer demonstrating a user interface for a full-featured healthcare application.  The “&lt;a href="http://www.mscui.net/PatientJourneyDemonstrator/"&gt;Patient Journey Demonstrator&lt;/a&gt;” takes the concept of individual patient care and shows the lifecycle of a patient through the care process, providing views for physicians, secondary care, etc.  There is &lt;strong&gt;a lot&lt;/strong&gt; going on in this demonstration and provides different perspectives on controlling layout, custom controls, map integration, media integration, you name it, this one pretty much has it!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mscui.net/PatientJourneyDemonstrator/"&gt;&lt;img src="http://s3.amazonaws.com:80/timheuer-img/patientcare-sl.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Great job to the teams who wrote these applications, keep the great work coming!&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:42b43e4c-9cfc-43fc-9b07-c5bdbc128e2e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://technorati.com/tags/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/healthcare" rel="tag"&gt;healthcare&lt;/a&gt;,&lt;a href="http://technorati.com/tags/travel" rel="tag"&gt;travel&lt;/a&gt;,&lt;a href="http://technorati.com/tags/user+control" rel="tag"&gt;user control&lt;/a&gt;,&lt;a href="http://technorati.com/tags/visualizations" rel="tag"&gt;visualizations&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ria" rel="tag"&gt;ria&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wpf" rel="tag"&gt;wpf&lt;/a&gt;,&lt;a href="http://technorati.com/tags/xaml" rel="tag"&gt;xaml&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14392.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=jouurf"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=jouurf" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=K31Aph"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=K31Aph" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=Jh3bMH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=Jh3bMH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/286155081" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/05/08/great-new-silverlight-applications.aspx</guid>
            <pubDate>Thu, 08 May 2008 15:37:12 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14392.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/05/08/great-new-silverlight-applications.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14392.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14392.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F05%2F08%2Fgreat-new-silverlight-applications.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/05/08/great-new-silverlight-applications.aspx</feedburner:origLink></item>
        <item>
            <title>Foxit PDF Previewer Security Update</title>
            <category>community</category>
            <category>developer</category>
            <category>vista</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/285173057/foxit-pdf-preview-handler-security-patch.aspx</link>
            <description>&lt;p&gt;Hello readers!  If you are a &lt;a href="http://www.foxitsoftware.com/"&gt;Foxit&lt;/a&gt; user, please &lt;strong&gt;&lt;a href="http://www.foxitsoftware.com/pdf/reader_2/down_reader.htm"&gt;update your reader software&lt;/a&gt;&lt;/strong&gt; to the latest version ASAP.  A &lt;a href="http://blog.washingtonpost.com/securityfix/2008/04/use_foxit_patch_it.html?nav=rss_blog"&gt;recent exploit was found by a security research firm&lt;/a&gt; and Foxit turned around an update to their reader within 24 hours.  Bravo to the Foxit team for being very agile and getting this rectified.&lt;/p&gt;  &lt;p&gt;After some further research and discussion with the development team it was found that the ActiveX component used in the PDF Preview Handlers might also be vulnerable.  To reconcile this, Foxit has issued a patched (and updated) version of the ActiveX control for the preview handlers.  I have since patched  both the Vista and the XP versions accordingly and tested them on several Vista and XP SP2 machines accordingly.&lt;/p&gt;  &lt;p&gt;If you are using these and have installed them PRIOR to 07-MAY-2008), please take a moment to proceed with the following:&lt;/p&gt;  &lt;ol&gt;   &lt;ol&gt;     &lt;li&gt;Close any instance of Outlook 2007. &lt;/li&gt;      &lt;li&gt;Uninstall any versions of the Foxit PDF Preview Handler from your system. &lt;/li&gt;      &lt;li&gt;Download the latest version of the PDF Preview Handler (&lt;a href="http://www.box.net/shared/7zz5xcy048"&gt;Vista&lt;/a&gt; or &lt;a href="http://www.box.net/shared/v3c1y1o8wg"&gt;XP&lt;/a&gt;).  &lt;/li&gt;      &lt;li&gt;Install the latest version. &lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: that the previous links have been updated with the patched versions as well just in case. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That should do it!  If you find any issues, please report them to me.  Thanks again to Foxit for being responsive and aggressive in this manner and for their support of the PDF Preview Handlers.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:104a9111-7325-4e7e-81ec-cc6b2b4ecb6e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://technorati.com/tags/foxit" rel="tag"&gt;foxit&lt;/a&gt;,&lt;a href="http://technorati.com/tags/pdf" rel="tag"&gt;pdf&lt;/a&gt;,&lt;a href="http://technorati.com/tags/preview+handler" rel="tag"&gt;preview handler&lt;/a&gt;,&lt;a href="http://technorati.com/tags/outlook" rel="tag"&gt;outlook&lt;/a&gt;,&lt;a href="http://technorati.com/tags/vista" rel="tag"&gt;vista&lt;/a&gt;,&lt;a href="http://technorati.com/tags/office" rel="tag"&gt;office&lt;/a&gt;,&lt;a href="http://technorati.com/tags/acrobat" rel="tag"&gt;acrobat&lt;/a&gt;,&lt;a href="http://technorati.com/tags/reader" rel="tag"&gt;reader&lt;/a&gt;,&lt;a href="http://technorati.com/tags/xp" rel="tag"&gt;xp&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;div class="cc-license"&gt;&lt;hr /&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14391.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=eusOBd"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=eusOBd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=kjnlDh"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=kjnlDh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=WWDDZH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=WWDDZH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/285173057" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/05/06/foxit-pdf-preview-handler-security-patch.aspx</guid>
            <pubDate>Wed, 07 May 2008 06:53:26 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14391.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/05/06/foxit-pdf-preview-handler-security-patch.aspx#feedback</comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14391.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14391.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F05%2F06%2Ffoxit-pdf-preview-handler-security-patch.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/05/06/foxit-pdf-preview-handler-security-patch.aspx</feedburner:origLink></item>
        <item>
            <title>Streaming media in Windows Server for Silverlight</title>
            <category>developer</category>
            <category>media</category>
            <category>silverlight</category>
            <category>tech stuff</category>
            <category>web</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/284991599/streaming-media-in-silverlight.aspx</link>
            <description>&lt;p&gt;When using media with &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; there are a few things that you should be aware of.  First, ensure that the media you are planning on using conforms to the &lt;a href="http://en.wikipedia.org/wiki/VC-1"&gt;VC-1&lt;/a&gt; specification.  Your media files just need to then be accessible via streaming or http-based access for progressive downloads.&lt;/p&gt;  &lt;p&gt;The media files for progressive downloads can be anywhere: any web server, Amazon S3 storage, some HttpHandler, whatever – as long as they can be served.&lt;/p&gt;  &lt;p&gt;Streaming media is supported via Windows Media Services.  If you haven’t set this up before, there are a few things to note with regard to Silverlight and streaming content.  Most typical default setups of Windows Media streaming uses &lt;a href="http://en.wikipedia.org/wiki/RTSP"&gt;Real Time Streaming Protocol (RTSP)&lt;/a&gt;.  It’s actually important to note that while RTSP is the visible configuration, it is actually the Real-time Transport Protocol that is responsible for delivering the bits of audio/video.  All of this might not matter to you, but cache it away for later if you wish.&lt;/p&gt;  &lt;p&gt;For setting up streaming services, I recommend using &lt;a href="http://www.microsoft.com/windows/windowsmedia/forpros/server/server.aspx"&gt;Windows Media Services 2008&lt;/a&gt;, which is a free add-on for Windows Server 2008 systems.  After installing this add-on, you’ll have the ability to set up publishing points and host streams of playlists or single files.  What I wanted to point out is one of the common gotchas with Silverlight and streaming in the current versions.&lt;/p&gt;  &lt;p&gt;After installing the services, if you start the control panel and highlight the server you will see some options.  Looking at the Properties tab you will see more options, and specifically I wanted to call attention to the ‘Control Protocol’ option.  By default the only enabled option is &lt;a href="http://en.wikipedia.org/wiki/RTSP"&gt;RTSP&lt;/a&gt;.  So basically your streams would respond to a mms://foo link for you and open in Windows Media Player or something that plays back that media.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://s3.amazonaws.com:80/timheuer-img/sl-strm1.png" /&gt;&lt;/p&gt;  &lt;p&gt;The problem is that a few people have emailed me about why certain streams don’t work, etc.  Some are for various resons, but some are because of this problem here.  I get a lot of ‘my stream plays in Windows Media Player but not in Silverlight’ questions.  Assuming all other factors are correct (see footnote here as well), the problem is likely that you don’t have HTTP-based streaming enabled.  Silverlight basically looks at the mms:// URI and translates that to get the stream over HTTP instead as that is the method supported in current versions.  You can see this if you put a sniffer on your web application to monitor the requests.  To fix this all you have to do is enable the HTTP control protocol on your server.  Keep in mind that if you are using a single server for multiple scenarios, the default port 80 might already be taken by IIS.  Right click on the HTTP control protocol and choose properties, then choose the IP addresses and/or the port you want it to operate on.  Save those settings and then enable the protocol.&lt;/p&gt;  &lt;p&gt;By doing this your streaming server will now also stream over HTTP as well as RTSP, thus enabling different scenarios, but specifically allowing you to use Silverlight to host your streaming content.  Windows Media Services is a great tool to host streaming content and is pretty fun to mess around with (as well as intuitive to setup new streams) creating new publishing points for media.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Other Streaming Issues&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One of the other most common issues I see in my inbox is ‘my stream doesn’t work and yes it is streamed over HTTP.’  The most common problem with this is that your page hosting the Silverlight content is likely being viewed over a file:// protocol scheme and your MediaElement has an http:// scheme.  This is known as cross-scheme and is not allowed in Silverlight.  Open the page under an HTTP context and it should render fine as long as it is the same protocol.&lt;/p&gt;  &lt;p&gt;Have fun playing with this and hope this helps!&lt;/p&gt; &lt;div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;div class="cc-license"&gt;&lt;hr /&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14390.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=cVxO7i"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=cVxO7i" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=rbmm4h"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=rbmm4h" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=ZOl71H"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=ZOl71H" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/284991599" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/05/06/streaming-media-in-silverlight.aspx</guid>
            <pubDate>Tue, 06 May 2008 23:59:29 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14390.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/05/06/streaming-media-in-silverlight.aspx#feedback</comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14390.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14390.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F05%2F06%2Fstreaming-media-in-silverlight.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/05/06/streaming-media-in-silverlight.aspx</feedburner:origLink></item>
        <item>
            <title>Making use of your JSON data in Silverlight</title>
            <category>asp.net</category>
            <category>atlas</category>
            <category>developer</category>
            <category>silverlight</category>
            <category>tech stuff</category>
            <category>web</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/284893760/use-json-data-in-silverlight.aspx</link>
            <description>&lt;p&gt;Wait! Don’t throw out your JSON services!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Situation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You’ve made an investment in exposing some services for client script consumption.  Most likely if you did it in the past 2 years, that involved exposing your data as &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; formatted objects.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;What is JSON?&lt;/em&gt; &lt;br /&gt;
It is a text-based, human-readable format for representing simple data structures and associative arrays (called objects)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Perhaps a search service returns a list of people formatted using your custom “Person” object and you’ve been using this in your AJAX applications for a while now.  Maybe your JSON data looks something like this:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;[{&lt;span class="str"&gt;"City"&lt;/span&gt;:&lt;span class="str"&gt;"Queen Creek"&lt;/span&gt;,&lt;span class="str"&gt;"FirstName"&lt;/span&gt;:&lt;span class="str"&gt;"Tim"&lt;/span&gt;,&lt;span class="str"&gt;"LastName"&lt;/span&gt;:&lt;span class="str"&gt;"Heuer"&lt;/span&gt;,
&lt;span class="str"&gt;"Website"&lt;/span&gt;:&lt;span class="str"&gt;"http:\/\/timheuer.com\/blog\/"&lt;/span&gt;},
{&lt;span class="str"&gt;"City"&lt;/span&gt;:&lt;span class="str"&gt;"Portland"&lt;/span&gt;,&lt;span class="str"&gt;"FirstName"&lt;/span&gt;:&lt;span class="str"&gt;"Scott"&lt;/span&gt;,&lt;span class="str"&gt;"LastName"&lt;/span&gt;:&lt;span class="str"&gt;"Hanselman"&lt;/span&gt;,
&lt;span class="str"&gt;"Website"&lt;/span&gt;:&lt;span class="str"&gt;"http:\/\/hanselman.com\/blog\/"&lt;/span&gt;},
{&lt;span class="str"&gt;"City"&lt;/span&gt;:&lt;span class="str"&gt;"Redmond"&lt;/span&gt;,&lt;span class="str"&gt;"FirstName"&lt;/span&gt;:&lt;span class="str"&gt;"Scott"&lt;/span&gt;,&lt;span class="str"&gt;"LastName"&lt;/span&gt;:&lt;span class="str"&gt;"Guthrie"&lt;/span&gt;,
&lt;span class="str"&gt;"Website"&lt;/span&gt;:&lt;span class="str"&gt;"http:\/\/weblogs.asp.net\/scottgu"&lt;/span&gt;},
{&lt;span class="str"&gt;"City"&lt;/span&gt;:&lt;span class="str"&gt;"New Hampshire"&lt;/span&gt;,&lt;span class="str"&gt;"FirstName"&lt;/span&gt;:&lt;span class="str"&gt;"Joe"&lt;/span&gt;,&lt;span class="str"&gt;"LastName"&lt;/span&gt;:&lt;span class="str"&gt;"Stagner"&lt;/span&gt;,
&lt;span class="str"&gt;"Website"&lt;/span&gt;:&lt;span class="str"&gt;"http:\/\/joestagner.net"&lt;/span&gt;},
{&lt;span class="str"&gt;"City"&lt;/span&gt;:&lt;span class="str"&gt;"Boston"&lt;/span&gt;,&lt;span class="str"&gt;"FirstName"&lt;/span&gt;:&lt;span class="str"&gt;"Jesse"&lt;/span&gt;,&lt;span class="str"&gt;"LastName"&lt;/span&gt;:&lt;span class="str"&gt;"Liberty"&lt;/span&gt;,
&lt;span class="str"&gt;"Website"&lt;/span&gt;:&lt;span class="str"&gt;"http:\/\/silverlight.net\/blogs\/jesseliberty"&lt;/span&gt;}]&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;If you squint long enough you can see that this represents what looks like an object that would have this structure:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;FirstName, LastName, City, Website&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You could consume this in a Javascript function or something in the client script of your web application and nicely iterate through the array of ‘Person’ types, using some human-readable code.&lt;/p&gt;
&lt;p&gt;But now you want &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;!  And you think to yourself that you need to &lt;strong&gt;completely&lt;/strong&gt; re-write everything to return .NET objects, etc.  Well, not so fast.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;JSON Serialization&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Because&lt;/strong&gt; Silverlight 2 supports managed code development, you have some tricks in your bag to leverage existing services that you might not want (or need) to re-write entirely or just right away.  Let’s use the simple example above and assume I now want to use that same service and the same data result in my Silverlight application.  For now let’s assume the endpoint to that service is something like &lt;a href="http://foo/mypeople/js"&gt;http://foo/mypeople/js&lt;/a&gt;.  Most JSON services were a result of using some type of RESTful query model, so essentially your request would likely be a simple GET or POST.&lt;/p&gt;
&lt;p&gt;Using Silverlight 2 and the simple WebClient, we can easily get that information from that REST endpoint.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;WebClient proxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient();
proxy.OpenReadCompleted += &lt;span class="kwrd"&gt;new&lt;/span&gt; OpenReadCompletedEventHandler(proxy_OpenReadCompleted); 
proxy.OpenReadAsync(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"http://foo/mypeople/js"&lt;/span&gt;));&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;Using WebClient, we essentially open a Stream (which is our endpoint) and get the data back.  You can learn more about WebClient and other services with Silverlight by watching my videos about &lt;a href="http://silverlight.net/learn/learnvideo.aspx?video=47177"&gt;web services&lt;/a&gt; and other &lt;a href="http://silverlight.net/learn/learnvideo.aspx?video=50557"&gt;HTTP-based communication&lt;/a&gt;.  Remembering that service calls in Silverlight 2 are asynchronous, we look at our ‘proxy_OpenReadCompleted’ event and could first get our result (with proper error checking of course) which is of type Stream:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;Stream strm = e.Result;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;Now with that stream (which is essentially the JSON data now), what do we do?  Enter &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx"&gt;DataContractJsonSerializer&lt;/a&gt;.  Remember, we have this available to us thanks to the CLR being in Silverlight 2.  Before we start to use this, however, our client application must be aware of the Type we plan to de-serialize it back into.  So in our Silverlight application we need to have that type defined as such:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Person
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FirstName { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LastName { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; City { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Website { get; set; }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;Simple enough.  Now we can complete our asynch handler like this and our Stream is now converted into an enumerable type that we can bind, iterate or do whatever we need to with our data.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; proxy_OpenReadCompleted(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, OpenReadCompletedEventArgs e)
{
    Stream strm = e.Result;
    DataContractJsonSerializer ser = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataContractJsonSerializer(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Person[]));
    Person[] ppl = (Person[])ser.ReadObject(strm);

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (ppl.Length &amp;gt; 0)
    {
        &lt;span class="rem"&gt;// do something with the data&lt;/span&gt;
        &lt;span class="rem"&gt;// bind, interate, whatever&lt;/span&gt;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;That’s it!  With a few lines of code we’ve been able to re-use our JSON service and data from Silverlight.  This might not be the best idea in all of your scenarios but it is possible if you want to transition to other services or make re-use out of your investments already.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;A Word About WCF Script-enabled Services&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For some of you, if you were already a part of the WCF wave when you created your services, you may have already exposed them as scriptable services using an endpoint behavior that was &lt;a href="http://msdn.microsoft.com/en-us/library/bb675191.aspx"&gt;enableWebScript&lt;/a&gt;.  This may have been working fine for you but if you look at the output of that, it might be adding some things that you may not need.  This is because it was intended for ASP.NET AJAX consumption (i.e., it adds “_type” and “_d” stuff).  This is easily rectified to make it a cleaner JSON result as well as make the messages smaller.&lt;/p&gt;
&lt;p&gt;By implementing the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.description.webhttpbehavior.aspx"&gt;webHttpBehavior&lt;/a&gt; in conjunction with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.webhttpbinding.aspx"&gt;webHttpBinding&lt;/a&gt; type for WCF, you will get a much cleaner/smaller JSON payload for your service.  When implementing this, you’ll want to decorate your service methods accordingly using the WebGet attributes:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;[OperationContract]
[WebGet(UriTemplate=&lt;span class="str"&gt;"people"&lt;/span&gt;, ResponseFormat=WebMessageFormat.Json)]
Person[] GetListOfPeople();&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;While I’d argue this isn’t &lt;em&gt;completely&lt;/em&gt; necessary to use your existing services, it might make your type parsing a little cleaner and as noted, the message size smaller.  So using this (in fact my endpoint this whole time actually is a WCF webHttpBinding endpoint) the entire code looks something like this:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Page : UserControl
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; Page()
    {
        InitializeComponent();
        Loaded += &lt;span class="kwrd"&gt;new&lt;/span&gt; RoutedEventHandler(Page_Loaded);
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Loaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
    {
        WebClient proxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient();
        proxy.OpenReadCompleted += &lt;span class="kwrd"&gt;new&lt;/span&gt; OpenReadCompletedEventHandler(proxy_OpenReadCompleted); 
        proxy.OpenReadAsync(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"http://localhost:34907/JsonData_Web/People.svc/people"&lt;/span&gt;));
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; proxy_OpenReadCompleted(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, OpenReadCompletedEventArgs e)
    {
        Stream strm = e.Result;
        DataContractJsonSerializer ser = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataContractJsonSerializer(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Person[]));
        Person[] ppl = (Person[])ser.ReadObject(strm);

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ppl.Length &amp;gt; 0)
        {
            
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;Easy enough.  If you want to know more about the WCF binding types and implementing full REST services in WCF, check out &lt;a href="http://www.robbagby.com"&gt;Rob Bagby’s blog&lt;/a&gt;…he has a lot of good material there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you have existing services that you’ve enabled JSON responses for already for use in AJAX applications, consider making re-use of them where appropriate.  This may bridge a transition to other WCF endpoints or other service-types while you are writing your Silverlight applications.&lt;/p&gt;
&lt;p&gt;I’ve included my sample project used here so you can tinker and you can download the code &lt;a href="http://s3.amazonaws.com:80/timheuer-img/JsonData.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hope this helps!&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7fbe798c-aed6-40d6-81e6-fb0ce442fb29" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://technorati.com/tags/silverlight"&gt;silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/wcf"&gt;wcf&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/ajax"&gt;ajax&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/json"&gt;json&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/services"&gt;services&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/web+services"&gt;web services&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/rest"&gt;rest&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/webget"&gt;webget&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/enablescriptmethod"&gt;enablescriptmethod&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/webhttpbinding"&gt;webhttpbinding&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="wlWriterHeaderFooter" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;
&lt;div class="cc-license"&gt;&lt;hr /&gt;
This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14388.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=rYNxwz"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=rYNxwz" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=Oxd6ah"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=Oxd6ah" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=TfmZxH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=TfmZxH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/284893760" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/05/06/use-json-data-in-silverlight.aspx</guid>
            <pubDate>Tue, 06 May 2008 20:40:14 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14388.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/05/06/use-json-data-in-silverlight.aspx#feedback</comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14388.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14388.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F05%2F06%2Fuse-json-data-in-silverlight.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/05/06/use-json-data-in-silverlight.aspx</feedburner:origLink></item>
        <item>
            <title>Rich Text Editor for Silverlight 2</title>
            <category>silverlight</category>
            <category>web</category>
            <category>wpf</category>
            <category>winfx</category>
            <category>visual studio</category>
            <category>ux</category>
            <category>tech stuff</category>
            <category>developer</category>
            <category>community</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/282255504/rich-text-editor-for-silverlight.aspx</link>
            <description>&lt;p&gt;For &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; 2, we finally have some native controls to leverage.  Most of them are to aid in input scenarios.  The text input, however, is currently scoped to be plain text input.  Some have desired a richer input control.  You knew it wouldn’t be long before someone in the community stepped up to the challenge.  Christopher Husse has done just that.&lt;/p&gt;
&lt;p&gt;Enter: &lt;a href="http://www.codeplex.com/richtextedit"&gt;Silverlight rich text editor&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://michaelsync.net/wp-content/uploads/2008/04/preview.jpg" /&gt; &lt;/p&gt;
&lt;p&gt;He posts a &lt;a href="http://michaelsync.net/2008/04/29/silverlight-the-first-rich-text-editor"&gt;detailed description of all the capabilities on Michael Syncs blog&lt;/a&gt;.  The effort is also posted on &lt;a href="http://www.codeplex.com/richtextedit"&gt;Codeplex for you to peruse&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is what he calls the ‘incomplete feature list’:&lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Copy/Paste formatted text between RichTextBoxes and copy/paste from/to clipboard of unformatted but macro-enabled text. This means in windows clipboard even things like emoticons will be kept. &lt;/li&gt;
        &lt;li&gt;You may insert line breaks, unordered lists and blockquotes. &lt;/li&gt;
        &lt;li&gt;You may use various keyboard selection features like End/ Home/ PageUp/ PageDown/ Left/ Up/ Right/ Down, Ctrl+A/ End/ Home, Ctrl+Shift+End/ Home/ Left/ Right, Shift+End/ Home/ PageUp/ PageDown/ Left/ Up/ Right/ Down and so forth… &lt;/li&gt;
        &lt;li&gt;Supports direct Unicode character input using “Ctrl”+[NumPad]. &lt;/li&gt;
        &lt;li&gt;All silverlight font formatting is supported and even some more like SUP/SUB formatting. &lt;/li&gt;
        &lt;li&gt;You may define macros and a proper object class that should replace matching text, like emoticons… &lt;/li&gt;
        &lt;li&gt;In contrast to many other rich text editors, this one is fully real-time. That means no preview is required because the editor allows editing all things directly. &lt;/li&gt;
        &lt;li&gt;If you only use macros and IRichTextObject to extend the control, you will automatically get support for secure content serialization of all control elements. Content serialization also supports to reload content and edit it again. &lt;/li&gt;
        &lt;li&gt;Secure content serialization gets rid of any potential security leak when storing user typed formatted text on a server and presenting it to visitors, because it is fully verifiable. &lt;/li&gt;
        &lt;li&gt;You may restrict font formatting to a well defined custom subset. This allows you to ensure that all user typed input matches your needs or website design. (this feature is currently not implemented, but only prototyped) &lt;/li&gt;
        &lt;li&gt;Snapshots allow convenient access to formatted content and also Find&amp;amp;Replace with regular expressions for example… &lt;/li&gt;
    &lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;Way to go Christopher!&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0b1dfb7c-9074-48e9-a568-578a0bfeea5f" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://technorati.com/tags/silverlight"&gt;silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/rte"&gt;rte&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/rich+text+editor"&gt;rich text editor&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/rich+editor"&gt;rich editor&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/rich+text"&gt;rich text&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/silverlight+controls"&gt;silverlight controls&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/user+control"&gt;user control&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/text+input"&gt;text input&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/textblock"&gt;textblock&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/textbox"&gt;textbox&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/codeplex"&gt;codeplex&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="wlWriterHeaderFooter" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;
&lt;div class="cc-license"&gt;&lt;hr /&gt;
This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"&gt;Creative Commons Attribution Non-commercial No Derivatives license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14384.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=mJTEog"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=mJTEog" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=QZY9Gh"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=QZY9Gh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=PxdwkH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=PxdwkH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/282255504" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/04/29/rich-text-editor-for-silverlight.aspx</guid>
            <pubDate>Wed, 30 Apr 2008 00:18:47 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14384.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/04/29/rich-text-editor-for-silverlight.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14384.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14384.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F04%2F29%2Frich-text-editor-for-silverlight.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/04/29/rich-text-editor-for-silverlight.aspx</feedburner:origLink></item>
        <item>
            <title>Silverlight and Media Encoding</title>
            <category>expression</category>
            <category>community</category>
            <category>tech stuff</category>
            <category>silverlight</category>
            <category>media</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/282255507/silverlight-expression-encoder-quality-comparison.aspx</link>
            <description>&lt;p&gt;While you may not personally work with a lot of media solutions in your &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; application, it is nice to know the quality is there when you need it.  Silverlight supports the &lt;a href="http://en.wikipedia.org/wiki/VC-1"&gt;VC-1&lt;/a&gt; codec for media which provides a standards implementation for high quality media.  I would imagine that most &lt;strong&gt;developers&lt;/strong&gt; probably don’t know/care what all that means.  But if you are deploying a high-touch media solution (i.e., online TV, etc.) you want that high quality.&lt;/p&gt;
&lt;p&gt;Our resident media expert, &lt;a href="http://on10.net/blogs/benwagg"&gt;Ben Waggoner&lt;/a&gt;, just put up a &lt;a href="http://on10.net/blogs/benwagg/Hands-on-with-high-touch-encoding-Streaming-Media-All-Stars-Redo/"&gt;great (and detailed) post&lt;/a&gt; about some ‘high-touch encoding’ techniques he uses and does some comparisons to some media outputs with FLV files as well.  There are some gory details for tweaks in the media outputs, much of which I won’t pretend to understand as an expert, but as a geek they seem to make sense :-).&lt;/p&gt;
&lt;p&gt;One of the most compelling comparisons Ben notes is the quality from the VP6 (what FLV uses) and the VC-1 codec in a particular image…notice the shirt texture difference.  The VC-1 output in this sample is much more close to the original source.&lt;/p&gt;
&lt;p&gt;FLV:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://on10.net/Link/6e5a49ae-ee60-4aca-a1aa-7e3fec553d34/" /&gt; &lt;/p&gt;
&lt;p&gt;VC-1:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://on10.net/Link/f104fd3d-e93c-4d59-9ca4-243b475b9f11/" /&gt; &lt;/p&gt;
&lt;p&gt;Ben admits in some areas he’s not sure why there is such a difference (i.e., the FLV is darker it appears as well).  It is an interesting article to read and he provides all the details, sample files and implementation for you to examine.  A lot of the things he shows for the tweak settings are a part of Encoder 2 which is to release soon.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:40b7ab58-e6e9-4354-9d52-17693ed71f31" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://technorati.com/tags/silverlight"&gt;silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/encoder"&gt;encoder&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/expression"&gt;expression&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/vc-1"&gt;vc-1&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/flv"&gt;flv&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/vp6"&gt;vp6&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/flash"&gt;flash&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/media"&gt;media&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/interlacing"&gt;interlacing&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="wlWriterHeaderFooter" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;
&lt;div class="cc-license"&gt;&lt;hr /&gt;
This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"&gt;Creative Commons Attribution Non-commercial No Derivatives license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14385.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=TKaFMs"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=TKaFMs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=4OvSph"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=4OvSph" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=zfK2XH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=zfK2XH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/282255507" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/04/30/silverlight-expression-encoder-quality-comparison.aspx</guid>
            <pubDate>Wed, 30 Apr 2008 17:39:51 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14385.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/04/30/silverlight-expression-encoder-quality-comparison.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14385.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14385.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F04%2F30%2Fsilverlight-expression-encoder-quality-comparison.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/04/30/silverlight-expression-encoder-quality-comparison.aspx</feedburner:origLink></item>
        <item>
            <title>Skinning an embeddable Silverlight 2 media player</title>
            <category>community</category>
            <category>developer</category>
            <category>media</category>
            <category>silverlight</category>
            <category>tech stuff</category>
            <category>ux</category>
            <category>visual studio</category>
            <category>web</category>
            <category>winfx</category>
            <category>wpf</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/282255508/creating-a-skinnable-silverlight-media-player.aspx</link>
            <description>&lt;p&gt;While &lt;strong&gt;&lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;&lt;/strong&gt; 2 brings us great capabilities as .NET developers and opens many opportunities for creating rich clients in the browser, it still supports strong media features that have been available since the initial release of Silverlight.  The ability to deliver efficient, high quality media in the browser is an increasing need in a lot of sites producing content for their members.  Traditional ‘podcasts’ which were historically audio-only, are moving increasingly faster to richer media.  This is nothing new of course, but being able to quickly distribute the media on your sites efficiently and provide methods for your users to either embed content, or for you to deliver content to other sites means you need a predictable method for doing that.&lt;/p&gt;
&lt;p&gt;In Silverlight 1, while it supported all the same features, one thing that I (and presumably you as well) didn’t find attractive was the deployment scenarios for delivering media content via players.  Silverlight 1 required the distribution of various scripts and initialization functions.  This wasn’t ideal for providing you with something you can just drop into a web page anywhere.  In fact, it was preventative in some places like MySpace, for example.&lt;/p&gt;
&lt;p&gt;Silverlight 2 brings a new packaging model, the &lt;strong&gt;XAP&lt;/strong&gt; (pronounced “zap”) file.  Essentially this is an archive file which contains a manifest, reference assemblies and any custom code you have created.  It can also contain resources that your application may use.  Because we have this format now, we aren’t restricted to delivering multiple files for our application…we can deliver our application in one file essentially (your mileage may vary depending on your needs).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Great, now we have a good packaging model, but what about drawing my own controls, etc.?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;True, Silverlight 1 had a gap of native controls to the runtime, requiring you to be creative with &lt;strong&gt;XAML&lt;/strong&gt; to deliver functionality.  In the typical media player scenario where you want a few timelines, volume bar, etc…even the trivial tasks required you to wire up some functionality.  Well, Silverlight 2 brings us a common set of controls now that we can leverage.&lt;/p&gt;
&lt;p&gt;So let’s take a look at an implementation of a Silverlight 2 media player.  I’m going to use a base player created by &lt;a href="http://joel.neubeck.net/"&gt;Joel Neubeck&lt;/a&gt; who has been doing some really great posting on Silverlight lately.  In this example I’m going to try to articulate what Joel did with the base controls and demonstrate how he was able to create an effective use of styling and controls to create a re-usable player.  Additionally, I’m going to add a few new features to it for my desires.&lt;/p&gt;
&lt;p&gt;I’m not going to go into the full details of this code, but wanted to point out the key features of what Joel accomplished as I think it was clever use of some controls you might not have considered to use in this scenario.  As well, I’ll show what I added and why.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Controls&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We’ll need a play/pause button, a track timeline, perhaps a download timeline, volume controls, and full-screen button.  We could do these in various ways.  For our buttons we could create canvas elements and add a lot of code to switch them on/off.  We could use a regular button and hide/show different ones.  I thought Joel made an excellent choice in choosing to use a ToggleButton.  The ToggleButton is still a button with all the same features, but supports more than just a normal/pressed state.  Essentially it supports a ‘checked’ state similar to a checkbox or something.  This is useful because we’re using this to basically provide play &lt;em&gt;and&lt;/em&gt; pause capabilities.  By using a ToggleButton, we can essentially make the ‘normal’ state the Play view and the pressed (checked) state the Pause view.  &lt;/p&gt;
&lt;p&gt;Okay, now for the tracks.  In Silverlight 1 we would have to use a few rectangles on top of each other, add our mouse capture code, etc.  In Silverlight 2, Joel saw the Slider as being an effective way of showing a linear timeline and it provides the functionality for value changing and a thumb for scrubbing, etc.  Perfect.  We’ll use the Slider for the download and volume features as well.&lt;/p&gt;
&lt;p&gt;So once we add these to our design surface (Joel chose to create the media controls as a separate UserControl) it looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://s3.amazonaws.com:80/timheuer-img/sl2player-nostyle.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Skinning the Controls&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Blah.  That looks like crap and rather button-sh.  Here is where skinning comes in.  Jesse just completed a good tutorial on skinning controls that provide a little more depth.  Using this techniques, we can define at a more granular level what we want our content views to be.  For example on the play/pause button, instead of a ‘button’, we replace the content with Path elements that are geometric shapes rather than a typical button look.  In combination now with implementing states in the styles (i.e., Normal State, Pressed State, Checked State) we can define that when the button is pressed (checked) what it shall do/look like by pre-defining the state.&lt;/p&gt;
&lt;p&gt;We apply these same concepts to our other controls like the slider, able to skin the timeline area independent from the thumb scrubber, etc.  We put our styles in App.xaml so they are globally available to the application.  Do this with the volume control and other buttons (mute/full-screen) and now our exact same media controls (without affecting any real code that controls the logic), we now have this look:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://s3.amazonaws.com:80/timheuer-img/sl2player1-style.png" /&gt;&lt;/p&gt;
&lt;p&gt;which looks much more like what we are after.  &lt;/p&gt;
&lt;p&gt;Now Joel’s initial example was fixed to a specific size of a media file.  I want my player to scale to whatever the container is.  Essentially I removed all specific sizes from XAML where appropriate and changed the media controls container grid so that the center column (where the timeline sliders are) will expand/contract as needed.  This gives us two features.  The first is that we have a re-usable control area regardless of the media element size.  The second is that when the user goes into full screen mode, the controls also expand to full screen appropriately.  The only thing you have to do is set the containing &amp;lt;div&amp;gt; where this media player is going to live to the desired size (i.e., 640x480) and the application will scale the internal elements to fill that space accordingly.  Full screen mode will as well adjust the controls to fill the screen.&lt;/p&gt;
&lt;p&gt;I also added a bigger “Play” indicator (and buffering indicator) that would show in the center of the MediaElement when paused or buffering.  I felt this gave more visual cueing to what was going on with the media.  This also scales as it looks at the ActualWidth/Height properties and grabs the center points based on that.  Here’s the resulting paused view in two different sizes:&lt;/p&gt;
&lt;p&gt;640x480 view&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://s3.amazonaws.com:80/timheuer-img/sl2player1-640.png" /&gt;&lt;/p&gt;
&lt;p&gt;320x240 view&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://s3.amazonaws.com:80/timheuer-img/sl2player1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Providing Startup Parameters&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The next thing I wanted to do is eliminate the hard-coding of the MediaElement Source property in the base XAML file.  I just created a player with all my needs and want to re-use it without recompiling, etc.  Here’s where InitParams comes in for developers.  One thing we can do to the plugin is pass startup parameters to it.  These are surfaced using the InitParams functionality.  You can specify a comma-delimited list of name/value pairs in this property like:&lt;/p&gt;
&lt;p&gt;firstName=Tim,lastName=Heuer,loves=Silverlight&lt;/p&gt;
&lt;p&gt;which in turn get put into a Dictionary object in code.  These elements are retrievable in your applications Application_Startup in the StartupEventArgs.  the Application_Startup is in the App.xaml file (you can think of this as a global.asax file if you are an ASP.NET developer).  There are different ways you can implement grabbing these values out.  You could pull values (or just one value) out using a simple retrieval of the key value:&lt;/p&gt;
&lt;p&gt;string firstName = e.InitParams[“firstName”].ToString();&lt;/p&gt;
&lt;p&gt;You could set this to a public static variable that could then be accessed by your application.  I chose to simply iterate through the initialization parameters and add them to the resources collection of the application.  I haven’t decided yet if this is the most effective use, but for now it works and was simple:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; e.InitParams)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (item.Key.ToLower() == &lt;span class="str"&gt;"m"&lt;/span&gt;)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; mediaParam = e.InitParams[&lt;span class="str"&gt;"m"&lt;/span&gt;].ToString();
        Uri mediaUri;

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (mediaParam.Contains(&lt;span class="str"&gt;"://"&lt;/span&gt;))
        {
            mediaUri = &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(mediaParam, UriKind.RelativeOrAbsolute);
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;
        {
            mediaUri = &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(mediaParam, UriKind.Relative);
        }

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Resources.Add(&lt;span class="str"&gt;"m"&lt;/span&gt;, mediaUri);
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Resources.Add(item.Key, item.Value);
    }
}&lt;/pre&gt;
&lt;p&gt;You’ll see that i check for an “m” parameter and do an additional checking on that.  I’m using this parameter for passing in the source for the MediaElement and need to check if it is an absolute URI or if the media will be local to the Silverlight application.  Then any other initialization params get added to the collection as well.  This might not make sense because I’m really only using two: source and autostart and if I wanted to make this re-usable, I would really need to build up more options and put them in the code too, or else nothing is being used.  I’ll likely do that later, so let’s move on.&lt;/p&gt;
&lt;p&gt;Now that we have these items in our Resources collection, my app continues to load and set the MediaElement source to that value:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;mediaPlayer.Source = App.Current.Resources[&lt;span class="str"&gt;"m"&lt;/span&gt;] &lt;span class="kwrd"&gt;as&lt;/span&gt; Uri;&lt;/pre&gt;
&lt;p&gt;As a // TODO I need to add some error checking and display the thumbnail if there is a problem perhaps, but I’ll get to that later.  Anything else I might need to do with the startup params I can get them out using the same method as above now that they are in my Resources collection.&lt;/p&gt;
&lt;p&gt;So now in my control hosted page I have this:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width:640px;height:480px"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Silverlight&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Xaml1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; 
    &lt;span class="attr"&gt;InitParameters&lt;/span&gt;&lt;span class="kwrd"&gt;="m=LEADER_ST2.wmv,autostart=false"&lt;/span&gt; 
    &lt;span class="attr"&gt;Source&lt;/span&gt;&lt;span class="kwrd"&gt;="~/ClientBin/VideoPlayer.xap"&lt;/span&gt; &lt;span class="attr"&gt;Version&lt;/span&gt;&lt;span class="kwrd"&gt;="2.0"&lt;/span&gt; 
    &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="100%"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="100%"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Here I was using the asp:silverlight control which exposes the InitParameters property, but I could use the object tag directly:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;object&lt;/span&gt; &lt;span class="attr"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;="data:application/x-silverlight,"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="application/x-silverlight-2-b1"&lt;/span&gt; 
        &lt;span class="attr"&gt;width&lt;/span&gt;&lt;span class="kwrd"&gt;="640"&lt;/span&gt; &lt;span class="attr"&gt;height&lt;/span&gt;&lt;span class="kwrd"&gt;="480"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="source"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="ClientBin/VideoPlayer.xap"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="onerror"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="onSilverlightError"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="background"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="white"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="initParams"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="m=LEADER_ST2.wmv"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;object&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: In the “m” parameter it will use the standard path resolution that Silverlight respects.  For more information on this, see a &lt;a href="http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2008/03/09/Silverlight-2-Beta-1-Path-and-File-Resolution.aspx"&gt;great post by Pete Brown&lt;/a&gt; on the explanation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Providing Alternate Content&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As you can see we have provided no alternate content for the object tag implementation.  The asp:silverlight control also supports providing alternate content via the PluginNotInstalledTemplate property.  This is the responsibility of the web developer implementing any active content, whether it be Silverlight, Flash or other embeddable technology.  For more information on methods of doing this, read my &lt;a href="http://www.timheuer.com/blog/archive/2008/03/25/creating-a-great-silverlight-deployment-experience.aspx"&gt;blog post regarding a great deployment experience&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now I have a media player that expands to the size it needs as well as is totally re-usable for me as I can provide startup parameters to it providing the media to play.  There is some polish that probably needs to occur, but as you can see, by using the native controls we get a lot of free functionality that we can tap into and by skinning the controls you get a much better look than the default and can even totally change the visual behavior of native controls.  Thanks to &lt;a href="http://joel.neubeck.net"&gt;Joel&lt;/a&gt; for his great work using native controls and state parts and skins to create a great media player.  I’ve only made a few tweaks that I think were value add, but download the code and see what you can make with it. – all you need to do is change the styles and let’s see what you come up with!&lt;/p&gt;
&lt;p&gt;Here’s the source as it is right now with my modifications to Joel’s existing work: &lt;a href="http://s3.amazonaws.com:80/timheuer-img/VideoPlayer.zip"&gt;VideoPlayer.zip&lt;/a&gt;.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:903259fc-4b98-4d12-b5fe-2310691b6799" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://technorati.com/tags/silverlight"&gt;silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/media"&gt;media&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/media+player"&gt;media player&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/initParams"&gt;initParams&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/embed"&gt;embed&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/skinning"&gt;skinning&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/controls"&gt;controls&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="wlWriterHeaderFooter" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;
&lt;div class="cc-license"&gt;&lt;hr /&gt;
This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14387.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=76nEnD"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=76nEnD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=t8n1Eh"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=t8n1Eh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=h5Y8VH"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=h5Y8VH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/282255508" height="1" width="1"/&gt;</description>
            <dc:creator>tim heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/05/02/creating-a-skinnable-silverlight-media-player.aspx</guid>
            <pubDate>Fri, 02 May 2008 17:38:36 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14387.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/05/02/creating-a-skinnable-silverlight-media-player.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14387.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14387.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F05%2F02%2Fcreating-a-skinnable-silverlight-media-player.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/05/02/creating-a-skinnable-silverlight-media-player.aspx</feedburner:origLink></item>
        <item>
            <title>Some minor Subtext enhancements</title>
            <category>community</category>
            <category>developer</category>
            <category>tech stuff</category>
            <category>web</category>
            <category>subtext</category>
            <category>blogging</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/279695284/subtext-enhancements-for-live-writer.aspx</link>
            <description>&lt;p&gt;This blog runs on &lt;strong&gt;&lt;a href="http://www.subtextproject.com"&gt;SubText&lt;/a&gt;&lt;/strong&gt;.  I &lt;strong&gt;&lt;u&gt;heart&lt;/u&gt;&lt;/strong&gt; SubText.  I know there are others out there but for me SubText has met &lt;strong&gt;most&lt;/strong&gt; of my needs.  And when it hasn’t I modify it.  Which brings me to this post.  There was a thread on an email list I belong to about &lt;strong&gt;&lt;a href="http://writer.live.com"&gt;Windows Live Writer&lt;/a&gt;&lt;/strong&gt; (I heart Live Writer too :-)) and categories (adding new categories on the fly).  This got me to crack open the source and hunt.  Alas, there was no support for this.  I’ve been ranting about &lt;strong&gt;WordPress API&lt;/strong&gt; support for SubText on the developer list and I think if I rant one more time it will probably get assigned to me.  Please keep in mind that my modifications were solely intended to make Live Writer the best tool for me…these are targeted at Live Writer functionality and may/may not add value to other areas of functionality.  So on with the show…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;The Slug&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One of the features in SubText is the ability to auto generate URLs based on the title of the blog post.  Well, I didn’t like that.  I usually want my URLs to be a slight derivative of the URL.  My workflow, then, has been to post as draft, go to the web interface, change and then enable the &lt;strong&gt;syndication&lt;/strong&gt;.  I am sick of doing that.  So let’s start with that first.  You see in blog terms the end part of your URL in called a “slug.”  SubText calls this a ‘friendly url’ and other engines may call it something else.  Here I’m going to call it a slug.  My colleague &lt;a href="http://www.jasonmauer.com"&gt;Jason Mauer&lt;/a&gt; has a custom blog engine he uses where he’s implemented almost every blogging API in his set.  I’ve been geekly jealous of his API for some time…now it is time to change that.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I’m not going to go into the philosophical reasons &lt;em&gt;why&lt;/em&gt; I want a different URL slug and why I want different ones.  We can debate that over a Mt. Dew some time if you’d like.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;SubText uses the &lt;strong&gt;MetaWeblog&lt;/strong&gt; API by default.  The developers chose to implement the spec of MetaWeblog (as they should have) and thus the slug is not a part of the &lt;strong&gt;newPost&lt;/strong&gt; spec and the Post struct used to identify the structure of a post.  So my modification was a few steps.  If you are familiar with the latest source (1.9.5b) of SubText, I’ll be referring to line numbers in there.  First, I had to modify that Post struct for the MetaWeblogAPI implementation.  Now some may shirk that this is a no-no…and I might agree…so if modifying something that isn’t going to conform to a spec that really isn’t full anymore, then move along.  I modified about line 63 and added the following:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; wp_slug;&lt;/pre&gt;

&lt;p&gt;I actually could have used &lt;strong&gt;wp_slug&lt;/strong&gt; or mt_basename, both of which mean the same thing and both of which are sent to the API by Live Writer…so I just picked one.  Now my struct has the information when it passes it along for creation/edit of the post via Live Writer.&lt;/p&gt;

&lt;p&gt;The next step was to modify the implementation of the post.  In MetaWeblog.cs at about line 234 I added:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(post.wp_slug))
{
    entry.EntryName = post.wp_slug;
}&lt;/pre&gt;

&lt;p&gt;I also added this to the editPost method to ensure compatibility on edit.&lt;/p&gt;

&lt;p&gt;The final step was to modify my &lt;strong&gt;wlwmanifest.xml&lt;/strong&gt; file to announce to Live Writer that I now support this feature.  This is done by adding to the &amp;lt;options&amp;gt; node of this manifest:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;supportsSlug&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Yes&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;supportsSlug&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Then do a refresh of the account settings in &lt;strong&gt;Live Writer&lt;/strong&gt;.  When you do that, in a new post click the little ‘up’ arrow just underneath the editing area and you should now see a Slug field:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://s3.amazonaws.com:80/timheuer-img/wlw-slug.png" /&gt;&lt;/p&gt;

&lt;p&gt;Now I don’t have to post a draft and login to change!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;New Categories&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The thread actually started with wanting to create new categories during a post.  SubText is one of the engines that doesn’t expose this API directly just yet, so some altering had to be done.  Here’s what I did.  I chose to mirror the WordPress newCategory method to do this.  &lt;/p&gt;

&lt;p&gt;First I added IWordPressApi.cs to Subtext.Framework.XmlRpc.  The complete code within it is:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; CookComputing.XmlRpc;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Subtext.Framework.XmlRpc
{

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;struct&lt;/span&gt; WordpressCategory
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IWordPressApi
    {
        [XmlRpcMethod(&lt;span class="str"&gt;"wp.newCategory"&lt;/span&gt;, 
            Description = &lt;span class="str"&gt;"Adds a new category to the blog engine."&lt;/span&gt;)]
        &lt;span class="kwrd"&gt;int&lt;/span&gt; newCategory(
          &lt;span class="kwrd"&gt;string&lt;/span&gt; blogid,
          &lt;span class="kwrd"&gt;string&lt;/span&gt; username,
          &lt;span class="kwrd"&gt;string&lt;/span&gt; password,
          WordpressCategory category);
    }
}&lt;/pre&gt;

&lt;p&gt;I then went into MetaWeblog.cs and implemented that interface with:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; newCategory(&lt;span class="kwrd"&gt;string&lt;/span&gt; blogid, &lt;span class="kwrd"&gt;string&lt;/span&gt; username, &lt;span class="kwrd"&gt;string&lt;/span&gt; password, WordpressCategory category)
{
    LinkCategory newCategory = &lt;span class="kwrd"&gt;new&lt;/span&gt; LinkCategory();
    newCategory.CategoryType = CategoryType.PostCollection;
    newCategory.Title = category.name;
    newCategory.IsActive = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    newCategory.Description = category.name;

    newCategory.Id = Links.CreateLinkCategory(newCategory);

    &lt;span class="kwrd"&gt;return&lt;/span&gt; newCategory.Id;
}&lt;/pre&gt;

&lt;p&gt;I chose to ignore the slug/description fields (again, thus ignoring the spec which isn’t ideal) at this time, partly because I was getting errors and partly because I decided that I didn’t need them anyway.  I don’t use the description field in categories in SubText, so I just set the description to also be the title.  I also had to modify the wlwmanifest.xml file with:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;supportsNewCategories&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Yes&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;supportsNewCategories&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;and refresh my Live Writer account profile to pick up the changes.  The result is now my category options in Live Writer include an “add” feature:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://s3.amazonaws.com:80/timheuer-img/wlw-cats.png" /&gt;&lt;/p&gt;

&lt;p&gt;Done with both of those.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Future Posting&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is something I started to look at and added the information to the MetaWeblog API, but it seems that SubText doesn’t filter out future posts in the UI – or at least my quick scan didn’t reveal it did.  I’ve moved on away from this one since I don’t future post right now, but I’ll come back to it in a while.  What I did do, however, to prevent me from thinking SubText supported this was modify my wlwmanifest.xml file to include this definition in the options:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;futurePublishDateWarning&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Yes&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;futurePublishDateWarning&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This way at least if the idiot in me *thinks* I can do it, Live Writer will warn me.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://s3.amazonaws.com:80/timheuer-img/wlw-warning.png" /&gt;&lt;/p&gt;

&lt;p&gt;So that’s it!  These little adjustments make my &lt;strong&gt;Live Writer + SubText&lt;/strong&gt; experience AWESOME.  Live Writer truly is one of the best tools Microsoft puts out (aside from &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; of course).  I’m going to submit these modifications to the SubText team and see what sticks.  I assume none will since they are admittedly partial.  But I’ve been suggesting on the dev list that SubText expose a WordPress API and I have a feeling I’ll need to start working on that for the team.&lt;/p&gt;

&lt;p&gt;Hope this helps some of you!&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:53506492-c1d0-4ac2-b158-d46e01ee6693" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://technorati.com/tags/windows+live+writer" rel="tag"&gt;windows live writer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/live+writer" rel="tag"&gt;live writer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/writer" rel="tag"&gt;writer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/subtext" rel="tag"&gt;subtext&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blogging" rel="tag"&gt;blogging&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wordpress" rel="tag"&gt;wordpress&lt;/a&gt;,&lt;a href="http://technorati.com/tags/slug" rel="tag"&gt;slug&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wlwmanifest" rel="tag"&gt;wlwmanifest&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14381.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=UMpoCF"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=UMpoCF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=GbA5zg"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=GbA5zg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=6fiqXG"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=6fiqXG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/279695284" height="1" width="1"/&gt;</description>
            <dc:creator>timheuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/04/28/subtext-enhancements-for-live-writer.aspx</guid>
            <pubDate>Mon, 28 Apr 2008 23:00:25 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14381.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/04/28/subtext-enhancements-for-live-writer.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14381.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14381.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F04%2F28%2Fsubtext-enhancements-for-live-writer.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/04/28/subtext-enhancements-for-live-writer.aspx</feedburner:origLink></item>
        <item>
            <title>Silverlight gets Familiar</title>
            <category>silverlight</category>
            <link>http://feeds.feedburner.com/~r/timheuer/~3/279053725/familiar-uses-silverlight-to-highlight-music.aspx</link>
            <description>&lt;p&gt;Another geek musician, Bob Familiar, has decided to start working with &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; to revamp how he displays some of his compositions on his web site.  Bob just &lt;a href="http://blogs.msdn.com/bobfamiliar/archive/2008/04/04/rich-internet-applications-using-silverlight-2-0.aspx"&gt;posted a multi-part series&lt;/a&gt; where he sets out to demonstrate some features of:&lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;resolution (size) independent UI &lt;/li&gt;
        &lt;li&gt;layout &lt;/li&gt;
        &lt;li&gt;controls &lt;/li&gt;
        &lt;li&gt;custom controls &lt;/li&gt;
        &lt;li&gt;invoking WCF services &lt;/li&gt;
        &lt;li&gt;data binding, templates and styles &lt;/li&gt;
        &lt;li&gt;dynamic xaml &lt;/li&gt;
        &lt;li&gt;HTML integration &lt;/li&gt;
        &lt;li&gt;DeepZoom &lt;/li&gt;
    &lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;He is including source to his efforts if you want to tag along.  I’d like to see Bob tackle styling the DataGrid a bit more…it looks “excel-ish” which I don’t think matches the rest of his efforts, that would be a good demonstration of some advanced styling effects and I think he could even encapsulate other features (like his DeepZoom view of intruments used) into a master-detail view.  Follow along with Bob…&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:18d76548-e20a-481f-880f-6523a9784286" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://technorati.com/tags/silverlight"&gt;silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/deepzoom"&gt;deepzoom&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/datagrid"&gt;datagrid&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14380.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/timheuer?a=9qig7g"&gt;&lt;img src="http://feeds.feedburner.com/~a/timheuer?i=9qig7g" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/timheuer?a=Tep14g"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=Tep14g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/timheuer?a=nz4NtG"&gt;&lt;img src="http://feeds.feedburner.com/~f/timheuer?i=nz4NtG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer/~4/279053725" height="1" width="1"/&gt;</description>
            <dc:creator>timheuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2008/04/27/familiar-uses-silverlight-to-highlight-music.aspx</guid>
            <pubDate>Mon, 28 Apr 2008 00:18:33 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14380.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2008/04/27/familiar-uses-silverlight-to-highlight-music.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14380.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14380.aspx</trackback:ping>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=timheuer&amp;itemurl=http%3A%2F%2Ftimheuer.com%2Fblog%2Farchive%2F2008%2F04%2F27%2Ffamiliar-uses-silverlight-to-highlight-music.aspx</feedburner:awareness><feedburner:origLink>http://timheuer.com/blog/archive/2008/04/27/familiar-uses-silverlight-to-highlight-music.aspx</feedburner:origLink></item>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=timheuer</feedburner:awareness></channel>
</rss>
