<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MillieSoft Blog &#187; Media Center</title>
	<atom:link href="http://blog.milliesoft.co.uk/tag/media-center/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.milliesoft.co.uk</link>
	<description>Blogging about Media Center development</description>
	<lastBuildDate>Mon, 14 Jun 2010 09:16:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Code based dialogs in media center</title>
		<link>http://blog.milliesoft.co.uk/2010/03/code-based-dialogs-in-media-center/</link>
		<comments>http://blog.milliesoft.co.uk/2010/03/code-based-dialogs-in-media-center/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 08:50:09 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[dialog]]></category>
		<category><![CDATA[mcml]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=216</guid>
		<description><![CDATA[I&#8217;ve written a few posts on how to implement dialog boxes in media center (Adding a version checker and Simpler popup dialog). They are both great examples of how to trigger a dialog box in mcml. Suppose though you want to do it all from within code, not within mcml. Why would you want to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written a few posts on how to implement dialog boxes in media center (<a href="http://blog.milliesoft.co.uk/2009/02/adding-a-version-checker/">Adding a version checker</a> and <a href="http://blog.milliesoft.co.uk/2009/04/simpler-popup-dialog/">Simpler popup dialog</a>). They are both great examples of how to trigger a dialog box in mcml. Suppose though you want to do it all from within code, not within mcml. Why would you want to do that? Well, for one it means not having any AddIn calls in your mcml, and AddIn calls mean you can&#8217;t use the mcml preview tool &#8211; which significantly hampers development. For this example, I&#8217;m going to repeat the <a href="http://blog.milliesoft.co.uk/2009/02/adding-a-version-checker/">Adding a version checker</a> example, but all in code.</p>
<p>So, to trigger a dialog from your code, the first thing you need to do is to build some buttons;</p>
<pre><code>ArrayListDataSet dialogButtons = new ArrayListDataSet();
dialogButtons.Add("Download Now");
dialogButtons.Add("Remind me later");
dialogButtons.Add("Ignore");</code></pre>
<p>This adds 3 buttons to the dialog. Obviously add as many or as few as you like. The next thing you need to do is to add the call to open the dialog;</p>
<pre><code>String dialogText="There is a new version available";
String dialogTitle="New Version";
Microsoft.MediaCenter.Hosting.AddInHost.Current
.MediaCenterEnvironment.Dialog(dialogText</code></pre>
<pre><code>, "dialogTitle, dialogButtons, 30, true, null
, new Microsoft.MediaCenter.DialogClosedCallback(versionCallback));
</code></pre>
<p><code> </code></p>
<p>This will open a dialog as a modal dialog with a timeout of 30 seconds. When it is closed, the method <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">versionCallback <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">will be called, so now we need to write that method;</span></span></p>
<pre><code>public void versionCallback(Microsoft.MediaCenter.DialogResult result)
{
    if (result.ToString() == "100")
    {
        InstallNewVersion();
    }
    if (result.ToString() == "101")
    {
        RemindLater();
    }
    if (result.ToString() == "102")
    {
        IgnoreNewVersion();
    }
}</code></pre>
<p><code> </code></p>
<p>And obviously fill in the appropriate actions for each method.</p>
<p>Finally, you may want to block this dialog from triggering when you are in the debugger (since it won&#8217;t work), so put an if statement round it to stop it running in debug mode;</p>
<pre><code>#if(!DEBUG)
<span style="color: #808080;">   String dialogText="There is a new version available";
   String dialogTitle="New Version";
   Microsoft.MediaCenter.Hosting.AddInHost.Current
.MediaCenterEnvironment.Dialog(dialogText
  , "dialogTitle, dialogButtons, 30, true, null
  , new Microsoft.MediaCenter.DialogClosedCallback(versionCallback));</span></code></pre>
<pre><code>#endif
</code></pre>
<p><code> </code></p>
<p>And that&#8217;s it &#8211; an mcml dialog operated entirely from your code.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2010/03/code-based-dialogs-in-media-center/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash in Media Center</title>
		<link>http://blog.milliesoft.co.uk/2009/11/flash-in-media-center/</link>
		<comments>http://blog.milliesoft.co.uk/2009/11/flash-in-media-center/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 09:57:27 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=188</guid>
		<description><![CDATA[Microsoft made use of Flash in Media Center for it&#8217;s integration with MSN Player. That was a startling announcement one month ago since it was assumed that Microsoft wanted to promote Silverlight over Flash, and would never allow Flash in Media Center. So, in the past month what has happened about that? Unfortunately it seems to have moved [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Flash" src="http://wwwimages.adobe.com/www.adobe.com/shockwave/download/images/flashplayer_100x100.jpg" alt="" width="100" height="100" />Microsoft made use of Flash in Media Center for it&#8217;s integration with MSN Player. That was a <a href="http://thedigitallifestyle.com/cs/blogs/stuart/archive/2009/10/20/7mc-new-internet-tv-with-wait-for-it-flash.aspx" target="_blank">startling announcement</a> one month ago since it was assumed that Microsoft wanted to promote Silverlight over Flash, and would never allow Flash in Media Center. So, in the past month what has happened about that? Unfortunately it seems to have moved backwards again. First of all, the UK integration with MSN Player has disappeared, only to be replaced by the Sky subscription service. I think that is a major mistake by Microsoft, because I don&#8217;t think anyone will pay for a very cut down version of Sky on their PC, and it would have been better to have a working internet TV solution available.</p>
<p>Secondly, I have been trying to find out how independent developers such as myself can make use of Flash in Media Center. A friend of a friend managed to get this unofficial response;</p>
<blockquote><p>As far as I know, the Platform/APIs are only available for internal use. We don’t have any plan to release public documentation on that at this moment.</p></blockquote>
<p>So that means that until Microsoft change their minds or someone manages to dissect the delivered code to work out how to use the libraries in an unsupported way, we are stuck without Flash support for independent developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/11/flash-in-media-center/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BBC iPlayer on the Xbox</title>
		<link>http://blog.milliesoft.co.uk/2009/11/bbc-iplayer-on-the-xbox/</link>
		<comments>http://blog.milliesoft.co.uk/2009/11/bbc-iplayer-on-the-xbox/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 09:43:10 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[iPlayer]]></category>
		<category><![CDATA[Xbox 360]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=184</guid>
		<description><![CDATA[There was an interesting article in The Telegraph over the weekend which claimed that the BBC will not be bringing the iPlayer to the Xbox 360, unlike the PS3 and Wii which already have excellent integration. It is claimed that this is because Microsoft are demanding that it only be made available to Xbox Gold [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-185" title="bbx_xbox" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/11/bbx_xbox.png" alt="bbx_xbox" width="390" height="174" />There was an <a href="http://www.telegraph.co.uk/technology/microsoft/6671901/Xbox-360-iPlayer-launch-delayed-indefinitely.html" target="_blank">interesting article</a> in The Telegraph over the weekend which claimed that the BBC will not be bringing the iPlayer to the Xbox 360, unlike the PS3 and Wii which already have excellent integration. It is claimed that this is because Microsoft are demanding that it only be made available to Xbox Gold subscribers, and the BBC are saying that that is unreasonable. As you will see from my post about <a href="http://blog.milliesoft.co.uk/2009/10/sky-and-flash-in-media-center/" target="_blank">Sky integration</a>, I&#8217;m really down on requiring Xbox gold membership to access services like that. Gold membership should be about getting you access to servers that run online gaming. It should not be about bringing you access to third party software that is free elsewhere. Well done BBC for sticking up to Microsoft, and I hope Sky see sense too.</p>
<p>Of course if you want to watch iPlayer on the Xbox 360, just install <a href="http://go.milliesoft.com/tunerfree" target="_blank">TunerFreeMCE</a> on your PC and access it via Media Center. The latest version of TunerFreeMCE includes wmv streaming of BBC programs, so works great on extenders like the Xbox 360 too.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/11/bbc-iplayer-on-the-xbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sky and Flash in media center</title>
		<link>http://blog.milliesoft.co.uk/2009/10/sky-and-flash-in-media-center/</link>
		<comments>http://blog.milliesoft.co.uk/2009/10/sky-and-flash-in-media-center/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 07:56:17 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[sky]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=177</guid>
		<description><![CDATA[With the public release of Windows 7, there have been some interesting developments; 1) Here in the UK, the Internet TV Beta 2 link has disappeared from our menus. I suspect that is because it was really buggy (I often got errors that my video library was unavailable). Hopefully it just means that a new better version [...]]]></description>
			<content:encoded><![CDATA[<p>With the public release of Windows 7, there have been some interesting developments;</p>
<p>1) Here in the UK, the Internet TV Beta 2 link has disappeared from our menus. I suspect that is because it was really buggy (I often got errors that my video library was unavailable). Hopefully it just means that a new better version is on the way</p>
<p>2) An advert for Sky Player has appeared in the menus;<br />
<img class="aligncenter size-full wp-image-178" title="sky" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/10/sky.png" alt="sky" width="572" height="322" /></p>
<p><span id="more-177"></span>At the moment it is just a link to <a href="http://www.microsoft.com/uk/windows/skyplayer/">http://www.microsoft.com/uk/windows/skyplayer/</a>, but hopefully it should be live soon. Unfortunately it looks to be a complete rip off. According to <a href="http://skyplayer.sky.com/aboutskyplayer/online-live-tv.html">Sky</a>, you can watch the following channels live for £15 a month:</p>
<ul>
<li>G.O.L.D.</li>
<li>Sky Real Lives</li>
<li>Sky Arts 1</li>
<li>MTV ONE</li>
<li>Sky Sports News</li>
<li>British Eurosport</li>
<li>ESPN Classic</li>
<li>Sky News</li>
<li>National Geographic</li>
<li>Nat Geo Wild</li>
<li>History</li>
<li>Eden</li>
<li>Cartoon Network</li>
<li>Boomerang</li>
<li>Nickelodeon</li>
<li>Disney Channel</li>
<li>Nick Jr</li>
</ul>
<p>I struggle to see a single one of those I would want to watch even if it were free, and certainly wouldn&#8217;t pay £15 a month for it.</p>
<p>This is also available on the Xbox 360 without a PC, but for that on top of the £15, you need an Xbox Live Gold Membership (£3/month). When you compare it to the lower cost of £17.50 a month for hundreds of channels and free broadband with a regular sky box, that doesn&#8217;t seem like a bargain.</p>
<p>More interestingly you can add Sky Sports 1, 2, 3 and Xtra for £34 (+£3 XBOX Live) a month, but again that doesn&#8217;t compare well with the £35.50 you would pay for it on a regular sky box along with all of the other channels and again broadband.</p>
<p>So, perhaps Sky are more interested in the catch-up TV market. That certainly offers slightly more, with Sky One programs available for £1.47 a time, and Sky Box Office movies available for £3.43 a time. But when compared with bittorrent for free TV programs and the likes of Love Film at £1.99 for a blu-ray movie, I just don&#8217;t see it working.</p>
<p>3) The big shocker for me was <a href="http://thedigitallifestyle.com/cs/blogs/stuart/archive/2009/10/20/7mc-new-internet-tv-with-wait-for-it-flash.aspx">this post</a> from Stuart at  The Digital Lifestyle announcing that Flash is now in use in Media Center. This is a major shocker for me because Sky are using silverlight to integrate in to the Windows architecture, and I had assumed that Microsoft were too blinkered to acknowledge that Flash is the market leader, however it seems that they have been very pragmatic here and allowed the use of Flash in media center. Unfortunately there are no details on how anyone other than Netflix can use it yet, but I am sure that will emerge over time. The bad news is that it won&#8217;t work on extenders, but it is a step in the right direction for the rest of us.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/10/sky-and-flash-in-media-center/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auto Play DVDs in Media Center in Windows 7</title>
		<link>http://blog.milliesoft.co.uk/2009/09/auto-play-dvds-in-media-center-in-windows-7/</link>
		<comments>http://blog.milliesoft.co.uk/2009/09/auto-play-dvds-in-media-center-in-windows-7/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 08:25:12 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[dvd]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=160</guid>
		<description><![CDATA[One of my great annoyances with Windows 7 is that you don&#8217;t have the option to auto-play DVDs with Media Center. I logged it as a bug during the testing phase, and was informed that it was intentional &#8211; something along the lines of if you wanted to use Media Center, it would be open [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-161" style="border: 1px solid black;" title="autoplay7" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/09/autoplay7.jpg" alt="autoplay7" width="493" height="281" /></p>
<p style="text-align: left;">One of my great annoyances with Windows 7 is that you don&#8217;t have the option to auto-play DVDs with Media Center. I logged it as a bug during the testing phase, and was informed that it was intentional &#8211; something along the lines of if you wanted to use Media Center, it would be open already, so auto-play wasn&#8217;t appropriate.</p>
<p style="text-align: left;">Anyway, I disagree, and fortunatly someone has come up with a fix for the problem. Mikinho over at <a href="http://www.sevenforums.com/media-center/18197-wmc-not-available-autoplay-option.html#post197643" target="_blank">Seven Forums</a> has produced a simple registry change to get Media Center added to the DVD movie auto play options. I tested it out, and it all works great;<span id="more-160"></span></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-167" style="border: 1px solid black;" title="windows7-2" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/09/windows7-21.png" alt="windows7-2" width="519" height="298" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/09/auto-play-dvds-in-media-center-in-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebTelek Media Center Add-In</title>
		<link>http://blog.milliesoft.co.uk/2009/06/webtelek-media-center-add-in/</link>
		<comments>http://blog.milliesoft.co.uk/2009/06/webtelek-media-center-add-in/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 19:48:29 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[WebTelek]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=125</guid>
		<description><![CDATA[Some of you might have noticed that there hasn&#8217;t been much going on with TunerFree for a few months. I can now reveal why that was. For the past 2 months I have been working with Russian internet television provider, WebTelek, on a Media Center interface. WebTelek specialize in providing television and radio programs over [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-129" title="WebTelek" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek1.jpg" alt="WebTelek" width="644" height="362" />Some of you might have noticed that there hasn&#8217;t been much going on with TunerFree for a few months. I can now reveal why that was. For the past 2 months I have been working with Russian internet television provider, <a href="http://www.webtelek.com/" target="_blank">WebTelek</a>, on a Media Center interface. WebTelek specialize in providing television and radio programs over the internet for the Russian market, both at home and abroad with the ex-pat market. Today they have Live TV from almost 70 channels, 20 days complete coverage of Catchup TV for over 50 of those channels, and thousands of movies, with growing content all of the time.</p>
<p>WebTelek approached me with the request to create a top of the range Media Center interface for their internet television service. They already had a web interface and a Media Portal interface, but wanted to expand in to Media Center. One of their biggest concerns was that it look great so that they could confidently have a superior interface to their competitors. That was a challenge that I was happy to take on, especially with the prospect of developing new library components that I could use in TunerFree.</p>
<p>I won&#8217;t be publishing the full code for this project for obvious reasons, but wanted to share some of the key things I learnt from this project.</p>
<h2><span id="more-125"></span>TV Guide</h2>
<p>The first thing that WebTelek wanted was a program guide for their live TV. I wanted to produce a program guide that was as close as possible to the native TV Guide from media center.</p>
<p><img class="aligncenter size-full wp-image-127" title="Guide" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek3.jpg" alt="Guide" width="644" height="362" /></p>
<p>Some people may not realize that the Media Center SDK doesn&#8217;t give you access to standard widgets like a program guide. In fact the only visible things you get are boxes, text and you can drop your own images on the page too.  That means that everything had to built from those basic components, which as you can imagine isn&#8217;t trivial. Ideally I wanted both an x and y scrolling region to scroll down the channels and left and right through the times. Unfortunatly this wasn&#8217;t possible for two reasons &#8211; first of all media center seems to fall over when you put a scroller inside a scroller, and secondly, I need both time in step with the program boxes fixed at the top of the page, and channel naes in step with the program boxes fixed at the left of the page, and you can&#8217;t do both of those with a scroller. That meant that I needed to construct the guide scrolling vertically, but horizontally just displaying 2 hours at a time, refreshed every time you navigate right in the right hand box, or left in the left hand box.</p>
<h2>Spinner</h2>
<p>Displaying all of the guide boxes takes about 0.1 seconds to calculate, but about 1.5 seconds to display. To avoid an unpleasant user experience, I also had to find a way to display a wait spinner on the screen. Again, media center doesn&#8217;t give you access to the native spinner, so I had to build my own;</p>
<p><img class="aligncenter size-full wp-image-126" title="WebTelek2" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek2.jpg" alt="WebTelek2" width="644" height="359" /></p>
<p>The way I managed to achieve this was by surrounding the page with a &#8220;Fill&#8221; region with a &#8220;Center&#8221; region inside it, with an image inside that. I needed to animate the icon within media center, so I then added a rotation animation to the image to make it rotate like the native windows spinner, and hide/show it when I am doing processing.</p>
<blockquote>
<pre>&lt;Panel Layout="Fill" Name="Default"&gt;
&lt;Children&gt;
&lt;Panel Layout="Center" Name="spinner"&gt;
&lt;Children&gt;
&lt;Graphic Content="image://styles:Spinner" MaintainAspectRatio="true"&gt;
&lt;Animations&gt;
&lt;Animation Animation="animation://styles:spin2"/&gt;
&lt;/Animations&gt;
&lt;/Graphic&gt;
&lt;/Children&gt;
&lt;/Panel&gt;

&lt;Animation Loop="-1" Name="spin2" CenterPointPercent="0.5,0.5,0.5"&gt;
 &lt;Keyframes&gt;
 &lt;RotateKeyframe RelativeTo="Current" Time="0" Value="0deg;0,0,1" Interpolation="Linear"/&gt;
 &lt;RotateKeyframe RelativeTo="Current" Time="0.33" Value="90deg;0,0,1" Interpolation="Linear"/&gt;
 &lt;RotateKeyframe RelativeTo="Current" Time=".66" Value="180deg;0,0,1" Interpolation="Linear"/&gt;
 &lt;RotateKeyframe RelativeTo="Current" Time="1" Value="270deg;0,0,1" Interpolation="Linear"/&gt;
 &lt;RotateKeyframe RelativeTo="Final" Time="1.33" Value="360deg;0,0,1" Interpolation="Linear"/&gt;
 &lt;/Keyframes&gt;
 &lt;/Animation&gt;</pre>
</blockquote>
<p>The key to hiding and showing it is to do the work in a background thread so that the main thread is able to show the image and the animation, e.g.;</p>
<blockquote>
<pre>public GuideUI()
 {
   ShowSpinner = true;
   Microsoft.MediaCenter.UI.Application.DeferredInvokeOnWorkerThread(init, endInit, "");
 }

 public void init(object o1)
 {
   _theGuide.init();
 }

 public void endInit(object o1)
 {
   ShowSpinner = false;
 }</pre>
</blockquote>
<h2>Archive TV</h2>
<p><img class="aligncenter size-full wp-image-133" title="WebTelek4" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek4.jpg" alt="WebTelek4" width="643" height="360" /></p>
<p>The next thing in the system is a catchup screen. This contains a grid of channels, a horizontal scroller for dates, and a vertical scroller for the channels shown. I experimented with various different animations and styles for highlighting the current channel (one of which you will see in TunerFree V3), but in the end settled on a basic Scale animation. One of the important lessons in this though is when you hover over the item, use a Scale command with a scale animation, rather than a PlayAnimation command, because while Scale works on extenders, PlayAnimation does not, e.g.;</p>
<blockquote>
<pre>&lt;Condition  Source="[Input.KeyFocus]" SourceValue="true"&gt;
 &lt;Actions&gt;
 &lt;PlaySound Sound="sound://styles:FocusSound"/&gt;
 &lt;Set Target="[Background.Scale]" Value="1.3,1.3,1.3"/&gt;
 &lt;/Actions&gt;
 &lt;/Condition&gt;

...

&lt;Panel Name="Background" Layout="HorizontalFlow" Padding="5,5,5,5"&gt;
 &lt;Animations&gt;
 &lt;Animation Animation="animation://styles:ScalePicture"/&gt;
 &lt;/Animations&gt;
 &lt;Children&gt;

...

&lt;Animation Name="ScalePicture" CenterPointPercent=".5,.5,0" Type="Scale"&gt;
 &lt;Keyframes&gt;
 &lt;ScaleKeyframe Time="0"  RelativeTo="Current"  Interpolation="SCurve"/&gt;
 &lt;ScaleKeyframe Time="0.5" /&gt;
 &lt;/Keyframes&gt;
 &lt;/Animation&gt;</pre>
</blockquote>
<h2>Movies</h2>
<p><img class="aligncenter size-full wp-image-135" title="WebTelek6" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek6.jpg" alt="WebTelek6" width="644" height="363" /></p>
<p>For the movies part of the add-in, I had quite a lot of metadata to play with, such as a high resolution image, and information about the move. I wanted to find a way to show that off as well as possible, and eventually settled on a cover flow style of layout, with rotated images to the left and right of the larger central image, and with reflections of the images below each one. The key to this was finding a way of identifying if the scroller item was to the left or to the right of the current item selected so that it can be rotated in the right direction. Key to this is passing the current index item from your repeater in to each movie item;</p>
<blockquote>
<pre>&lt;me:Thumbnail Data="[RepeatedItem!a:Movie]"  Name="Thumbnails" MovieUI="[MovieUI]" RptdItemIndex="[RepeatedItemIndex]"/&gt;</pre>
</blockquote>
<p>and then within the thumbnail both storing off the current selected item, and comparing that to the passed in index, e.g.</p>
<blockquote>
<pre>&lt;Properties&gt;
 &lt;Index Name="RptdItemIndex" Index="$Required"/&gt;
 &lt;cor:Int32 Name="SelectedDifference"/&gt;
&lt;/Properties&gt;
 &lt;Locals&gt;
 &lt;MathTransformer Name="SubtractIndex" SubtractInt="[RptdItemIndex.Value]"/&gt;
 &lt;/Locals&gt;

 &lt;Rules&gt;
 &lt;Condition  Source="[Input.KeyFocus]" SourceValue="true"&gt;
 &lt;Actions&gt;
 &lt;PlaySound Sound="sound://styles:FocusSound"/&gt;
 &lt;Set Target="[Background.Scale]" Value="1.3,1.3,1.3"/&gt;
 &lt;Set Target="[MovieUI.SelectedMovie]" Value="[RptdItemIndex.Value]"/&gt;
 &lt;/Actions&gt;
 &lt;/Condition&gt;

 &lt;Binding Target="[SelectedDifference]" Source="[MovieUI.SelectedMovie]" Transformer="[SubtractIndex]" /&gt;

 &lt;Condition Source="[SelectedDifference]" ConditionOp="LessThan" SourceValue="0"
  Target="[Background.Rotation]" Value="75deg;0,1,0" /&gt;
 &lt;Condition Source="[SelectedDifference]" ConditionOp="GreaterThan" SourceValue="0"
  Target="[Background.Rotation]" Value="-75deg;0,1,0" /&gt;
 &lt;Condition Source="[SelectedDifference]" ConditionOp="Equals" SourceValue="0"
  Target="[Background.Rotation]" Value="0deg;0,1,0" /&gt;</pre>
</blockquote>
<p>and then as you scroll through the items, they neatly rotate in to the right place.</p>
<p>Clicking on a movie takes you to a full page of details, with the ability to play different chapters of the movie;</p>
<p><img class="aligncenter size-full wp-image-136" title="WebTelek7" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek7.jpg" alt="WebTelek7" width="644" height="361" /></p>
<h2>Search</h2>
<p><img class="aligncenter size-full wp-image-137" title="WebTelek8" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek8.jpg" alt="WebTelek8" width="643" height="362" /></p>
<p>Normally for a search page, I would just use a standard triple-tap text entry region. Unfortunately, since Russian text entry was a key requirement here, that wasn&#8217;t sufficient. I therefore had to adapt the keyboard from the &#8220;Z&#8221; project in the media center SDK to meet my needs. This involved changing it to have Russian characters as an option, to change the actions to behave properly for a search box on a page, and to shrink the UI so that it could fit side by side with the search results. Not trivial, but I would strongly recommend looking at that project as a starting place for building your own keyboard if you have special requirements.</p>
<p>The other thing you will see on this page is the highlighting round the selected item in the search results list. This was done by swapping in and out a selected and unselected panel depending on the focus, e.g.</p>
<blockquote>
<pre>&lt;Condition Source="[Input.KeyFocus]" SourceValue="true"&gt;
 &lt;Actions&gt;
&lt;!-- when focused, play a sound and show the Selected region --&gt;
 &lt;PlaySound Sound="sound://styles:FocusSound"/&gt;
 &lt;Set Target="[Selected.Visible]" Value="true"/&gt;
 &lt;Set Target="[Unselected.Visible]" Value="false"/&gt;
 &lt;/Actions&gt;
 &lt;/Condition&gt;

 &lt;Condition  Source="[Input.KeyFocus]" SourceValue="false"&gt;
 &lt;Actions&gt;
&lt;!-- when unfocused, show the unselected region --&gt;
 &lt;Set Target="[Selected.Visible]" Value="false"/&gt;
 &lt;Set Target="[Unselected.Visible]" Value="true"/&gt;
 &lt;/Actions&gt;
 &lt;/Condition&gt;

...

&lt;Panel Layout="VerticalFlow"&gt;
 &lt;Children&gt;
&lt;!-- shown when selected --&gt;
   &lt;Graphic Name="Selected" Content="image://styles:TextBorder" &gt;
     &lt;Children&gt;

       &lt;Panel Layout="HorizontalFlow"&gt;
         &lt;Children&gt;
           &lt;Text Name="ProgramName2" Color="White" Font="Sergio UI,20,Bold" WordWrap="false" Margins="5,10,0,0"/&gt;

         &lt;/Children&gt;
       &lt;/Panel&gt;
     &lt;/Children&gt;
   &lt;/Graphic&gt;
&lt;!-- shown when not selected --&gt;
   &lt;Panel Name="Unselected" Layout="HorizontalFlow"&gt;
     &lt;Children&gt;
       &lt;Text Name="ProgramName" Color="LightBlue" Font="Sergio UI,18" WordWrap="false" Margins="5,0,0,0"/&gt;
     &lt;/Children&gt;
   &lt;/Panel&gt;
 &lt;/Children&gt;
&lt;/Panel&gt;</pre>
</blockquote>
<p>The key to getting it looking like the media center selection is to draw a nice rounded button with a circular shade in it. I use the open source <a href="http://www.gimp.org/" target="_blank">GIMP</a> package to draw all of my images, and something like this can be achieved quite easily with that.</p>
<h2>Preferences</h2>
<p><img class="aligncenter size-full wp-image-138" title="WebTelek9" src="http://blog.milliesoft.co.uk/wp-content/uploads/2009/06/WebTelek9.jpg" alt="WebTelek9" width="644" height="361" /></p>
<p>Finally, the system had to run in multiple languages, and change which language it is running in based on user preference, not based on installed language (there are many US customers running with US English installations who want to have the WebTelek software running in Russian). Media Center gives no kind of native support for language switching like that, so I put the different language prompts in a static class;</p>
<blockquote>
<pre>public static class Language
 {
 public static String PlayPart, Loading, Actors, Length, mins, Producer, NoMovieDetails, Categories, Genres;

 public static void setLanguage(string language)
 {

 switch (language)
 {
 case "US":
 Loading = "Loading";
...</pre>
</blockquote>
<p>and then in the UI class for each page, exposed the prompt;</p>
<blockquote>
<pre>public string PreferencesText
 {
 get
 {
 return Language.Preferences;
 }
 }</pre>
</blockquote>
<p>This allows the text to be referenced in many places without constantly re-instantiating a new class, and also allows for the text to be changed on the fly without re-entering the application.</p>
<h2>Summary</h2>
<p>Hopefully I have managed to share some useful development tips, and if you are looking to get some Russian television within media center, hopefully I have enticed you enough to sign up with <a href="http://www.webtelek.com/register.php" target="_blank">WebTelek</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/06/webtelek-media-center-add-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wanted: Plugin developers for TunerFreeMCE</title>
		<link>http://blog.milliesoft.co.uk/2009/06/wanted-plugin-developers-for-tunerfreemce/</link>
		<comments>http://blog.milliesoft.co.uk/2009/06/wanted-plugin-developers-for-tunerfreemce/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 08:18:16 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[TunerFreeMCE]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=117</guid>
		<description><![CDATA[I am currently working on a plugin feature for TunerFreeMCE to allow other people to produce plugins for TV content from any source. The idea is that you specify some metadata about the channels (e.g. channel names, logos, details of how to get the program list), and the TunerFree code takes care of reading it and [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently working on a plugin feature for <a href="http://www.milliesoft.co.uk/tunerfree.php">TunerFreeMCE</a> to allow other people to produce plugins for TV content from any source. The idea is that you specify some metadata about the channels (e.g. channel names, logos, details of how to get the program list), and the TunerFree code takes care of reading it and producing a list of programs.</p>
<p>At the moment I am looking for people who would like to work on a plugin to test this. Ideally you need;</p>
<p>1) A channel that you want to add<br />
2) html and xml skills to be able to produce the metadata</p>
<p>If you are interested in producing a plugin, e-mail me at martin@milliesoft.co.uk</p>
<p>Thanks</p>
<p>Martin</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/06/wanted-plugin-developers-for-tunerfreemce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simpler popup dialog</title>
		<link>http://blog.milliesoft.co.uk/2009/04/simpler-popup-dialog/</link>
		<comments>http://blog.milliesoft.co.uk/2009/04/simpler-popup-dialog/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 22:42:31 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[dialog]]></category>
		<category><![CDATA[mcml]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=105</guid>
		<description><![CDATA[In a previous post on adding a version checker to media center, I gave an example of how to write a popup dialog box for media center. There is also a simpler version of the Dialog if you don&#8217;t need to know anything about the response, e.g. if you are simply showing an information message. [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous post on adding a <a href="http://blog.milliesoft.co.uk/2009/02/adding-a-version-checker/">version checker</a> to media center, I gave an example of how to write a popup dialog box for media center. There is also a simpler version of the <a href="http://msdn.microsoft.com/en-us/library/ms814612.aspx" target="_blank">Dialog</a> if you don&#8217;t need to know anything about the response, e.g. if you are simply showing an information message. This simpler version doesn&#8217;t require a callback to be defined, or any complex button definitions. It just needs a title, some text, a button name, a timeout and whether or not it is modal. Here&#8217;s an example;</p>
<pre><code>      &lt;Condition Source="[Preferences.TwitDialog]" SourceValue="true" ConditionOp="ChangedTo"&gt;
        &lt;Actions&gt;
          &lt;Set Target="[Preferences.TwitDialog]" Value="false"/&gt;
          &lt;Invoke Target="[AddInHost.MediaCenterEnvironment.Dialog]"
                  caption="Authorize Twitter"
                  text="Please authorize twitter."
                  buttons="Ok"
                  timeout="15"
                  isModal="true"/&gt;

        &lt;/Actions&gt;
      &lt;/Condition&gt;</code></pre>
<p>The buttons can only be ones from the list described in the <a href="http://msdn.microsoft.com/en-us/library/ms814612.aspx" target="_blank">documentation</a>. A modal window requires either the user or a timeout to close it before any other actions can be done, whereas a modeless window allows the user to continue with other things in the meanwhile.</p>
<p>The dialog is fired in this example by a property which is set in the code to true, and then set back to false when it is read. The condition only fires when the value is set to true in the first place by using the ConditionOp.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/04/simpler-popup-dialog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Front End and Back End Synchronization in MCML</title>
		<link>http://blog.milliesoft.co.uk/2009/04/front-end-and-back-end-synchronization-in-mcml/</link>
		<comments>http://blog.milliesoft.co.uk/2009/04/front-end-and-back-end-synchronization-in-mcml/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 22:28:09 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[data binding]]></category>
		<category><![CDATA[mcml]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=86</guid>
		<description><![CDATA[One of the issues that has been hardest for me to learn with developing media center applications as been the linking of front end items in the MCML layer with data that I have in c# on the back end. For a long time I struggled with binding values from the code in to front [...]]]></description>
			<content:encoded><![CDATA[<p>One of the issues that has been hardest for me to learn with developing media center applications as been the linking of front end items in the MCML layer with data that I have in c# on the back end. For a long time I struggled with binding values from the code in to front end, and making method calls from the front end in to the back end. I suspect that the reason I did this was because that is how it is shown in the Media Center SDK and documentation, so I thought it was the only way.</p>
<p>It turns out that the SDK is in fact showing the most complicated use case. There is a much easier way of linking the front end and the back end, that is so simple compared to the rest of MCML development that it&#8217;s almost non-intuitive. The technique is to create a UI item in your C# code, and then refer to that item on the front end. You don&#8217;t have two items, one front end and one back end. Instead you simply have one item that is referenced in both layers. That means that when you make a change to the value of the item in your C# code, the change is instantly reflected in the UI, and when you make a change to the value of the item in the UI, the C# code can reference that value instantly. Because it is the same physical item in memory.<span id="more-86"></span>You can do this with any item that is a <a href="http://msdn.microsoft.com/en-us/library/bb188939.aspx" target="_blank">ModelItem</a>. This includes Choice, BooleanChoice, Command, InvokeCommand, NavigateCommand, EditableText, ListDataSet, RangedValue, ByteRangedValue, IntRangedValue, Timer, PropertySet, and of course anything which you construct yourself which implements ModelItem. That covers a fair bit of the things you may wish to put on the page in Media Center.</p>
<p>One issue that I have found is that you simply declare a public object in your class, you can&#8217;t access it in the UI. If you expose the same object via an accessor, it works fine. I don&#8217;t know why, but sticking to that rule works fine for me. Here&#8217;s an example of some of them in action;</p>
<pre><code>using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.MediaCenter.UI;

namespace TunerFreeMCE
{
    public class PreferencesUI :ModelItem
    {
        private BooleanChoice _getBBC;
        private Choice _frequency;
        private EditableText _goUSCommand;
        private Image _twitLogo;
        private bool _twitButton1Visbility = true;
        private string _twitText;

        public PreferencesUI()
        {
            _getBBC = new BooleanChoice(this.Owner,"Get BBC");
            _frequency = new Choice(this.Owner, "Cache Frequency");
            _goUSCommand = new EditableText(this.Owner, "US VPN Command");
            ArrayListDataSet frequencyList = new ArrayListDataSet();
            frequencyList.Add("1 hour");
            frequencyList.Add("2 hours");
            frequencyList.Add("4 hours");
            frequencyList.Add("12 hours");
            frequencyList.Add("24 hours");
            _frequency.Options = frequencyList;
                _frequency.ChosenIndex = 0;
            _twitLogo = new Image("C:/Program Files/MillieSoft/TunerFreeMCE/Images/twitter_logo.png");
        }

        public BooleanChoice GetBBCValue
        {
            get
            {
                return _getBBC;
            }
            set
            {
                _getBBC = value;
            }

        }

        public Choice GetFrequency
        {
            get
            {
                return _frequency;

            }
            set
            {
                _frequency = value;
            }
        }

        public EditableText USCommand
        {
            get
            {
                return _goUSCommand;

            }
            set
            {
                _goUSCommand = value;
            }
        }

        public bool TwitButton1Visibility
        {
            set
            {
                _twitButton1Visbility = value;
                FirePropertyChanged("TwitButton1Visibility");
            }
            get
            {
                return _twitButton1Visbility;
            }
        }

        public string TwitText
        {
            get { return _twitDialog; }
            set
            {
                if (value != _twitText)
                {
                    _twitText = value;
                    FirePropertyChanged("TwitDialog");
                }
            }
        }

        public Image TwitterLogo
        {
            get
            {
                return _twitLogo;
            }
        }

    }
}</code></pre>
<p>And here&#8217;s the corresponding MCML. The standard sample buttons and spinners are ommited &#8211; you can get those from the SDK very easily;</p>
<pre><code>&lt;Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
xmlns:cor="assembly://MSCorLib/System"
xmlns:a="assembly://TunerFreeMCE/TunerFreeMCE"
xmlns:addin="assembly://Microsoft.MediaCenter/Microsoft.MediaCenter.Hosting"
xmlns:mc="assembly://Microsoft.MediaCenter/Microsoft.MediaCenter"
xmlns:me="Me"&gt;

&lt;UI Name="Preferences"&gt;

    &lt;Locals&gt;
      &lt;a:PreferencesUI Name="Preferences"/&gt;
    &lt;/Locals&gt;
    &lt;Rules&gt;
      &lt;Binding Source="[Preferences.TwitButton1Visibility]" Target="[SetTwitterUsername.Visible]"/&gt;

    &lt;/Rules&gt;
    &lt;Content&gt;
      &lt;Panel Layout="Dock"&gt;
        &lt;Children&gt;
          &lt;Panel Layout="Dock" MaximumSize="0,80"&gt;

            &lt;LayoutInput&gt;
              &lt;DockLayoutInput Position="Top" Alignment="Near"/&gt;
            &lt;/LayoutInput&gt;
            &lt;Children&gt;
              &lt;Panel Layout="VerticalFlow"&gt;
                &lt;Children&gt;
                  &lt;!-- Title text. --&gt;
                  &lt;Text Name="Banner" Content="[Preferences.TwitText]" Color="White"
										  Font="Sergio UI,45" Margins="10,0,0,0"&gt;
                  &lt;/Text&gt;
                &lt;/Children&gt;
              &lt;/Panel&gt;
            &lt;/Children&gt;
          &lt;/Panel&gt;
                  &lt;Panel  Margins="20,0,0,0"&gt;
                    &lt;Layout&gt;
                      &lt;FlowLayout Orientation="Vertical" Spacing="10,10" StripAlignment="Near"/&gt;
                    &lt;/Layout&gt; 

                    &lt;Children&gt;
                          &lt;Panel Layout="VerticalFlow"&gt;
                            &lt;Children&gt;

                              &lt;Graphic Content="[Preferences.TwitterLogo]" Name="TwitterLogo" Margins="0,2,0,0"&gt;

                              &lt;me:SimpleButton Name="SetTwitterUsername" EnormoList="[EnormoList]"&gt;
                                &lt;Command&gt;
                                  &lt;InvokeCommand Description="Set Twitter Username" Target="[Preferences.launchTwitterURL]"/&gt;
                                &lt;/Command&gt;
                              &lt;/me:SimpleButton&gt;

                              &lt;me:SimpleCheckBox EnormoList="[EnormoList]"&gt;
                                &lt;Model&gt;
                                  &lt;BooleanChoice BooleanChoice="[Preferences.GetBBCValue]"/&gt;
                                &lt;/Model&gt;
                              &lt;/me:SimpleCheckBox&gt;

                              &lt;me:SimpleSpinner EnormoList="[EnormoList]"&gt;
                                &lt;Model&gt;
                                  &lt;Choice Choice="[Preferences.GetFrequency]"/&gt;
                                &lt;/Model&gt;
                              &lt;/me:SimpleSpinner&gt;

                              &lt;me:SimpleEditBox EnormoList="[EnormoList]"&gt;
                                &lt;EditableText&gt;
                                  &lt;EditableText EditableText="[Preferences.USCommand]"/&gt;
                                &lt;/EditableText&gt;
                              &lt;/me:SimpleEditBox&gt;

                            &lt;/Children&gt;
                          &lt;/Panel&gt;

                    &lt;/Children&gt;
                  &lt;/Panel&gt;
        &lt;/Children&gt;
      &lt;/Panel&gt;
    &lt;/Content&gt;

  &lt;/UI&gt;
</code></pre>
<p>As you can see, the BooleanChoice is rendered as a checkbox on the page, the Choice as a spinner, the EditableText as a text box, the Image as a Graphic, the boolean is used to change the visibility of an item, and the string as display text. All of these items are defined in code and then referred to in the page, sometimes as a direct reference to the item, and sometimes as a property of another item.</p>
<p>This can be a complex lesson to get to grips with, but once you realize how this works, MCML programming becomes a whole lot easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/04/front-end-and-back-end-synchronization-in-mcml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hear me on The Media Center Show this week</title>
		<link>http://blog.milliesoft.co.uk/2009/04/hear-me-on-the-media-center-show-this-week/</link>
		<comments>http://blog.milliesoft.co.uk/2009/04/hear-me-on-the-media-center-show-this-week/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 07:40:34 +0000</pubDate>
		<dc:creator>Martin Millmore</dc:creator>
				<category><![CDATA[Media Center]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[TunerFreeMCE]]></category>

		<guid isPermaLink="false">http://blog.milliesoft.co.uk/?p=95</guid>
		<description><![CDATA[I did an interview with Ian Dixon over a month ago about TunerFreeMCE, which is in this week&#8217;s Media Center Show. The content is hopefully a great advert for TunerFreeMCE, but it is bit out of date now, in that it talks about needing mouse clicks in some places, which is no longer neccessary, and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://thedigitallifestyle.com/cs/blogs/ian/archive/2009/04/09/the-media-center-show-201-tunerfreemce.aspx"><img class="aligncenter" title="Digital Lifestyle" src="http://thedigitallifestyle.com/images/albumcoversmall.png" alt="" width="150" height="150" /></a>I did an interview with Ian Dixon over a month ago about <a href="http://www.milliesoft.co.uk/tunerfree.php">TunerFreeMCE</a>, which is in this week&#8217;s <a href="http://thedigitallifestyle.com/cs/blogs/ian/archive/2009/04/09/the-media-center-show-201-tunerfreemce.aspx">Media Center Show</a>. The content is hopefully a great advert for TunerFreeMCE, but it is bit out of date now, in that it talks about needing mouse clicks in some places, which is no longer neccessary, and also talks about future plans for doing radio, which has now been done too. I also talk about how BBC doesn&#8217;t work on extenders, but of course now you can download the BBC programs you can watch them on extenders too. Also in there is my prediction that more TV companies will move to Flash, which was proved right on the 1st April when channel 4 moved over to Flash.</p>
<p style="text-align: left;">I&#8217;m really pleased with the progress over the past month that has been made that has added so many more features, but the interview is still a great picture of the software. Have a listen on the <a href="http://thedigitallifestyle.com/cs/blogs/ian/archive/2009/04/09/the-media-center-show-201-tunerfreemce.aspx">digital lifestyle  site</a> or subscribe to the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=217932939">podcast</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milliesoft.co.uk/2009/04/hear-me-on-the-media-center-show-this-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
