<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>John Russell Plant</title><link>http://blog.jrpsoftware.com/</link><description>Thoughts on C#, VB.NET, ASP.NET, gaming and whatever else comes to mind.</description><language>en-us</language><copyright>John Russell Plant</copyright><managingEditor>rplant@jrpsoftware.com</managingEditor><lastBuildDate>Tue, 13 May 2008 11:42:36 -0500</lastBuildDate><generator>newtelligence dasBlog 1.9.6264.0</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JohnRussellPlant" type="application/rss+xml" /><item><title>VS 2008 &amp;amp; .NET 3.5 SP1 Beta</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/289550241/PermaLink,guid,73c5d79d-40d0-4c76-9411-7e45c17c0946.aspx</link><category>Programming</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Tue, 13 May 2008 11:42:36 -0500</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,73c5d79d-40d0-4c76-9411-7e45c17c0946.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
Visual Studio 2008 and the .NET Framework 3.5 Service Pack 1 is now in beta and available
for download from <a href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx">MSDN</a>.
Make sure you don't install it on your development machine until you've tested your
setup in a virtual environment. 
</p>
        <p>
 
</p>
        <p>
Here is the feature set copied from Microsoft's website:
</p>
        <blockquote>
          <h5>Visual Studio 2008 Service Pack 1 includes:
</h5>
          <ul>
            <li>
Improved designers for building WPF applications 
</li>
            <li>
Full support for SQL Server 2008 
</li>
            <li>
The introduction of the ADO.NET Entity Designer 
</li>
            <li>
Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007
style 'Ribbon') 
</li>
            <li>
Improvements to Team Foundation Server to respond to customer feedback on version
control usability and performance, improved e-mail integration with work item tracking
and full support for hosting on SQL Server 2008 
</li>
            <li>
Improvements for Web development including richer JavaScript support, enhanced AJAX
and data tools, and Web site deployment</li>
          </ul>
          <h5>The .NET Framework 3.5 Service Pack 1 includes:
</h5>
          <ul>
            <li>
Performance increases between 20-45% for WPF-based applications - without having to
change any code 
</li>
            <li>
WCF improvements that give developers more control over the way they access data and
services 
</li>
            <li>
Streamlined installation experience for client applications 
</li>
            <li>
Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET
Data Services and support for SQL Server 2008's new features.</li>
          </ul>
          <h4>Additional Details
</h4>
          <p>
In addition, Service Pack 1 for the .NET Framework and Visual Studio 2008 includes
a number of new features: 
</p>
          <ul>
            <li>
Windows Presentation Foundation (WPF) and Visual Designer Changes 
</li>
            <li>
.NET Framework 3.5 Client Profile 
</li>
            <li>
New ADO.NET Data Features 
</li>
            <li>
Team Foundation Server Improvements</li>
          </ul>
          <h5>Windows Presentation Foundation (WPF) and Visual Designer Changes
</h5>
          <ul>
            <li>
Cold startup performance improvement ranging between 20-45% depending on application
size without needing to modify any code. 
</li>
            <li>
Additional WPF features for text, graphics, and media to deliver better performance.
For example, effects like DropShadow and Blur were implemented using software rendering;
with Service Pack 1 these are now implemented using hardware acceleration. Other examples
include: 
<ul><li>
Text, especially when used in Visual and DrawingBrush, is substantially faster. 
</li><li>
Data scalability improvements - Container Recycling, TreeView virtualization, and
more to enable richer data editing support 
</li><li>
Media performance improvements 
</li><li>
A much improved WriteableBitmap that enables real-time bitmap updates from a software
surface</li></ul></li>
            <li>
Visual Studio 2008 introduced a brand new designer for WPF applications. Since Visual
Studio 2008 released many additional features have become available for inclusion
in the designers. These include event tab support within the property grid for control
events, toolbox support within source mode, and a variety of other common asks and
improvements.</li>
          </ul>
          <h5>Windows Communication Foundation (WCF) and Workflow Foundation (WF) Changes
</h5>
          <ul>
            <li>
New Hosting Wizard for WCF Service projects. 
</li>
            <li>
Enhancements in Test Client such as support for RM Sessions, Message Contract and
Nullable&lt;T&gt; types enables testing of broader set of WCF-based services. 
</li>
            <li>
Expanding reach of DataContract Serializer by relaxing the need of having [DataContract]/
[DataMember] on types and by supporting an interoperable mechanism for dealing with
object references. 
</li>
            <li>
Improved Partial Trust Debugging Experience with support for Event Log. 
</li>
            <li>
Support for ADO.NET Entity Framework entities in WCF contracts. 
</li>
            <li>
Improvements in writing REST based services ranging from easily supporting ServiceDocuments
publication and consumption to providing greater control and usability of UriTemplate. 
</li>
            <li>
Significant performance improvements on large workflow-based projects in Visual Studio. 
</li>
            <li>
Considerable scalability increases for hosted WCF services in IIS7-integrated mode.</li>
          </ul>
        </blockquote>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=73c5d79d-40d0-4c76-9411-7e45c17c0946"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=D9FLuD"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=D9FLuD" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=pbrgcH"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=pbrgcH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=pZs86H"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=pZs86H" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=DoqXIh"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=DoqXIh" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=7oVysH"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=7oVysH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=2S1kzh"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=2S1kzh" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/289550241" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
Visual Studio 2008 and the .NET Framework 3.5 Service Pack 1 is now in beta and available
for download from &lt;a href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx"&gt;MSDN&lt;/a&gt;.
Make sure you don't install it on your development machine until you've tested your
setup in a virtual environment. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Here is the feature set copied from Microsoft's website:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;h5&gt;Visual Studio 2008 Service Pack 1 includes:
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Improved designers for building WPF applications 
&lt;li&gt;
Full support for SQL Server 2008 
&lt;li&gt;
The introduction of the ADO.NET Entity Designer 
&lt;li&gt;
Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007
style 'Ribbon') 
&lt;li&gt;
Improvements to Team Foundation Server to respond to customer feedback on version
control usability and performance, improved e-mail integration with work item tracking
and full support for hosting on SQL Server 2008 
&lt;li&gt;
Improvements for Web development including richer JavaScript support, enhanced AJAX
and data tools, and Web site deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;The .NET Framework 3.5 Service Pack 1 includes:
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Performance increases between 20-45% for WPF-based applications - without having to
change any code 
&lt;li&gt;
WCF improvements that give developers more control over the way they access data and
services 
&lt;li&gt;
Streamlined installation experience for client applications 
&lt;li&gt;
Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET
Data Services and support for SQL Server 2008's new features.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Additional Details
&lt;/h4&gt;
&lt;p&gt;
In addition, Service Pack 1 for the .NET Framework and Visual Studio 2008 includes
a number of new features: 
&lt;ul&gt;
&lt;li&gt;
Windows Presentation Foundation (WPF) and Visual Designer Changes 
&lt;li&gt;
.NET Framework 3.5 Client Profile 
&lt;li&gt;
New ADO.NET Data Features 
&lt;li&gt;
Team Foundation Server Improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Windows Presentation Foundation (WPF) and Visual Designer Changes
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Cold startup performance improvement ranging between 20-45% depending on application
size without needing to modify any code. 
&lt;li&gt;
Additional WPF features for text, graphics, and media to deliver better performance.
For example, effects like DropShadow and Blur were implemented using software rendering;
with Service Pack 1 these are now implemented using hardware acceleration. Other examples
include: 
&lt;ul&gt;
&lt;li&gt;
Text, especially when used in Visual and DrawingBrush, is substantially faster. 
&lt;li&gt;
Data scalability improvements - Container Recycling, TreeView virtualization, and
more to enable richer data editing support 
&lt;li&gt;
Media performance improvements 
&lt;li&gt;
A much improved WriteableBitmap that enables real-time bitmap updates from a software
surface&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Visual Studio 2008 introduced a brand new designer for WPF applications. Since Visual
Studio 2008 released many additional features have become available for inclusion
in the designers. These include event tab support within the property grid for control
events, toolbox support within source mode, and a variety of other common asks and
improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Windows Communication Foundation (WCF) and Workflow Foundation (WF) Changes
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
New Hosting Wizard for WCF Service projects. 
&lt;li&gt;
Enhancements in Test Client such as support for RM Sessions, Message Contract and
Nullable&amp;lt;T&amp;gt; types enables testing of broader set of WCF-based services. 
&lt;li&gt;
Expanding reach of DataContract Serializer by relaxing the need of having [DataContract]/
[DataMember] on types and by supporting an interoperable mechanism for dealing with
object references. 
&lt;li&gt;
Improved Partial Trust Debugging Experience with support for Event Log. 
&lt;li&gt;
Support for ADO.NET Entity Framework entities in WCF contracts. 
&lt;li&gt;
Improvements in writing REST based services ranging from easily supporting ServiceDocuments
publication and consumption to providing greater control and usability of UriTemplate. 
&lt;li&gt;
Significant performance improvements on large workflow-based projects in Visual Studio. 
&lt;li&gt;
Considerable scalability increases for hosted WCF services in IIS7-integrated mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=73c5d79d-40d0-4c76-9411-7e45c17c0946" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=73c5d79d-40d0-4c76-9411-7e45c17c0946</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,73c5d79d-40d0-4c76-9411-7e45c17c0946.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,73c5d79d-40d0-4c76-9411-7e45c17c0946.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=73c5d79d-40d0-4c76-9411-7e45c17c0946</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,73c5d79d-40d0-4c76-9411-7e45c17c0946.aspx</feedburner:origLink></item><item><title>Brighthouse Bandwidth</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/284686521/PermaLink,guid,98e080c1-88a4-4006-aa0e-909d43e55e8c.aspx</link><category>Technology</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Tue, 06 May 2008 09:40:36 -0500</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,98e080c1-88a4-4006-aa0e-909d43e55e8c.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
It looks like my local cable company is getting worried with <a href="http://www22.verizon.com/content/ConsumerFios">Verizon
FIOS</a> moving into the area. A lot of my co-workers are telling me about letters
they have been getting in the mail about speed increases, while others have just been
ninja upgraded. My connection went from 7/0.6 to 20/2, but I am hoping to get a little
more up speed.  Here are the results of my speed test. 
</p>
        <p>
          <a href="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/BrighthouseBandwidth_9621/rusty_speedtest_2.jpg">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="333" alt="rusty_speedtest" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/BrighthouseBandwidth_9621/rusty_speedtest_thumb.jpg" width="537" border="0"></img>
          </a>
        </p>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=98e080c1-88a4-4006-aa0e-909d43e55e8c"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=QoQhDU"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=QoQhDU" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=QH76iH"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=QH76iH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=ZHbfOH"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=ZHbfOH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=aIWSWh"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=aIWSWh" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=xLgdpH"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=xLgdpH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=v0TfNh"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=v0TfNh" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/284686521" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
It looks like my local cable company is getting worried with &lt;a href="http://www22.verizon.com/content/ConsumerFios"&gt;Verizon
FIOS&lt;/a&gt; moving into the area. A lot of my co-workers are telling me about letters
they have been getting in the mail about speed increases, while others have just been
ninja upgraded. My connection went from 7/0.6 to 20/2, but I am hoping to get a little
more up speed.&amp;nbsp; Here are the results of my speed test. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/BrighthouseBandwidth_9621/rusty_speedtest_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="333" alt="rusty_speedtest" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/BrighthouseBandwidth_9621/rusty_speedtest_thumb.jpg" width="537" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=98e080c1-88a4-4006-aa0e-909d43e55e8c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=98e080c1-88a4-4006-aa0e-909d43e55e8c</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,98e080c1-88a4-4006-aa0e-909d43e55e8c.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,98e080c1-88a4-4006-aa0e-909d43e55e8c.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=98e080c1-88a4-4006-aa0e-909d43e55e8c</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,98e080c1-88a4-4006-aa0e-909d43e55e8c.aspx</feedburner:origLink></item><item><title>Mac vs PC South Park Style</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/269176956/PermaLink,guid,08944e9f-d627-48d0-94b0-259ccbb2fbc3.aspx</link><category>Funny Stuff</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Sat, 12 Apr 2008 18:48:38 -0500</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,08944e9f-d627-48d0-94b0-259ccbb2fbc3.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
I ran across this a few weeks back and thought I would go ahead and post them here.
Funny Stuff.
</p>
        <object width="425" height="355">
          <param name="movie" value="http://www.youtube.com/v/Id_kGL3M5Cg&amp;hl=en"></param>
          <param name="wmode" value="transparent"></param>
          <embed src="http://www.youtube.com/v/Id_kGL3M5Cg&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355">
          </embed>
        </object>
        <p>
 
</p>
        <object width="425" height="355">
          <param name="movie" value="http://www.youtube.com/v/h4iyksLeo7w&amp;hl=en"></param>
          <param name="wmode" value="transparent"></param>
          <embed src="http://www.youtube.com/v/h4iyksLeo7w&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355">
          </embed>
        </object>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=08944e9f-d627-48d0-94b0-259ccbb2fbc3"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=sAzR7M"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=sAzR7M" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=6jA1L"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=6jA1L" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=gK4pL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=gK4pL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=iLHVl"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=iLHVl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=26iDL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=26iDL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=aHxql"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=aHxql" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/269176956" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
I ran across this a few weeks back and thought I would go ahead and post them here.
Funny Stuff.
&lt;/p&gt;
&lt;object width="425" height="355"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/Id_kGL3M5Cg&amp;amp;hl=en"&gt;&gt;
&lt;param name="wmode" value="transparent"&gt;&gt;&lt;embed src="http://www.youtube.com/v/Id_kGL3M5Cg&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;object width="425" height="355"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/h4iyksLeo7w&amp;amp;hl=en"&gt;&gt;
&lt;param name="wmode" value="transparent"&gt;&gt;&lt;embed src="http://www.youtube.com/v/h4iyksLeo7w&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;
&lt;/object&gt;&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=08944e9f-d627-48d0-94b0-259ccbb2fbc3" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=08944e9f-d627-48d0-94b0-259ccbb2fbc3</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,08944e9f-d627-48d0-94b0-259ccbb2fbc3.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,08944e9f-d627-48d0-94b0-259ccbb2fbc3.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=08944e9f-d627-48d0-94b0-259ccbb2fbc3</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,08944e9f-d627-48d0-94b0-259ccbb2fbc3.aspx</feedburner:origLink></item><item><title>Free Software for Students</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/238335178/PermaLink,guid,f3a281af-3f5f-42d9-b107-2d20eb41bc0c.aspx</link><category>Programming</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Wed, 20 Feb 2008 13:09:15 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,f3a281af-3f5f-42d9-b107-2d20eb41bc0c.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
Microsoft has <a href="http://microsoft.blognewschannel.com/archives/2008/02/19/microsoft-giving-away-free-developer-software-to-students/">announced
a new program called DreamSpark</a> to get over $2000.00 of free developer tools into
the hands of college students. It is a bit too late for me, but I still wouldn't mind
having that 12-month free membership to the XNA creators club. 
</p>
        <blockquote>
          <p>
The full list of free software: 
</p>
          <ul>
            <li>
Visual Studio 2005 Professional Edition 
</li>
            <li>
Visual Studio 2008 Professional Edition 
</li>
            <li>
XNA Game Studio 2.0 
</li>
            <li>
12-month free membership in the XNA Creators Club 
</li>
            <li>
Expression Studio, which includes Expression Web, Expression Blend, Expression Design
and Expression Media 
</li>
            <li>
SQL Server 2005 Developer Edition 
</li>
            <li>
Windows Server 2003, Standard Edition 
</li>
            <li>
SQL Server Developer Edition 
</li>
            <li>
Virtual PC 2007 
</li>
            <li>
Visual Basic 2005 
</li>
            <li>
Visual C++ 2005 
</li>
            <li>
Visual C# 2005 
</li>
            <li>
Visual J# 2005 
</li>
            <li>
Visual Web Developer 2005 
</li>
          </ul>
        </blockquote>
        <p>
Full information can be found at <a title="https://downloads.channel8.msdn.com/" href="https://downloads.channel8.msdn.com/">https://downloads.channel8.msdn.com/</a></p>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=f3a281af-3f5f-42d9-b107-2d20eb41bc0c"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=SvtNdP"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=SvtNdP" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=tFiThIE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=tFiThIE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=vPCPArE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=vPCPArE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=lUPv5Ue"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=lUPv5Ue" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=tA4PX9E"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=tA4PX9E" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=W587YOe"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=W587YOe" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/238335178" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
Microsoft has &lt;a href="http://microsoft.blognewschannel.com/archives/2008/02/19/microsoft-giving-away-free-developer-software-to-students/"&gt;announced
a new program called DreamSpark&lt;/a&gt; to get over $2000.00 of free developer tools into
the hands of college students. It is a bit too late for me, but I still wouldn't mind
having that 12-month free membership to the XNA creators club. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The full list of free software: 
&lt;ul&gt;
&lt;li&gt;
Visual Studio 2005 Professional Edition 
&lt;li&gt;
Visual Studio 2008 Professional Edition 
&lt;li&gt;
XNA Game Studio 2.0 
&lt;li&gt;
12-month free membership in the XNA Creators Club 
&lt;li&gt;
Expression Studio, which includes Expression Web, Expression Blend, Expression Design
and Expression Media 
&lt;li&gt;
SQL Server 2005 Developer Edition 
&lt;li&gt;
Windows Server 2003, Standard Edition 
&lt;li&gt;
SQL Server Developer Edition 
&lt;li&gt;
Virtual PC 2007 
&lt;li&gt;
Visual Basic 2005 
&lt;li&gt;
Visual C++ 2005 
&lt;li&gt;
Visual C# 2005 
&lt;li&gt;
Visual J# 2005 
&lt;li&gt;
Visual Web Developer 2005 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Full information can be found at &lt;a title="https://downloads.channel8.msdn.com/" href="https://downloads.channel8.msdn.com/"&gt;https://downloads.channel8.msdn.com/&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=f3a281af-3f5f-42d9-b107-2d20eb41bc0c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=f3a281af-3f5f-42d9-b107-2d20eb41bc0c</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,f3a281af-3f5f-42d9-b107-2d20eb41bc0c.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,f3a281af-3f5f-42d9-b107-2d20eb41bc0c.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f3a281af-3f5f-42d9-b107-2d20eb41bc0c</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,f3a281af-3f5f-42d9-b107-2d20eb41bc0c.aspx</feedburner:origLink></item><item><title>SQL Server 2008 Delayed</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/237750508/PermaLink,guid,87c839ee-27c2-42d7-ba06-392c47d7bd47.aspx</link><category>SQL</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Tue, 19 Feb 2008 13:54:36 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,87c839ee-27c2-42d7-ba06-392c47d7bd47.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
Wow, I thought I would be getting my SQL Sever 2008 at the up coming launch event,
but it looks as if I will be getting a release candidate instead.
</p>
        <p>
Here is the news:
</p>
        <blockquote>
          <p>
Microsoft Postpones SQL Server 2008 Release 
</p>
          <p>
Microsoft postponed the final release of SQL Server 2008 until the third quarter of
2008. The company had planned to release the product during the second quarter but
announced on a <a href="http://blogs.technet.com/dataplatforminsider/archive/2008/01/25/microsoft-sql-server-2008-roadmap-clarification.aspx">blog</a> dedicated
to SQL Server that it will now ship a release candidate for the new version in the
second quarter with the final release to manufacturing version expected in the third
quarter. The company also said that the new date still keeps the company on track
to ship the database software within the original goal of 24 to 36 months after SQL
Server 2005. 
</p>
          <p>
Microsoft said downloads of SQL Server Community Technology Preview (CTP) have reached
more than a 100,000 copies. The CTP works like a test or beta version of the product. 
</p>
          <p>
On the blog, Microsoft emphasized that SQL Server 2008 is a major release for the
company because it not only improves on the capabilities of the 2005 product, but
it also provides the foundation for Microsoft's business intelligence software. 
</p>
          <p>
The 2008 version also includes features like Resource Governor, Backup Compression,
Transparent Data Encryption, Enhanced Report Designer, FileStream Data Types (to manage
unstructured documents), Spatial Data Support, and Compatibility with Windows Vista
and Windows Server 2008. 
</p>
          <p>
According to Microsoft, SQL Server is now running data warehouses larger than 20 TB
in size.
</p>
        </blockquote>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=87c839ee-27c2-42d7-ba06-392c47d7bd47"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=1CYO8p"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=1CYO8p" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=zRd6JKE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=zRd6JKE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=2X86WQE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=2X86WQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=ofGJQne"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=ofGJQne" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=sGM7SiE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=sGM7SiE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=eljJb2e"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=eljJb2e" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/237750508" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
Wow, I thought I would be getting my SQL Sever 2008 at the up coming launch event,
but it looks as if I will be getting a release candidate instead.
&lt;/p&gt;
&lt;p&gt;
Here is the news:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Microsoft Postpones SQL Server 2008 Release 
&lt;p&gt;
Microsoft postponed the final release of SQL Server 2008 until the third quarter of
2008. The company had planned to release the product during the second quarter but
announced on a &lt;a href="http://blogs.technet.com/dataplatforminsider/archive/2008/01/25/microsoft-sql-server-2008-roadmap-clarification.aspx"&gt;blog&lt;/a&gt; dedicated
to SQL Server that it will now ship a release candidate for the new version in the
second quarter with the final release to manufacturing version expected in the third
quarter. The company also said that the new date still keeps the company on track
to ship the database software within the original goal of 24 to 36 months after SQL
Server 2005. 
&lt;p&gt;
Microsoft said downloads of SQL Server Community Technology Preview (CTP) have reached
more than a 100,000 copies. The CTP works like a test or beta version of the product. 
&lt;p&gt;
On the blog, Microsoft emphasized that SQL Server 2008 is a major release for the
company because it not only improves on the capabilities of the 2005 product, but
it also provides the foundation for Microsoft's business intelligence software. 
&lt;p&gt;
The 2008 version also includes features like Resource Governor, Backup Compression,
Transparent Data Encryption, Enhanced Report Designer, FileStream Data Types (to manage
unstructured documents), Spatial Data Support, and Compatibility with Windows Vista
and Windows Server 2008. 
&lt;p&gt;
According to Microsoft, SQL Server is now running data warehouses larger than 20 TB
in size.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=87c839ee-27c2-42d7-ba06-392c47d7bd47" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=87c839ee-27c2-42d7-ba06-392c47d7bd47</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,87c839ee-27c2-42d7-ba06-392c47d7bd47.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,87c839ee-27c2-42d7-ba06-392c47d7bd47.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=87c839ee-27c2-42d7-ba06-392c47d7bd47</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,87c839ee-27c2-42d7-ba06-392c47d7bd47.aspx</feedburner:origLink></item><item><title>Vista SP1 RTM downloadable for MSDN subscribers</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/235572581/PermaLink,guid,e7eb95a8-e126-46be-9fdf-b603e3fe1838.aspx</link><category>Technology</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Fri, 15 Feb 2008 08:16:27 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,e7eb95a8-e126-46be-9fdf-b603e3fe1838.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
It has been little over a year since the release of Vista and now the first set of
improvements are hitting the streets. Service Pack 1 is now available to MSDN subscribers.
As I understand it, Service Pack 1 is mainly focused on addressing specific reliability
issues, performance and supporting additional hardware and not being used for new
features.   
</p>
        <p>
Here are some things to know about SP1 from Microsoft TechNet:
</p>
        <ul>
          <li>
If you have a prior version of the SP1 beta installed, you must uninstall it prior
to installing the final version. Use the Control Panel applet "Programs and Features"
and select "View installed updates" from the top left of the task pane. Under Windows,
look for "Service Pack for Windows (KB936330). 
</li>
          <li>
Some TechNet Plus subscribers may encounter an issue with a small set of hardware
devices that may not function properly after updating a Windows Vista PC to SP1.  
This is an issue with the way the device drivers were re-installed during the SP1
update process, not with the drivers themselves—these drivers worked on Windows Vista
RTM and they work on Windows Vista SP1.  This problem is typically corrected
by simply uninstalling and reinstalling the driver. 
</li>
          <li>
We are working with the manufacturers of these devices to get the drivers and their
install programs updated, and also on other solutions we can use to ensure a smooth
customer experience when updating to SP1 over Windows Update. For new PCs provisioned
with Windows Vista SP1, this is not an issue.</li>
        </ul>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=e7eb95a8-e126-46be-9fdf-b603e3fe1838"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=gSkhjO"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=gSkhjO" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=SCYLL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=SCYLL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=qwnBL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=qwnBL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=5GrSl"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=5GrSl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=PNPNL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=PNPNL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=oi8pl"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=oi8pl" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/235572581" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
It has been little over a year since the release of Vista and now the first set of
improvements are hitting the streets. Service Pack 1 is now available to MSDN subscribers.
As I understand it, Service Pack 1 is mainly focused on addressing specific reliability
issues, performance and supporting additional hardware and not being used for new
features.&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Here are some things to know about SP1 from Microsoft TechNet:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
If you have a prior version of the SP1 beta installed, you must uninstall it prior
to installing the final version. Use the Control Panel applet "Programs and Features"
and select "View installed updates" from the top left of the task pane. Under Windows,
look for "Service Pack for Windows (KB936330). 
&lt;li&gt;
Some TechNet Plus subscribers may encounter an issue with a small set of hardware
devices that may not function properly after updating a Windows Vista PC to SP1.&amp;nbsp;&amp;nbsp;
This is an issue with the way the device drivers were re-installed during the SP1
update process, not with the drivers themselves—these drivers worked on Windows Vista
RTM and they work on Windows Vista SP1.&amp;nbsp; This problem is typically corrected
by simply uninstalling and reinstalling the driver. 
&lt;li&gt;
We are working with the manufacturers of these devices to get the drivers and their
install programs updated, and also on other solutions we can use to ensure a smooth
customer experience when updating to SP1 over Windows Update. For new PCs provisioned
with Windows Vista SP1, this is not an issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=e7eb95a8-e126-46be-9fdf-b603e3fe1838" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=e7eb95a8-e126-46be-9fdf-b603e3fe1838</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,e7eb95a8-e126-46be-9fdf-b603e3fe1838.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,e7eb95a8-e126-46be-9fdf-b603e3fe1838.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e7eb95a8-e126-46be-9fdf-b603e3fe1838</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,e7eb95a8-e126-46be-9fdf-b603e3fe1838.aspx</feedburner:origLink></item><item><title>VS 2008 Team System Briefing</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/234311550/PermaLink,guid,9cafbef2-da34-4d3b-984c-6ba412a452ee.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Wed, 13 Feb 2008 05:46:03 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,9cafbef2-da34-4d3b-984c-6ba412a452ee.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
Here is an upcoming event for you in the Tampa Bay, FL area. See you there.
</p>
        <blockquote>
          <p>
Thursday, March 13, 2008 9:00 AM - Thursday, March 13, 2008 3:00 PM Eastern Time (US
&amp; Canada)<br>
Welcome Time: 8:30 AM 
</p>
          <p>
Microsoft Office - Tampa, FL 
</p>
          <p>
3000 Bayport Dr<br>
Suite 480 Tampa Florida 33607-8402<br>
United States
</p>
          <div class="wlWriterSmartContent" id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:f63c6eab-4205-43f8-84c6-09c3f0f2da9c" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">
            <a id="map-1d4c70e5-7c25-4587-87d7-e2ab22995e6a" title="Click to view this map on Live.com" href="http://maps.live.com/default.aspx?v=2&amp;cp=nntyxf83msph&amp;lvl=1&amp;style=o&amp;scene=9531506&amp;sp=aN.27.96662_-82.55132_Microsoft%2520Offices_&amp;mkt=en-US&amp;FORM=LLWR" alt="Click to view this map on Live.com">
              <img height="247" alt="Map image" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/VS2008TeamSystemBriefing_5F18/map-0b8869bdc5fa.jpg" width="327"></img>
            </a>
          </div>
          <div class="wlWriterSmartContent" id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:20e6400f-6c92-4e6f-83ca-3816f959f4aa" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">
            <a id="map-4d9d1182-857d-426d-9049-0f6ab892aa76" title="Click to view this map on Live.com" href="http://maps.live.com/default.aspx?v=2&amp;cp=27.96442~-82.55157&amp;lvl=15&amp;style=r&amp;sp=aN.27.96681_-82.5508_Microsoft_&amp;mkt=en-US&amp;FORM=LLWR" alt="Click to view this map on Live.com">
              <img height="247" alt="Map image" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/VS2008TeamSystemBriefing_5F18/map-8db200d5b106.jpg" width="327"></img>
            </a>
          </div>
          <p>
 
</p>
          <h5>Event Overview
</h5>
          <p>
            <b>Visual Studio Team System 2008 Briefing</b>
          </p>
          <p>
Come join your technology peers to learn about current and future .NET technologies.
The focus of this 1 day seminar will be around Microsoft Visual Studio 2008 Team System.
You will be provided with an overview of each role and the session will wrap up with
a preview of the next version of Team System (codenamed “Rosario”) 
</p>
          <p>
            <b>
            </b>
          </p>
          <p>
            <strong>AGENDA:</strong>
          </p>
        </blockquote>
        <ul>
          <ul>
            <li>
9:00pm Intro Visual Studio Team System/TFS Business Value 
</li>
            <li>
9:30am VSTS Project Management and Collaboration Features 
</li>
            <li>
10:15am Break 
</li>
            <li>
10:30am VSTS Tester Features 
</li>
            <li>
11:15am Version Control and Build Management 
</li>
            <li>
12:00pm Lunch (Provided) 
</li>
            <li>
12:30pm VSTS Architect/Developer Professional Features 
</li>
            <li>
2:30pm Team System Futures (Rosario+) 
</li>
            <li>
3:00pm Closing /Q &amp; A 
</li>
            <li>
This session will be delivered by Microsoft’s valued partner:  NOTION SOLUTIONS</li>
          </ul>
        </ul>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=9cafbef2-da34-4d3b-984c-6ba412a452ee"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=FULrfG"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=FULrfG" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=7BTnL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=7BTnL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=x6meL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=x6meL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=MHLul"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=MHLul" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=xY5qL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=xY5qL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=VMkYl"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=VMkYl" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/234311550" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
Here is an upcoming event for you in the Tampa Bay, FL area. See you there.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Thursday, March 13, 2008 9:00 AM - Thursday, March 13, 2008 3:00 PM Eastern Time (US
&amp;amp; Canada)&lt;br&gt;
Welcome Time: 8:30 AM 
&lt;p&gt;
Microsoft Office - Tampa, FL 
&lt;p&gt;
3000 Bayport Dr&lt;br&gt;
Suite 480 Tampa Florida 33607-8402&lt;br&gt;
United States
&lt;/p&gt;
&lt;div class=wlWriterSmartContent id=scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:f63c6eab-4205-43f8-84c6-09c3f0f2da9c style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;a id=map-1d4c70e5-7c25-4587-87d7-e2ab22995e6a title="Click to view this map on Live.com" href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=nntyxf83msph&amp;amp;lvl=1&amp;amp;style=o&amp;amp;scene=9531506&amp;amp;sp=aN.27.96662_-82.55132_Microsoft%2520Offices_&amp;amp;mkt=en-US&amp;amp;FORM=LLWR" alt="Click to view this map on Live.com"&gt;&lt;img height=247 alt="Map image" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/VS2008TeamSystemBriefing_5F18/map-0b8869bdc5fa.jpg" width=327&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=wlWriterSmartContent id=scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:20e6400f-6c92-4e6f-83ca-3816f959f4aa style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;a id=map-4d9d1182-857d-426d-9049-0f6ab892aa76 title="Click to view this map on Live.com" href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=27.96442~-82.55157&amp;amp;lvl=15&amp;amp;style=r&amp;amp;sp=aN.27.96681_-82.5508_Microsoft_&amp;amp;mkt=en-US&amp;amp;FORM=LLWR" alt="Click to view this map on Live.com"&gt;&lt;img height=247 alt="Map image" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/VS2008TeamSystemBriefing_5F18/map-8db200d5b106.jpg" width=327&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h5&gt;Event Overview
&lt;/h5&gt;
&lt;p&gt;
&lt;b&gt;Visual Studio Team System 2008 Briefing&lt;/b&gt; 
&lt;p&gt;
Come join your technology peers to learn about current and future .NET technologies.
The focus of this 1 day seminar will be around Microsoft Visual Studio 2008 Team System.
You will be provided with an overview of each role and the session will wrap up with
a preview of the next version of Team System (codenamed “Rosario”) 
&lt;p&gt;
&lt;b&gt;&lt;/b&gt; 
&lt;p&gt;
&lt;strong&gt;AGENDA:&lt;/strong&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
9:00pm Intro Visual Studio Team System/TFS Business Value 
&lt;li&gt;
9:30am VSTS Project Management and Collaboration Features 
&lt;li&gt;
10:15am Break 
&lt;li&gt;
10:30am VSTS Tester Features 
&lt;li&gt;
11:15am Version Control and Build Management 
&lt;li&gt;
12:00pm Lunch (Provided) 
&lt;li&gt;
12:30pm VSTS Architect/Developer Professional Features 
&lt;li&gt;
2:30pm Team System Futures (Rosario+) 
&lt;li&gt;
3:00pm Closing /Q &amp;amp; A 
&lt;li&gt;
This session will be delivered by Microsoft’s valued partner:&amp;nbsp; NOTION SOLUTIONS&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=9cafbef2-da34-4d3b-984c-6ba412a452ee" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=9cafbef2-da34-4d3b-984c-6ba412a452ee</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,9cafbef2-da34-4d3b-984c-6ba412a452ee.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,9cafbef2-da34-4d3b-984c-6ba412a452ee.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9cafbef2-da34-4d3b-984c-6ba412a452ee</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,9cafbef2-da34-4d3b-984c-6ba412a452ee.aspx</feedburner:origLink></item><item><title>Object Initializers</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/233932851/PermaLink,guid,cc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx</link><category>C Sharp</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Tue, 12 Feb 2008 14:05:46 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,cc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
A new feature of Visual Studio 2008 and it's C# 3.0 is Object Initalizers.  This
compiler feature can be used to set the values of properties without the need to create
a special constructors. Even though you must have 2008 to use this feature, you don't
have to target the 3.0 or 3.5 framework as it works just fine with the 2.0 framework. 
</p>
        <p>
The following demonstrates an Object Initalizers' use: 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span> FooClass BandMember
= <span class="kwrd">new</span> FooClass { FirstName = <span class="str">"John"</span> ,
LastName = <span class="str">"Plant"</span>, Instrument = <span class="str">"Computer"</span> };</pre>
        </div>
        <style type="text/css">.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; }
</style>
        <p>
Notice the syntax is very similar to an array's syntax and as long as the variable
is strongly typed, you can initialize the properties in any order.  You can also
initalize any collection that implements ICollection&lt;T&gt; in the same manner.  
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">using</span> System;</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">using</span> System.Collections.Generic;</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span> </pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">namespace</span> ObjectInitializer</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>{</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">class</span> FooClass</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span> {</pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> LastName
{ get; set; }</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> FirstName
{ get; set; }</pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> Instrument
{ get; set; }</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span> }</pre>
          <pre>
            <span class="lnum"> 12: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 13: </span>
            <span class="kwrd">class</span> Program</pre>
          <pre>
            <span class="lnum"> 14: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 15: </span>
            <span class="kwrd">static</span>
            <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args)</pre>
          <pre>
            <span class="lnum"> 16: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 17: </span> FooClass BandMember = <span class="kwrd">new</span> FooClass
{ FirstName = <span class="str">"John"</span> , </pre>
          <pre>
            <span class="lnum"> 18: </span> LastName = <span class="str">"Plant"</span>, </pre>
          <pre class="alt">
            <span class="lnum"> 19: </span> Instrument = <span class="str">"Computer"</span> };</pre>
          <pre>
            <span class="lnum"> 20: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 21: </span> List&lt;FooClass&gt; FooFighters
= <span class="kwrd">new</span> List&lt;FooClass&gt;</pre>
          <pre>
            <span class="lnum"> 22: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 23: </span>
            <span class="kwrd">new</span> FooClass
{ FirstName = <span class="str">"Dave"</span>, LastName = <span class="str">"Grohl"</span>,
Instrument = <span class="str">"Vocals"</span> },</pre>
          <pre>
            <span class="lnum"> 24: </span>
            <span class="kwrd">new</span> FooClass { FirstName
= <span class="str">"Nate"</span>, LastName = <span class="str">"Mendel"</span>, Instrument
= <span class="str">"Bass"</span> },</pre>
          <pre class="alt">
            <span class="lnum"> 25: </span>
            <span class="kwrd">new</span> FooClass
{ FirstName = <span class="str">"Taylor"</span>, LastName = <span class="str">"Hawkins"</span> ,
Instrument= <span class="str">"Drums"</span> },</pre>
          <pre>
            <span class="lnum"> 26: </span>
            <span class="kwrd">new</span> FooClass { LastName
= <span class="str">"Shiflett"</span>, FirstName = <span class="str">"Chris"</span>,
Instrument = <span class="str">"Guitar"</span> },</pre>
          <pre class="alt">
            <span class="lnum"> 27: </span> BandMember</pre>
          <pre>
            <span class="lnum"> 28: </span> };</pre>
          <pre class="alt">
            <span class="lnum"> 29: </span> </pre>
          <pre>
            <span class="lnum"> 30: </span>
            <span class="kwrd">foreach</span> (FooClass p <span class="kwrd">in</span> FooFighters
)</pre>
          <pre class="alt">
            <span class="lnum"> 31: </span> {</pre>
          <pre>
            <span class="lnum"> 32: </span> Console.WriteLine(<span class="str">"{0},{1}
on {2}"</span>, p.LastName, p.FirstName, p.Instrument); </pre>
          <pre class="alt">
            <span class="lnum"> 33: </span> }</pre>
          <pre>
            <span class="lnum"> 34: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 35: </span> Console.ReadLine();</pre>
          <pre>
            <span class="lnum"> 36: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 37: </span> }</pre>
          <pre>
            <span class="lnum"> 38: </span>}</pre>
        </div>
        <p>
This new feature may not be a world changer, but combined with automatic properties
can be a time saver and will help you produce cleaner code. 
</p>
        <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2ccc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx">
          <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2ccc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx" border="0"></img>
        </a>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=cc29ea35-c3e9-461c-99d0-7bf54fca1418"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=KuUYfi"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=KuUYfi" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=tEaEKnE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=tEaEKnE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=Cj4DINE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=Cj4DINE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=s2kUtEe"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=s2kUtEe" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=ZbU9bjE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=ZbU9bjE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=tGVKaqe"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=tGVKaqe" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/233932851" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
A new feature of Visual Studio 2008 and it's C# 3.0 is Object Initalizers.&amp;nbsp; This
compiler feature can be used to set the values of properties without the need to create
a special constructors. Even though you must have 2008 to use this feature, you don't
have to target the 3.0 or 3.5 framework as it works just fine with the 2.0 framework. 
&lt;/p&gt;
&lt;p&gt;
The following demonstrates an Object Initalizers' use: 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt; FooClass BandMember
= &lt;span class=kwrd&gt;new&lt;/span&gt; FooClass { FirstName = &lt;span class=str&gt;"John"&lt;/span&gt; ,
LastName = &lt;span class=str&gt;"Plant"&lt;/span&gt;, Instrument = &lt;span class=str&gt;"Computer"&lt;/span&gt; };&lt;/pre&gt;
&lt;/div&gt;
&lt;style type=text/css&gt;.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; }
&lt;/style&gt;
&lt;p&gt;
Notice the syntax is very similar to an array's syntax and as long as the variable
is strongly typed, you can initialize the properties in any order.&amp;nbsp; You can also
initalize any collection that implements ICollection&amp;lt;T&amp;gt; in the same manner.&amp;nbsp; 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt;&lt;span class=kwrd&gt;namespace&lt;/span&gt; ObjectInitializer&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; FooClass&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; LastName
{ get; set; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; FirstName
{ get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; Instrument
{ get; set; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; Program&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt; &lt;span class=kwrd&gt;static&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; Main(&lt;span class=kwrd&gt;string&lt;/span&gt;[]
args)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt; FooClass BandMember = &lt;span class=kwrd&gt;new&lt;/span&gt; FooClass
{ FirstName = &lt;span class=str&gt;"John"&lt;/span&gt; , &lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 18: &lt;/span&gt; LastName = &lt;span class=str&gt;"Plant"&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 19: &lt;/span&gt; Instrument = &lt;span class=str&gt;"Computer"&lt;/span&gt; };&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 20: &lt;/span&gt; &lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 21: &lt;/span&gt; List&amp;lt;FooClass&amp;gt; FooFighters = &lt;span class=kwrd&gt;new&lt;/span&gt; List&amp;lt;FooClass&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 22: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 23: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; FooClass
{ FirstName = &lt;span class=str&gt;"Dave"&lt;/span&gt;, LastName = &lt;span class=str&gt;"Grohl"&lt;/span&gt;,
Instrument = &lt;span class=str&gt;"Vocals"&lt;/span&gt; },&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 24: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; FooClass { FirstName
= &lt;span class=str&gt;"Nate"&lt;/span&gt;, LastName = &lt;span class=str&gt;"Mendel"&lt;/span&gt;, Instrument
= &lt;span class=str&gt;"Bass"&lt;/span&gt; },&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 25: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; FooClass
{ FirstName = &lt;span class=str&gt;"Taylor"&lt;/span&gt;, LastName = &lt;span class=str&gt;"Hawkins"&lt;/span&gt; ,
Instrument= &lt;span class=str&gt;"Drums"&lt;/span&gt; },&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 26: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; FooClass { LastName
= &lt;span class=str&gt;"Shiflett"&lt;/span&gt;, FirstName = &lt;span class=str&gt;"Chris"&lt;/span&gt;, Instrument
= &lt;span class=str&gt;"Guitar"&lt;/span&gt; },&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 27: &lt;/span&gt; BandMember&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 28: &lt;/span&gt; };&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 29: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 30: &lt;/span&gt; &lt;span class=kwrd&gt;foreach&lt;/span&gt; (FooClass p &lt;span class=kwrd&gt;in&lt;/span&gt; FooFighters
)&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 31: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 32: &lt;/span&gt; Console.WriteLine(&lt;span class=str&gt;"{0},{1} on {2}"&lt;/span&gt;,
p.LastName, p.FirstName, p.Instrument); &lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 33: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 34: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 35: &lt;/span&gt; Console.ReadLine();&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 36: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 37: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 38: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
This new feature may not be a world changer, but combined with automatic properties
can be a time saver and will help you produce cleaner code. 
&lt;/p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2ccc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2ccc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx" border=0&gt;&lt;/a&gt;&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=cc29ea35-c3e9-461c-99d0-7bf54fca1418" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=cc29ea35-c3e9-461c-99d0-7bf54fca1418</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,cc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,cc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=cc29ea35-c3e9-461c-99d0-7bf54fca1418</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,cc29ea35-c3e9-461c-99d0-7bf54fca1418.aspx</feedburner:origLink></item><item><title>dnrTV Aggregator Part 2 - LINQ to XML</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/232274754/PermaLink,guid,91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx</link><category>C Sharp;LINQ;LINQ to XML</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Sat, 09 Feb 2008 12:27:27 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p align="justify">
          <a href="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/dnrTVAggregatorPart2LINQtoXML_BD33/dnrtv_2_2.jpg">
            <img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px 5px 5px 0px; BORDER-RIGHT-WIDTH: 0px" height="85" alt="dnrtv_2" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/dnrTVAggregatorPart2LINQtoXML_BD33/dnrtv_2_thumb.jpg" width="234" align="left" border="0"></img>
          </a> In <a href="http://blog.jrpsoftware.com/PermaLink,guid,d76adccb-555f-4ce8-a152-f1c7d54c1f2a.aspx">Part
1</a> of this series I went over the creation of a Windows Service and it's remote
client. For this installment, I will be covering the use of "LINQ to XML" to gather
the feed, and the saving and loading of the XML configuration files. I'll also show
some code to download and unzip the videos using <a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx">SharpZipLib</a> from <a href="http://www.icsharpcode.net/">ic#code</a>. 
</p>
        <p align="justify">
The first bit of code we are going to need is a class to hold our feed data. We will
be using a List&lt;dnrFeedList&gt; to query against.  Here the code for the class.
Nothing strange here, just a datetime field and four strings. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">class</span> dnrFeedList</pre>
          <pre>
            <span class="lnum"> 2: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> Title
{ get; set; }</pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">public</span> DateTime Published
{ get; set; }</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> Enclosure
{ get; set; }</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> Description
{ get; set; }</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">string</span> GUID
{ get; set; }</pre>
          <pre>
            <span class="lnum"> 8: </span> }</pre>
        </div>
        <p>
          <style type="text/css">.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; }
</style>
        </p>
        <p align="justify">
Let's make a few changes to our service. First we need to change our services' timer
elapsed event. We want to download the feed list and loop through each show we have
not already downloaded. After each download we want to update our XML file in case
the program is shutdown. After all shows are downloaded for that day, we will update
the last checked date. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">void</span> PollTimer_Elapsed(<span class="kwrd">object</span> sender,
ElapsedEventArgs e)</pre>
          <pre>
            <span class="lnum"> 2: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>
            <span class="kwrd">if</span> (Feed.LastCheckDate
&lt; DateTime.Now)</pre>
          <pre>
            <span class="lnum"> 4: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">foreach</span> (dnrFeedList
f <span class="kwrd">in</span> Feed.GetList())</pre>
          <pre>
            <span class="lnum"> 6: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span> Feed.DownloadFile(f);</pre>
          <pre>
            <span class="lnum"> 8: </span> Feed.SaveXML();</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> }</pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="rem">// Add a day to our last check
date. </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 11: </span> Feed.LastCheckDate = Feed.LastCheckDate.AddDays(1);</pre>
          <pre>
            <span class="lnum"> 12: </span> Feed.SaveXML();</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> }</pre>
          <pre>
            <span class="lnum"> 14: </span> }</pre>
        </div>
        <style type="text/css">.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; }
</style>
        <p align="justify">
Now we want to pull down the feed from <a href="http://feeds.feedburner.com/DnrtvZip">DNRTV</a>.
The following LINQ to XML code has been posted online several times over on blogs
such as <a href="http://weblogs.asp.net/scottgu/">Scott Guthrie</a>. The only addition
I made was to the where clause to filter out the videos that have already been downloaded.
We will it in a generic called Episode List. This list is a List&lt;String&gt; that
contains the shows GUID.  After each successful downloaded, we add that shows
GUID to this list. 
</p>
        <p align="justify">
Also needed was a <a href="http://www.thescripts.com/forum/post830789-3.html">DateTimeZone</a> class
to parse in and correct the time zone issue ( ex. "-0500" instead of "EST" ). 
I won't post that code here, but it will be included in the final download. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">public</span> List&lt;dnrFeedList&gt;
GetList()</pre>
          <pre>
            <span class="lnum"> 2: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span> </pre>
          <pre>
            <span class="lnum"> 4: </span> XDocument x = XDocument.Load(URL);</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span> var feeds = from feed <span class="kwrd">in</span> x.Descendants(<span class="str">"item"</span>)</pre>
          <pre>
            <span class="lnum"> 6: </span> orderby DateTimeZone.ParseDateTime(feed.Element(<span class="str">"pubDate"</span>).Value.ToString())
descending</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">where</span> EpisodeList.Contains(feed.Element(<span class="str">"guid"</span>).Value)
== <span class="kwrd">false</span></pre>
          <pre>
            <span class="lnum"> 8: </span> select <span class="kwrd">new</span> dnrFeedList</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> {</pre>
          <pre>
            <span class="lnum"> 10: </span> Title = feed.Element(<span class="str">"title"</span>).Value.ToString(),</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span> Published = DateTimeZone.ParseDateTime(feed.Element(<span class="str">"pubDate"</span>).Value.ToString()),</pre>
          <pre>
            <span class="lnum"> 12: </span> Enclosure = feed.Element(<span class="str">"enclosure"</span>).Attribute(<span class="str">"url"</span>).Value.ToString(),</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> Description = feed.Element(<span class="str">"description"</span>).Value.ToString(),</pre>
          <pre>
            <span class="lnum"> 14: </span> GUID = feed.Element(<span class="str">"guid"</span>).Value</pre>
          <pre class="alt">
            <span class="lnum"> 15: </span> };</pre>
          <pre>
            <span class="lnum"> 16: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 17: </span>
            <span class="kwrd">return</span> feeds.ToList();</pre>
          <pre>
            <span class="lnum"> 18: </span> }</pre>
        </div>
        <style type="text/css">.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; }
</style>
        <p>
Now that we have our feed list, we loop through each show and do our download using
a generic TEMP.ZIP filename for each download. Afterward, we unzip the video into
the video directory, add the GUID to our Episode List  and delete the TEMP.ZIP. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">void</span> DownloadFile(dnrFeedList
uri)</pre>
          <pre>
            <span class="lnum"> 2: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>
            <span class="rem">// Download ZIP
file with TEMP.ZIP as the filename. </span>
          </pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="rem">// It will be deleted after
it is unzipped. </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">string</span> filename
= <span class="kwrd">this</span>.VideoDirectory + <span class="str">@"TEMP.ZIP"</span>;</pre>
          <pre>
            <span class="lnum"> 6: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 7: </span> WebClient web = <span class="kwrd">new</span> WebClient();</pre>
          <pre>
            <span class="lnum"> 8: </span> web.DownloadFile(uri.Enclosure.ToString(), filename);</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> </pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="kwrd">const</span>
            <span class="kwrd">int</span> bufferSize
= 4096;</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span>
            <span class="kwrd">byte</span>[]
buffer = <span class="kwrd">new</span><span class="kwrd">byte</span>[bufferSize];</pre>
          <pre>
            <span class="lnum"> 12: </span>
            <span class="kwrd">int</span> count = 0;</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> </pre>
          <pre>
            <span class="lnum"> 14: </span>
            <span class="rem">// Here we are using the SharpZipLib
from ic#code.</span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 15: </span> ZipInputStream s = <span class="kwrd">new</span> ZipInputStream(File.OpenRead(filename));</pre>
          <pre>
            <span class="lnum"> 16: </span> ZipEntry f;</pre>
          <pre class="alt">
            <span class="lnum"> 17: </span> </pre>
          <pre>
            <span class="lnum"> 18: </span>
            <span class="kwrd">while</span> ((f = s.GetNextEntry())
!= <span class="kwrd">null</span>)</pre>
          <pre class="alt">
            <span class="lnum"> 19: </span> {</pre>
          <pre>
            <span class="lnum"> 20: </span>
            <span class="kwrd">string</span> out_filename
= <span class="kwrd">this</span>.VideoDirectory + <span class="kwrd">string</span>.Format(<span class="str">"{0}"</span>,
f.Name);</pre>
          <pre class="alt">
            <span class="lnum"> 21: </span>
            <span class="kwrd">if</span> (!File.Exists(out_filename))</pre>
          <pre>
            <span class="lnum"> 22: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 23: </span> FileStream sw = <span class="kwrd">new</span> FileStream(out_filename,
FileMode.Create, FileAccess.Write, FileShare.None);</pre>
          <pre>
            <span class="lnum"> 24: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 25: </span>
            <span class="kwrd">while</span> (<span class="kwrd">true</span>)</pre>
          <pre>
            <span class="lnum"> 26: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 27: </span> count = s.Read(buffer, 0, bufferSize);</pre>
          <pre>
            <span class="lnum"> 28: </span>
            <span class="kwrd">if</span> (count &gt; 0)</pre>
          <pre class="alt">
            <span class="lnum"> 29: </span> {</pre>
          <pre>
            <span class="lnum"> 30: </span> sw.Write(buffer, 0, bufferSize);</pre>
          <pre class="alt">
            <span class="lnum"> 31: </span> }</pre>
          <pre>
            <span class="lnum"> 32: </span>
            <span class="kwrd">else</span>
            <span class="kwrd">break</span>;</pre>
          <pre class="alt">
            <span class="lnum"> 33: </span> }</pre>
          <pre>
            <span class="lnum"> 34: </span> sw.Close();</pre>
          <pre class="alt">
            <span class="lnum"> 35: </span> }</pre>
          <pre>
            <span class="lnum"> 36: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 37: </span> </pre>
          <pre>
            <span class="lnum"> 38: </span>
            <span class="rem">// We need to the GUID for
this show to our already downloaded</span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 39: </span>
            <span class="rem">// episode list.
Delete the Temp.zip afterward.</span>
          </pre>
          <pre>
            <span class="lnum"> 40: </span> EpisodeList.Add(uri.GUID.ToString());</pre>
          <pre class="alt">
            <span class="lnum"> 41: </span> File.Delete(filename);</pre>
          <pre>
            <span class="lnum"> 42: </span> }</pre>
        </div>
        <p>
The final parts of the code I want to go over are the loading and saving of the configuration
XML file. This file contains the last date checked and a list of already downloaded
shows. It amazes me that this file can be created in two statements. It is longer
than two lines, but it is still just two statements, a constructor and a save method.
Notice the LINQ to Generic query for the show list section. Pretty cool. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">void</span> SaveXML()</pre>
          <pre>
            <span class="lnum"> 2: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span> </pre>
          <pre>
            <span class="lnum"> 4: </span> XDocument doc = <span class="kwrd">new</span> XDocument(</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">new</span> XDeclaration(<span class="str">"1.0"</span>, <span class="str">"utf-8"</span>, <span class="str">"yes"</span>),</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">new</span> XComment(<span class="str">"dnrTv
Aggregator Configuration"</span>),</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">new</span> XElement(<span class="str">"Aggregator"</span>,</pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">new</span> XElement(<span class="str">"Configuration"</span>, <span class="kwrd">new</span> XElement(<span class="str">"LastCheckDate"</span>,
DateTime.Now.ToShortDateString())),</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span>
            <span class="kwrd">new</span> XElement(<span class="str">"ShowList"</span>,
from s <span class="kwrd">in</span> EpisodeList</pre>
          <pre>
            <span class="lnum"> 10: </span> select <span class="kwrd">new</span> XElement(<span class="str">"Show"</span>, <span class="kwrd">new</span> XElement(<span class="str">"GUID"</span>,
s.ToString()))</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span> )));</pre>
          <pre>
            <span class="lnum"> 12: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> doc.Save(path);</pre>
          <pre>
            <span class="lnum"> 14: </span> }</pre>
        </div>
        <p>
Loading the file back in is just about as simple. In fact, there is likely a cooler
way of doing this that I just have not discovered yet. Drop me a comment if you have
one. Now we use LINQ to XML to pull the data and load it into our previous downloaded
show list. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">void</span> LoadXML()</pre>
          <pre>
            <span class="lnum"> 2: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>
            <span class="kwrd">if</span> (File.Exists(path))</pre>
          <pre>
            <span class="lnum"> 4: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span> XElement doc = XElement.Load(path);</pre>
          <pre>
            <span class="lnum"> 6: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 7: </span> LastCheckDate = DateTime.Parse(doc.Element(<span class="str">"Configuration"</span>).Element(<span class="str">"LastCheckDate"</span>).Value);</pre>
          <pre>
            <span class="lnum"> 8: </span> var SavedList = from d <span class="kwrd">in</span> doc.Element(<span class="str">"ShowList"</span>).Elements(<span class="str">"Show"</span>)</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> select (<span class="kwrd">string</span>)d.Element(<span class="str">"GUID"</span>);</pre>
          <pre>
            <span class="lnum"> 10: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 11: </span>
            <span class="kwrd">foreach</span> (<span class="kwrd">string</span> s <span class="kwrd">in</span> SavedList)</pre>
          <pre>
            <span class="lnum"> 12: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> EpisodeList.Add(s);</pre>
          <pre>
            <span class="lnum"> 14: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 15: </span> </pre>
          <pre>
            <span class="lnum"> 16: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 17: </span> }</pre>
        </div>
        <p>
I have this code up and running on my Homer Server. It is checking daily for new shows
and then downloads them to a shared video directory. My next step will be to rewrite
my client application to use WCF has it communication protocol and to fancy up it's
features. At that point I will be posting the full code for download. 
</p>
        <p>
          <font color="#ff0000">Code Updated 2-10-2008</font>
        </p>
        <p>
          <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2c91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx">
            <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2c91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx" border="0"></img>
          </a>
        </p>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=91f07506-9d80-47ef-ba25-97c47c1eeaa6"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=SKhcaN"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=SKhcaN" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=PbE6L"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=PbE6L" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=sDKiL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=sDKiL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=gjqUl"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=gjqUl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=wMySL"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=wMySL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=Azxul"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=Azxul" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/232274754" height="1" width="1"/>]]></content:encoded><description>&lt;p align=justify&gt;
&lt;a href="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/dnrTVAggregatorPart2LINQtoXML_BD33/dnrtv_2_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px 5px 5px 0px; BORDER-RIGHT-WIDTH: 0px" height=85 alt=dnrtv_2 src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/dnrTVAggregatorPart2LINQtoXML_BD33/dnrtv_2_thumb.jpg" width=234 align=left border=0&gt;&lt;/a&gt; In &lt;a href="http://blog.jrpsoftware.com/PermaLink,guid,d76adccb-555f-4ce8-a152-f1c7d54c1f2a.aspx"&gt;Part
1&lt;/a&gt; of this series I went over the creation of a Windows Service and it's remote
client. For this installment, I will be covering the use of "LINQ to XML" to gather
the feed, and the saving and loading of the XML configuration files. I'll also show
some code to download and unzip the videos using &lt;a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx"&gt;SharpZipLib&lt;/a&gt; from &lt;a href="http://www.icsharpcode.net/"&gt;ic#code&lt;/a&gt;. 
&lt;/p&gt;
&lt;p align=justify&gt;
The first bit of code we are going to need is a class to hold our feed data. We will
be using a List&amp;lt;dnrFeedList&amp;gt; to query against.&amp;nbsp; Here the code for the class.
Nothing strange here, just a datetime field and four strings. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; dnrFeedList&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; Title
{ get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; DateTime Published
{ get; set; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; Enclosure
{ get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; Description
{ get; set; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; GUID
{ get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;style type=text/css&gt;.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; }
&lt;/style&gt;
&lt;/p&gt;
&lt;p align=justify&gt;
Let's make a few changes to our service. First we need to change our services' timer
elapsed event. We want to download the feed list and loop through each show we have
not already downloaded. After each download we want to update our XML file in case
the program is shutdown. After all shows are downloaded for that day, we will update
the last checked date. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; PollTimer_Elapsed(&lt;span class=kwrd&gt;object&lt;/span&gt; sender,
ElapsedEventArgs e)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (Feed.LastCheckDate
&amp;lt; DateTime.Now)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; &lt;span class=kwrd&gt;foreach&lt;/span&gt; (dnrFeedList
f &lt;span class=kwrd&gt;in&lt;/span&gt; Feed.GetList())&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; Feed.DownloadFile(f);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; Feed.SaveXML();&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; &lt;span class=rem&gt;// Add a day to our last check
date. &lt;/span&gt;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; Feed.LastCheckDate = Feed.LastCheckDate.AddDays(1);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; Feed.SaveXML();&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type=text/css&gt;.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; }
&lt;/style&gt;
&lt;p align=justify&gt;
Now we want to pull down the feed from &lt;a href="http://feeds.feedburner.com/DnrtvZip"&gt;DNRTV&lt;/a&gt;.
The following LINQ to XML code has been posted online several times over on blogs
such as &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt;. The only addition
I made was to the where clause to filter out the videos that have already been downloaded.
We will it in a generic called Episode List. This list is a List&amp;lt;String&amp;gt; that
contains the shows GUID.&amp;nbsp; After each successful downloaded, we add that shows
GUID to this list. 
&lt;/p&gt;
&lt;p align=justify&gt;
Also needed was a &lt;a href="http://www.thescripts.com/forum/post830789-3.html"&gt;DateTimeZone&lt;/a&gt; class
to parse in and correct the time zone issue ( ex. "-0500" instead of "EST" ).&amp;nbsp;
I won't post that code here, but it will be included in the final download. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;public&lt;/span&gt; List&amp;lt;dnrFeedList&amp;gt;
GetList()&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; XDocument x = XDocument.Load(URL);&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; var feeds = from feed &lt;span class=kwrd&gt;in&lt;/span&gt; x.Descendants(&lt;span class=str&gt;"item"&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; orderby DateTimeZone.ParseDateTime(feed.Element(&lt;span class=str&gt;"pubDate"&lt;/span&gt;).Value.ToString())
descending&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; &lt;span class=kwrd&gt;where&lt;/span&gt; EpisodeList.Contains(feed.Element(&lt;span class=str&gt;"guid"&lt;/span&gt;).Value)
== &lt;span class=kwrd&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; select &lt;span class=kwrd&gt;new&lt;/span&gt; dnrFeedList&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; Title = feed.Element(&lt;span class=str&gt;"title"&lt;/span&gt;).Value.ToString(),&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; Published = DateTimeZone.ParseDateTime(feed.Element(&lt;span class=str&gt;"pubDate"&lt;/span&gt;).Value.ToString()),&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; Enclosure = feed.Element(&lt;span class=str&gt;"enclosure"&lt;/span&gt;).Attribute(&lt;span class=str&gt;"url"&lt;/span&gt;).Value.ToString(),&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; Description = feed.Element(&lt;span class=str&gt;"description"&lt;/span&gt;).Value.ToString(),&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; GUID = feed.Element(&lt;span class=str&gt;"guid"&lt;/span&gt;).Value&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt; };&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt; &lt;span class=kwrd&gt;return&lt;/span&gt; feeds.ToList();&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 18: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type=text/css&gt;.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; }
&lt;/style&gt;
&lt;p&gt;
Now that we have our feed list, we loop through each show and do our download using
a generic TEMP.ZIP filename for each download. Afterward, we unzip the video into
the video directory, add the GUID to our Episode List&amp;nbsp; and delete the TEMP.ZIP. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; DownloadFile(dnrFeedList
uri)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=rem&gt;// Download ZIP file with
TEMP.ZIP as the filename. &lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; &lt;span class=rem&gt;// It will be deleted after it is
unzipped. &lt;/span&gt;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; filename
= &lt;span class=kwrd&gt;this&lt;/span&gt;.VideoDirectory + &lt;span class=str&gt;@"TEMP.ZIP"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; &lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; WebClient web = &lt;span class=kwrd&gt;new&lt;/span&gt; WebClient();&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; web.DownloadFile(uri.Enclosure.ToString(), filename);&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; &lt;span class=kwrd&gt;const&lt;/span&gt; &lt;span class=kwrd&gt;int&lt;/span&gt; bufferSize
= 4096;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; &lt;span class=kwrd&gt;byte&lt;/span&gt;[] buffer
= &lt;span class=kwrd&gt;new&lt;/span&gt; &lt;span class=kwrd&gt;byte&lt;/span&gt;[bufferSize];&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; &lt;span class=kwrd&gt;int&lt;/span&gt; count = 0;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; &lt;span class=rem&gt;// Here we are using the SharpZipLib
from ic#code.&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt; ZipInputStream s = &lt;span class=kwrd&gt;new&lt;/span&gt; ZipInputStream(File.OpenRead(filename));&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt; ZipEntry f;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 18: &lt;/span&gt; &lt;span class=kwrd&gt;while&lt;/span&gt; ((f = s.GetNextEntry())
!= &lt;span class=kwrd&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 19: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 20: &lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; out_filename = &lt;span class=kwrd&gt;this&lt;/span&gt;.VideoDirectory
+ &lt;span class=kwrd&gt;string&lt;/span&gt;.Format(&lt;span class=str&gt;"{0}"&lt;/span&gt;, f.Name);&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 21: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (!File.Exists(out_filename))&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 22: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 23: &lt;/span&gt; FileStream sw = &lt;span class=kwrd&gt;new&lt;/span&gt; FileStream(out_filename,
FileMode.Create, FileAccess.Write, FileShare.None);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 24: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 25: &lt;/span&gt; &lt;span class=kwrd&gt;while&lt;/span&gt; (&lt;span class=kwrd&gt;true&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 26: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 27: &lt;/span&gt; count = s.Read(buffer, 0, bufferSize);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 28: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (count &amp;gt; 0)&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 29: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 30: &lt;/span&gt; sw.Write(buffer, 0, bufferSize);&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 31: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 32: &lt;/span&gt; &lt;span class=kwrd&gt;else&lt;/span&gt; &lt;span class=kwrd&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 33: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 34: &lt;/span&gt; sw.Close();&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 35: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 36: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 37: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 38: &lt;/span&gt; &lt;span class=rem&gt;// We need to the GUID for this
show to our already downloaded&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 39: &lt;/span&gt; &lt;span class=rem&gt;// episode list. Delete
the Temp.zip afterward.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 40: &lt;/span&gt; EpisodeList.Add(uri.GUID.ToString());&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 41: &lt;/span&gt; File.Delete(filename);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 42: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
The final parts of the code I want to go over are the loading and saving of the configuration
XML file. This file contains the last date checked and a list of already downloaded
shows. It amazes me that this file can be created in two statements. It is longer
than two lines, but it is still just two statements, a constructor and a save method.
Notice the LINQ to Generic query for the show list section. Pretty cool. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; SaveXML()&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; XDocument doc = &lt;span class=kwrd&gt;new&lt;/span&gt; XDocument(&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; XDeclaration(&lt;span class=str&gt;"1.0"&lt;/span&gt;, &lt;span class=str&gt;"utf-8"&lt;/span&gt;, &lt;span class=str&gt;"yes"&lt;/span&gt;),&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; XComment(&lt;span class=str&gt;"dnrTv
Aggregator Configuration"&lt;/span&gt;),&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; XElement(&lt;span class=str&gt;"Aggregator"&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; XElement(&lt;span class=str&gt;"Configuration"&lt;/span&gt;, &lt;span class=kwrd&gt;new&lt;/span&gt; XElement(&lt;span class=str&gt;"LastCheckDate"&lt;/span&gt;,
DateTime.Now.ToShortDateString())),&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; &lt;span class=kwrd&gt;new&lt;/span&gt; XElement(&lt;span class=str&gt;"ShowList"&lt;/span&gt;,
from s &lt;span class=kwrd&gt;in&lt;/span&gt; EpisodeList&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; select &lt;span class=kwrd&gt;new&lt;/span&gt; XElement(&lt;span class=str&gt;"Show"&lt;/span&gt;, &lt;span class=kwrd&gt;new&lt;/span&gt; XElement(&lt;span class=str&gt;"GUID"&lt;/span&gt;,
s.ToString()))&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; )));&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; doc.Save(path);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Loading the file back in is just about as simple. In fact, there is likely a cooler
way of doing this that I just have not discovered yet. Drop me a comment if you have
one. Now we use LINQ to XML to pull the data and load it into our previous downloaded
show list. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt; &lt;span class=kwrd&gt;private&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; LoadXML()&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (File.Exists(path))&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; XElement doc = XElement.Load(path);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; LastCheckDate = DateTime.Parse(doc.Element(&lt;span class=str&gt;"Configuration"&lt;/span&gt;).Element(&lt;span class=str&gt;"LastCheckDate"&lt;/span&gt;).Value);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; var SavedList = from d &lt;span class=kwrd&gt;in&lt;/span&gt; doc.Element(&lt;span class=str&gt;"ShowList"&lt;/span&gt;).Elements(&lt;span class=str&gt;"Show"&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; select (&lt;span class=kwrd&gt;string&lt;/span&gt;)d.Element(&lt;span class=str&gt;"GUID"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; &lt;span class=kwrd&gt;foreach&lt;/span&gt; (&lt;span class=kwrd&gt;string&lt;/span&gt; s &lt;span class=kwrd&gt;in&lt;/span&gt; SavedList)&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; EpisodeList.Add(s);&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
I have this code up and running on my Homer Server. It is checking daily for new shows
and then downloads them to a shared video directory. My next step will be to rewrite
my client application to use WCF has it communication protocol and to fancy up it's
features. At that point I will be posting the full code for download. 
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#ff0000&gt;Code Updated 2-10-2008&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2c91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2c91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx" border=0&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=91f07506-9d80-47ef-ba25-97c47c1eeaa6" /&gt;
&lt;br /&gt;
&lt;hr /&gt;© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only.</description><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.jrpsoftware.com/Trackback.aspx?guid=91f07506-9d80-47ef-ba25-97c47c1eeaa6</trackback:ping><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/pingback.aspx</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://blog.jrpsoftware.com/PermaLink,guid,91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx</pingback:target><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/CommentView,guid,91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.jrpsoftware.com/SyndicationService.asmx/GetEntryCommentsRss?guid=91f07506-9d80-47ef-ba25-97c47c1eeaa6</wfw:commentRss><feedburner:origLink>http://blog.jrpsoftware.com/PermaLink,guid,91f07506-9d80-47ef-ba25-97c47c1eeaa6.aspx</feedburner:origLink></item><item><title>Outerglow / Outline Text with GDI+ in C#</title><link>http://feeds.feedburner.com/~r/JohnRussellPlant/~3/230676928/PermaLink,guid,08a46612-4402-4c49-a9e3-f3481e1658c3.aspx</link><category>C Sharp;UI</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">John Russell Plant</dc:creator><pubDate>Wed, 06 Feb 2008 17:32:42 -0600</pubDate><guid isPermaLink="false">http://blog.jrpsoftware.com/PermaLink,guid,08a46612-4402-4c49-a9e3-f3481e1658c3.aspx</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
        <p>
 My pre<a href="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/OuterglowOutlineTextwithGDIinC_E697/CropperCapture117.png" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 10px 10px 10px 0px; BORDER-RIGHT-WIDTH: 0px" height="123" src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/OuterglowOutlineTextwithGDIinC_E697/CropperCapture1_thumb15.png" width="455" align="left" border="0"></img></a>vious
job required a bit of multimedia programming and involved the use of a lot of different
graphics techniques. One day we ran across a bit of code to give drawn text either
an outerglow or an outline around it. It turns outs to be much simpler to do than
I previously thought and only goes to show that you can always learn a new trick. The
original project can be downloaded from <a href="http://www.codeproject.com/csharp/FancyText.asp">FancyText</a>.
</p>
        <p>
The basic concept here is drawing the text multiple times in slightly different locations
in one color with the alpha channel set to around 15 to 25. Next you print the original
text centered back over the glowing text. The results look excellent. When I get the
time I will create a label style control based on this code and post it. 
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">using</span> System;</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">using</span> System.Collections.Generic;</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>
            <span class="kwrd">using</span> System.ComponentModel;</pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">using</span> System.Data;</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">using</span> System.Drawing;</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">using</span> System.Text;</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">using</span> System.Windows.Forms;</pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">using</span> System.Drawing.Drawing2D;</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span>
            <span class="kwrd">using</span> System.Drawing.Text;</pre>
          <pre>
            <span class="lnum"> 10: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 11: </span>
            <span class="kwrd">namespace</span> OutGlowText</pre>
          <pre>
            <span class="lnum"> 12: </span>{</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">partial</span>
            <span class="kwrd">class</span> MainForm
: Form</pre>
          <pre>
            <span class="lnum"> 14: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 15: </span>
            <span class="kwrd">string</span> OutStr
= <span class="str">"Glowing Text"</span>;</pre>
          <pre>
            <span class="lnum"> 16: </span>
            <span class="kwrd">int</span> BlurAmt = 9;</pre>
          <pre class="alt">
            <span class="lnum"> 17: </span> </pre>
          <pre>
            <span class="lnum"> 18: </span>
            <span class="kwrd">public</span> MainForm()</pre>
          <pre class="alt">
            <span class="lnum"> 19: </span> {</pre>
          <pre>
            <span class="lnum"> 20: </span> InitializeComponent();</pre>
          <pre class="alt">
            <span class="lnum"> 21: </span> }</pre>
          <pre>
            <span class="lnum"> 22: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 23: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">void</span> MainForm_Load(<span class="kwrd">object</span> sender,
EventArgs e)</pre>
          <pre>
            <span class="lnum"> 24: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 25: </span>
            <span class="kwrd">this</span>.BackColor
= Color.Black;</pre>
          <pre>
            <span class="lnum"> 26: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 27: </span> </pre>
          <pre>
            <span class="lnum"> 28: </span>
            <span class="kwrd">protected</span>
            <span class="kwrd">override</span>
            <span class="kwrd">void</span> OnPaint(PaintEventArgs
e)</pre>
          <pre class="alt">
            <span class="lnum"> 29: </span> {</pre>
          <pre>
            <span class="lnum"> 30: </span> Graphics g = e.Graphics;</pre>
          <pre class="alt">
            <span class="lnum"> 31: </span> Brush br = <span class="kwrd">new</span> SolidBrush(Color.FromArgb(15,
Color.White));</pre>
          <pre>
            <span class="lnum"> 32: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 33: </span> g.SmoothingMode = SmoothingMode.HighQuality;</pre>
          <pre>
            <span class="lnum"> 34: </span> g.InterpolationMode = InterpolationMode.HighQualityBilinear;</pre>
          <pre class="alt">
            <span class="lnum"> 35: </span> g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;</pre>
          <pre>
            <span class="lnum"> 36: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 37: </span>
            <span class="kwrd">for</span> (<span class="kwrd">int</span> x
= 0; x &lt;= BlurAmt; x++)</pre>
          <pre>
            <span class="lnum"> 38: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 39: </span>
            <span class="kwrd">for</span> (<span class="kwrd">int</span> y
= 0; y &lt;= BlurAmt; y++)</pre>
          <pre>
            <span class="lnum"> 40: </span> {</pre>
          <pre class="alt">
            <span class="lnum"> 41: </span> g.DrawString(OutStr, <span class="kwrd">new</span> Font(<span class="str">"Arial"</span>,
48,FontStyle.Bold),br, <span class="kwrd">new</span> Point(x, y));</pre>
          <pre>
            <span class="lnum"> 42: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 43: </span> }</pre>
          <pre>
            <span class="lnum"> 44: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 45: </span> g.DrawString(OutStr, </pre>
          <pre>
            <span class="lnum"> 46: </span>
            <span class="kwrd">new</span> Font(<span class="str">"Arial"</span>,
48,FontStyle.Bold ), </pre>
          <pre class="alt">
            <span class="lnum"> 47: </span> Brushes.Blue, </pre>
          <pre>
            <span class="lnum"> 48: </span>
            <span class="kwrd">new</span> Point(BlurAmt /2,
BlurAmt/2));</pre>
          <pre class="alt">
            <span class="lnum"> 49: </span> </pre>
          <pre>
            <span class="lnum"> 50: </span>
            <span class="kwrd">base</span>.OnPaint(e);</pre>
          <pre class="alt">
            <span class="lnum"> 51: </span> }</pre>
          <pre>
            <span class="lnum"> 52: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 53: </span> }</pre>
          <pre>
            <span class="lnum"> 54: </span>}</pre>
        </div>
        <style type="text/css">.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; }
</style>
        <pre class="code"> </pre>
        <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2c08a46612-4402-4c49-a9e3-f3481e1658c3.aspx">
          <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.jrpsoftware.com%2fPermaLink%2cguid%2c08a46612-4402-4c49-a9e3-f3481e1658c3.aspx" border="0"></img>
        </a>
        <img width="0" height="0" src="http://blog.jrpsoftware.com/aggbug.ashx?id=08a46612-4402-4c49-a9e3-f3481e1658c3"></img>
        <br>
        <hr></hr>
© 2007,2008 John Russell Plant. This Feed is for personal non-commercial use only. 

<p><a href="http://feeds.feedburner.com/~a/JohnRussellPlant?a=2AUjpY"><img src="http://feeds.feedburner.com/~a/JohnRussellPlant?i=2AUjpY" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=iwHLVYE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=iwHLVYE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=wFCikJE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=wFCikJE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=6RvjyOe"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=6RvjyOe" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=6WdNRFE"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=6WdNRFE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/JohnRussellPlant?a=wFKhXqe"><img src="http://feeds.feedburner.com/~f/JohnRussellPlant?i=wFKhXqe" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JohnRussellPlant/~4/230676928" height="1" width="1"/>]]></content:encoded><description>&lt;p&gt;
&amp;nbsp;My pre&lt;a href="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/OuterglowOutlineTextwithGDIinC_E697/CropperCapture117.png" atomicselection="true"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 10px 10px 10px 0px; BORDER-RIGHT-WIDTH: 0px" height=123 src="http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/OuterglowOutlineTextwithGDIinC_E697/CropperCapture1_thumb15.png" width=455 align=left border=0&gt;&lt;/a&gt;vious
job required a bit of multimedia programming and involved the use of a lot of different
graphics techniques. One day we ran across a bit of code to give drawn text either
an outerglow or an outline around it. It turns outs to be much simpler to do than
I previously thought and only goes to show that you can always learn a new trick.&amp;nbsp;The
original project can be downloaded from&amp;nbsp;&lt;a href="http://www.codeproject.com/csharp/FancyText.asp"&gt;FancyText&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The basic concept here is drawing the text multiple times in slightly different locations
in one color with the alpha channel set to around 15 to 25. Next you print the original
text centered back over the glowing text. The results look excellent. When I get the
time I will create a label style control based on this code and post it.&amp;nbsp;
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Data;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Drawing;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Drawing.Drawing2D;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Drawing.Text;&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt;&lt;span class=kwrd&gt;namespace&lt;/span&gt; OutGlowText&lt;/pre&gt;
&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class=alt&gt;&lt;span class=lnum&gt; 1