<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" 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:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Channel 9</title>
    <atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/Niners/c4f.Unni-Ravindranathan/Posts/RSS"></atom:link>
    <itunes:summary></itunes:summary>
    <itunes:author>Microsoft</itunes:author>
    <itunes:subtitle></itunes:subtitle>
    <image>
      <url>http://mschnlnine.vo.llnwd.net/d1/Dev/App_Themes/C9/images/feedimage.png</url>
      <title>Channel 9</title>
      <link>http://channel9.msdn.com/Niners/c4f.Unni-Ravindranathan/Posts</link>
    </image>
    <itunes:image href=""></itunes:image>
    <itunes:category text="Technology"></itunes:category>
    <description>Channel 9 keeps you up to date with the latest news and behind the scenes info from Microsoft that developers love to keep up with. From LINQ to SilverLight – Watch videos and hear about all the cool technologies coming and the people behind them.</description>
    <link>http://channel9.msdn.com/Niners/c4f.Unni-Ravindranathan/Posts</link>
    <language>en</language>
    <pubDate>Sun, 19 May 2013 02:39:34 GMT</pubDate>
    <lastBuildDate>Sun, 19 May 2013 02:39:34 GMT</lastBuildDate>
    <generator>Rev9</generator>
    <c9:totalResults>1</c9:totalResults>
    <c9:pageCount>1</c9:pageCount>
    <c9:pageSize>25</c9:pageSize>
  <item>
      <title>Designing FreeCell using Expression and Visual Studio Toolsets</title>
      <description><![CDATA[<span id="c4fmetadata">
<table class="" cellspacing="0" cellpadding="1" width="100%" border="0">
<tbody>
<tr class="entry_overview">
<td class="" width="50">&nbsp;</td>
<td class=""><span class="entry_description">This article re-creates the game FreeCell using the January CTP and Visual Studio 2005 Express.</span></td>
</tr>
<tr>
<td class="" colspan="2">
<div class="entry_author">Unni Ravindranathan</div>
<div class="entry_company"><a href="http://blogs.msdn.com/unnir/">Unni's Blog</a></div>
<br>
<div class="entry_details"><b>Difficulty: </b><span class="entry_details_input">Intermediate</span></div>
<div class="entry_details"><b>Time Required:</b> <span class="entry_details_input">
3-6 hours</span></div>

<div class="entry_details"><b>Software: </b><span class="entry_details_input"><a href="http://msdn.com/express/">Visual Studio Express Editions</a>,
<a href="http://www.microsoft.com/products/expression/en/interactive_designer/default.mspx">
Microsoft Expression Interactive Designer</a>, <a href="http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/default.aspx%22">
Windows Vista, .NET Framework 3.0 Runtime and Windows SDK Downloads</a></span></div>
<div class="entry_details"><b>Download: </b>
<ul>
<li><a href="http://ecn.channel9.msdn.com/o9/c4fcontent/migration/912523/FreeCell_CS_VISTA.msi">C# Download</a></li></ul>
</div>
</td>
</tr>
</tbody>
</table>
</span>
<p>Microsoft is starting to make some of the new development technology for Windows Vista available to programmers through Community Technology Preview (CTP) releases. To start introducing this technology to you (and have a little fun with it myself), I decided
 to recreate the game FreeCell using the <a href="http://msdn.microsoft.com/windowsvista/getthebeta/default.aspx">
January CTP</a> and Visual Studio 2005 Express. In this article, I will try and describe my experiences on this brief one-day journey and how much fun it turned out to be!
</p>
<h4>About the technology used</h4>
<p>&quot;Windows Presentation Foundation&quot;, &quot;Windows Communication Foundation&quot;, and &quot;Windows Workflow Foundation&quot; are the names for three strategic developer technologies that Microsoft plans to ship in 2006 as part of the Windows Vista operating system. In addition,
 Microsoft is making these technologies available on Windows XP and Windows Server 2003. The WinFX Runtime Components January CTP enables developers to continue experimenting with early builds of these technologies, get acquainted with the development experience,
 and provide Microsoft with feedback. </p>
<p>&quot;Windows Presentation Foundation&quot; is the name for Microsoft's unified presentation subsystem for Windows, formerly known as &quot;Avalon&quot;. It consists of a display engine and a managed-code framework. &quot;Windows Presentation Foundation&quot; unifies how Windows creates,
 displays, and manipulates documents, media, and user interface. This enables developers and designers to create visually-stunning, differentiated user experiences that improve customer connection. When delivered, &quot;Windows Presentation Foundation&quot; will become
 Microsoft's strategic user interface (UI) technology. </p>
<p>Microsoft Expression Interactive Designer allows you to create engaging, cinematic user interfaces with a rich design environment that combines multiple media elements including vectors, pixel images, 3D content, video and audio, high-quality text, and animation.
 It allows you to drive seamless collaboration with developers using Visual Studio and maximize the integrity of designs by sharing the common WinFX platform during prototype, design, and development stages of building advanced UI and applications. For more
 information, visit <a href="http://www.microsoft.com/expression">http://www.microsoft.com/expression</a>.
</p>
<h4>Creating the Game</h4>
<p>When I set out on this project, I only had one goal in mind: I wanted to understand the workflow in designing an application in collaboration with a developer.
</p>
<p>The first thing I did was to create all the card visuals once I knew I was doing FreeCell. All of the visuals are vectors done in Interactive Designer. Essentially, there are four drawing brushes for the four suites (created using the Tools | Make Tile Brush
 | Make Drawing Brush option in Interactive Designer). </p>
<p>FreeCell uses the Model View Controller (MVC) pattern that WPF makes very easy to implement using its powerful data-binding feature. The model for the card game resides in 4 classes:
</p>
<ul>
<li>Card.cs defines <b>Card</b>, which is your regular card data structure. </li><li>Cell.cs defines <b>Cell</b>. FreeCell has two kinds of cells: <b>Home</b> and
<b>Free</b>. </li><li>GameModel.cs defines <b>GameModel,</b> which is the main game engine and holds the data structures for the various card stacks and cells.
</li><li>RandomCardGenerator.cs defines a helper class that helps generate cards in random order using
<b>Enumeration</b> – I brought this type in from a previous card game I wrote. </li></ul>
<p><b>GameModel</b> exposes all the data-structures as properties, such as <b>HomeCells</b> (which is a collection of home cells),
<b>FreeCells</b> and <b>CardStacks</b>. <b>CardStacks</b> is a collection of collections, each of which is collection of
<b>Cards</b>. Using <b>ObservableCollection</b> (which is derived from <b>IList</b>) allows you to simply tweak the model (such as moving a card from one stack to another whenever a game event happens) and this will update the UI.
<i>All of this requires no UI manipulation code</i>. <b>GameModel</b> also exposes a string for displaying the time on the game board. For ensuring that the UI updates each time a timer in the model ticks, you need to implement an Interface called
<b>INotifyPropertyChanged</b>, which will fire a <b>PropertyChanged</b> event whenever a property changes. You can then bind against this property in the view and forget about it. Isn't that a sweet separation between model and view?
</p>
<p>So much for the code. An Expression project flows smoothly into Visual Studio and back since they share the same infrastructure underneath – any changes you make in Expression are visible in Visual Studio and vice versa!
</p>
<p>The next step was to get back into Expression Interactive Designer and make this thing look cool. I used a
<b>ViewBox</b> at the root of the game board (minus the status-bar-like thing) so that things would scale correctly when the app was resized—one of the biggest complaints I have with the FreeCell that ships with Windows. Expression has powerful layout capabilities
 that make it every easy to control behavior when the app is resized, and you can do this without it being your main concern.
</p>
<p>A custom <b>Panel</b> was required for stacking the various cards, so I put my developer hat back on and created CardStackPanel.cs. It exposes an
<b>Offset</b> property that allows the designer to control the <b>Offset</b> on the design surface. The code for this type is shown below and shows how easy it is to extend functionality of pre-existing controls in WPF:
</p>
<p><b>Visual C#</b> </p>
<pre class="csharpcode"><span class="kwrd"></span><span class="kwrd">public</span> <span class="kwrd">class</span> CardStackPanel : StackPanel<br>{<br>    <span class="kwrd">public</span> <span class="kwrd">double</span> ArrangeOffset<br>    {<br>        get { <span class="kwrd">return</span> (<span class="kwrd">double</span>)<span class="kwrd">base</span>.GetValue(ArrangeOffsetProperty); }<br>        set { <span class="kwrd">base</span>.SetValue(ArrangeOffsetProperty, <span class="kwrd">value</span>); }<br>    }<br><br>    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">readonly</span> DependencyProperty ArrangeOffsetProperty = <br>        DependencyProperty.Register(<span class="str">&quot;ArrangeOffset&quot;</span>, <br>        <span class="kwrd">typeof</span>(<span class="kwrd">double</span>), <span class="kwrd">typeof</span>(CardStackPanel), <span class="kwrd">new</span> PropertyMetadata(10.0));<br><br>    <span class="kwrd">protected</span> <span class="kwrd">override</span> Size ArrangeOverride(Size arrangeSize)<br>    {<br>        Rect childArrangeRect = <span class="kwrd">new</span> Rect(arrangeSize);<br>        childArrangeRect.Y = -1 * <span class="kwrd">this</span>.ArrangeOffset;<br><br>        <span class="kwrd">for</span> (<span class="kwrd">int</span> i = 0; i &lt; <span class="kwrd">this</span>.InternalChildren.Count; i&#43;&#43;)<br>        {<br>            UIElement child = <span class="kwrd">this</span>.InternalChildren[i];<br>            childArrangeRect.Y &#43;= <span class="kwrd">this</span>.ArrangeOffset;<br>            childArrangeRect.Height = child.DesiredSize.Height;<br>            child.Arrange(childArrangeRect);<br>        }<br><br>        <span class="kwrd">return</span> arrangeSize;<br>    }<br>}</pre>
<style type="text/css">
<!--
.csharpcode, .csharpcode 
	{font-size:small;
	color:black;
	font-family:consolas,"Courier New",courier,monospace;
	background-color:#ffffff}
.csharpcode 
	{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}
-->
</style>
<p><b>Visual Basic</b></p>
<p><b></b></p>
<pre class="csharpcode"><span class="kwrd">Public</span> <span class="kwrd">Class</span> CardStackPanel <span class="kwrd">Inherits</span> StackPanel<br>    <span class="kwrd">Public</span> <span class="kwrd">Property</span> ArrangeOffset() <span class="kwrd">As</span> <span class="kwrd">Double</span><br>        <span class="kwrd">Get</span><br>            <span class="kwrd">Return</span> <span class="kwrd">CDbl</span>(<span class="kwrd">MyBase</span>.GetValue(CardStackPanel.ArrangeOffsetProperty))<br>        <span class="kwrd">End</span> <span class="kwrd">Get</span><br>        <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> value <span class="kwrd">As</span> <span class="kwrd">Double</span>)<br>            <span class="kwrd">MyBase</span>.SetValue(CardStackPanel.ArrangeOffsetProperty, value)<br>        <span class="kwrd">End</span> <span class="kwrd">Set</span><br>    <span class="kwrd">End</span> <span class="kwrd">Property</span><br><br>    <span class="kwrd">Public</span> <span class="kwrd">Shared</span> <span class="kwrd">ReadOnly</span> ArrangeOffsetProperty <span class="kwrd">As</span> DependencyProperty<br><br>    <span class="kwrd">Shared</span> <span class="kwrd">Sub</span> <span class="kwrd">New</span>()<br>        CardStackPanel.ArrangeOffsetProperty = _<br>            DependencyProperty.Register(<span class="str">&quot;ArrangeOffset&quot;</span>, <span class="kwrd">GetType</span>(<span class="kwrd">Double</span>), _<br>            <span class="kwrd">GetType</span>(CardStackPanel), <span class="kwrd">New</span> PropertyMetadata(10.0))<br>    <span class="kwrd">End</span> <span class="kwrd">Sub</span><br><br>    <span class="kwrd">Protected</span> <span class="kwrd">Overrides</span> <span class="kwrd">Function</span> ArrangeOverride(<span class="kwrd">ByVal</span> arrangeSize <span class="kwrd">As</span> Size) _<br>            <span class="kwrd">As</span> Size<br>        <span class="kwrd">Dim</span> childArrangeRect <span class="kwrd">As</span> <span class="kwrd">New</span> Rect(arrangeSize)<br>        childArrangeRect.Y = (-1 * <span class="kwrd">Me</span>.ArrangeOffset)<br>        <span class="kwrd">Dim</span> childIdx <span class="kwrd">As</span> <span class="kwrd">Integer</span> = 0<br>        <span class="kwrd">Do</span> <span class="kwrd">While</span> (childIdx &lt; <span class="kwrd">MyBase</span>.InternalChildren.Count)<br>            <span class="kwrd">Dim</span> child <span class="kwrd">As</span> UIElement = <span class="kwrd">MyBase</span>.InternalChildren.Item(childIdx)<br>            childArrangeRect.Y = (childArrangeRect.Y &#43; <span class="kwrd">Me</span>.ArrangeOffset)<br>            childArrangeRect.Height = child.DesiredSize.Height<br>            child.Arrange(childArrangeRect)<br>            childIdx &#43;= 1<br>        <span class="kwrd">Loop</span><br>        <span class="kwrd">Return</span> arrangeSize<br><span class="kwrd">End</span> <span class="kwrd">Function</span>
</pre>
<p>The rest of the UI creation was a breeze using Expression's powerful data-binding feature: just drag and drop data (like the time string that you created previously in your model), choose the control that you want to display the data (in this case a
<b>TextBlock</b>), select the property you want to bind to (<b>Text </b>in our case), and finally, for more complex data fields, customize the look. To create a stack of stacks for the various cards on the game board, I used the default
<b>StackPanel</b> that WPF provides (in horizontal mode) and each collection within it was laid out using the custom panel I wrote (and I set the
<b>Offset</b> property to a value that made this look good). </p>
<p>One of the tricky things is that there really are no cards in these various data structures until the game actually beings; so, to workaround that, I wrote some temporary code in the constructor of my GameModel to populate them—that way I could visualize
 the cards and design them. We are working on providing a better solution to this problem so that you really won't have to write this kind of temporary code in the future.
</p>
<p>There are two more interesting things: the design for the cards and the interactivity. At this point, you have four drawing brushes. How do you convert this to form fifty-two cards? The solution is to use the very powerful
<b>DataTrigger</b> feature that WPF exposes. Data triggers allow you to specify the look of the visual based on a property in the model (in this case the
<b>Suite</b> and <b>Card</b> number information). So I created thirteen data triggers for the thirteen possible cards, and four additional data triggers for the four suites. Each card template uses the
<b>Brush</b> set on the control that represents it and thus you have 13 * 4 cards—cool, eh? Unfortunately, you cannot create
<b>DataTriggers</b> in Interactive Designer as of now, so it has to be done by editing the markup. However, once this is done, you can then leverage the power of Interactive Designer to figure out what your Queen of Hearts or Ace of Spades should look like.
</p>
<p>Here is what the structure of the DataTemplate for a Card looks like:</p>
<pre class="csharpcode"><span class="kwrd"></span><span class="kwrd">&lt;</span><span class="html">DataTemplate</span> <span class="attr">x:Key</span><span class="kwrd">=&quot;CardTemplate&quot;</span><span class="kwrd">&gt;</span><br>    <span class="kwrd">&lt;</span><span class="html">Grid</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;Grid1&quot;</span> <span class="attr">Width</span><span class="kwrd">=&quot;72&quot;</span> <span class="attr">Height</span><span class="kwrd">=&quot;100&quot;</span><span class="kwrd">&gt;</span><br>        <span class="kwrd">&lt;</span><span class="html">ColumnDefinition</span><span class="kwrd">/&gt;</span><br>        <span class="kwrd">&lt;</span><span class="html">RowDefinition</span><span class="kwrd">/&gt;</span><br>        <span class="kwrd">&lt;</span><span class="html">Control</span> <span class="attr">x:Name</span><span class="kwrd">=&quot;CardDisplayControl&quot;</span> <span class="attr">Margin</span><span class="kwrd">=&quot;2,0,2,0&quot;</span> <br>            <span class="attr">HorizontalAlignment</span><span class="kwrd">=&quot;Stretch&quot;</span> <span class="attr">VerticalAlignment</span><span class="kwrd">=&quot;Stretch&quot;</span> <br>            <span class="attr">Width</span><span class="kwrd">=&quot;Auto&quot;</span> <span class="attr">Height</span><span class="kwrd">=&quot;Auto&quot;</span> <span class="kwrd">/&gt;</span><br>            ....<br>    <span class="kwrd">&lt;/</span><span class="html">Grid</span><span class="kwrd">&gt;</span><br>    <span class="kwrd">&lt;</span><span class="html">DataTemplate.Triggers</span><span class="kwrd">&gt;</span><br>        <span class="kwrd">&lt;</span><span class="html">DataTrigger</span> <span class="attr">Binding</span><span class="kwrd">=&quot;{Binding Suite}&quot;</span><span class="kwrd">&gt;</span><br>            <span class="kwrd">&lt;</span><span class="html">DataTrigger.Value</span><span class="kwrd">&gt;</span><br>                <span class="kwrd">&lt;</span><span class="html">FreeCell:Suite</span><span class="kwrd">&gt;</span>Hearts<span class="kwrd">&lt;/</span><span class="html">FreeCell:Suite</span><span class="kwrd">&gt;</span><br>            <span class="kwrd">&lt;/</span><span class="html">DataTrigger.Value</span><span class="kwrd">&gt;</span><br>            <span class="kwrd">&lt;</span><span class="html">Setter</span> <span class="attr">Property</span><span class="kwrd">=&quot;Foreground&quot;</span> <span class="attr">TargetName</span><span class="kwrd">=&quot;CardDisplayControl&quot;</span><br>                <span class="attr">Value</span><span class="kwrd">=&quot;{StaticResource HeartsDrawingBrush}&quot;</span> <span class="kwrd">/&gt;</span><br>        <span class="kwrd">&lt;/</span><span class="html">DataTrigger</span><span class="kwrd">&gt;</span><br>        ....<br>        <span class="kwrd">&lt;</span><span class="html">DataTrigger</span> <span class="attr">Binding</span><span class="kwrd">=&quot;{Binding SuiteIndependentCardNumber}&quot;</span><span class="kwrd">&gt;</span><br>            <span class="kwrd">&lt;</span><span class="html">DataTrigger.Value</span><span class="kwrd">&gt;</span><br>                <span class="kwrd">&lt;</span><span class="html">system:Int32</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">system:Int32</span><span class="kwrd">&gt;</span><br>            <span class="kwrd">&lt;/</span><span class="html">DataTrigger.Value</span><span class="kwrd">&gt;</span><br>            <span class="kwrd">&lt;</span><span class="html">Setter</span> <span class="attr">Property</span><span class="kwrd">=&quot;Template&quot;</span> <span class="attr">TargetName</span><span class="kwrd">=&quot;CardDisplayControl&quot;</span> <br>                <span class="attr">Value</span><span class="kwrd">=&quot;{StaticResource AceTemplate}&quot;</span><span class="kwrd">/&gt;</span><br>        <span class="kwrd">&lt;/</span><span class="html">DataTrigger</span><span class="kwrd">&gt;</span><br>          ....<br>    <span class="kwrd">&lt;/</span><span class="html">DataTemplate.Triggers</span><span class="kwrd">&gt;</span><br><span class="kwrd">&lt;/</span><span class="html">DataTemplate</span><span class="kwrd">&gt;</span><span class="kwrd"></span><span class="kwrd"></span><span class="kwrd"></span></pre>
<p>&nbsp;There are two kinds of interactivity possible in this game: starting the game and selecting cards. To start the game, I used yet another WPF feature called command binding. Command binding allows your command implementation to be in your model (which in
 this case involves resetting the data structures, timers, etc.) without have to worry about how the command will be exposed. To hook up the command, you again use—guess what—data-binding using drag-drop in Interactive Designer: you can hook up the command
 to a button, menu item or both if you like. If the command is not available, then these various UI elements appear disabled—all without a line of UI code.
</p>
<p>Finally to figure out which card or cell was hit by the user, all one has to do is to add a
<b>MouseDown</b> event. Look at the <b>DataContext</b> property on the sender of the event. If the
<b>DataContext</b> is not null and is an object in your model, you know exactly what was hit (at this point, all you do is call a function into your model to execute the game logic).
</p>
<p>Check it out! It sure is fun!</p>
 <img src="http://m.webtrends.com/dcs1wotjh10000w0irc493s0e_6x1g/njs.gif?dcssip=channel9.msdn.com&dcsuri=http://channel9.msdn.com/Niners/c4f.Unni-Ravindranathan/Posts/RSS&WT.dl=0&WT.entryid=Entry:RSSView:1df1ab9431d148c693339e7600dae412">]]></description>
      <comments>http://channel9.msdn.com/coding4fun/articles/Designing-FreeCell-using-Expression-and-Visual-Studio-Toolsets</comments>
      <itunes:summary>



&amp;nbsp;
This article re-creates the game FreeCell using the January CTP and Visual Studio 2005 Express.



Unni Ravindranathan
Unni&#39;s Blog

Difficulty: Intermediate
Time Required: 
3-6 hours

Software: Visual Studio Express Editions,

Microsoft Expression Interactive Designer, 
Windows Vista, .NET Framework 3.0 Runtime and Windows SDK Downloads
Download: 

C# Download






Microsoft is starting to make some of the new development technology for Windows Vista available to programmers through Community Technology Preview (CTP) releases. To start introducing this technology to you (and have a little fun with it myself), I decided
 to recreate the game FreeCell using the 
January CTP and Visual Studio 2005 Express. In this article, I will try and describe my experiences on this brief one-day journey and how much fun it turned out to be!
 
About the technology used
&amp;quot;Windows Presentation Foundation&amp;quot;, &amp;quot;Windows Communication Foundation&amp;quot;, and &amp;quot;Windows Workflow Foundation&amp;quot; are the names for three strategic developer technologies that Microsoft plans to ship in 2006 as part of the Windows Vista operating system. In addition,
 Microsoft is making these technologies available on Windows XP and Windows Server 2003. The WinFX Runtime Components January CTP enables developers to continue experimenting with early builds of these technologies, get acquainted with the development experience,
 and provide Microsoft with feedback.  
&amp;quot;Windows Presentation Foundation&amp;quot; is the name for Microsoft&#39;s unified presentation subsystem for Windows, formerly known as &amp;quot;Avalon&amp;quot;. It consists of a display engine and a managed-code framework. &amp;quot;Windows Presentation Foundation&amp;quot; unifies how Windows creates,
 displays, and manipulates documents, media, and user interface. This enables developers and designers to create visually-stunning, differentiated user experiences that improve customer connection. When delivered, &amp;quot;Windows Presentation </itunes:summary>
      <link>http://channel9.msdn.com/coding4fun/articles/Designing-FreeCell-using-Expression-and-Visual-Studio-Toolsets</link>
      <pubDate>Tue, 31 Oct 2006 14:49:00 GMT</pubDate>
      <guid isPermaLink="false">http://channel9.msdn.com/coding4fun/articles/Designing-FreeCell-using-Expression-and-Visual-Studio-Toolsets</guid>      
      <dc:creator>Unni Ravindranathan</dc:creator>
      <itunes:author>Unni Ravindranathan</itunes:author>
      <slash:comments>9</slash:comments>
      <wfw:commentRss>http://channel9.msdn.com/coding4fun/articles/Designing-FreeCell-using-Expression-and-Visual-Studio-Toolsets/RSS</wfw:commentRss>
      <category>Gaming</category>
      <category>card and board games</category>
    </item>    
</channel>
</rss>