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

<channel>
	<title>Chris Benard &#187; Programming</title>
	<atom:link href="http://chrisbenard.net/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://chrisbenard.net</link>
	<description>Don't tase me, bro!</description>
	<lastBuildDate>Wed, 04 Aug 2010 15:26:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Hosting Windows Workflow Foundation in a Console Application without Ugly Code</title>
		<link>http://chrisbenard.net/2010/04/10/hosting-windows-workflow-foundation-in-a-console-application-without-ugly-code/</link>
		<comments>http://chrisbenard.net/2010/04/10/hosting-windows-workflow-foundation-in-a-console-application-without-ugly-code/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 17:45:43 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[wf]]></category>
		<category><![CDATA[workflow foundation]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=350</guid>
		<description><![CDATA[I’ve been using Windows Workflow Foundation for a small personal project to learn more about it and see what it can do. It’s pretty powerful and I’m looking forward to delving more into it. For my purposes though, I’m hosting the workflow in a console program. If you look around the internet, you’ll see lots [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been using <a href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx">Windows Workflow Foundation</a> for a small personal project to learn more about it and see what it can do. It’s pretty powerful and I’m looking forward to delving more into it. For my purposes though, I’m hosting the workflow in a console program.</p>
<p>If you look around the internet, you’ll see lots of examples of hosting a sequential workflow in a synchronous manner, even though the <span style="font-family: andale mono, monospace">WorkflowRuntime</span> only support asynchronous operations. That code usually looks like this (example adapted from <a href="http://www.wf-training-guide.com/workflow-runtime-engine.html">wf-training-guide.com</a> to add support for input/output arguments):</p>
<pre style="font-size: 1.1em" class="brush:csharp">static void Main(string[] args)
{
  Dictionary&lt;string, object&gt; inputArguments = new Dictionary&lt;string, object&gt;();
  inputArguments.Add(&quot;Argument1&quot;, args[0]);
  Dictionary&lt;string, object&gt; outputArguments;

  // Create the WF runtime.
  using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
  {
    // Hook into WorkflowCompleted / WorkflowTerminated events.
    AutoResetEvent waitHandle = new AutoResetEvent(false);
    workflowRuntime.WorkflowCompleted
      += delegate(object sender, WorkflowCompletedEventArgs e)
        {
          outputArguments = e.OutputParameters;
          waitHandle.Set();
        };

    workflowRuntime.WorkflowTerminated
      += delegate(object sender, WorkflowTerminatedEventArgs e)
        {
          Console.WriteLine(e.Exception.Message);
          waitHandle.Set();
        };

    // Create an instance of the WF to execute and call Start().
    WorkflowInstance instance =
      workflowRuntime.CreateWorkflow(typeof(WorkflowClass));
    instance.Start();

    waitHandle.WaitOne();
  }
}</pre>
<p>Unfortunately, that’s a ton of code to do only a few things:</p>
<ol>
<li>Take input arguments </li>
<li>Instantiate a <span style="font-family: andale mono, monospace">WorkflowRuntime</span> </li>
<li>Create a workflow instance </li>
<li>Run the workflow </li>
<li>Handle any exceptions (poorly) </li>
<li>Return output parameters from the workflow </li>
<li>Do all of this in a synchronous manner. </li>
</ol>
<p>What if we could just call a method similar to this:</p>
<pre style="font-size: 1.1em" class="brush:csharp">var outputArguments = RunWorkflow&lt;WorkflowClass&gt;(arguments, completedEvent, terminatedEvent);</pre>
<p>Well, now you can! I’ve written this wrapper class to allow exactly that:</p>
<pre style="font-size: 1.1em" class="brush:csharp">public class WorkflowManager
{
  public static Dictionary&lt;string, object&gt; RunWorkflow&lt;T&gt;(
    Dictionary&lt;string, object&gt; arguments,
    EventHandler&lt;WorkflowCompletedEventArgs&gt; completedEvent,
    EventHandler&lt;WorkflowTerminatedEventArgs&gt; terminatedEvent)
    where T : SequentialWorkflowActivity
  {
    using (WorkflowRuntime runtime = new WorkflowRuntime())
    {
      Dictionary&lt;string, object&gt; returnValue = null;
      Exception ex = null;

      using (AutoResetEvent waitHandle = new AutoResetEvent(false))
      {
        WorkflowInstance instance = runtime.CreateWorkflow(typeof(T), arguments);
        runtime.WorkflowCompleted += (o, e) =&gt;
        {
          EventHandler&lt;WorkflowCompletedEventArgs&gt; temp = completedEvent;
          if (temp != null)
          {
            temp(o, e);
          }

          returnValue = e.OutputParameters;

          waitHandle.Set();
        };

        runtime.WorkflowTerminated += (o, e) =&gt;
        {
          EventHandler&lt;WorkflowTerminatedEventArgs> temp = terminatedEvent;
          if (temp != null)
          {
            temp(o, e);
          }

          ex = e.Exception;

          waitHandle.Set();
        };

        instance.Start();
        waitHandle.WaitOne();
      }

      if (runtime != null)
      {
        runtime.StopRuntime();
      }

      if (ex != null)
      {
        throw ex;
      }

      return returnValue;
    }
  }
}</pre>
<p>Now you really can run the above code to execute your workflow in a synchronous manner without all kinds of messy code. Beware creating multiple <span style="font-family: andale mono, monospace">WorkflowRuntime</span> instances though. If you are managing multiple simultaneous workflows, you&#8217;ll need to pass in instance IDs and keep track in the runtime of which one is completing or throwing errors. It&#8217;s generally a bad idea to have multiple <span style="font-family: andale mono, monospace">WorkflowRuntime</span>s.</p>
<p>Enjoy now being able to write:</p>
<pre style="font-size: 1.1em" class="brush:csharp">var outputArguments = RunWorkflow&lt;WorkflowClass&gt;(arguments, completedEvent, terminatedEvent);</pre>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2010/04/10/hosting-windows-workflow-foundation-in-a-console-application-without-ugly-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>redgate Releases SQL Search for Free</title>
		<link>http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/</link>
		<comments>http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 18:42:02 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[redgate]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sqlserver]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=332</guid>
		<description><![CDATA[redgate has released their SQL Search 1.0 for free, and my coworker Stephen sent our team an email letting us know about it. It is a fantastic product that integrates with SSMS and now it’s free. It keeps an index of all the text in every sproc, all the columns in every table, etc, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.red-gate.com">redgate</a> has released their <a href="http://www.red-gate.com/products/sql_search/index.htm">SQL Search</a> 1.0 for free, and my coworker <a href="http://www.sculver.com">Stephen</a> sent our team an email letting us know about it. It is a fantastic product that integrates with SSMS and now it’s free. It keeps an index of all the text in every <a href="http://en.wikipedia.org/wiki/Stored_procedure"><abbr title="Stored Procedure">sproc</abbr></a>, all the columns in every table, etc, and you can search them all instantly, limiting by type and many other options.</p>
<p>These are the features they list on <a href="http://www.red-gate.com/products/sql_search/index.htm">their page</a>:</p>
<ul>
<li>Find fragments of SQL text within stored procedures, functions, views and more </li>
<li>Quickly navigate to objects wherever they happen to be on your servers </li>
<li>Find all references to an object </li>
<li>Integrates with SSMS </li>
</ul>
<p>And their “Why use SQL Search?”:</p>
<ul>
<li><strong>Impact Analysis        <br /></strong>You want to rename one of your table columns but aren&#8217;t sure what stored procedures reference it. Using SQL Search, you can search for the column name and find all the stored procedures where it is used. </li>
<li><strong>Work faster        <br /></strong>Finding anything in the SSMS object tree requires a lot of clicking. Using SQL Search, you can press the shortcut combo, start typing the name, and jump right there. </li>
<li><strong>Make your life easier        <br /></strong>You need to find stored procedures you’ve not yet finished writing. Using SQL Search, you can search for stored procedures containing the text &#8216;TODO&#8217;. </li>
<li><strong>Increase efficiency, reduce errors        <br /></strong>You are a DBA, and developers keep using &#8216;SELECT *&#8217; in their views and stored procedures. You want to find all these and replace them with a correct list of columns to improve performance and prevent future bugs. Using SQL Search, you can look for &#8216;SELECT *&#8217; in the text of stored procedures and views. </li>
</ul>
<p>If you are a user of SQL Server Management Studio, I highly recommend you check out out. You sure can’t beat the price. Check out the screenshots below as well.</p>

<a href='http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/sql-search-1/' title='SQL Search 1'><img width="150" height="150" src="http://chrisbenard.net/wp-content/uploads/2010/02/SQL-Search-1-150x150.png" class="attachment-thumbnail" alt="SQL Search 1" title="SQL Search 1" /></a>
<a href='http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/sql-search-2/' title='SQL Search 2'><img width="150" height="150" src="http://chrisbenard.net/wp-content/uploads/2010/02/SQL-Search-2-150x150.png" class="attachment-thumbnail" alt="SQL Search 2" title="SQL Search 2" /></a>
<a href='http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/sql-search-3/' title='SQL Search 3'><img width="150" height="150" src="http://chrisbenard.net/wp-content/uploads/2010/02/SQL-Search-3-150x150.png" class="attachment-thumbnail" alt="SQL Search 3" title="SQL Search 3" /></a>
<a href='http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/sql-search-4/' title='SQL Search 4'><img width="150" height="150" src="http://chrisbenard.net/wp-content/uploads/2010/02/SQL-Search-4-150x150.png" class="attachment-thumbnail" alt="SQL Search 4" title="SQL Search 4" /></a>

]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2010/02/12/redgate-releases-sql-search-for-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Lesson in How Not to Conduct Website Security</title>
		<link>http://chrisbenard.net/2010/02/11/a-lesson-in-how-not-to-conduct-website-security/</link>
		<comments>http://chrisbenard.net/2010/02/11/a-lesson-in-how-not-to-conduct-website-security/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 23:01:18 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=326</guid>
		<description><![CDATA[Louisiana Tech just sent me a “reminder” email with my full username and password in there. That information is everything necessary to logon to the school student portal and get the rest of my personal information, full school transcript, etc. Not only do I not like them emailing my password, I don’t like that they [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.latech.edu">Louisiana Tech</a> just sent me a “reminder” email with my full username and password in there. That information is everything necessary to logon to the school student portal and get the rest of my personal information, full school transcript, etc.</p>
<p>Not only do I not like them emailing my password, I don’t like that they even know my password. They should be using hashes instead. They’re <a href="http://www.codinghorror.com/blog/archives/000953.html">doing it incorrectly</a>.</p>
<p>Here is the full email (user/pass redacted):</p>
<blockquote style="font-size: 1.5em"><pre>Subject: Reminder
TO: &lt;[my.school.email]@LaTech.edu&gt;
Date: Thu, 11 Feb 10 12:35:23 CST
From: &lt;Registrar@LaTech.edu&gt;

REMINDER:

          Your BOSS PIN is: XXXXXX
          Your CWID number is: 100XXXXXX

PROTECT THESE NUMBERS!</pre>
</blockquote>
<p>I sure wish they&#8217;d protect these numbers for me instead of emailing them to me every quarter.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2010/02/11/a-lesson-in-how-not-to-conduct-website-security/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Beyonc□, or How We Can All Learn From Other Developers&#8217; Character Encoding Mistakes</title>
		<link>http://chrisbenard.net/2009/08/21/beyonce-or-how-we-can-all-learn-from-other-developers-character-encoding-mistakes/</link>
		<comments>http://chrisbenard.net/2009/08/21/beyonce-or-how-we-can-all-learn-from-other-developers-character-encoding-mistakes/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 18:58:08 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[ascii]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[character encoding]]></category>
		<category><![CDATA[ebcdic]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[t-shirt]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf-16]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=271</guid>
		<description><![CDATA[I’m sure everyone who reads this blog has noticed, at some point, the result of another developer’s mistake in dealing with Unicode or other character encodings. I’ve had a few issues myself. To the left, you can see how my Napster displayed a Beyoncé song as Beyonc□. You may have seen a black diamond symbol [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 30px 4px; display: inline; border-top: 0px; border-right: 0px" title="Picture of Unicode Error, displaying Beyoncé as Beyonc□" border="0" alt="Picture of Unicode Error, displaying Beyoncé as Beyonc-block" align="left" src="http://chrisbenard.net/wp-content/uploads/2009/08/beyoncblock.png" width="189" height="710" /> </p>
<p>I’m sure everyone who reads this blog has noticed, at some point, the result of another developer’s mistake in dealing with <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> or other <a href="http://en.wikipedia.org/wiki/Character_encoding">character encodings</a>. I’ve had a few issues myself. To the left, you can see how my Napster displayed a <a href="http://en.wikipedia.org/wiki/Beyonc%C3%A9_Knowles">Beyoncé</a> song as Beyonc□. You may have seen a <a href="http://www.cybervaldez.com/how-to-remove-those-nasty-question-mark-with-a-diamond-symbols-from-appearing-in-your-website/2009/">black diamond symbol with a question mark in it</a> while browsing a web page, or perhaps other strange symbols when interacting with programs or web pages.</p>
<p>Most, if not all of these, are inconsistencies when dealing with character encoding, with most of them being Unicode. Hazarding a guess, Beyoncé’s is likely stored as Unicode (<a href="http://en.wikipedia.org/wiki/UTF-16/UCS-2">UTF-16</a>) in <a href="http://www.napster.com">Napster</a>’s database, but when output on the screen, it is converted down to <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a> or <a href="http://en.wikipedia.org/wiki/ASCII">ASCII</a>. Either way, it can’t be converted down, so an entity is displayed. There is even a <a href="http://blogs.msdn.com/michkap/archive/2005/09/11/463670.aspx">shirt memorializing the problem</a> in T-shirt form:</p>
<p><a title="I {entity} Unicode T-shirts!" href="http://blogs.msdn.com/michkap/archive/2005/09/11/463670.aspx"><img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="I {entity} Unicode T-shirt" border="0" alt="I {entity} Unicode T-shirt" src="http://chrisbenard.net/wp-content/uploads/2009/08/UnicodeWindows.jpg" width="244" height="244" /></a> </p>
<p>My issues have been even more low-level than this. I deal with a lot of interaction using <a href="http://en.wikipedia.org/wiki/Electronic_Data_Interchange">EDI</a> with older computer systems running UNIX or or some IBM mainframe OS. None of these are using Unicode for their medical claims adjudication, and are either using ASCII or <a href="http://en.wikipedia.org/wiki/Extended_Binary_Coded_Decimal_Interchange_Code">EBCDIC</a>. Yes, EBCDIC; I have to program using EBCDIC in 2009.</p>
<p>I have to be very careful when I’m converting to and from Unicode, the <a href="http://www.yoda.arachsys.com/csharp/unicode.html">native format of the string class in .Net</a>, and other character encodings such as ASCII and EBCDIC, and so should you.</p>
<p>  <br style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/08/21/beyonce-or-how-we-can-all-learn-from-other-developers-character-encoding-mistakes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacked by Chinese</title>
		<link>http://chrisbenard.net/2009/07/28/hacked-by-chinese/</link>
		<comments>http://chrisbenard.net/2009/07/28/hacked-by-chinese/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 15:51:36 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[code red]]></category>
		<category><![CDATA[corruption]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[team foundation server]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=264</guid>
		<description><![CDATA[On our main product, in a branch on which I’m working on a Point of Sale product, something happened in the process of checking files into source control. In our case, we’re using Team Foundation Server. My guess is that the corruption happened on my hard drive for who knows what reason, but this is [...]]]></description>
			<content:encoded><![CDATA[<p>On our main product, in a branch on which I’m working on a Point of Sale product, something happened in the process of checking files into <a href="http://en.wikipedia.org/wiki/Source_control">source control</a>. In our case, we’re using <a href="http://en.wikipedia.org/wiki/Team_Foundation_Server">Team Foundation Server</a>. My guess is that the corruption happened on my hard drive for who knows what reason, but this is the beginning of the resulting solution file that ended up in TFS: a bunch of Chinese-looking characters instead of a project name.</p>
<pre style="font-size: 1.1em" class="brush:plain; highlight: 3">Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project(&quot;{54435603-DBB4-11D2-8724-00A0C9A8B90C}&quot;) = &quot;펐!蝀ጢ&quot;, &quot;ProductNameFaxServiceSetup\ProductNameFaxServiceSetup.vdproj&quot;, &quot;{DDA7A291-A5F6-4FEA-B11E-BBE90848167D}&quot;
EndProject
Project(&quot;{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&quot;) = &quot;CompanyName.Claim.Common&quot;, &quot;CompanyName.Claim.Common\CompanyName.Claim.Common.csproj&quot;, &quot;{11EE0005-87E4-44E0-806A-0BCB382468F0}&quot;
EndProject
Project(&quot;{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&quot;) = &quot;CompanyName.Claim.Modem&quot;, &quot;CompanyName.Claim.Modem\CompanyName.Claim.Modem.csproj&quot;, &quot;{FE62F256-5A9C-4212-8EFB-CCD0AC0D59AF}&quot;
EndProject</pre>
<p>It took a while to track down, because it manifested itself as missing projects, missing dependencies. I kept adding back things one at a time and then ending up with two more dependencies left to add. Finally, I just looked at the raw solution file and saw how it was messed up. I went back to find a file in the source control history that wasn’t messed up, got that specific version by change set, and then added the specific projects that had been added since then back to the solution.</p>
<p>Thanks to source control, I was back up and running in no time.</p>
<p style="font-style: italic; font-size: 0.85em">The title is from the phrase with which the <a href="http://en.wikipedia.org/wiki/Code_Red_%28computer_worm%29">Code Red worm</a> defaced web sites it infected. We didn’t really get hacked by the Chinese.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/07/28/hacked-by-chinese/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Accessing a Control Without Being Able to See It on a Windows Form</title>
		<link>http://chrisbenard.net/2009/07/24/accessing-a-control-without-being-able-to-see-it-on-a-windows-form/</link>
		<comments>http://chrisbenard.net/2009/07/24/accessing-a-control-without-being-able-to-see-it-on-a-windows-form/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 16:17:08 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[coworker]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows forms]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=258</guid>
		<description><![CDATA[A coworker of mine had a problem and came to me for help. She had a windows form with a control on it that she wanted to edit or delete, but couldn’t see the control. It was listed in the properties box in the list of controls on the form, but when she selected it, [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Menu Key Displayed on Keyboard" border="0" alt="Menu Key Displayed on Keyboard" align="right" src="http://chrisbenard.net/wp-content/uploads/2009/07/menukey.png" width="269" height="168" />A <a title="Jenny Roe" href="http://jennyroe.com">coworker of mine</a> had a problem and came to me for help. She had a windows form with a control on it that she wanted to edit or delete, but couldn’t see the control. It was listed in the properties box in the list of controls on the form, but when she selected it, she wasn’t able to click it on the form, because it was behind another control.</p>
<p>I hypothesized a solution, which worked, but requires the use of a less than frequent key on your keyboard, the <a href="http://en.wikipedia.org/wiki/Menu_key">menu key.</a> Usually this key is two keys to the right of the space bar on windows keyboards, between Alt and Control. A picture of it is on the right.</p>
<p style="clear:both" class="note"><strong>Note: </strong>As pointed out by Lee, in the comments, you can press Shift + F10 if your keyboard doesn&#8217;t contain the Menu Key.</p>
<h3 style="clear: both">The Form With a Hidden Label Behind the Filename TextBox) <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Form with hidden label control" border="0" alt="Form with hidden label control" align="left" src="http://chrisbenard.net/wp-content/uploads/2009/07/notthere.jpg" width="484" height="137" /></h3>
<h3 style="clear: both">Properties Window Listing the Hidden Control, HiddenLabel</h3>
<p><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Properties window list of controls" border="0" alt="Properties window list of controls" align="left" src="http://chrisbenard.net/wp-content/uploads/2009/07/list.jpg" width="349" height="206" /></p>
<p>Select the control that you can’t see. It will be highlighted on the form.</p>
<h3 style="clear: both">Form with Hidden Control Highlighted</h3>
<p><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Label highlighted after selecting from properties window" border="0" alt="Label highlighted after selecting from properties window" align="left" src="http://chrisbenard.net/wp-content/uploads/2009/07/highlighted.jpg" width="479" height="134" />The hidden control becomes highlighted. Click into the title bar of the form. Press the menu key on your keyboard to display the context menu.</p>
<h3 style="clear: both">Context Menu Being Displayed After Pressing the Menu Key</h3>
<p><a href="http://chrisbenard.net/wp-content/uploads/2009/07/bringtofront.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bringtofront" border="0" alt="bringtofront" align="left" src="http://chrisbenard.net/wp-content/uploads/2009/07/bringtofront_thumb.png" width="474" height="361" /></a>Select “Bring to Front” to display the control. It will now be visible and can be edited or removed.</p>
<h3 style="clear: both">Hidden Control Moved</h3>
<p><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Label after being brought to front and moved" border="0" alt="Label after being brought to front and moved" align="left" src="http://chrisbenard.net/wp-content/uploads/2009/07/moved.jpg" width="485" height="138" />As you can see, the control that was previously hidden is now visible and has been moved.</p>
<p clear="both">I know this is a basic solution to an easy problem, but I had to figure it out, and I hope that someone searching may find this useful as well. The above example was a new form I was starting; it is not the actual application in question.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/07/24/accessing-a-control-without-being-able-to-see-it-on-a-windows-form/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Reflection to Dynamically Generate ToString() Output</title>
		<link>http://chrisbenard.net/2009/07/23/using-reflection-to-dynamically-generate-tostring-output/</link>
		<comments>http://chrisbenard.net/2009/07/23/using-reflection-to-dynamically-generate-tostring-output/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 16:11:46 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[immediate window]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[reflection]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=246</guid>
		<description><![CDATA[Update: Added code to show “null” when a property is null, like Visual Studio does. If you’ve ever used Visual Studio in any iteration in any language, you have most likely used the immediate window. It’s insanely useful and lets you just type an instance of an object and if the object doesn’t have an [...]]]></description>
			<content:encoded><![CDATA[<p class="new"><strong>Update:</strong> Added code to show “null” when a property is null, like Visual Studio does.</p>
<p>If you’ve ever used <a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx">Visual Studio</a> in any iteration in any language, you have most likely used the immediate window. It’s insanely useful and lets you just type an instance of an object and if the object doesn’t have an overridden <a href="http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx">ToString() method</a> (I’m back in C#/.Net world here for the purposes of this post), Visual Studio will dynamically generate output for you, so that you can see the current state of the object.</p>
<p>Here is what Visual Studio’s output looks like on an object I have:</p>
<pre class="brush:plain">{CompanyName.CreditCard.Processor.CreditDebit.SaleResponse}
    base {CompanyName.CreditCard.Processor.Response}: {CompanyName.CreditCard.Processor.CreditDebit.SaleResponse}
    AddressVerificationSuccess: true
    AuthorizationCode: null
    AuthorizedAmount: 50
    CvvSuccess: false
    ReferenceNumber: null</pre>
<p>However, what if you want to be able to have ToString() generate this type of output for you, for the purposes of debugging, like using with <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.writeline.aspx">Debug.WriteLine</a> or Trace or any other logging framework? It is useful to be able to see later what the state of an object was during a problem situation. Sure, you can write your own ToString() code in every object to generate its state in string form, and then aggregate all the base objects using base.ToString(), but that is a lot of iterative, repetitious coding.</p>
<p>My classes are simple <a href="http://en.wikipedia.org/wiki/Data_transfer_object">data transfer objects</a> and look like this:</p>
<pre class="brush:csharp">public class SaleResponse : Response
{
    public virtual bool AddressVerificationSuccess { get; set; }
    public virtual bool CvvSuccess { get; set; }
    public virtual string AuthorizationCode { get; set; }
    public virtual string ReferenceNumber { get; set; }
    public virtual decimal? AuthorizedAmount { get; set; }
}

public class Response
{
    public virtual bool Success { get; set; }
    public virtual string ResponseMessage { get; set; }
    public virtual string TransactionID { get; set; }
    public virtual string GatewayResponseCodeText { get; set; }
    public virtual string IssuerResponseCodeText { get; set; }
    public virtual GatewayResponseCode GatewayResponseCode { get; set; }
    public virtual IssuerResponseCode IssuerResponseCode { get; set; }
}</pre>
<p>As you can see, Visual Studio didn’t even give me the contents of the base class, but I want this information. My ToString() method I’ve created in the SaleResponse object is the following:</p>
<pre class="brush:csharp">public override string ToString()
{
    var flags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.FlattenHierarchy;
    System.Reflection.PropertyInfo[] infos = this.GetType().GetProperties(flags);

    StringBuilder sb = new StringBuilder();

    string typeName = this.GetType().Name;
    sb.AppendLine(typeName);
    sb.AppendLine(string.Empty.PadRight(typeName.Length + 5, '='));

    foreach (var info in infos)
    {
        object value = info.GetValue(this, null);
        sb.AppendFormat(&quot;{0}: {1}{2}&quot;, info.Name, value != null ? value : &quot;null&quot;, Environment.NewLine);
    }

    return sb.ToString();
}</pre>
<p>Which generates the following output:</p>
<pre class="brush:plain">SaleResponse
=================
AddressVerificationSuccess: True
CvvSuccess: False
AuthorizationCode: null
ReferenceNumber: null
AuthorizedAmount: 50
Success: True
ResponseMessage: null
TransactionID: AXB234234
GatewayResponseCodeText: null
IssuerResponseCodeText: null
GatewayResponseCode: ExpiredDevice
IssuerResponseCode: Error</pre>
<p>What I like about this approach is that it grabs all the base object’s properties recursively. Obviously, there are <a href="http://www.west-wind.com/weblog/posts/351.aspx">performance concerns</a> with doing reflection, so I wouldn’t use this constantly, but I think it’s a good way to write out the state of an object in the event of an error. Also, I made the example simple for this blog post, but obviously, you could put that code into an <a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx">extension method</a> for <a href="http://msdn.microsoft.com/en-us/library/system.object.aspx">System.Object</a> or just into a static utility class, adding an object parameter and replacing “this” with the name of the object parameter.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/07/23/using-reflection-to-dynamically-generate-tostring-output/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Strong Name an Assembly Without Source Code</title>
		<link>http://chrisbenard.net/2009/07/16/strong-name-an-assembly-without-source-code/</link>
		<comments>http://chrisbenard.net/2009/07/16/strong-name-an-assembly-without-source-code/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 17:57:11 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[strong name]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=233</guid>
		<description><![CDATA[Because I program in the 1970’s, part of what I do is programming against modems and serial ports. Specifically, we send medical claims over modem to adjudicators, in the event of unavailable internet access. As a customer, you’ll appreciate having your pharmacy delay you for 20 seconds rather than saying “Sorry; you can’t have your [...]]]></description>
			<content:encoded><![CDATA[<p>Because I program in the 1970’s, part of what I do is programming against modems and serial ports. Specifically, we send medical claims over modem to adjudicators, in the event of unavailable internet access. As a customer, you’ll appreciate having your pharmacy delay you for 20 seconds rather than saying “Sorry; you can’t have your medicine.”</p>
<p>While taking a break from disco dancing, I was trying to add a <a href="http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx">strong name</a> to one of our projects. One of the requirements, however, for strong naming is that all of the assemblies you reference must be strong named as well. All are, except one: <a href="http://www.wcscnet.com/CdrvLNBro.htm">COMM-DRV/Lib.Net</a>. We use this assembly to talk to the modems, because it abstracts a lot of the serial communications and allows us to program against a logical “modem&#8221;.</p>
<p>I called the vendor, <a href="http://www.wcscnet.com">Willies Computer Software Company</a>, and he said that we’d have to have the source license to strong name, but I asked why they don’t strong name their own binary distribution. He just kept saying they don’t do that, and we’d have to buy the source license. We didn’t need to make changes to their code, though; in fact, I already did that by inheriting their class and hiding some methods with new ones.</p>
<p>So, I set about trying to find out how to strong name an assembly for which you do not have the source. The short answer is “you can’t.” The longer answer is “You can’t, unless you disassemble it, reassemble it, while signing at the same time, and only if it’s not obfuscated.” I finally found the answer I was looking for at <a href="http://www.geekzilla.co.uk/ViewCE64BEF3-51A6-4F1C-90C9-6A76B015C9FB.htm">geekzilla</a>.</p>
<p>Here are the steps you need (back up your old assembly):</p>
<h3>Create a Key Pair</h3>
<p>This is only necessary, of course, if you don&#8217;t already have one generated for yourself or your company.</p>
<pre class="brush:plain">sn.exe -k C:\Path\To\KeyPair.snk</pre>
<h3>Disassemble the Assembly into IL</h3>
<pre class="brush:plain">ildasm.exe CdrvLibNet.dll /out:CdrvLibNet.il</pre>
<h3>Reassemble the Assembly from IL While Signing</h3>
<pre class="brush:plain">ilasm.exe CdrvLibNet.il /dll /output=CdrvLibNet-StrongNamed.dll /key=C:\Path\To\KeyPair.snk</pre>
<h3>The Result</h3>
<p>Thankfully, everything worked great, because their assembly was not obfuscated (it’s basically a .Net wrapper around their C++ unmanaged, native DLL product, so no real intellectual property to steal here). Now, we have their product strong named with our public key, and we are able to build on top of it with a strong named product of our own.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/07/16/strong-name-an-assembly-without-source-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How Insensitive</title>
		<link>http://chrisbenard.net/2009/07/15/how-insensitive/</link>
		<comments>http://chrisbenard.net/2009/07/15/how-insensitive/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 14:32:23 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[case]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[insensitivity]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[sensitivity]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=225</guid>
		<description><![CDATA[Update: Added section at the bottom detailing what not to do. As part of the updater process that I wrote for a current project, a “boot strapper” program queries the database for available versions, and if there is a newer version available, it deletes the current program folder, replaces those files with the new files, [...]]]></description>
			<content:encoded><![CDATA[<p class="new"><strong>Update:</strong> Added section at the bottom detailing what <strong>not</strong> to do.</p>
<p>As part of the updater process that I wrote for a current project, a “boot strapper” program queries the database for available versions, and if there is a newer version available, it deletes the current program folder, replaces those files with the new files, and then executes the main program executable. If there are no newer versions, it simply executes the main program executable immediately. This gives the user they are executing the program itself, instead of the “invisible” boot strapper, but we are able to easily manage updates in this manner.</p>
<p>Obviously, if you are a .Net developer, you know about the venerable <a href="http://generally.wordpress.com/2007/09/27/using-appconfig-for-user-defined-runtime-parameters/">app.config</a>, which is used to set program parameters at run-time, rather than at design time. Because these can contain changes to our connection strings and custom configuration sections, we wanted to preserve this and other special files that may be used in the future. As our solution, we created a whitelist of files that we do want to replace, that looked like this:</p>
<pre class="brush:csharp">        ///
        /// Extensions of files that may be deleted during uninstall/reinstall.
        ///
        private List _deletableExtensions = new List(
            new string[] { ".exe", ".dll", ".pdb", ".chm", ".manifest" });

        private bool canDeleteOrOverwrite(FileInfo file)
        {
            // Only delete files with specific extensions.
            bool canDelete = _deletableExtensions.Contains(file.Extension);

            return canDelete;
        }</pre>
<p>Before anybody murders me, we camel case private methods and underscore prefix and camel case private class-level variables here. As you can see, this will allow deletion of executables, class libraries, debug symbols, help files, and manifests. However, we had a problem in my code that didn’t surface until yesterday. We were trying to figure out why one file out of all the files in the directory was remaining an older version, “ActiveReports3.DLL”.</p>
<p>What may be obvious to the reader, especially considering the title of this post, is that my <a href="http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx">List&lt;T&gt;.Contains()</a> check, by default, is case sensitive, and “.DLL” != “.dll”. This required quite a bit of stepping through code to find, as I wrote this code a long time ago. A simple press of &#8220;Ctrl+Shift+Space” revealed that there was an overload of <a href="http://msdn.microsoft.com/en-us/library/bb339118.aspx">IEnumerable&lt;T&gt;.Contains</a>(T item, <a href="http://msdn.microsoft.com/en-us/library/ms132151.aspx">IEqualityComparer&lt;T&gt;</a> comparer).</p>
<p>Because I’ve had to do this in the past, I knew that, because my T in this case was string, all I needed to do was use the <a href="http://msdn.microsoft.com/en-us/library/system.stringcomparer.aspx">StringComparer</a>, which implements the IEqualityComparer&lt;string&gt; interface. Because it is filenames, and we are working with Visual Studio generated files, we care neither about culture nor case in this instance. Here is the revised, working version:</p>
<pre class="brush:csharp">        ///
        /// Extensions of files that may be deleted during uninstall/reinstall.
        ///
        private List _deletableExtensions = new List(
            new string[] { ".exe", ".dll", ".pdb", ".chm", ".manifest" });

        private bool canDeleteOrOverwrite(FileInfo file)
        {
            // Only delete files with specific extensions.
            bool canDelete = _deletableExtensions.Contains(
                file.Extension,
                StringComparer.InvariantCultureIgnoreCase);

            return canDelete;
        }</pre>
<p>That’s it! That tiny change fixed our issue and allowed the boot strapper to overwrite that file. It’s amazing that a simple little omission like that can lead to such a strange problem manifesting itself. Everybody makes mistakes; I just thought I’d showcase one of my errors and how I fixed it.</p>
<p>After talking to one of my coworkers about this post, he mentioned something that we have both seen done to &#8220;work around&#8221; this particular problem, which should not be done. This is what I have seen before in others&#8217; code:</p>
<pre class="brush:csharp">        ///
        /// Extensions of files that may be deleted during uninstall/reinstall.
        ///
        private List _deletableExtensions = new List(
            new string[] { ".exe", ".dll", ".pdb", ".chm", ".manifest" });

        private bool canDeleteOrOverwrite(FileInfo file)
        {
            bool canDelete = false;

            // Only delete files with specific extensions.
            foreach (string currentExtension in _deletableExtensions)
            {
                if (currentExtesion.ToLower() == file.Extension.ToLower())
                {
                    canDelete = true;
                    break;
                }
            }

            return canDelete;
        }</pre>
<p>This creates a LOT of strings on the heap in the process is and is very inefficient. It&#8217;s much better to let .Net handle itself and just let it know whether you care about culture and/or case sensitivity.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/07/15/how-insensitive/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Day Late and a Property Declaration Short</title>
		<link>http://chrisbenard.net/2009/07/07/a-day-late-and-a-property-declaration-short/</link>
		<comments>http://chrisbenard.net/2009/07/07/a-day-late-and-a-property-declaration-short/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 13:32:25 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[auto-implemented properties]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[properties]]></category>
		<category><![CDATA[property]]></category>

		<guid isPermaLink="false">http://chrisbenard.net/?p=182</guid>
		<description><![CDATA[I know this is a bit late to the game, but this morning, as I’m refactoring a bunch of old code to be shared with a new project, I’m cleaning up the C# 2.0 property declarations we all know and love: public class SaleResponse : Response { protected bool _addressVerificationSuccess; public virtual bool AddressVerificationSuccess { [...]]]></description>
			<content:encoded><![CDATA[<p>I know this is a bit late to the game, but this morning, as I’m refactoring a bunch of old code to be shared with a new project, I’m cleaning up the C# 2.0 property declarations we all know and love:</p>
<pre class="brush:csharp">    public class SaleResponse : Response
    {
        protected bool _addressVerificationSuccess;
        public virtual bool AddressVerificationSuccess
        {
            [DebuggerStepThrough]
            get { return _addressVerificationSuccess; }
            [DebuggerStepThrough]
            set { _addressVerificationSuccess = value; }
        }

        protected bool _cvvVerificationSuccess;
        public virtual bool CvvSuccess
        {
            [DebuggerStepThrough]
            get { return _cvvVerificationSuccess; }
            [DebuggerStepThrough]
            set { _cvvVerificationSuccess = value; }
        }

        protected string _authorizationCode = string.Empty;
        public virtual string AuthorizationCode
        {
            [DebuggerStepThrough]
            get { return _authorizationCode; }
            [DebuggerStepThrough]
            set { _authorizationCode = value; }
        }

        protected string _referenceNumber = string.Empty;
        public virtual string ReferenceNumber
        {
            [DebuggerStepThrough]
            get { return _referenceNumber; }
            [DebuggerStepThrough]
            set { _referenceNumber = value; }
        }

        protected decimal? _authorizedAmount;
        public virtual decimal? AuthorizedAmount
        {
            [DebuggerStepThrough]
            get { return this._authorizedAmount; }
            [DebuggerStepThrough]
            set { this._authorizedAmount = value; }
        }
    }</pre>
<p>This code is, of course because I wrote it, wonderful and has no flaws, and I used the prop snippet to create the private variable and public property getter and setter. However, I have all those DebuggerStepThrough attributes in there, due to the lovely fun of stepping through code that references properties. That avoids stepping in and out of the property declarations.</p>
<p>Thank the flying spaghetti monster that now, in C# 3.0 (and of course 3.5, 4.0 and on), Microsoft has given us <a href="http://msdn.microsoft.com/en-us/library/bb384054.aspx">auto-implemented properties</a>. This is now the equivalent code, avoiding the stepping in/out of the get/set and not requiring the declaration of a private variable:</p>
<pre class="brush:csharp">    public class SaleResponse : Response
    {
        public virtual bool AddressVerificationSuccess { get; set; }
        public virtual bool CvvSuccess { get; set; }
        public virtual string AuthorizationCode { get; set; }
        public virtual string ReferenceNumber { get; set; }
        public virtual decimal? AuthorizedAmount { get; set; }
    }</pre>
<p>When I first learned this trick, I was extremely thankful to be able to do this as an even shorter shortcut to using the prop snippet and it makes the code a lot prettier. What I didn’t immediately realize is how to control scoping. Let’s say, for instance, I want that AuthorizationCode property to only be able to be set from inside the class itself, and I only want the AuthorizedAmount property to be able to get set from inside the class and inherited classes. I can then change those declarations like this:</p>
<pre class="brush:csharp">    public class SaleResponse : Response
    {
        public virtual bool AddressVerificationSuccess { get; set; }
        public virtual bool CvvSuccess { get; set; }
        // This can now only be set from inside the class
        public virtual string AuthorizationCode { get; private set; }
        public virtual string ReferenceNumber { get; set; }
        // This can now only be set from inside the class and those that inherit from it
        public virtual decimal? AuthorizedAmount { get; protected set; }
    }</pre>
<p>This allows you to control the scoping of the getter and setter independently. By default, they inherit the visibility of the property declaration, in this case, public for all. I’m always thankful for the tools Microsoft gives me to make my life easier and to give me more time to spend on the actual work, rather than installing plumbing.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisbenard.net/2009/07/07/a-day-late-and-a-property-declaration-short/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
