<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Nitriq Blog</title>
    <link>http://blog.nitriq.com/</link>
    <description>Official Blog of Nitriq Code Analysis for .Net</description>
    <language>en-us</language>
    <copyright>Jon von Gillern</copyright>
    <lastBuildDate>Thu, 03 Nov 2011 02:18:55 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>von@nitriq.com</managingEditor>
    <webMaster>von@nitriq.com</webMaster>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=7997ca34-a60c-44dc-827a-3db4c5927e8a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,7997ca34-a60c-44dc-827a-3db4c5927e8a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,7997ca34-a60c-44dc-827a-3db4c5927e8a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7997ca34-a60c-44dc-827a-3db4c5927e8a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">It is quite often that I'll find myself
wanting to duplicate a whole bunch of text, or wanting to copy and paste a vertical
"column" of code. You can do this by holding down the ALT key while selecting/dragging
your cursor, or you can hold ALT and SHIFT and use the arrow keys to create your selection.
I know this is kind of hard to understand just what exactly column select does for
you, so I created a 20 second screencast. 
<br /><br />
Just know that I start off by holding ALT then dragging down, then I start typing
"list.Add...". Once I'm done, I select the "column" of "1"s and paste them in the
first name field. These same shortcuts even work in <a href="http://notepad-plus-plus.org/">Notepad++</a>! 
<br /><br />
For those of you with overzealous corporate overlords, the file streams directly from
our server so you shouldn't have any problem with blocked content. 
<br /><br /><embed src="http://blog.nitriq.com/content/binary/columnSelect.swf" width="507" height="214" /><br /><br /></body>
      <title>Under Used VS Feature - Column Select</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,7997ca34-a60c-44dc-827a-3db4c5927e8a.aspx</guid>
      <link>http://blog.nitriq.com/UnderUsedVSFeatureColumnSelect.aspx</link>
      <pubDate>Thu, 03 Nov 2011 02:18:55 GMT</pubDate>
      <description>It is quite often that I'll find myself wanting to duplicate a whole bunch of text, or wanting to copy and paste a vertical "column" of code. You can do this by holding down the ALT key while selecting/dragging your cursor, or you can hold ALT and SHIFT and use the arrow keys to create your selection. I know this is kind of hard to understand just what exactly column select does for you, so I created a 20 second screencast. &lt;br /&gt;
&lt;br /&gt;
Just know that I start off by holding ALT then dragging down, then I start typing
"list.Add...". Once I'm done, I select the "column" of "1"s and paste them in the
first name field. These same shortcuts even work in &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt;! 
&lt;br /&gt;
&lt;br /&gt;
For those of you with overzealous corporate overlords, the file streams directly from
our server so you shouldn't have any problem with blocked content. 
&lt;br /&gt;
&lt;br /&gt;
&lt;embed src="http://blog.nitriq.com/content/binary/columnSelect.swf" width="507" height="214" /&gt; 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,7997ca34-a60c-44dc-827a-3db4c5927e8a.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=36d03a46-8e40-42d7-af7e-605b8347f099</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,36d03a46-8e40-42d7-af7e-605b8347f099.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,36d03a46-8e40-42d7-af7e-605b8347f099.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=36d03a46-8e40-42d7-af7e-605b8347f099</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I created a couple of images to print off
and use on our scrum board when we hit road blocks or when we're having some major
issues. I wanted to share them here in case you too could use them on your scrum board.<br /><br /><img border="0" src="http://blog.nitriq.com/content/binary/barrelMonster.png" /><br /><br /><img border="0" src="http://blog.nitriq.com/content/binary/siteIsDown.png" /></body>
      <title>Scrum board images</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,36d03a46-8e40-42d7-af7e-605b8347f099.aspx</guid>
      <link>http://blog.nitriq.com/ScrumBoardImages.aspx</link>
      <pubDate>Wed, 02 Nov 2011 04:43:07 GMT</pubDate>
      <description>I created a couple of images to print off and use on our scrum board when we hit road blocks or when we're having some major issues. I wanted to share them here in case you too could use them on your scrum board.&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://blog.nitriq.com/content/binary/barrelMonster.png"&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://blog.nitriq.com/content/binary/siteIsDown.png"&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,36d03a46-8e40-42d7-af7e-605b8347f099.aspx</comments>
      <category>fun</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=ca811151-6c2b-4f22-9fd4-6604f1b8b857</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,ca811151-6c2b-4f22-9fd4-6604f1b8b857.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,ca811151-6c2b-4f22-9fd4-6604f1b8b857.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ca811151-6c2b-4f22-9fd4-6604f1b8b857</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <i>We hope you enjoyed our little April
Fools joke this year</i>
        <br />
        <br />
Do you want to code with the sheer simplicity of x86 Machine Code without all of the
complicated “features” of 4th, 3rd or even 2nd generation languages, all the while
being able to run on top of .Net’s CLR? Well, this post is for you! 
<br /><br />
Let’s start with the current problems with “modern” programming languages today: 
<br /><br />
4th Generation Language? Who needs declarative markup or domain specific languages?
Sounds like a bunch of academics are just trying to get their next PhD instead of
helping me write awesomely fast code. Drowning a sack full of puppies is more fun
than debugging a slow stored procedure. 
<br /><br />
3rd Generation Language? OO? Structured Programming? Yeah, right, they should come
see the projects I’ve had to work on in the past, it was more like an object oriented
scaffolding to the depths of hell. I’d rather gouge my eyes out with salt covered
rusty fork than look at one more inheritance chain 30 levels deep. 
<br /><br />
2nd Generation Languages are getting closer, the speed is mostly there. But do we
really want to dumb down our craft just so some stupid people can “read” and “understand”
better? What does that say about our profession? If you can’t convert “<span style="font-family:courier new;">XOR
CL, [12H]</span>” to “<span style="font-family:courier new;">00110010 00001110 00010010
00000000</span>” in your head, please give up on life because you will never amount
to anything. 
<br /><br />
It is simple really, just write all of your machine language in a single .ml file,
and run the machine lang compiler (mlc.exe) and you’ll have a new .net executable
waiting for you in the same directory as your .ml file, than can run on any machine
with the .Net framework on it. 
<br /><br /><div style="font-family:courier new;">
Example: HelloWorld.ml<br />
00010100 00010001 00000101 00001111 
<br />
00111110 11010101 01111011 00011100 
<br />
11001100 10101001 00101011 10001110 
<br />
01010001 11111110 01101001 11010110 
<br />
00110101 00100000 00011000 11111001 
<br />
11001010 11111101 10111001 00011001 
<br />
11111101 11111111 00001001 10000010 
<br />
11110111 00010001 10010100 10000000 
<br />
00011001 00011000 01110101 10101011 
<br />
10110111 00000001 11011000 00100100 
<br />
10010001 11111101 10111100 11011100 
<br />
01101100 01111111 10000001 11101110 
<br />
10010010 10001110 01110000 11001101 
<br />
11101101 00001010 01001010 00000101 
<br />
11001010 01101100 00101011 00011011 
<br />
10001100 11111010 11011001 11001010 
<br />
01101011 00010111 11101110 01010101 
<br />
00111011 10101001 01100001 00001100 
<br />
01110011 00011011 01110000 01001011 
<br />
00001001 11101100 10100101 00111111 
<br /></div><br />
Then just open up your command line and run the following command: 
<div style="font-family:courier new;">
mlc.exe -in HelloWorld.ml -out HelloWorld.exe 
<br /></div><br />
You can <strong>AND SHOULD</strong> download and run the <strong><a href="/content/binary/mlcHelloWorld.zip">HelloWorld
example here</a></strong>. You'll smile when you're done, I promise. 
<br /><br />
If you're afraid that you may have some duplicate code in your next MachineLang.Net
project, be sure to check out <a href="http://www.getatomiq.com">Atomiq Duplicate
Code Finder</a>. 
<br /><br /></body>
      <title>Introducing MachineLang.Net</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,ca811151-6c2b-4f22-9fd4-6604f1b8b857.aspx</guid>
      <link>http://blog.nitriq.com/IntroducingMachineLangNet.aspx</link>
      <pubDate>Fri, 01 Apr 2011 13:27:21 GMT</pubDate>
      <description>&lt;i&gt;We hope you enjoyed our little April Fools joke this year&lt;/i&gt; 
&lt;br /&gt;
&lt;br /&gt;
Do you want to code with the sheer simplicity of x86 Machine Code without all of the
complicated “features” of 4th, 3rd or even 2nd generation languages, all the while
being able to run on top of .Net’s CLR? Well, this post is for you! 
&lt;br /&gt;
&lt;br /&gt;
Let’s start with the current problems with “modern” programming languages today: 
&lt;br /&gt;
&lt;br /&gt;
4th Generation Language? Who needs declarative markup or domain specific languages?
Sounds like a bunch of academics are just trying to get their next PhD instead of
helping me write awesomely fast code. Drowning a sack full of puppies is more fun
than debugging a slow stored procedure. 
&lt;br /&gt;
&lt;br /&gt;
3rd Generation Language? OO? Structured Programming? Yeah, right, they should come
see the projects I’ve had to work on in the past, it was more like an object oriented
scaffolding to the depths of hell. I’d rather gouge my eyes out with salt covered
rusty fork than look at one more inheritance chain 30 levels deep. 
&lt;br /&gt;
&lt;br /&gt;
2nd Generation Languages are getting closer, the speed is mostly there. But do we
really want to dumb down our craft just so some stupid people can “read” and “understand”
better? What does that say about our profession? If you can’t convert “&lt;span style="font-family:courier new;"&gt;XOR
CL, [12H]&lt;/span&gt;” to “&lt;span style="font-family:courier new;"&gt;00110010 00001110 00010010
00000000&lt;/span&gt;” in your head, please give up on life because you will never amount
to anything. 
&lt;br /&gt;
&lt;br /&gt;
It is simple really, just write all of your machine language in a single .ml file,
and run the machine lang compiler (mlc.exe) and you’ll have a new .net executable
waiting for you in the same directory as your .ml file, than can run on any machine
with the .Net framework on it. 
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family:courier new;"&gt;
Example: HelloWorld.ml&lt;br /&gt;
00010100 00010001 00000101 00001111 
&lt;br /&gt;
00111110 11010101 01111011 00011100 
&lt;br /&gt;
11001100 10101001 00101011 10001110 
&lt;br /&gt;
01010001 11111110 01101001 11010110 
&lt;br /&gt;
00110101 00100000 00011000 11111001 
&lt;br /&gt;
11001010 11111101 10111001 00011001 
&lt;br /&gt;
11111101 11111111 00001001 10000010 
&lt;br /&gt;
11110111 00010001 10010100 10000000 
&lt;br /&gt;
00011001 00011000 01110101 10101011 
&lt;br /&gt;
10110111 00000001 11011000 00100100 
&lt;br /&gt;
10010001 11111101 10111100 11011100 
&lt;br /&gt;
01101100 01111111 10000001 11101110 
&lt;br /&gt;
10010010 10001110 01110000 11001101 
&lt;br /&gt;
11101101 00001010 01001010 00000101 
&lt;br /&gt;
11001010 01101100 00101011 00011011 
&lt;br /&gt;
10001100 11111010 11011001 11001010 
&lt;br /&gt;
01101011 00010111 11101110 01010101 
&lt;br /&gt;
00111011 10101001 01100001 00001100 
&lt;br /&gt;
01110011 00011011 01110000 01001011 
&lt;br /&gt;
00001001 11101100 10100101 00111111 
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
Then just open up your command line and run the following command: 
&lt;div style="font-family:courier new;"&gt;
mlc.exe -in HelloWorld.ml -out HelloWorld.exe 
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
You can &lt;strong&gt;AND SHOULD&lt;/strong&gt; download and run the &lt;strong&gt;&lt;a href="/content/binary/mlcHelloWorld.zip"&gt;HelloWorld
example here&lt;/a&gt;&lt;/strong&gt;. You'll smile when you're done, I promise. 
&lt;br /&gt;
&lt;br /&gt;
If you're afraid that you may have some duplicate code in your next MachineLang.Net
project, be sure to check out &lt;a href="http://www.getatomiq.com"&gt;Atomiq Duplicate
Code Finder&lt;/a&gt;. 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,ca811151-6c2b-4f22-9fd4-6604f1b8b857.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=2320e099-8f88-4bcb-a4cf-9e27ff185daf</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,2320e099-8f88-4bcb-a4cf-9e27ff185daf.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,2320e099-8f88-4bcb-a4cf-9e27ff185daf.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2320e099-8f88-4bcb-a4cf-9e27ff185daf</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">After a long thought processes, we've decided
to make <strong><a href="http://www.nitriq.com">Nitriq Pro</a> completely free!</strong>. 
<br /><br />
Just use the discount code "ANALYZEFORFREE" when checking out and Nitriq Pro will
go from $39 to $0. Unlike the previous free version of <a href="http://www.nitriq.com">Nitriq</a>,
Nitriq Pro doesn't have any feature restrictions at all. This you can analyze as many
assemblies as you'd like at the same time for free. 
<br /><br />
If you've already purchased Nitriq Pro in the past year, we'll be emailing you a complementary
license of <a href="http://www.nitriq.com/console/">Nitriq Console</a> so you can
integrate Nitriq Code Analysis into your automated build machine. 
<br /><br />
If you like Nitriq, please be sure to check out our other product - <a href="http://www.getatomiq.com" />Atomiq
Duplicate Code Finder. 
<br /><br /></body>
      <title>Nitriq Pro Is Now Totally Free!</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,2320e099-8f88-4bcb-a4cf-9e27ff185daf.aspx</guid>
      <link>http://blog.nitriq.com/NitriqProIsNowTotallyFree.aspx</link>
      <pubDate>Wed, 23 Mar 2011 12:24:48 GMT</pubDate>
      <description>After a long thought processes, we've decided to make &lt;strong&gt;&lt;a href="http://www.nitriq.com"&gt;Nitriq
Pro&lt;/a&gt; completely free!&lt;/strong&gt;. 
&lt;br /&gt;
&lt;br /&gt;
Just use the discount code "ANALYZEFORFREE" when checking out and Nitriq Pro will
go from $39 to $0. Unlike the previous free version of &lt;a href="http://www.nitriq.com"&gt;Nitriq&lt;/a&gt;,
Nitriq Pro doesn't have any feature restrictions at all. This you can analyze as many
assemblies as you'd like at the same time for free. 
&lt;br /&gt;
&lt;br /&gt;
If you've already purchased Nitriq Pro in the past year, we'll be emailing you a complementary
license of &lt;a href="http://www.nitriq.com/console/"&gt;Nitriq Console&lt;/a&gt; so you can
integrate Nitriq Code Analysis into your automated build machine. 
&lt;br /&gt;
&lt;br /&gt;
If you like Nitriq, please be sure to check out our other product - &lt;a href="http://www.getatomiq.com" /&gt;Atomiq
Duplicate Code Finder&gt;. 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,2320e099-8f88-4bcb-a4cf-9e27ff185daf.aspx</comments>
      <category>Nitriq</category>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=85328e8f-0e7b-4749-b80c-c9a7fe5f7bd1</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,85328e8f-0e7b-4749-b80c-c9a7fe5f7bd1.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,85328e8f-0e7b-4749-b80c-c9a7fe5f7bd1.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=85328e8f-0e7b-4749-b80c-c9a7fe5f7bd1</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">If you're a Microsoft MVP and would like
a free license for <a href="http://www.nitriq.com">Nitriq</a> or <a href="http://www.getatomiq.com">Atomiq</a> all
you have to do is shoot an email to mvp [at] nitriq [dot] com. It is our way of saying
thanks for helping the community.<br /><br /></body>
      <title>Free Licenses for Microsoft MVPs</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,85328e8f-0e7b-4749-b80c-c9a7fe5f7bd1.aspx</guid>
      <link>http://blog.nitriq.com/FreeLicensesForMicrosoftMVPs.aspx</link>
      <pubDate>Thu, 03 Mar 2011 13:16:30 GMT</pubDate>
      <description>If you're a Microsoft MVP and would like a free license for &lt;a href="http://www.nitriq.com"&gt;Nitriq&lt;/a&gt; or &lt;a href="http://www.getatomiq.com"&gt;Atomiq&lt;/a&gt; all
you have to do is shoot an email to mvp [at] nitriq [dot] com. It is our way of saying
thanks for helping the community.&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,85328e8f-0e7b-4749-b80c-c9a7fe5f7bd1.aspx</comments>
      <category>Atomiq</category>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=0170f78b-b3c0-4f30-a9d4-ee4348ef7068</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,0170f78b-b3c0-4f30-a9d4-ee4348ef7068.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,0170f78b-b3c0-4f30-a9d4-ee4348ef7068.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0170f78b-b3c0-4f30-a9d4-ee4348ef7068</wfw:commentRss>
      <title>"I Didn't Know You Could Do That" - .Net Tips and Tricks Notes</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,0170f78b-b3c0-4f30-a9d4-ee4348ef7068.aspx</guid>
      <link>http://blog.nitriq.com/IDidntKnowYouCouldDoThatNetTipsAndTricksNotes.aspx</link>
      <pubDate>Wed, 03 Nov 2010 17:31:56 GMT</pubDate>
      <description>I've given my .Net Tips and Tricks presentation a few times the past couple months and thought I'd share the notes that I used. Sorry it has taken me so long to get these posted.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://docs.google.com/Doc?docid=0AX3LeISYSmhFZHFtcm1zZF8yMzBmcHpyM21jNQ&amp;authkey=CM7zgroF&amp;hl=en" target="_blank"&gt;.Net
Tips and Tricks Notes&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,0170f78b-b3c0-4f30-a9d4-ee4348ef7068.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=75d7afdf-61ae-443b-b0ee-18fd96b15d60</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,75d7afdf-61ae-443b-b0ee-18fd96b15d60.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,75d7afdf-61ae-443b-b0ee-18fd96b15d60.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=75d7afdf-61ae-443b-b0ee-18fd96b15d60</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I was lucky enough to present "A Developer's
Guide to Expression Blend" at <a href="http://www.stlouisdayofdotnet.com">St. Louis
Day of .Net</a> a couple of weekends ago. And I created a cheat sheet to hand out
to everyone. 
<br /><br />
Download and feel free to distribute, just please link back to this blog post in case
I release a new version. (I am a developer, not a designer, so it isn't the prettiest
thing in the world but it gets the job done). 
<br /><br /><a href="http://blog.nitriq.com/content/binary/DevelopersGuidetoBlend.pdf" target="_blank">Developer's
Guide to Blend [PDF]</a><br /><br />
I'll be giving the same presentation at <a href="http://www.heartlanddc.com">Heartland
Developer's Conference</a> next week as well as at <a href="http://mdc.ilmservice.com">Minnesota
Developer's Conference</a> at the end of September. I hope to run into some of you
there! 
<br /><br />
[Edit: Fixed pdf link, doh!]<br />
[Edit #2: Actually fixed pdf link, I can tell it is Friday] 
<br /><br /></body>
      <title>Developer's Guide to Blend Cheat Sheet</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,75d7afdf-61ae-443b-b0ee-18fd96b15d60.aspx</guid>
      <link>http://blog.nitriq.com/DevelopersGuideToBlendCheatSheet.aspx</link>
      <pubDate>Fri, 03 Sep 2010 14:36:29 GMT</pubDate>
      <description>I was lucky enough to present "A Developer's Guide to Expression Blend" at &lt;a href="http://www.stlouisdayofdotnet.com"&gt;St.
Louis Day of .Net&lt;/a&gt; a couple of weekends ago. And I created a cheat sheet to hand
out to everyone. 
&lt;br /&gt;
&lt;br /&gt;
Download and feel free to distribute, just please link back to this blog post in case
I release a new version. (I am a developer, not a designer, so it isn't the prettiest
thing in the world but it gets the job done). 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blog.nitriq.com/content/binary/DevelopersGuidetoBlend.pdf" target="_blank"&gt;Developer's
Guide to Blend [PDF]&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
I'll be giving the same presentation at &lt;a href="http://www.heartlanddc.com"&gt;Heartland
Developer's Conference&lt;/a&gt; next week as well as at &lt;a href="http://mdc.ilmservice.com"&gt;Minnesota
Developer's Conference&lt;/a&gt; at the end of September. I hope to run into some of you
there! 
&lt;br /&gt;
&lt;br /&gt;
[Edit: Fixed pdf link, doh!]&lt;br /&gt;
[Edit #2: Actually fixed pdf link, I can tell it is Friday] 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,75d7afdf-61ae-443b-b0ee-18fd96b15d60.aspx</comments>
      <category>Blend</category>
      <category>Design</category>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=7550faa4-e391-47e0-88c2-a1bb010052d5</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,7550faa4-e391-47e0-88c2-a1bb010052d5.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,7550faa4-e391-47e0-88c2-a1bb010052d5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7550faa4-e391-47e0-88c2-a1bb010052d5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Some of you may have noticed that the Nitriq <a href="http://blog.nitriq.com">blog</a> and <a href="http://www.nitriq.com">website</a> may
have been inaccessible for parts of later last week. More troubling, emails you may
have sent to any "@nitriq.com" email address from Wednesday through Saturday may have
bounced or worse yet failed to make it to our inboxes without you getting an error
message. 
<br /><br />
I'm incredibly sorry for the inconvenience. If you've sent an email to a Nitriq account
from Wednesday through Saturday and haven't yet received a response, please re-send
it and we'll be sure to answer ASAP. Everything should be back to normal right now. 
<br /><br /></body>
      <title>Oh Noes! DNS Issues</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,7550faa4-e391-47e0-88c2-a1bb010052d5.aspx</guid>
      <link>http://blog.nitriq.com/OhNoesDNSIssues.aspx</link>
      <pubDate>Tue, 20 Jul 2010 12:16:16 GMT</pubDate>
      <description>Some of you may have noticed that the Nitriq &lt;a href="http://blog.nitriq.com"&gt;blog&lt;/a&gt; and &lt;a href="http://www.nitriq.com"&gt;website&lt;/a&gt; may
have been inaccessible for parts of later last week. More troubling, emails you may
have sent to any "@nitriq.com" email address from Wednesday through Saturday may have
bounced or worse yet failed to make it to our inboxes without you getting an error
message. 
&lt;br /&gt;
&lt;br /&gt;
I'm incredibly sorry for the inconvenience. If you've sent an email to a Nitriq account
from Wednesday through Saturday and haven't yet received a response, please re-send
it and we'll be sure to answer ASAP. Everything should be back to normal right now. 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,7550faa4-e391-47e0-88c2-a1bb010052d5.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=5f29c700-1bf7-47cc-99d5-5cdc9e43d06f</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,5f29c700-1bf7-47cc-99d5-5cdc9e43d06f.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,5f29c700-1bf7-47cc-99d5-5cdc9e43d06f.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5f29c700-1bf7-47cc-99d5-5cdc9e43d06f</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">A few days ago I ran across a tweet by
a Ruby developer who I’ve been following for a while, in which he asks for someone
to <i>“... actually explain the value of Visual Studio and intellisense in terms I
can understand?”</i> At first, I responded with the top two things in my head: 
<br /><br />
1. It drastically reduces how much typing I have to do<br />
2. It helps me learn a new API 
<br /><br />
He seemed to be under a misconception about the speed of intellisense, I understand
why he might have thought that but it really hasn’t been an issue for several years
now. But what really got me thinking is when he responded <i>“It just seems to me
that if intellisense really drastically reduces typing, perhaps the language is too
verbose”</i>. 
<br /><br />
I think the larger misconception he has is that Ruby developers solve the same kinds
of problems as .Net developers. They don’t. Not even kinda. And it is these differences
in the kinds of apps we build that make things like an IDE and intellisense indispensable.
In general, Ruby developers create small to medium size websites - content management
systems, small social networks and online storefronts. On the other hand, .Net developers
create a lot of large scale enterprise applications. There are countless .net projects
that have 50+ developers, the average .Net team probably has 15+ developers. When
you need 3+ people just to describe what the business needs, the resulting code is
going to be verbose. How big is the average Ruby team? Two or three dudes? 
<br /><br />
I am <b>not</b> saying that Ruby sucks. It is an incredibly cool language that can
help .Net developers to look at their code through a different light. Remove Ceremony?
Great Idea! TDD? Sweet! MVC? Booya! Convention over Configuration? HELLS YES. But
even after borrowing as much as we can from Ruby, it isn’t going to make the gigantic
complicated sales management system for a Fortune 500 company be not gigantic and
complicated. Hopefully it will be a slightly smaller and more simple, but that application
is never going to be so simple that you don’t need an IDE or intellisense. 
<br /><br /><hr />
If you happen to work on a beast of project with a large team and you need help finding
the troublesome spots you should really check out <a href="http://www.nitriq.com">Nitriq</a> and <a href="http://www.getatomiq.com">Atomiq</a>.
There is a free version of <a href="http://www.nitriq.com">Nitriq</a> - it lets you
query your .Net assemblies with LINQ. You can think of it as a super configurable,
easy to use FXCop. <a href="http://www.getatomiq.com">Atomiq</a> finds and visualizes
all the places that someone has copy and pasted code in your project. When I tell
people what Atomiq does, about 90% of them get a smirk on their face because they
know how much this happens in their project. If you're smirking right now, <a href="http://www.getatomiq.com/features/">just
go look at it!</a><br /><br />
UPDATE: There is a pretty good discussion going on at <a href="http://news.ycombinator.com/item?id=1514399">Hacker
News</a>. 
<br /><br /></body>
      <title>Ruby and .Net Developers Solve Two Different Kinds of Problems</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,5f29c700-1bf7-47cc-99d5-5cdc9e43d06f.aspx</guid>
      <link>http://blog.nitriq.com/RubyAndNetDevelopersSolveTwoDifferentKindsOfProblems.aspx</link>
      <pubDate>Wed, 14 Jul 2010 12:27:12 GMT</pubDate>
      <description>A few days ago I ran across a tweet by a Ruby developer who I’ve been following for a while, in which he asks for someone to &lt;i&gt;“...
actually explain the value of Visual Studio and intellisense in terms I can understand?”&lt;/i&gt; At
first, I responded with the top two things in my head: 
&lt;br /&gt;
&lt;br /&gt;
1. It drastically reduces how much typing I have to do&lt;br /&gt;
2. It helps me learn a new API 
&lt;br /&gt;
&lt;br /&gt;
He seemed to be under a misconception about the speed of intellisense, I understand
why he might have thought that but it really hasn’t been an issue for several years
now. But what really got me thinking is when he responded &lt;i&gt;“It just seems to me
that if intellisense really drastically reduces typing, perhaps the language is too
verbose”&lt;/i&gt;. 
&lt;br /&gt;
&lt;br /&gt;
I think the larger misconception he has is that Ruby developers solve the same kinds
of problems as .Net developers. They don’t. Not even kinda. And it is these differences
in the kinds of apps we build that make things like an IDE and intellisense indispensable.
In general, Ruby developers create small to medium size websites - content management
systems, small social networks and online storefronts. On the other hand, .Net developers
create a lot of large scale enterprise applications. There are countless .net projects
that have 50+ developers, the average .Net team probably has 15+ developers. When
you need 3+ people just to describe what the business needs, the resulting code is
going to be verbose. How big is the average Ruby team? Two or three dudes? 
&lt;br /&gt;
&lt;br /&gt;
I am &lt;b&gt;not&lt;/b&gt; saying that Ruby sucks. It is an incredibly cool language that can
help .Net developers to look at their code through a different light. Remove Ceremony?
Great Idea! TDD? Sweet! MVC? Booya! Convention over Configuration? HELLS YES. But
even after borrowing as much as we can from Ruby, it isn’t going to make the gigantic
complicated sales management system for a Fortune 500 company be not gigantic and
complicated. Hopefully it will be a slightly smaller and more simple, but that application
is never going to be so simple that you don’t need an IDE or intellisense. 
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
If you happen to work on a beast of project with a large team and you need help finding
the troublesome spots you should really check out &lt;a href="http://www.nitriq.com"&gt;Nitriq&lt;/a&gt; and &lt;a href="http://www.getatomiq.com"&gt;Atomiq&lt;/a&gt;.
There is a free version of &lt;a href="http://www.nitriq.com"&gt;Nitriq&lt;/a&gt; - it lets you
query your .Net assemblies with LINQ. You can think of it as a super configurable,
easy to use FXCop. &lt;a href="http://www.getatomiq.com"&gt;Atomiq&lt;/a&gt; finds and visualizes
all the places that someone has copy and pasted code in your project. When I tell
people what Atomiq does, about 90% of them get a smirk on their face because they
know how much this happens in their project. If you're smirking right now, &lt;a href="http://www.getatomiq.com/features/"&gt;just
go look at it!&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
UPDATE: There is a pretty good discussion going on at &lt;a href="http://news.ycombinator.com/item?id=1514399"&gt;Hacker
News&lt;/a&gt;. 
&lt;br /&gt;
&lt;br /&gt;
</description>
      <comments>http://blog.nitriq.com/CommentView,guid,5f29c700-1bf7-47cc-99d5-5cdc9e43d06f.aspx</comments>
      <category>Atomiq</category>
      <category>Flamebait</category>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=49ddf6bf-9c84-48d6-add0-75de635565f2</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,49ddf6bf-9c84-48d6-add0-75de635565f2.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,49ddf6bf-9c84-48d6-add0-75de635565f2.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=49ddf6bf-9c84-48d6-add0-75de635565f2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">After a lot of customers asking for Atomiq
to support more than just .Net languages, we're happy to announce that Atomiq now
supports Python, Ruby, Java, C, C++ and ActionScript. We've also made some minor enhancements
to the wheel view so it is easier to see where you have the most duplicate code. 
<br /><br />
If you've already purchased Atomiq, you can download the latest version (1.0.25.86)
from the <a href="http://nimblepros.com/myproducts.aspx">My Products</a> Page. 
<br /><br /><b><a href="http://nimblepros.com/products/atomiq/download.aspx">Download Atomiq Duplicate
Code Finder Trial</a></b><br /><br /></body>
      <title>Atomiq Now Supports Python, Ruby, Java, C, C++ and ActionScript</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,49ddf6bf-9c84-48d6-add0-75de635565f2.aspx</guid>
      <link>http://blog.nitriq.com/AtomiqNowSupportsPythonRubyJavaCCAndActionScript.aspx</link>
      <pubDate>Wed, 30 Jun 2010 15:45:13 GMT</pubDate>
      <description>After a lot of customers asking for Atomiq to support more than just .Net languages, we're happy to announce that Atomiq now supports Python, Ruby, Java, C, C++ and ActionScript. We've also made some minor enhancements to the wheel view so it is easier to see where you have the most duplicate code.
&lt;br /&gt;
&lt;br /&gt;
If you've already purchased Atomiq, you can download the latest version (1.0.25.86)
from the &lt;a href="http://nimblepros.com/myproducts.aspx"&gt;My Products&lt;/a&gt; Page. 
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://nimblepros.com/products/atomiq/download.aspx"&gt;Download Atomiq Duplicate
Code Finder Trial&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
&lt;br /&gt;

</description>
      <comments>http://blog.nitriq.com/CommentView,guid,49ddf6bf-9c84-48d6-add0-75de635565f2.aspx</comments>
      <category>Atomiq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=ca11b1ee-80ae-429c-93f4-ce4f48e95a4a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,ca11b1ee-80ae-429c-93f4-ce4f48e95a4a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,ca11b1ee-80ae-429c-93f4-ce4f48e95a4a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ca11b1ee-80ae-429c-93f4-ce4f48e95a4a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Jon von Gillern recently got to talk with
Carl and Richard from <a href="http://www.dotnetrocks.com/default.aspx?showNum=567">DotNetRocks</a> about <a href="http://www.nitriq.com">Nitriq
Code Analysis</a> and <a href="http://www.getatomiq.com">Atomiq Duplicate Code Finder</a>. <a href="http://www.dotnetrocks.com/default.aspx?showNum=567">You
can listen to the episode here.</a><br /><br />
Thanks to Carl and Richard! 
<br /><br /></body>
      <title>Listen to Jon Talk About Nitriq and Atomiq on DotNetRocks!</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,ca11b1ee-80ae-429c-93f4-ce4f48e95a4a.aspx</guid>
      <link>http://blog.nitriq.com/ListenToJonTalkAboutNitriqAndAtomiqOnDotNetRocks.aspx</link>
      <pubDate>Wed, 16 Jun 2010 12:45:02 GMT</pubDate>
      <description>Jon von Gillern recently got to talk with Carl and Richard from &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=567"&gt;DotNetRocks&lt;/a&gt; about &lt;a href="http://www.nitriq.com"&gt;Nitriq
Code Analysis&lt;/a&gt; and &lt;a href="http://www.getatomiq.com"&gt;Atomiq Duplicate Code Finder&lt;/a&gt;. &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=567"&gt;You
can listen to the episode here.&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
Thanks to Carl and Richard! 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,ca11b1ee-80ae-429c-93f4-ce4f48e95a4a.aspx</comments>
      <category>Atomiq</category>
      <category>CopyPasteKiller</category>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=99789679-7500-4a99-8e08-adc2ec4a5e04</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,99789679-7500-4a99-8e08-adc2ec4a5e04.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,99789679-7500-4a99-8e08-adc2ec4a5e04.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=99789679-7500-4a99-8e08-adc2ec4a5e04</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Simplify, Shorten and Speed Up Your LINQ Statements with "Let"</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,99789679-7500-4a99-8e08-adc2ec4a5e04.aspx</guid>
      <link>http://blog.nitriq.com/SimplifyShortenAndSpeedUpYourLINQStatementsWithLet.aspx</link>
      <pubDate>Tue, 11 May 2010 21:16:57 GMT</pubDate>
      <description>    I've been writing a lot of LINQ statements lately while working on &lt;a href="http://www.nitriq.com"&gt;Nitriq&lt;/a&gt; and
have come across a pretty cool LINQ keyword - "let". It allows you to specify an intermediate
calculation that can be referenced multiple times else where in your LINQ statement,
including the where and select clauses. 
&lt;br /&gt;
&lt;br /&gt;
As you can see below, this is how a lot of LINQ statements are written - a calculation
is done both in the where clause and in the select clause. This not only make the
code large and ugly, if this calculation is CPU intensive, you get hit with a performance
penalty because you are running the calculation twice!&lt;br /&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style="font-family:
Courier New;color:blue"&gt;var&lt;/span&gt;&lt;span style="font-family:Courier New"&gt; cheapCategories
= &lt;span style="color:blue"&gt;from&lt;/span&gt; cat &lt;span style="color:blue"&gt;in&lt;/span&gt; Categories&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family:
Courier New"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;span style="color:blue"&gt;where&lt;/span&gt;&lt; 100&lt;span style="mso-spacerun:yes"&gt; cat.Products.Average(p
=&gt; p.Price) 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;select&lt;/span&gt; &lt;span style="color:blue"&gt;new&lt;/span&gt; {
cat.Name, AvgPrice = cat.Products.Average(p =&gt; p.Price) };&lt;o:p&gt;&lt;/o:p&gt;
&gt;
&lt;/p&gt;
&lt;br /&gt;
However, if we use the let keyword, the code is shorter and the runtime only needs
to execute the average calculation once. 
&lt;br /&gt;
&lt;br /&gt;
&lt;p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none"&gt;
&lt;span style="font-family:
Courier New;color:blue"&gt;var&lt;/span&gt;&lt;span style="font-family:Courier New"&gt; cheapCategories
= &lt;span style="color:blue"&gt;from&lt;/span&gt; cat &lt;span style="color:blue"&gt;in&lt;/span&gt; Categories&lt;/span&gt;&lt;span style="font-family:
Courier New"&gt;&lt;span style="mso-spacerun:yes"&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;let&lt;/span&gt; AvgPrice = cat.Products.Average(p =&gt; p.Price) &lt;span style="mso-spacerun:yes"&gt; 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;where&lt;/span&gt;&lt; 100&lt;span style="mso-spacerun:yes"&gt; AvgPrice 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;select&lt;/span&gt; &lt;span style="color:blue"&gt;new&lt;/span&gt; {
cat.Name, AvgPrice };&lt;o:p&gt;&lt;/o:p&gt;
&gt;
&lt;/p&gt;
&lt;br /&gt;
While this is this is a small example, I promise the let keyword will help you tame
the monster LINQ statements lurking in your code. 
&lt;br /&gt;
&lt;br /&gt;
</description>
      <comments>http://blog.nitriq.com/CommentView,guid,99789679-7500-4a99-8e08-adc2ec4a5e04.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=929d2499-9f9f-432b-b98d-e1e331797421</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,929d2499-9f9f-432b-b98d-e1e331797421.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,929d2499-9f9f-432b-b98d-e1e331797421.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=929d2499-9f9f-432b-b98d-e1e331797421</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">We're happy to announce that Nitriq v1.0.25.84
now fully supports analyzing .Net 4.0 assemblies. Nitriq is still runs on the .Net
3.5 SP1 framework so you <b>do not</b> need to have .Net 4.0 installed if all you
want to do is analyze 2.0, 3.0 or 3.5 assemblies. However, if you wish to analyze
an assembly that targets .Net 4.0 you must have installed the 4.0 framework. 
<br /><br /><a href="http://www.nimblepros.com/products/nitriq/download.aspx">You can download
the latest free community edition of Nitriq here</a><br /><br />
Email <a href="mailto:support@nitriq.com">support@nitriq.com</a> if you have any questions
or comments. 
<br /><br /></body>
      <title>Nitriq Now Fully Supports .Net 4.0</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,929d2499-9f9f-432b-b98d-e1e331797421.aspx</guid>
      <link>http://blog.nitriq.com/NitriqNowFullySupportsNet40.aspx</link>
      <pubDate>Fri, 30 Apr 2010 15:53:10 GMT</pubDate>
      <description>We're happy to announce that Nitriq v1.0.25.84 now fully supports analyzing .Net 4.0 assemblies. Nitriq is still runs on the .Net 3.5 SP1 framework so you &lt;b&gt;do
not&lt;/b&gt; need to have .Net 4.0 installed if all you want to do is analyze 2.0, 3.0
or 3.5 assemblies. However, if you wish to analyze an assembly that targets .Net 4.0
you must have installed the 4.0 framework. 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.nimblepros.com/products/nitriq/download.aspx"&gt;You can download
the latest free community edition of Nitriq here&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
Email &lt;a href="mailto:support@nitriq.com"&gt;support@nitriq.com&lt;/a&gt; if you have any questions
or comments. 
&lt;br /&gt;
&lt;br /&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,929d2499-9f9f-432b-b98d-e1e331797421.aspx</comments>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=77e2d5d1-d666-4c51-b64a-0e8bb643873c</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,77e2d5d1-d666-4c51-b64a-0e8bb643873c.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,77e2d5d1-d666-4c51-b64a-0e8bb643873c.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=77e2d5d1-d666-4c51-b64a-0e8bb643873c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Well, after a somewhat lengthy beta period,
lots of downloads of Nitriq lots of feedback from users, I'm very happy to announce
that <a href="http://www.nitriq.com">Nitriq Code Analysis</a> is now officially out
of beta and is taking orders! 
<br /><br />
In addition, we have released a completely <b><a href="http://nimblepros.com/products/nitriq/download.aspx">FREE
Edition of Nitriq</a></b>. The free developer edition is limited in two respects.
First, you can only analyze a .net single assembly at a time. Second, although you
can add and make changes to the queries, you won't be able to save/load them across
sessions. The <a href="http://nimblepros.com/products/nitriq/download.aspx">Free Edition
of Nitriq</a> will never expire and will ensure that developers have no excuses when
it comes to improving their code.<br /><br />
We've also released a <a href="http://www.nitriq.com/console/">Console Edition of
Nitriq</a> that is meant for running on a build server. Nitriq's custom <a href="http://www.nitriq.com/features/">Linq
to Code </a>technology makes it simple for a tech lead to easily create and enforce
rules regarding the quality of the code that is checked in before it makes it to production.
There is no free version of Nitriq Console Edition.<br /><br />
We at Nimble Pros have spent a lot of time working on Nitriq and have created a nice
set of blog posts that highlight some of the neat things you can do with Nitriq<br /><br /><a href="http://chriswagnerblog.com/blog/some-simple-nitriqular-tasks/">http://chriswagnerblog.com/blog/some-simple-nitriqular-tasks/</a><br /><a href="http://chriswagnerblog.com/blog/nitriq-does-more-than-just-linq/">http://chriswagnerblog.com/blog/nitriq-does-more-than-just-linq/</a><br /><a href="http://benheimann.com/blog/writing-nitriq-rules/">http://benheimann.com/blog/writing-nitriq-rules/</a><br /><a href="http://scottdepouw.com/blog/exposing-list-lt-t-gt-creates-concrete-dependencies/">http://scottdepouw.com/blog/exposing-list-lt-t-gt-creates-concrete-dependencies/</a><br /><a href="http://scottdepouw.com/blog/beware-the-small-smells/">http://scottdepouw.com/blog/beware-the-small-smells/</a><br /><a href="http://scottdepouw.com/blog/copious-cyclomatic-complexity-creates-confusing-code/">http://scottdepouw.com/blog/copious-cyclomatic-complexity-creates-confusing-code/</a><br /><a href="http://scottdepouw.com/blog/using-metrics-to-promote-agile-software-development-practices/">http://scottdepouw.com/blog/using-metrics-to-promote-agile-software-development-practices/</a><br /><br />
We hope you'll download the <a href="http://nimblepros.com/products/nitriq/download.aspx">Free
Edition</a> today and check out our <a href="http://www.nitriq.com/instructions/">Getting
Started Tutorial</a>. Please feel free to contact <a href="mailto:support@nitriq.com">support@nitriq.com</a> with
any comments or questions.<br /><br /><p></p></body>
      <title>Nitriq Code Analysis is Out of Beta - Free Edition Available</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,77e2d5d1-d666-4c51-b64a-0e8bb643873c.aspx</guid>
      <link>http://blog.nitriq.com/NitriqCodeAnalysisIsOutOfBetaFreeEditionAvailable.aspx</link>
      <pubDate>Tue, 30 Mar 2010 11:02:00 GMT</pubDate>
      <description>Well, after a somewhat lengthy beta period, lots of downloads of Nitriq lots of feedback from users, I'm very happy to announce that &lt;a href="http://www.nitriq.com"&gt;Nitriq
Code Analysis&lt;/a&gt; is now officially out of beta and is taking orders! 
&lt;br&gt;
&lt;br&gt;
In addition, we have released a completely &lt;b&gt;&lt;a href="http://nimblepros.com/products/nitriq/download.aspx"&gt;FREE
Edition of Nitriq&lt;/a&gt;&lt;/b&gt;. The free developer edition is limited in two respects.
First, you can only analyze a .net single assembly at a time. Second, although you
can add and make changes to the queries, you won't be able to save/load them across
sessions. The &lt;a href="http://nimblepros.com/products/nitriq/download.aspx"&gt;Free Edition
of Nitriq&lt;/a&gt; will never expire and will ensure that developers have no excuses when
it comes to improving their code.&lt;br&gt;
&lt;br&gt;
We've also released a &lt;a href="http://www.nitriq.com/console/"&gt;Console Edition of
Nitriq&lt;/a&gt; that is meant for running on a build server. Nitriq's custom &lt;a href="http://www.nitriq.com/features/"&gt;Linq
to Code &lt;/a&gt;technology makes it simple for a tech lead to easily create and enforce
rules regarding the quality of the code that is checked in before it makes it to production.
There is no free version of Nitriq Console Edition.&lt;br&gt;
&lt;br&gt;
We at Nimble Pros have spent a lot of time working on Nitriq and have created a nice
set of blog posts that highlight some of the neat things you can do with Nitriq&lt;br&gt;
&lt;br&gt;
&lt;a href="http://chriswagnerblog.com/blog/some-simple-nitriqular-tasks/"&gt;http://chriswagnerblog.com/blog/some-simple-nitriqular-tasks/&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://chriswagnerblog.com/blog/nitriq-does-more-than-just-linq/"&gt;http://chriswagnerblog.com/blog/nitriq-does-more-than-just-linq/&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://benheimann.com/blog/writing-nitriq-rules/"&gt;http://benheimann.com/blog/writing-nitriq-rules/&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://scottdepouw.com/blog/exposing-list-lt-t-gt-creates-concrete-dependencies/"&gt;http://scottdepouw.com/blog/exposing-list-lt-t-gt-creates-concrete-dependencies/&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://scottdepouw.com/blog/beware-the-small-smells/"&gt;http://scottdepouw.com/blog/beware-the-small-smells/&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://scottdepouw.com/blog/copious-cyclomatic-complexity-creates-confusing-code/"&gt;http://scottdepouw.com/blog/copious-cyclomatic-complexity-creates-confusing-code/&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://scottdepouw.com/blog/using-metrics-to-promote-agile-software-development-practices/"&gt;http://scottdepouw.com/blog/using-metrics-to-promote-agile-software-development-practices/&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
We hope you'll download the &lt;a href="http://nimblepros.com/products/nitriq/download.aspx"&gt;Free
Edition&lt;/a&gt; today and check out our &lt;a href="http://www.nitriq.com/instructions/"&gt;Getting
Started Tutorial&lt;/a&gt;. Please feel free to contact &lt;a href="mailto:support@nitriq.com"&gt;support@nitriq.com&lt;/a&gt; with
any comments or questions.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,77e2d5d1-d666-4c51-b64a-0e8bb643873c.aspx</comments>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=41300125-b09c-4e30-b69c-193aee1715f2</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,41300125-b09c-4e30-b69c-193aee1715f2.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,41300125-b09c-4e30-b69c-193aee1715f2.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=41300125-b09c-4e30-b69c-193aee1715f2</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font color="#000000">Almost two years
ago <a href="http://weblogs.asp.net/scottgu">ScottGu</a> posted some really awesome
code that lets you create dynamic where clauses in Linq - meaning you could use a
string builder to create your where clause just like the good 'ole days when ad-hoc
sql was all the rage. You're going to be better off if you can build a predicate using
lambdas, but sometimes its a real pain the the rear to build a proper predicate (Func&lt;T,
bool&gt; or Predicate&lt;T&gt;). Building a predicate properly typically becomes difficult
when you're giving your users some mechanism to build their own filter for their data.<br /><br />
The problem I had with ScottGu's code is that the extension methods only worked off
IQueryable&lt;T&gt;, and well, sometimes you would like to create a dynamic where
clause for a datasource that didn't come from an IQueryProvider like LinqToSql. Sometime
you want to create a dynamic where clause for a plain old IEnumerable&lt;T&gt;.<br /><br />
So, I took the time to dig through ScottGu's pretty complicated code and created a
handful of methods that help you generate useful dynamic functions - including dynamic
"OrderBy" and "Where" extension methods for IEnumerable&lt;T&gt;.<br /><br />
I've attached a single common file that includes both ScottGu's code, as well as my
own.<br /><br />
Download my code here:<br /></font>
        <a href="http://blog.nitriq.com/content/binary/DynamicLinqExtensions.zip">DynamicLinqExtensions.zip
(15 KB)</a>
        <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">
          <br />
          <br />
        </span>
        <font color="#000000">Examples:<br /><pre><font size="4"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">IEnumerable&lt;Person&gt;
allPeople <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> GetAllPeople();<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">foreach</span>(var
person <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">in</span> allPeople.Where(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Age
&gt; 10"</span>).OrderBy(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Age"</span>))<br />
{<br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//notice
the above arguments are strings and not lambdas</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//this
makes it a lot easier to build everything ad-hoc</span><br />
Console.WriteLine(person.Age <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">+</span><span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"
- "</span><span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">+</span> person.FirstName);<br />
}</span></font></pre>
I also included a method called CreateValueExpression, that will evaluate an expression
on any object and return the result.<br /><br /></font>
        <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">var
fullName <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> DynamicLinqExtensions.CreateValueExpression&lt;Person,<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span>&gt;(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"First
+ \" \" + Last"</span>); <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"><br />
//outputs "Jon von Gillern"</span><br />
Console.WriteLine(fullName(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> Person
{ First <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Jon"</span>,
Last <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"von
Gillern"</span> })); </span>
        <font color="#000000">
          <br />
        </font>
        <br />
        <font color="#000000">You can find the Gu's original blog post here:<br /><a href="http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx">http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx</a><br /><br />
As always, Kicks and Shoutouts are appreciated!<br /></font>
        <p>
        </p>
      </body>
      <title>How to Create a Linq Statement from a String</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,41300125-b09c-4e30-b69c-193aee1715f2.aspx</guid>
      <link>http://blog.nitriq.com/HowToCreateALinqStatementFromAString.aspx</link>
      <pubDate>Wed, 04 Nov 2009 13:21:26 GMT</pubDate>
      <description>&lt;font color="#000000"&gt;Almost two years ago &lt;a href="http://weblogs.asp.net/scottgu"&gt;ScottGu&lt;/a&gt; posted
some really awesome code that lets you create dynamic where clauses in Linq - meaning
you could use a string builder to create your where clause just like the good 'ole
days when ad-hoc sql was all the rage. You're going to be better off if you can build
a predicate using lambdas, but sometimes its a real pain the the rear to build a proper
predicate (Func&amp;lt;T, bool&amp;gt; or Predicate&amp;lt;T&amp;gt;). Building a predicate properly
typically becomes difficult when you're giving your users some mechanism to build
their own filter for their data.&lt;br&gt;
&lt;br&gt;
The problem I had with ScottGu's code is that the extension methods only worked off
IQueryable&amp;lt;T&amp;gt;, and well, sometimes you would like to create a dynamic where
clause for a datasource that didn't come from an IQueryProvider like LinqToSql. Sometime
you want to create a dynamic where clause for a plain old IEnumerable&amp;lt;T&amp;gt;.&lt;br&gt;
&lt;br&gt;
So, I took the time to dig through ScottGu's pretty complicated code and created a
handful of methods that help you generate useful dynamic functions - including dynamic
"OrderBy" and "Where" extension methods for IEnumerable&amp;lt;T&amp;gt;.&lt;br&gt;
&lt;br&gt;
I've attached a single common file that includes both ScottGu's code, as well as my
own.&lt;br&gt;
&lt;br&gt;
Download my code here:&lt;br&gt;
&lt;/font&gt;&lt;a href="http://blog.nitriq.com/content/binary/DynamicLinqExtensions.zip"&gt;DynamicLinqExtensions.zip
(15 KB)&lt;/a&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;font color="#000000"&gt;Examples:&lt;br&gt;
&lt;pre&gt;&lt;font size="4"&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;IEnumerable&amp;lt;Person&amp;gt;
allPeople &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; GetAllPeople();&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;foreach&lt;/span&gt;(var
person &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;in&lt;/span&gt; allPeople.Where(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Age
&amp;gt; 10"&lt;/span&gt;).OrderBy(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Age"&lt;/span&gt;))&lt;br&gt;
{&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//notice
the above arguments are strings and not lambdas&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//this
makes it a lot easier to build everything ad-hoc&lt;/span&gt;
&lt;br&gt;
Console.WriteLine(person.Age &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;+&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"
- "&lt;/span&gt; &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;+&lt;/span&gt; person.FirstName);&lt;br&gt;
}&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;
I also included a method called CreateValueExpression, that will evaluate an expression
on any object and return the result.&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;var
fullName &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; DynamicLinqExtensions.CreateValueExpression&amp;lt;Person,&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"First
+ \" \" + Last"&lt;/span&gt;); &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
//outputs "Jon von Gillern"&lt;/span&gt; 
&lt;br&gt;
Console.WriteLine(fullName(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; Person
{ First &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Jon"&lt;/span&gt;,
Last &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"von
Gillern"&lt;/span&gt; })); &lt;/span&gt;&lt;font color="#000000"&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;br&gt;
&lt;font color="#000000"&gt;You can find the Gu's original blog post here:&lt;br&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
As always, Kicks and Shoutouts are appreciated!&lt;br&gt;
&lt;/font&gt; 
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,41300125-b09c-4e30-b69c-193aee1715f2.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=a055e813-d907-419a-a615-51353a9d1432</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,a055e813-d907-419a-a615-51353a9d1432.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,a055e813-d907-419a-a615-51353a9d1432.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a055e813-d907-419a-a615-51353a9d1432</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I've released a minor update to <a href="http://www.nitriq.com">Nitriq</a>,
there is a small bug fix for an analysis error. The beta will also now work until
11.16.09. You can download the latest version <a href="http://www.nitriq.com/download/">here</a>.<br /><br />
I'd love to hear from about what features you'd like to see added before the launch.
Shoot me an email at <a href="mailto:von@nitriq.com">von@nitriq.com</a>.<br /><p></p></body>
      <title>Nitriq Expiration Updated to 11.16.09</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,a055e813-d907-419a-a615-51353a9d1432.aspx</guid>
      <link>http://blog.nitriq.com/NitriqExpirationUpdatedTo111609.aspx</link>
      <pubDate>Sat, 31 Oct 2009 18:48:06 GMT</pubDate>
      <description>I've released a minor update to &lt;a href="http://www.nitriq.com"&gt;Nitriq&lt;/a&gt;, there
is a small bug fix for an analysis error. The beta will also now work until 11.16.09.
You can download the latest version &lt;a href="http://www.nitriq.com/download/"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
I'd love to hear from about what features you'd like to see added before the launch.
Shoot me an email at &lt;a href="mailto:von@nitriq.com"&gt;von@nitriq.com&lt;/a&gt;.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,a055e813-d907-419a-a615-51353a9d1432.aspx</comments>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=94791fe3-944f-404f-8aa3-b5e97e1bdf87</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,94791fe3-944f-404f-8aa3-b5e97e1bdf87.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,94791fe3-944f-404f-8aa3-b5e97e1bdf87.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=94791fe3-944f-404f-8aa3-b5e97e1bdf87</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">So I just published <a href="http://www.nitriq.com/CopyPasteKiller">CopyPasteKiller</a>,
a free tool that helps .Net developers working with large code bases find all the
places that another developer used the time honored practice of Copy-Paste Inheritance.
Or sometimes the code base is so big that it is easy duplicate functionality without
actually copying and pasting. Either way, <a href="http://www.nitriq.com/CopyPasteKiller">CopyPasteKiller</a> is
a fast way to hunt down similar chunks of code so that they can be refactored.<br /><br />
CopyPasteKiller currently only works with C# and VB.NET code and isn't the most polished
tool in the world, but it'll get the job done. I hope you find it useful, if you have
any questions/comments/bugs please feel free to email me directly at <a href="mailto:von@nitriq.com">von@nitriq.com</a>.<br /><br />
You can find the download and more details <a href="http://www.nitriq.com/CopyPasteKiller">here</a>.<br /></body>
      <title>CopyPasteKiller - Free Code Similarity Finder</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,94791fe3-944f-404f-8aa3-b5e97e1bdf87.aspx</guid>
      <link>http://blog.nitriq.com/CopyPasteKillerFreeCodeSimilarityFinder.aspx</link>
      <pubDate>Tue, 27 Oct 2009 13:10:23 GMT</pubDate>
      <description>So I just published &lt;a href="http://www.nitriq.com/CopyPasteKiller"&gt;CopyPasteKiller&lt;/a&gt;,
a free tool that helps .Net developers working with large code bases find all the
places that another developer used the time honored practice of Copy-Paste Inheritance.
Or sometimes the code base is so big that it is easy duplicate functionality without
actually copying and pasting. Either way, &lt;a href="http://www.nitriq.com/CopyPasteKiller"&gt;CopyPasteKiller&lt;/a&gt; is
a fast way to hunt down similar chunks of code so that they can be refactored.&lt;br&gt;
&lt;br&gt;
CopyPasteKiller currently only works with C# and VB.NET code and isn't the most polished
tool in the world, but it'll get the job done. I hope you find it useful, if you have
any questions/comments/bugs please feel free to email me directly at &lt;a href="mailto:von@nitriq.com"&gt;von@nitriq.com&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
You can find the download and more details &lt;a href="http://www.nitriq.com/CopyPasteKiller"&gt;here&lt;/a&gt;.&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,94791fe3-944f-404f-8aa3-b5e97e1bdf87.aspx</comments>
      <category>CopyPasteKiller</category>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=46ebfead-9a55-4067-95b1-479160a6af44</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,46ebfead-9a55-4067-95b1-479160a6af44.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,46ebfead-9a55-4067-95b1-479160a6af44.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=46ebfead-9a55-4067-95b1-479160a6af44</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">The previous beta version of Nitriq expires
today 10.26.09. A new version of Nitriq Code Analysis for .Net has been published
to the website that will expire on 11.2.09. <a href="http://www.nitriq.com/download">Download
Now!</a><br /><br />
There were a handful of small enhancements, including better keyboard navigation in
the query toolbox window.<br /><br />
I'll be releasing a freeware tool tomorrow morning called CopyPasteKiller, that will
help .Net developers find large chunks of similar code. Be sure to check back tomorrow
morning!<br /><br /><p></p></body>
      <title>New Version of Nitriq Released</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,46ebfead-9a55-4067-95b1-479160a6af44.aspx</guid>
      <link>http://blog.nitriq.com/NewVersionOfNitriqReleased.aspx</link>
      <pubDate>Mon, 26 Oct 2009 12:42:02 GMT</pubDate>
      <description>The previous beta version of Nitriq expires today 10.26.09. A new version of Nitriq Code Analysis for .Net has been published to the website that will expire on 11.2.09. &lt;a href="http://www.nitriq.com/download"&gt;Download
Now!&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
There were a handful of small enhancements, including better keyboard navigation in
the query toolbox window.&lt;br&gt;
&lt;br&gt;
I'll be releasing a freeware tool tomorrow morning called CopyPasteKiller, that will
help .Net developers find large chunks of similar code. Be sure to check back tomorrow
morning!&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,46ebfead-9a55-4067-95b1-479160a6af44.aspx</comments>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=a8b616dd-8d91-4836-98c5-839a5b400681</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,a8b616dd-8d91-4836-98c5-839a5b400681.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,a8b616dd-8d91-4836-98c5-839a5b400681.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a8b616dd-8d91-4836-98c5-839a5b400681</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'd really like to run Nitriq as openly as possible and share just about all my data
about traffic, sales and marketing efforts, so consider this the first post of many.
</p>
        <p>
I'm pretty happy with my first day of traffic, the Nitriq website had 688 visits,
1192 page views and 34 downloads of the software. About a third of those visitors
came from <a href="http://news.ycombinator.com/item?id=878966" mce_href="http://news.ycombinator.com/item?id=878966">Hacker
News</a> (click for the specific story), and about half didn't have a referrers so
I'm guessing that the link came from a twitter client click. Thanks to everyone who
tweeted about the launch.
</p>
        <p>
          <img src="http://blog.nitriq.com/content/binary/dayonetraffic.png" border="0" />
        </p>
        <p>
I'm pretty sure that traffic is going to be significantly lower today and for the
rest of the week. The long slow march to growing traffic organically has begun. I
still need to send out an email to my .Net acquaintances, so hopefully that will help
traffic if I can get a blog mention here or there.
</p>
        <p>
Otherwise the plan to drive traffic is to blog here about .Net topics and get referenced
by <a href="http://www.dotnetkicks.com/" mce_href="http://www.dotnetkicks.com">dotnetkicks.com</a> and <a href="http://www.dotnetshoutout.com/" mce_href="http://www.dotnetshoutout.com">dotnetshoutout.com</a>.
I got a lot of really good traffic on my old blog (<a href="http://www.vonsharp.net/" mce_href="http://www.vonsharp.net">vonsharp.net</a>)
from these sites, but I haven't blogged there a whole lot since I started working
on Nitriq. But, over the past year whenever I've thought of a good blog topic, I took
5 minutes to write the idea down in a Google Doc. So I have literally hundreds of
potential blog posts waiting for me in the hopper. I'm hoping this will help keep
me keep regular post schedule.
</p>
        <p>
Be sure to tell all your friends about <a href="http://www.nitriq.com/" mce_href="http://www.nitriq.com">Nitriq
Code Analysis</a>.
</p>
        <p>
        </p>
        <br />
      </body>
      <title>Day One Traffic and Beyond</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,a8b616dd-8d91-4836-98c5-839a5b400681.aspx</guid>
      <link>http://blog.nitriq.com/DayOneTrafficAndBeyond.aspx</link>
      <pubDate>Wed, 14 Oct 2009 17:19:25 GMT</pubDate>
      <description>&lt;p&gt;
I'd really like to run Nitriq as openly as possible and share just about all my data
about traffic, sales and marketing efforts, so consider this the first post of many.
&lt;/p&gt;
&lt;p&gt;
I'm pretty happy with my first day of traffic, the Nitriq website had 688 visits,
1192 page views and 34 downloads of the software. About a third of those visitors
came from &lt;a href="http://news.ycombinator.com/item?id=878966" mce_href="http://news.ycombinator.com/item?id=878966"&gt;Hacker
News&lt;/a&gt; (click for the specific story), and about half didn't have a referrers so
I'm guessing that the link came from a twitter client click. Thanks to everyone who
tweeted about the launch.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.nitriq.com/content/binary/dayonetraffic.png" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
I'm pretty sure that traffic is going to be significantly lower today and for the
rest of the week. The long slow march to growing traffic organically has begun. I
still need to send out an email to my .Net acquaintances, so hopefully that will help
traffic if I can get a blog mention here or there.
&lt;/p&gt;
&lt;p&gt;
Otherwise the plan to drive traffic is to blog here about .Net topics and get referenced
by &lt;a href="http://www.dotnetkicks.com/" mce_href="http://www.dotnetkicks.com"&gt;dotnetkicks.com&lt;/a&gt; and &lt;a href="http://www.dotnetshoutout.com/" mce_href="http://www.dotnetshoutout.com"&gt;dotnetshoutout.com&lt;/a&gt;.
I got a lot of really good traffic on my old blog (&lt;a href="http://www.vonsharp.net/" mce_href="http://www.vonsharp.net"&gt;vonsharp.net&lt;/a&gt;)
from these sites, but I haven't blogged there a whole lot since I started working
on Nitriq. But, over the past year whenever I've thought of a good blog topic, I took
5 minutes to write the idea down in a Google Doc. So I have literally hundreds of
potential blog posts waiting for me in the hopper. I'm hoping this will help keep
me keep regular post schedule.
&lt;/p&gt;
&lt;p&gt;
Be sure to tell all your friends about &lt;a href="http://www.nitriq.com/" mce_href="http://www.nitriq.com"&gt;Nitriq
Code Analysis&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,a8b616dd-8d91-4836-98c5-839a5b400681.aspx</comments>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=a08c5b70-a561-47fe-97c8-2472a90c7cde</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,a08c5b70-a561-47fe-97c8-2472a90c7cde.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,a08c5b70-a561-47fe-97c8-2472a90c7cde.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a08c5b70-a561-47fe-97c8-2472a90c7cde</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I've been working on a code analysis application
off and on for the past year or so and I finally launched tonight!<br /><br /><a href="http://www.nitriq.com">Nitriq Code Analysis</a> helps .Net developers gain
a better understanding of their code. You can visualize your code with Treemaps and
you can query your code using Linq. You don’t have to learn a custom query language
nor do you have to learn a complicated API like FXCop.<br /><br />
It won't be a free app forever, but I will have reasonable prices after it leaves
beta.<br /><br />
Any and all blog entries and tweet reviews are more than welcome. 
<br /><br /><a href="http://www.nitriq.com">Check it out!</a><br /><p></p></body>
      <title>Free Beta - Nitriq Code Analysis for .Net</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,a08c5b70-a561-47fe-97c8-2472a90c7cde.aspx</guid>
      <link>http://blog.nitriq.com/FreeBetaNitriqCodeAnalysisForNet.aspx</link>
      <pubDate>Tue, 13 Oct 2009 06:56:23 GMT</pubDate>
      <description>I've been working on a code analysis application off and on for the past year or so and I finally launched tonight!&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.nitriq.com"&gt;Nitriq Code Analysis&lt;/a&gt; helps .Net developers gain
a better understanding of their code. You can visualize your code with Treemaps and
you can query your code using Linq. You don’t have to learn a custom query language
nor do you have to learn a complicated API like FXCop.&lt;br&gt;
&lt;br&gt;
It won't be a free app forever, but I will have reasonable prices after it leaves
beta.&lt;br&gt;
&lt;br&gt;
Any and all blog entries and tweet reviews are more than welcome. 
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.nitriq.com"&gt;Check it out!&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,a08c5b70-a561-47fe-97c8-2472a90c7cde.aspx</comments>
      <category>Projects</category>
      <category>Nitriq</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=d42df86c-2048-4048-bf73-e249de589e0d</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,d42df86c-2048-4048-bf73-e249de589e0d.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,d42df86c-2048-4048-bf73-e249de589e0d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d42df86c-2048-4048-bf73-e249de589e0d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">So a while back I posted a <a href="http://www.vonsharp.net/WPFAndXAML40Wishlist.aspx">wish
list</a> of things that would change with WPF. It looks like the WPF has granted one
of my wishes: INotifyCollectionChanged and ObservableCollection&lt;T&gt; are moving
out of WindowsBase.dll and into System.dll! 
<br /><br />
(I know it was most likely other people that convinced them of this, but let me live
it my bubble where my wants and needs are the only ones that matter)<br /><br />
Thanks Jamie!<br /><br /><a href="http://blogs.msdn.com/jaimer/archive/2009/09/22/wpf-discussion-090922.aspx">http://blogs.msdn.com/jaimer/archive/2009/09/22/wpf-discussion-090922.aspx</a><br /><p></p></body>
      <title>My WPF Wish Has Come True. w00t</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,d42df86c-2048-4048-bf73-e249de589e0d.aspx</guid>
      <link>http://blog.nitriq.com/MyWPFWishHasComeTrueW00t.aspx</link>
      <pubDate>Tue, 29 Sep 2009 19:39:23 GMT</pubDate>
      <description>So a while back I posted a &lt;a href="http://www.vonsharp.net/WPFAndXAML40Wishlist.aspx"&gt;wish
list&lt;/a&gt; of things that would change with WPF. It looks like the WPF has granted one
of my wishes: INotifyCollectionChanged and ObservableCollection&amp;lt;T&amp;gt; are moving
out of WindowsBase.dll and into System.dll! 
&lt;br&gt;
&lt;br&gt;
(I know it was most likely other people that convinced them of this, but let me live
it my bubble where my wants and needs are the only ones that matter)&lt;br&gt;
&lt;br&gt;
Thanks Jamie!&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/jaimer/archive/2009/09/22/wpf-discussion-090922.aspx"&gt;http://blogs.msdn.com/jaimer/archive/2009/09/22/wpf-discussion-090922.aspx&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,d42df86c-2048-4048-bf73-e249de589e0d.aspx</comments>
      <category>XAML</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=dee69f56-a527-41ab-870b-bf4279d2e94b</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,dee69f56-a527-41ab-870b-bf4279d2e94b.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,dee69f56-a527-41ab-870b-bf4279d2e94b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=dee69f56-a527-41ab-870b-bf4279d2e94b</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I was excited to see the <a href="http://davelyon.net/mldata.html">HN
Survey Results</a> that was posted yesterday, but was a little disappointed that Google's
"Auto Summary" couldn't figure out how to do a histogram on Income, Age, Hours per
Week, or Work Experience. Or maybe it can, something just wasn't setup correctly.
Anyway I imported the data into excel and whipped them up. I do data visualization
work for a living and might create some non-excel visualizations if there is any interest,
so comment if you'd like more (it'll probably be in silverlight). 
<br /><br />
I got rid of some of the data that I deemed to be suspect. I apologize if you're the
12 year old making millions of dollars per year.<br /><br />
You can download the excel file that includes the charts <a href="http://www.vonsharp.net/content/binary/HNSurveyCharts.zip">here</a>.
The original Google auto generated charts are <a href="http://spreadsheets.google.com/viewanalytics?formkey=dEhmQ0JYLXE2M2ZJU05jZU0xWHFBS0E6MA.">here</a>.<br /><br />
Thanks to <a href="http://davelyon.net/">Dave Lyon</a> for gathering the data.<br /><br />
Here are the extra charts that I created:<br /><br />
(Edit: Some people have noticed that the income chart doesn't look quite right, and
they're correct. It is in the right order, increasing in 5K increments, but the second
half of the graph has a zero clipped.)<br /><p></p><br /><br /><img src="http://www.vonsharp.net/content/binary/HNSurveyCharts3.png" border="0" /></body>
      <title>HN Survey Charts</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,dee69f56-a527-41ab-870b-bf4279d2e94b.aspx</guid>
      <link>http://blog.nitriq.com/HNSurveyCharts.aspx</link>
      <pubDate>Fri, 28 Aug 2009 12:55:13 GMT</pubDate>
      <description>I was excited to see the &lt;a href="http://davelyon.net/mldata.html"&gt;HN Survey Results&lt;/a&gt; that
was posted yesterday, but was a little disappointed that Google's "Auto Summary" couldn't
figure out how to do a histogram on Income, Age, Hours per Week, or Work Experience.
Or maybe it can, something just wasn't setup correctly. Anyway I imported the data
into excel and whipped them up. I do data visualization work for a living and might
create some non-excel visualizations if there is any interest, so comment if you'd
like more (it'll probably be in silverlight). 
&lt;br&gt;
&lt;br&gt;
I got rid of some of the data that I deemed to be suspect. I apologize if you're the
12 year old making millions of dollars per year.&lt;br&gt;
&lt;br&gt;
You can download the excel file that includes the charts &lt;a href="http://www.vonsharp.net/content/binary/HNSurveyCharts.zip"&gt;here&lt;/a&gt;.
The original Google auto generated charts are &lt;a href="http://spreadsheets.google.com/viewanalytics?formkey=dEhmQ0JYLXE2M2ZJU05jZU0xWHFBS0E6MA."&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Thanks to &lt;a href="http://davelyon.net/"&gt;Dave Lyon&lt;/a&gt; for gathering the data.&lt;br&gt;
&lt;br&gt;
Here are the extra charts that I created:&lt;br&gt;
&lt;br&gt;
(Edit: Some people have noticed that the income chart doesn't look quite right, and
they're correct. It is in the right order, increasing in 5K increments, but the second
half of the graph has a zero clipped.)&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.vonsharp.net/content/binary/HNSurveyCharts3.png" border="0"&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,dee69f56-a527-41ab-870b-bf4279d2e94b.aspx</comments>
      <category>Hacker News</category>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=99bcec4c-e621-40a4-a950-990237050bdb</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,99bcec4c-e621-40a4-a950-990237050bdb.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,99bcec4c-e621-40a4-a950-990237050bdb.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=99bcec4c-e621-40a4-a950-990237050bdb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Heads up to everyone, if you try to run
the CLR Profiler with Vista, you'll probably have some problems (namely it won't work).
Due to Vista's new security stuff, you have to run the CLR Profiler as Administrator.<br /><p></p></body>
      <title>CLR Profiler + Vista = Annoying</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,99bcec4c-e621-40a4-a950-990237050bdb.aspx</guid>
      <link>http://blog.nitriq.com/CLRProfilerVistaAnnoying.aspx</link>
      <pubDate>Sat, 11 Jul 2009 20:20:28 GMT</pubDate>
      <description>Heads up to everyone, if you try to run the CLR Profiler with Vista, you'll probably have some problems (namely it won't work). Due to Vista's new security stuff, you have to run the CLR Profiler as Administrator.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,99bcec4c-e621-40a4-a950-990237050bdb.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=175c95eb-40b0-4edd-8442-90139278327a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,175c95eb-40b0-4edd-8442-90139278327a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,175c95eb-40b0-4edd-8442-90139278327a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=175c95eb-40b0-4edd-8442-90139278327a</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Microsoft: Please Please Please add the
following two things two the next WPF/XAML version.<br /><br /><b>Addition 1</b><br /><br />
Move <a href="http://msdn.microsoft.com/en-us/library/ms668604.aspx">ObservableCollection&lt;T&gt;</a> and <a href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx">INotifyCollectionChanged</a> to
the system.dll instead of WindowsBase.dll. It is <b>insanely </b>annoying that I can't
reuse my model objects in a web application without referencing WindowsBase.dll. It
just feels dirty, plus it typically leads to hosting problems.<br /><br /><b>Addition 2</b><br /><br />
I understand that you'd want two different Color structures - one for WinForms and
one for WPF. But it would make my life a lot easier if you created an <b>IColor </b>interface
that simply had the byte properties A, R, G and B.<br /><br />
Having some native methods on the color objects to convert from HSL would be greatly
appreciated too. 
<br /><br />
I'd be willing to pay a couple of dozen dollars for these two features, just let me
know ;)<br /><br /><p></p></body>
      <title>WPF and XAML 4.0 Wishlist</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,175c95eb-40b0-4edd-8442-90139278327a.aspx</guid>
      <link>http://blog.nitriq.com/WPFAndXAML40Wishlist.aspx</link>
      <pubDate>Wed, 03 Jun 2009 18:21:57 GMT</pubDate>
      <description>Microsoft: Please Please Please add the following two things two the next WPF/XAML version.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Addition 1&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Move &lt;a href="http://msdn.microsoft.com/en-us/library/ms668604.aspx"&gt;ObservableCollection&amp;lt;T&amp;gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx"&gt;INotifyCollectionChanged&lt;/a&gt; to
the system.dll instead of WindowsBase.dll. It is &lt;b&gt;insanely &lt;/b&gt;annoying that I can't
reuse my model objects in a web application without referencing WindowsBase.dll. It
just feels dirty, plus it typically leads to hosting problems.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Addition 2&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
I understand that you'd want two different Color structures - one for WinForms and
one for WPF. But it would make my life a lot easier if you created an &lt;b&gt;IColor &lt;/b&gt;interface
that simply had the byte properties A, R, G and B.&lt;br&gt;
&lt;br&gt;
Having some native methods on the color objects to convert from HSL would be greatly
appreciated too. 
&lt;br&gt;
&lt;br&gt;
I'd be willing to pay a couple of dozen dollars for these two features, just let me
know ;)&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,175c95eb-40b0-4edd-8442-90139278327a.aspx</comments>
      <category>Wishlist</category>
      <category>XAML</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=ac2858d5-40ea-42f0-bd84-324c21785016</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,ac2858d5-40ea-42f0-bd84-324c21785016.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,ac2858d5-40ea-42f0-bd84-324c21785016.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ac2858d5-40ea-42f0-bd84-324c21785016</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">After waiting literally 7 years to upgrade
my laptop, I finally purchased a Dell Studio laptop last night. With it's 9 cell battery,
I get this lovely indicator in my system tray:<br /><br /><p></p><img src="http://www.vonsharp.net/content/binary/beautiful.png" border="0" /><br /><br /><br /></body>
      <title>New Laptop - Beautiful</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,ac2858d5-40ea-42f0-bd84-324c21785016.aspx</guid>
      <link>http://blog.nitriq.com/NewLaptopBeautiful.aspx</link>
      <pubDate>Sat, 02 May 2009 14:31:17 GMT</pubDate>
      <description>After waiting literally 7 years to upgrade my laptop, I finally purchased a Dell Studio laptop last night. With it's 9 cell battery, I get this lovely indicator in my system tray:&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/beautiful.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,ac2858d5-40ea-42f0-bd84-324c21785016.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=3bf13ee6-af5c-4f95-ad8f-e734a8f65c90</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,3bf13ee6-af5c-4f95-ad8f-e734a8f65c90.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,3bf13ee6-af5c-4f95-ad8f-e734a8f65c90.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3bf13ee6-af5c-4f95-ad8f-e734a8f65c90</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">MSDN has a new low bandwidth version that
is much much faster to use. Plus it doesn't have that frame on the left hand side
that is always refreshing. It is currently in Beta, but I haven't seen anything that
will prevent me from using it from here on out.<br /><br />
Another benefit, you can now click your middle mouse button and drag to scroll, which
for some reason is broken in the regular MSDN website (it would only recognize the
ability scroll horizontally)<br /><br />
Check it out here: <a href="http://msdn.microsoft.com/en-us/library/system.xml%28loband%29.aspx">http://msdn.microsoft.com/en-us/library/system.xml(loband).aspx</a><br /><br />
One note, though, if you want it to persist (which you will), you have to click the
"Persist Low Bandwidth View" link in the upper right hand corner.<br /><br /><br /><p></p><img src="http://www.vonsharp.net/content/binary/MSDN%20Low%20Bandwidth%20Beta.jpg" border="0" /><br /><br /><br /></body>
      <title>Much Faster Browsing for MSDN</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,3bf13ee6-af5c-4f95-ad8f-e734a8f65c90.aspx</guid>
      <link>http://blog.nitriq.com/MuchFasterBrowsingForMSDN.aspx</link>
      <pubDate>Sat, 18 Apr 2009 16:39:39 GMT</pubDate>
      <description>MSDN has a new low bandwidth version that is much much faster to use. Plus it doesn't have that frame on the left hand side that is always refreshing. It is currently in Beta, but I haven't seen anything that will prevent me from using it from here on out.&lt;br&gt;
&lt;br&gt;
Another benefit, you can now click your middle mouse button and drag to scroll, which
for some reason is broken in the regular MSDN website (it would only recognize the
ability scroll horizontally)&lt;br&gt;
&lt;br&gt;
Check it out here: &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml%28loband%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.xml(loband).aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
One note, though, if you want it to persist (which you will), you have to click the
"Persist Low Bandwidth View" link in the upper right hand corner.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/MSDN%20Low%20Bandwidth%20Beta.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,3bf13ee6-af5c-4f95-ad8f-e734a8f65c90.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=c9971f45-65de-4018-b5cf-8dd907d9a9d8</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,c9971f45-65de-4018-b5cf-8dd907d9a9d8.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,c9971f45-65de-4018-b5cf-8dd907d9a9d8.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c9971f45-65de-4018-b5cf-8dd907d9a9d8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">FYI - I'll be giving a "Tips and Tricks"
presentation at the third Iowa Code Camp in Cedar Rapids on May 2nd. The first two
camps have been awesome, I highly recommend coming if you get a chance.<br /><br /><a href="http://www.IowaCodeCamp.com">www.IowaCodeCamp.com</a><br /><p></p></body>
      <title>Speaking at Iowa Code Camp - May 2nd</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,c9971f45-65de-4018-b5cf-8dd907d9a9d8.aspx</guid>
      <link>http://blog.nitriq.com/SpeakingAtIowaCodeCampMay2nd.aspx</link>
      <pubDate>Fri, 17 Apr 2009 02:55:55 GMT</pubDate>
      <description>FYI - I'll be giving a "Tips and Tricks" presentation at the third Iowa Code Camp in Cedar Rapids on May 2nd. The first two camps have been awesome, I highly recommend coming if you get a chance.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.IowaCodeCamp.com"&gt;www.IowaCodeCamp.com&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,c9971f45-65de-4018-b5cf-8dd907d9a9d8.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=06f109e2-1a75-4c70-800e-9c169bb96b3e</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,06f109e2-1a75-4c70-800e-9c169bb96b3e.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,06f109e2-1a75-4c70-800e-9c169bb96b3e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=06f109e2-1a75-4c70-800e-9c169bb96b3e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm giving a WPF talk at IADNUG meeting
tonight if anyone is interested. It is at 5:45 at DMACC West. Come for the pizza,
stay for the fat guy making self-deprecating jokes.<br /><p></p></body>
      <title>WPF DNUG Presentation Tonight</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,06f109e2-1a75-4c70-800e-9c169bb96b3e.aspx</guid>
      <link>http://blog.nitriq.com/WPFDNUGPresentationTonight.aspx</link>
      <pubDate>Thu, 05 Mar 2009 18:39:21 GMT</pubDate>
      <description>I'm giving a WPF talk at IADNUG meeting tonight if anyone is interested. It is at 5:45 at DMACC West. Come for the pizza, stay for the fat guy making self-deprecating jokes.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,06f109e2-1a75-4c70-800e-9c169bb96b3e.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=8f81485f-1831-4389-b1f2-e731cf439fe1</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,8f81485f-1831-4389-b1f2-e731cf439fe1.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,8f81485f-1831-4389-b1f2-e731cf439fe1.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8f81485f-1831-4389-b1f2-e731cf439fe1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">In the off chance that someone on the VS2010
team happens to read this post:<br /><br />
PLEASE PLEASE PLEASE give us a better way of folding (collapsing) XAML. Something
like regions would be fine, or some sort of attached property or designer property
that we can put on various elements that we want folded when we hit our "collapse
to definitions" shortcut. Some stuff I want collapsed, some I don't, please help us
out!<br /><br /><br /><p></p></body>
      <title>XAML Folding?</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,8f81485f-1831-4389-b1f2-e731cf439fe1.aspx</guid>
      <link>http://blog.nitriq.com/XAMLFolding.aspx</link>
      <pubDate>Tue, 10 Feb 2009 20:52:31 GMT</pubDate>
      <description>In the off chance that someone on the VS2010 team happens to read this post:&lt;br&gt;
&lt;br&gt;
PLEASE PLEASE PLEASE give us a better way of folding (collapsing) XAML. Something
like regions would be fine, or some sort of attached property or designer property
that we can put on various elements that we want folded when we hit our "collapse
to definitions" shortcut. Some stuff I want collapsed, some I don't, please help us
out!&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,8f81485f-1831-4389-b1f2-e731cf439fe1.aspx</comments>
      <category>XAML</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=5b8cb49e-254c-46ec-8254-29d8b1359e73</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,5b8cb49e-254c-46ec-8254-29d8b1359e73.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,5b8cb49e-254c-46ec-8254-29d8b1359e73.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5b8cb49e-254c-46ec-8254-29d8b1359e73</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I found this in the comments on CodingHorror
(<a href="http://www.codinghorror.com/blog/archives/001145.html#comments">http://www.codinghorror.com/blog/archives/001145.html#comments</a>) 
<br /><br />
It shows what happens when no one takes the time to "reinvent the wheel". Bravo!<br /><br /><p></p><img src="http://www.vonsharp.net/content/binary/new-car-old-wheels.jpg" border="0" /><br /><br />
Original link (<a href="http://www.it-eye.nl/weblog/wp-content/uploads/2008/08/new-car-old-wheels.jpg">http://www.it-eye.nl/weblog/wp-content/uploads/2008/08/new-car-old-wheels.jpg</a>)
was posted by ako - <a href="http://www.andrejkoelewijn.com/wp/">http://www.andrejkoelewijn.com/wp/<br /></a></body>
      <title>What happens when you don't reinvent the wheel</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,5b8cb49e-254c-46ec-8254-29d8b1359e73.aspx</guid>
      <link>http://blog.nitriq.com/WhatHappensWhenYouDontReinventTheWheel.aspx</link>
      <pubDate>Mon, 09 Feb 2009 14:51:01 GMT</pubDate>
      <description>I found this in the comments on CodingHorror (&lt;a href="http://www.codinghorror.com/blog/archives/001145.html#comments"&gt;http://www.codinghorror.com/blog/archives/001145.html#comments&lt;/a&gt;) 
&lt;br&gt;
&lt;br&gt;
It shows what happens when no one takes the time to "reinvent the wheel". Bravo!&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/new-car-old-wheels.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Original link (&lt;a href="http://www.it-eye.nl/weblog/wp-content/uploads/2008/08/new-car-old-wheels.jpg"&gt;http://www.it-eye.nl/weblog/wp-content/uploads/2008/08/new-car-old-wheels.jpg&lt;/a&gt;)
was posted by ako - &lt;a href="http://www.andrejkoelewijn.com/wp/"&gt;http://www.andrejkoelewijn.com/wp/&lt;br&gt;
&lt;/a&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,5b8cb49e-254c-46ec-8254-29d8b1359e73.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=bb159a78-4ef5-43e4-93d8-9b8f3c82cc17</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,bb159a78-4ef5-43e4-93d8-9b8f3c82cc17.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,bb159a78-4ef5-43e4-93d8-9b8f3c82cc17.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=bb159a78-4ef5-43e4-93d8-9b8f3c82cc17</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I found this link over at Hacker News,
pretty funny read. I'm glad that someone else feels that sometimes you need to step
back and be a tad more pragmatic about how you approach code.<br /><br /><a href="http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12">Why I Hate
Frameworks</a><br /><br /><br /><p></p></body>
      <title>Framework Hating</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,bb159a78-4ef5-43e4-93d8-9b8f3c82cc17.aspx</guid>
      <link>http://blog.nitriq.com/FrameworkHating.aspx</link>
      <pubDate>Mon, 19 Jan 2009 18:35:13 GMT</pubDate>
      <description>I found this link over at Hacker News, pretty funny read. I'm glad that someone else feels that sometimes you need to step back and be a tad more pragmatic about how you approach code.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12"&gt;Why I Hate
Frameworks&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,bb159a78-4ef5-43e4-93d8-9b8f3c82cc17.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=76230b76-0920-4ac6-8b9a-fcb1d497dcd5</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,76230b76-0920-4ac6-8b9a-fcb1d497dcd5.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,76230b76-0920-4ac6-8b9a-fcb1d497dcd5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=76230b76-0920-4ac6-8b9a-fcb1d497dcd5</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I've found a fix to a common annoyance
I've had in Visual Studio. I always wanted an option called "Add Existing Folder"
to right next to "Add Existing Item" in the "Add" context menu item in the solution
explorer. It was always a long drawn out process for me to add a folder that already
existed (renaming the folder I wanted to add, creating the an empty folder with the
desired name through visual studio, then adding all of the files back into the newly
created folder).<br /><br />
Instead what you can do is hit the "Show All Files" tool strip button at the top of
the solution explorer, then right click on the folder you want to add and hit "Include
In Project". Pretty trivial. Its amazing how long you can use a product and not know
about all of its features. Which reminds me, do <b><i>you </i></b>know about the <a href="http://www.vonsharp.net/MostUsefulVSFeatureNoOneKnowsAbout.aspx">Exceptions
Dialog Box</a>?<br /><p></p></body>
      <title>Visual Studio - Add Existing Folder</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,76230b76-0920-4ac6-8b9a-fcb1d497dcd5.aspx</guid>
      <link>http://blog.nitriq.com/VisualStudioAddExistingFolder.aspx</link>
      <pubDate>Tue, 07 Oct 2008 19:07:34 GMT</pubDate>
      <description>I've found a fix to a common annoyance I've had in Visual Studio. I always wanted an option called "Add Existing Folder" to right next to "Add Existing Item" in the "Add" context menu item in the solution explorer. It was always a long drawn out process for me to add a folder that already existed (renaming the folder I wanted to add, creating the an empty folder with the desired name through visual studio, then adding all of the files back into the newly created folder).&lt;br&gt;
&lt;br&gt;
Instead what you can do is hit the "Show All Files" tool strip button at the top of
the solution explorer, then right click on the folder you want to add and hit "Include
In Project". Pretty trivial. Its amazing how long you can use a product and not know
about all of its features. Which reminds me, do &lt;b&gt;&lt;i&gt;you &lt;/i&gt;&lt;/b&gt;know about the &lt;a href="http://www.vonsharp.net/MostUsefulVSFeatureNoOneKnowsAbout.aspx"&gt;Exceptions
Dialog Box&lt;/a&gt;?&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,76230b76-0920-4ac6-8b9a-fcb1d497dcd5.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=8e26e627-9645-4302-abbc-81353ca6503b</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,8e26e627-9645-4302-abbc-81353ca6503b.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,8e26e627-9645-4302-abbc-81353ca6503b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8e26e627-9645-4302-abbc-81353ca6503b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">So for the most part I've been pretty happy
with the laptop we bought a couple years ago for my wife, its an Asus Aspire 5050.
Nothing crazy, but its form factor is decent and as long as you don't try to upgrade
to vista it handles just fine. 
<br /><br />
Anyway, I did a fresh install of XP professional after the machine was slowing down
from install rot. After I installed SP2 at some point the system would really start
to choke a lot, I ran Process Explorer (thank you microsoft!) and found the CPU was
getting slayed by Hardware Interrupts and Deferred Procedure Calls. After some googling
for Asus and Aetheros (the company that makes the wireless component in the notebook),
I ran into some Eee users who were having the same problem. They really tried everything
(bios updates, hotfixes, etc). 
<br /><br />
Somehow someone figured out that the wireless component in conjunction with some other
mystery part of SP2 will go nuts and always try to constantly renegotiate with the
Wireless Access Point what channel they should be talking on. The fix is simple, I
just went into my AP and changed the wifi channel to always be 9 instead of "auto".<br /><br />
At least I'm done and I've got documentation in my blog in case this crap happens
again.<br /><br />
Why can't my stuff just work? 
<br /><p></p></body>
      <title>Asus Aetheros Suckage</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,8e26e627-9645-4302-abbc-81353ca6503b.aspx</guid>
      <link>http://blog.nitriq.com/AsusAetherosSuckage.aspx</link>
      <pubDate>Mon, 22 Sep 2008 03:41:19 GMT</pubDate>
      <description>So for the most part I've been pretty happy with the laptop we bought a couple years ago for my wife, its an Asus Aspire 5050. Nothing crazy, but its form factor is decent and as long as you don't try to upgrade to vista it handles just fine. &lt;br&gt;
&lt;br&gt;
Anyway, I did a fresh install of XP professional after the machine was slowing down
from install rot. After I installed SP2 at some point the system would really start
to choke a lot, I ran Process Explorer (thank you microsoft!) and found the CPU was
getting slayed by Hardware Interrupts and Deferred Procedure Calls. After some googling
for Asus and Aetheros (the company that makes the wireless component in the notebook),
I ran into some Eee users who were having the same problem. They really tried everything
(bios updates, hotfixes, etc). 
&lt;br&gt;
&lt;br&gt;
Somehow someone figured out that the wireless component in conjunction with some other
mystery part of SP2 will go nuts and always try to constantly renegotiate with the
Wireless Access Point what channel they should be talking on. The fix is simple, I
just went into my AP and changed the wifi channel to always be 9 instead of "auto".&lt;br&gt;
&lt;br&gt;
At least I'm done and I've got documentation in my blog in case this crap happens
again.&lt;br&gt;
&lt;br&gt;
Why can't my stuff just work? 
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,8e26e627-9645-4302-abbc-81353ca6503b.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=ae842809-9f83-4d9c-b547-9a6c3a2db694</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,ae842809-9f83-4d9c-b547-9a6c3a2db694.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,ae842809-9f83-4d9c-b547-9a6c3a2db694.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ae842809-9f83-4d9c-b547-9a6c3a2db694</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Here is the question: <a href="http://www.dev102.com/2008/08/05/a-programming-job-interview-challenge-14-2d-geometry/">Programming
Job Interview Challenge Question Week #14</a><br /><br />
This week was a fun and interesting question. Here is the answer<br /><br />
Step 1. As you're adding points to the polygon, determine a bounding rectangle by
keeping track of the min x/y and the max x/y.<br /><br />
Step 2. Draw a line from the point you're interested in, to any point outside the
bounding rectangle (because you know the outside point can't be within the polygon).<br /><br />
Step 3. Count the number of intersections between your newly created line and the
polygon, if the number is even (0 included) the point in question is not within the
polygon, if the number of intersections is odd, then the point is within the polygon.<br /><br />
Examples:<br /><br />
Outside = Even Intersections<p></p><img src="http://www.vonsharp.net/content/binary/question14%20outside.jpg" border="0" /><br /><br />
Inside = Odd Intersections<br /><img src="http://www.vonsharp.net/content/binary/question14%20inside%20polygon.jpg" border="0" /></body>
      <title>Programming Job Interview Challenge Answer Week #14</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,ae842809-9f83-4d9c-b547-9a6c3a2db694.aspx</guid>
      <link>http://blog.nitriq.com/ProgrammingJobInterviewChallengeAnswerWeek14.aspx</link>
      <pubDate>Tue, 05 Aug 2008 19:33:09 GMT</pubDate>
      <description>Here is the question: &lt;a href="http://www.dev102.com/2008/08/05/a-programming-job-interview-challenge-14-2d-geometry/"&gt;Programming
Job Interview Challenge Question Week #14&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
This week was a fun and interesting question. Here is the answer&lt;br&gt;
&lt;br&gt;
Step 1. As you're adding points to the polygon, determine a bounding rectangle by
keeping track of the min x/y and the max x/y.&lt;br&gt;
&lt;br&gt;
Step 2. Draw a line from the point you're interested in, to any point outside the
bounding rectangle (because you know the outside point can't be within the polygon).&lt;br&gt;
&lt;br&gt;
Step 3. Count the number of intersections between your newly created line and the
polygon, if the number is even (0 included) the point in question is not within the
polygon, if the number of intersections is odd, then the point is within the polygon.&lt;br&gt;
&lt;br&gt;
Examples:&lt;br&gt;
&lt;br&gt;
Outside = Even Intersections&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/question14%20outside.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Inside = Odd Intersections&lt;br&gt;
&lt;img src="http://www.vonsharp.net/content/binary/question14%20inside%20polygon.jpg" border="0"&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,ae842809-9f83-4d9c-b547-9a6c3a2db694.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=0dc5e23a-c3ec-49c0-9a3a-2a4ec9ce83b1</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,0dc5e23a-c3ec-49c0-9a3a-2a4ec9ce83b1.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,0dc5e23a-c3ec-49c0-9a3a-2a4ec9ce83b1.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0dc5e23a-c3ec-49c0-9a3a-2a4ec9ce83b1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.dev102.com/2008/07/21/a-programming-job-interview-challenge-13-brackets/">Programming
Job Interview Challenge Question Week #13</a>
        <br />
        <br />
Highlight the text below for the answer.<br /><font color="#a9a9a9"><br /></font><font color="#ffffff">This is pretty simple, use a stack to track all open
brackets and on all closed pop the stack to see if you have the correct matching bracket.<br /><br /></font><font color="#ffffff" face="Courier New" size="2">private bool AreBracketsClosedProperly(string
input)<br />
{<br />
    Stack&lt;char&gt; openBrackets = new Stack&lt;char&gt;();<br />
    foreach (char bracket in input)<br />
    {<br />
        switch (bracket)<br />
        {<br />
            case '(':<br />
            case '[':<br />
            case '&lt;':<br />
            case '{':<br />
               
openBrackets.Push(bracket);<br />
               
break;<br /><br />
            case ')':<br />
               
if (openBrackets.Pop() != ')')<br />
                   
return false;<br />
            case ']':<br />
               
if (openBrackets.Pop() != ']')<br />
                   
return false;<br />
            case '&gt;':<br />
               
if (openBrackets.Pop() != '&gt;')<br />
                   
return false;<br />
            case '}':<br />
               
if (openBrackets.Pop() != '}')<br />
                   
return false;<br />
               
break;<br />
        }<br />
    }<br /><br />
    if (openBrackets.Count != 0)<br />
        return false;<br />
    else<br />
        return true;<br />
}</font><br /><p></p></body>
      <title>Programming Job Interview Challenge #13 Answer</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,0dc5e23a-c3ec-49c0-9a3a-2a4ec9ce83b1.aspx</guid>
      <link>http://blog.nitriq.com/ProgrammingJobInterviewChallenge13Answer.aspx</link>
      <pubDate>Tue, 22 Jul 2008 13:00:08 GMT</pubDate>
      <description>&lt;a href="http://www.dev102.com/2008/07/21/a-programming-job-interview-challenge-13-brackets/"&gt;Programming
Job Interview Challenge Question Week #13&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Highlight the text below for the answer.&lt;br&gt;
&lt;font color="#a9a9a9"&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font color="#ffffff"&gt;This is pretty simple, use a stack to track all open
brackets and on all closed pop the stack to see if you have the correct matching bracket.&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font color="#ffffff" face="Courier New" size="2"&gt;private bool AreBracketsClosedProperly(string
input)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack&amp;lt;char&amp;gt; openBrackets = new Stack&amp;lt;char&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (char bracket in input)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (bracket)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '(':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '[':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '&amp;lt;':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '{':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
openBrackets.Push(bracket);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
break;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ')':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (openBrackets.Pop() != ')')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ']':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (openBrackets.Pop() != ']')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '&amp;gt;':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (openBrackets.Pop() != '&amp;gt;')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '}':&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (openBrackets.Pop() != '}')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
break;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (openBrackets.Count != 0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br&gt;
}&lt;/font&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,0dc5e23a-c3ec-49c0-9a3a-2a4ec9ce83b1.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=5c5bb1a9-91c3-4c04-b73c-815c14a34e8a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,5c5bb1a9-91c3-4c04-b73c-815c14a34e8a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,5c5bb1a9-91c3-4c04-b73c-815c14a34e8a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5c5bb1a9-91c3-4c04-b73c-815c14a34e8a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">If you select the text below, you can find
the answer for this week's <a href="http://www.dev102.com/net/a-programming-job-interview-challenge-10-the-missing-number/">Job
Interview Challenge #10 from dev102.com</a>.<br /><br /><font color="#ffffff">This is a fairly easy problem, you can find the missing number
by taking the difference of the sum of the numbers you're given and what the total
should be for 1 to n. If you actually do the sum of 1 to n via a for loop, the time
complexity is O(2n), which is really just O(n), but if you want to get picky, you
can make it actually O(1n) by only looping through the list you're handed and instead
using the formula n(n+1)/2 to get the total of the numbers from 1 to n. 
<br /><br /></font><font color="#ffffff" face="Courier New" size="2">public static void FindMissingNumbers()<br />
{<br />
    //The O(n) that I discussed above is for 
<br />
    //the FindMissingNumber method only<br /><br />
    int n = 100;<br />
    List&lt;int&gt; numbers = CreateRandomList(n);<br />
    Console.WriteLine("Found:     Left Out Number
is: " + FindMissingNumber(numbers));<br /><br />
    n = 1000;<br />
    numbers = CreateRandomList(n);<br />
    Console.WriteLine("Found:     Left Out Number
is: " + FindMissingNumber(numbers));<br /><br />
    n = 10000;<br />
    numbers = CreateRandomList(n);<br />
    Console.WriteLine("Found:     Left Out Number
is: " + FindMissingNumber(numbers));<br /><br />
    //sample output<br />
    //Generated: Left Out Number is: 31<br />
    //Found:     Left Out Number is: 31<br />
    //Generated: Left Out Number is: 840<br />
    //Found:     Left Out Number is: 840<br />
    //Generated: Left Out Number is: 6289<br />
    //Found:     Left Out Number is: 6289<br /><br />
}<br /><br /><br /><br />
public static int FindMissingNumber(List&lt;int&gt; numbers)<br />
{<br />
    int numbersSum = numbers.Sum();<br />
    int n = numbers.Count;<br />
    int sum1ToNPlus1 = (n * (n + 1)) / 2; // this is much quicker than
actually summing 1 through n+1<br /><br />
    return sum1ToNPlus1 - numbersSum;<br />
}<br /><br />
public static List&lt;int&gt; CreateRandomList(int n)<br />
{<br />
    int nPlus1 = n + 1;<br />
    List&lt;int&gt; allNumbersList = new List&lt;int&gt;();<br />
    for (int i = 0; i &lt; nPlus1; i++)<br />
        allNumbersList.Add(i);<br /><br />
    Random rand = new Random();<br /><br />
    List&lt;int&gt; subsetNumbersList = new List&lt;int&gt;();<br />
    while (allNumbersList.Count &gt; 1)<br />
    {<br />
        int index = rand.Next(allNumbersList.Count);<br />
        subsetNumbersList.Add(allNumbersList[index]);<br />
        allNumbersList.RemoveAt(index);<br />
    }<br /><br />
    Console.WriteLine("Generated: Left Out Number is: " + allNumbersList[0]);<br /><br />
    return subsetNumbersList;<br />
}</font><p></p></body>
      <title>Programming Job Interview Challenge #10 Answer</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,5c5bb1a9-91c3-4c04-b73c-815c14a34e8a.aspx</guid>
      <link>http://blog.nitriq.com/ProgrammingJobInterviewChallenge10Answer.aspx</link>
      <pubDate>Tue, 01 Jul 2008 16:00:57 GMT</pubDate>
      <description>If you select the text below, you can find the answer for this week's &lt;a href="http://www.dev102.com/net/a-programming-job-interview-challenge-10-the-missing-number/"&gt;Job
Interview Challenge #10 from dev102.com&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;font color="#ffffff"&gt;This is a fairly easy problem, you can find the missing number
by taking the difference of the sum of the numbers you're given and what the total
should be for 1 to n. If you actually do the sum of 1 to n via a for loop, the time
complexity is O(2n), which is really just O(n), but if you want to get picky, you
can make it actually O(1n) by only looping through the list you're handed and instead
using the formula n(n+1)/2 to get the total of the numbers from 1 to n. 
&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font color="#ffffff" face="Courier New" size="2"&gt;public static void FindMissingNumbers()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //The O(n) that I discussed above is for 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //the FindMissingNumber method only&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int n = 100;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;int&amp;gt; numbers = CreateRandomList(n);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Found:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left Out Number
is: " + FindMissingNumber(numbers));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; n = 1000;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; numbers = CreateRandomList(n);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Found:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left Out Number
is: " + FindMissingNumber(numbers));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; n = 10000;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; numbers = CreateRandomList(n);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Found:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left Out Number
is: " + FindMissingNumber(numbers));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//sample output&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//Generated: Left Out Number is: 31&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//Found:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left Out Number is: 31&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//Generated: Left Out Number is: 840&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//Found:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left Out Number is: 840&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//Generated: Left Out Number is: 6289&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;//Found:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left Out Number is: 6289&lt;br&gt;
&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
public static int FindMissingNumber(List&amp;lt;int&amp;gt; numbers)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int numbersSum = numbers.Sum();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int n = numbers.Count;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int sum1ToNPlus1 = (n * (n + 1)) / 2; // this is much quicker than
actually summing 1 through n+1&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return sum1ToNPlus1 - numbersSum;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
public static List&amp;lt;int&amp;gt; CreateRandomList(int n)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int nPlus1 = n + 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;int&amp;gt; allNumbersList = new List&amp;lt;int&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; nPlus1; i++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; allNumbersList.Add(i);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Random rand = new Random();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;int&amp;gt; subsetNumbersList = new List&amp;lt;int&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (allNumbersList.Count &amp;gt; 1)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int index = rand.Next(allNumbersList.Count);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subsetNumbersList.Add(allNumbersList[index]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; allNumbersList.RemoveAt(index);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Generated: Left Out Number is: " + allNumbersList[0]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return subsetNumbersList;&lt;br&gt;
}&lt;/font&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,5c5bb1a9-91c3-4c04-b73c-815c14a34e8a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=1b069045-33ad-494b-b76e-875340e0fb38</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,1b069045-33ad-494b-b76e-875340e0fb38.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,1b069045-33ad-494b-b76e-875340e0fb38.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1b069045-33ad-494b-b76e-875340e0fb38</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I've been trying to keep up with the Job
Interview line of posts over at dev102.com, but unfortunately I've been running out
of time to do all of them. Anyway, this weeks question can be found <a href="http://www.dev102.com/net/a-programming-job-interview-challenge-8-a-needle-in-a-haystack/">here</a>.
Stop reading if you don't want the answer.<br /><br />
This problem can be solved using a Finite State Machine. The only thing you're going
to store is the current state of the machine, once you reach the end of the machine,
you'll alert. On initialization of the piping component, you'll build a finite state
machine for the given alert sequence. Every time you are given a message you check
what you should do with the state machine based on where you are currently at.<br /><br />
I was going to write out the code to do this, but it becomes a little tricky when
you have repeating data in your alert sequence because if you get a message you're
not expecting you don't necessarily want to reset the state machine to its initial
state. For example, if the alert sequence was "A, A, A, A, B", and your input is "A,
A, A, A, A, B", you don't want to reset the machine to the first state when you get
that 5th A, you want it to stay in its current state.<br /><br /><br /><img src="http://www.vonsharp.net/content/binary/Statemachine12.jpg" border="0" /></body>
      <title>Programming Job Interview Challenge #8 Answer</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,1b069045-33ad-494b-b76e-875340e0fb38.aspx</guid>
      <link>http://blog.nitriq.com/ProgrammingJobInterviewChallenge8Answer.aspx</link>
      <pubDate>Mon, 16 Jun 2008 17:48:03 GMT</pubDate>
      <description>I've been trying to keep up with the Job Interview line of posts over at dev102.com, but unfortunately I've been running out of time to do all of them. Anyway, this weeks question can be found &lt;a href="http://www.dev102.com/net/a-programming-job-interview-challenge-8-a-needle-in-a-haystack/"&gt;here&lt;/a&gt;.
Stop reading if you don't want the answer.&lt;br&gt;
&lt;br&gt;
This problem can be solved using a Finite State Machine. The only thing you're going
to store is the current state of the machine, once you reach the end of the machine,
you'll alert. On initialization of the piping component, you'll build a finite state
machine for the given alert sequence. Every time you are given a message you check
what you should do with the state machine based on where you are currently at.&lt;br&gt;
&lt;br&gt;
I was going to write out the code to do this, but it becomes a little tricky when
you have repeating data in your alert sequence because if you get a message you're
not expecting you don't necessarily want to reset the state machine to its initial
state. For example, if the alert sequence was "A, A, A, A, B", and your input is "A,
A, A, A, A, B", you don't want to reset the machine to the first state when you get
that 5th A, you want it to stay in its current state.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.vonsharp.net/content/binary/Statemachine12.jpg" border="0"&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,1b069045-33ad-494b-b76e-875340e0fb38.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=8631367a-6e86-4e54-a217-5c4162b2dd22</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,8631367a-6e86-4e54-a217-5c4162b2dd22.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,8631367a-6e86-4e54-a217-5c4162b2dd22.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8631367a-6e86-4e54-a217-5c4162b2dd22</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Do yourself a favor, next time you have
a build error that says something like: The type or namespace name 'XYZ' could not
be found (are you missing a using directive or an assembly reference?). Double click
the error (which will highlight the unknown type) then hit Alt+Shift+F10. This will
bring up a dropdown that has all of the types that match that class name and hitting
enter will automatically add the appropriate using statement. Thank you Visual Studio!<br /><br /><br /><p></p></body>
      <title>Quick Fix - Missing Using Statements</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,8631367a-6e86-4e54-a217-5c4162b2dd22.aspx</guid>
      <link>http://blog.nitriq.com/QuickFixMissingUsingStatements.aspx</link>
      <pubDate>Thu, 05 Jun 2008 18:03:01 GMT</pubDate>
      <description>Do yourself a favor, next time you have a build error that says
something like: The type or namespace name 'XYZ' could not be found
(are you missing a using directive or an assembly reference?). Double
click the error (which will highlight the unknown type) then hit
Alt+Shift+F10. This will bring up a dropdown that has all of the types
that match that class name and hitting enter will automatically add the
appropriate using statement. Thank you Visual Studio!&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,8631367a-6e86-4e54-a217-5c4162b2dd22.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=b432eb70-b3d2-4b60-9879-28e51533336a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,b432eb70-b3d2-4b60-9879-28e51533336a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,b432eb70-b3d2-4b60-9879-28e51533336a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=b432eb70-b3d2-4b60-9879-28e51533336a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">So one of the guys over at <a href="http://www.dev102.com">dev102.com</a> has
been posting job interview questions. While the most recent isn't the best interview
question in the world, I thought I'd share the answer if anyone is interested.<br /><br />
Here is the <a href="http://www.dev102.com/2008/05/19/a-programming-job-interview-challenge-4/">question</a>: <blockquote cite="Dev102" style="background-color: LightGray;"> How
would you implement the following method: Foo(7) = 17 and Foo(17) = 7. Any other input
to that method is not defined so you can return anything you want. Just follow those
rules: 
<ul><li>
Conditional statements (if, switch, …) are not allowed.</li><li>
Usage of containers (hash tables, arrays, …) are not allowed.</li></ul></blockquote><br />
The answer is crazy simple. Highlight the text below to reveal the answer.<br /><br /><font color="#ffffff">public int Foo(int x)<br />
{<br />
    return -1 * x + 24;<br />
}<br /><br />
My Algebra teacher would be so proud.</font><br /></body>
      <title>Programming Job Interview Challenge #4 Answer</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,b432eb70-b3d2-4b60-9879-28e51533336a.aspx</guid>
      <link>http://blog.nitriq.com/ProgrammingJobInterviewChallenge4Answer.aspx</link>
      <pubDate>Mon, 19 May 2008 17:48:47 GMT</pubDate>
      <description>So one of the guys over at &lt;a href="http://www.dev102.com"&gt;dev102.com&lt;/a&gt; has been
posting job interview questions. While the most recent isn't the best interview question
in the world, I thought I'd share the answer if anyone is interested.&lt;br&gt;
&lt;br&gt;
Here is the &lt;a href="http://www.dev102.com/2008/05/19/a-programming-job-interview-challenge-4/"&gt;question&lt;/a&gt;: &lt;blockquote cite="Dev102" style="background-color: LightGray;"&gt; How
would you implement the following method: Foo(7) = 17 and Foo(17) = 7. Any other input
to that method is not defined so you can return anything you want. Just follow those
rules: 
&lt;ul&gt;
&lt;li&gt;
Conditional statements (if, switch, …) are not allowed.&lt;/li&gt;
&lt;li&gt;
Usage of containers (hash tables, arrays, …) are not allowed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;br&gt;
The answer is crazy simple. Highlight the text below to reveal the answer.&lt;br&gt;
&lt;br&gt;
&lt;font color="#ffffff"&gt;public int Foo(int x)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1 * x + 24;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
My Algebra teacher would be so proud.&lt;/font&gt;
&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,b432eb70-b3d2-4b60-9879-28e51533336a.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=b9340607-4494-47ae-b90c-85382bd1f571</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,b9340607-4494-47ae-b90c-85382bd1f571.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,b9340607-4494-47ae-b90c-85382bd1f571.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=b9340607-4494-47ae-b90c-85382bd1f571</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">So you may or may not have noticed that
I haven't posted anything for the past two months and that most of my links have been
broken. Well, the reason being is that I run a small intranet application for a group
I belonged to at Iowa State. When I moved the application over to <a href="http://www.discountasp.net">discountasp.net</a> the
application was living in a subdirectory of my vonsharp.net domain, and in doing so
I ran into all sorts of messy web.config problems.<br /><br />
Well, I think finally have solved all the issues and should be posting once or twice
a week from here on out. But just incase you're interested here is how I resolved
my issues.<br /><br />
In order to run a seperate web application in a subdirectory of your DasBlog directory
you'll need to do the following:<br /><br />
1. In your DasBlog web.config, wrap all of the configuration tag's children in one
single "location" tag, except for the configSections tag and the runtime tag. Your
dasBlog web.config should look something like:<br /><br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;configuration&gt;
&lt;configSections&gt; ... &lt;/configSections&gt; &lt;runtime&gt; ... &lt;runtime&gt;
&lt;location path=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">""</span> allowOverride=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"true"</span>&gt;
&lt;newtelligence.ControlImages ... &gt; ... &lt;system.web ... &gt; ... &lt;/location&gt;
&lt;configuration&gt;</span></pre>
Note: DO NOT CHANGE THE PATH, LEAVE IT AS AN EMPTY STRING<br /><br />
2. Then in your new sub-directory web application's web.config you'll need to do the
same thing, and leave the path string empty as long as your web.config is actually
sitting in the sub directory. As I understand it, its possible to define this in your
dasBlog's web config but I'd recommend against it. 
<br /><br />
Here is the tricky part. The location tag for the sub-directory application acts just
like object inheritence. So your web application's web.config will inherit all of
the same configuration from its parent directory. Since you probably don't want dasBlog
running in your sub directory, you need to clear out it's http modules. So in your
new web app's web config add the following markup to the httpModules section<br /><br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;httpModules&gt;
&lt;!-- gets rid of dasBlog Modules --&gt; &lt;remove name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"UrlMapperModule"</span>/&gt;
&lt;remove name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"TitleMapperModule"</span>/&gt;
&lt;remove name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"ProfileMapperModule"</span>/&gt;
&lt;remove name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"ControlImageModule"</span>/&gt;
&lt;remove name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"CompressionModule"</span>/&gt;
&lt;remove name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"IPBlackList"</span>/&gt;
&lt;/httpModules&gt;</span></pre>
Hope this helps anyone who is going through the same pain that I had.<br /><br /><p></p></body>
      <title>DasBlog and the Web.Config Location Tag</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,b9340607-4494-47ae-b90c-85382bd1f571.aspx</guid>
      <link>http://blog.nitriq.com/DasBlogAndTheWebConfigLocationTag.aspx</link>
      <pubDate>Sun, 18 May 2008 16:02:55 GMT</pubDate>
      <description>So you may or may not have noticed that I haven't posted anything for the past two months and that most of my links have been broken. Well, the reason being is that I run a small intranet application for a group I belonged to at Iowa State. When I moved the application over to &lt;a href="http://www.discountasp.net"&gt;discountasp.net&lt;/a&gt; the
application was living in a subdirectory of my vonsharp.net domain, and in doing so
I ran into all sorts of messy web.config problems.&lt;br&gt;
&lt;br&gt;
Well, I think finally have solved all the issues and should be posting once or twice
a week from here on out. But just incase you're interested here is how I resolved
my issues.&lt;br&gt;
&lt;br&gt;
In order to run a seperate web application in a subdirectory of your DasBlog directory
you'll need to do the following:&lt;br&gt;
&lt;br&gt;
1. In your DasBlog web.config, wrap all of the configuration tag's children in one
single "location" tag, except for the configSections tag and the runtime tag. Your
dasBlog web.config should look something like:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;lt;configuration&amp;gt;
&amp;lt;configSections&amp;gt; ... &amp;lt;/configSections&amp;gt; &amp;lt;runtime&amp;gt; ... &amp;lt;runtime&amp;gt;
&amp;lt;location path=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;""&lt;/span&gt; allowOverride=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"true"&lt;/span&gt;&amp;gt;
&amp;lt;newtelligence.ControlImages ... &amp;gt; ... &amp;lt;system.web ... &amp;gt; ... &amp;lt;/location&amp;gt;
&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/pre&gt;
Note: DO NOT CHANGE THE PATH, LEAVE IT AS AN EMPTY STRING&lt;br&gt;
&lt;br&gt;
2. Then in your new sub-directory web application's web.config you'll need to do the
same thing, and leave the path string empty as long as your web.config is actually
sitting in the sub directory. As I understand it, its possible to define this in your
dasBlog's web config but I'd recommend against it. 
&lt;br&gt;
&lt;br&gt;
Here is the tricky part. The location tag for the sub-directory application acts just
like object inheritence. So your web application's web.config will inherit all of
the same configuration from its parent directory. Since you probably don't want dasBlog
running in your sub directory, you need to clear out it's http modules. So in your
new web app's web config add the following markup to the httpModules section&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;lt;httpModules&amp;gt;
&amp;lt;!-- gets rid of dasBlog Modules --&amp;gt; &amp;lt;remove name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"UrlMapperModule"&lt;/span&gt;/&amp;gt;
&amp;lt;remove name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"TitleMapperModule"&lt;/span&gt;/&amp;gt;
&amp;lt;remove name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ProfileMapperModule"&lt;/span&gt;/&amp;gt;
&amp;lt;remove name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ControlImageModule"&lt;/span&gt;/&amp;gt;
&amp;lt;remove name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"CompressionModule"&lt;/span&gt;/&amp;gt;
&amp;lt;remove name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"IPBlackList"&lt;/span&gt;/&amp;gt;
&amp;lt;/httpModules&amp;gt;&lt;/span&gt;&lt;/pre&gt;
Hope this helps anyone who is going through the same pain that I had.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,b9340607-4494-47ae-b90c-85382bd1f571.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=c388f588-48ac-4c17-9b85-8c95b7144ad8</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,c388f588-48ac-4c17-9b85-8c95b7144ad8.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,c388f588-48ac-4c17-9b85-8c95b7144ad8.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c388f588-48ac-4c17-9b85-8c95b7144ad8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I have a big problem with launching firefox
everytime I have 20 seconds of downtime (like when I'm building a big solution, or
I'm waiting for a large file to load in my application). By the time I look at whatever
site I decide to go to, it sucks up more than the 20 seconds of downtime and costs
me a lot of time "context switching". 
<br /><br />
Something that has helped me with this problem: I took firefox off of my quick launch
bar and put it on the desktop. I now have to be much more deliberate in when I actually
need to use the "tubes".<br /><br /><p></p><img src="http://www.vonsharp.net/content/binary/removeQuickLaunch.jpg" border="0" /><br /><br /></body>
      <title>Boost Your Productivity - Remove Firefox Quick Launch</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,c388f588-48ac-4c17-9b85-8c95b7144ad8.aspx</guid>
      <link>http://blog.nitriq.com/BoostYourProductivityRemoveFirefoxQuickLaunch.aspx</link>
      <pubDate>Tue, 18 Mar 2008 14:01:17 GMT</pubDate>
      <description>I have a big problem with launching firefox everytime I have 20 seconds of downtime (like when I'm building a big solution, or I'm waiting for a large file to load in my application). By the time I look at whatever site I decide to go to, it sucks up more than the 20 seconds of downtime and costs me a lot of time "context switching". &lt;br&gt;
&lt;br&gt;
Something that has helped me with this problem: I took firefox off of my quick launch
bar and put it on the desktop. I now have to be much more deliberate in when I actually
need to use the "tubes".&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/removeQuickLaunch.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,c388f588-48ac-4c17-9b85-8c95b7144ad8.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=8dba1d96-07ed-496a-bf0d-1fe181376114</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,8dba1d96-07ed-496a-bf0d-1fe181376114.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,8dba1d96-07ed-496a-bf0d-1fe181376114.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8dba1d96-07ed-496a-bf0d-1fe181376114</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I just read this excellent essay by Jeff
Moser on his blog and thought I'd share it with all of you. I highly recommend it,
especially for students who are interested in a career in software development.<br /><br /><a href="http://www.moserware.com/2008/03/what-does-it-take-to-become-grandmaster.html">What
does it take to become a Software Grandmaster<br /></a><p></p></body>
      <title>Software Grandmaster</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,8dba1d96-07ed-496a-bf0d-1fe181376114.aspx</guid>
      <link>http://blog.nitriq.com/SoftwareGrandmaster.aspx</link>
      <pubDate>Mon, 03 Mar 2008 18:15:26 GMT</pubDate>
      <description>I just read this excellent essay by Jeff Moser on his blog and thought I'd share it with all of you. I highly recommend it, especially for students who are interested in a career in software development.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.moserware.com/2008/03/what-does-it-take-to-become-grandmaster.html"&gt;What
does it take to become a Software Grandmaster&lt;br&gt;
&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,8dba1d96-07ed-496a-bf0d-1fe181376114.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=536dbbb8-ccd9-4251-9685-1dc83a95ef27</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,536dbbb8-ccd9-4251-9685-1dc83a95ef27.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,536dbbb8-ccd9-4251-9685-1dc83a95ef27.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=536dbbb8-ccd9-4251-9685-1dc83a95ef27</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I saw a <a href="http://ohnull.com/blog/2008/02/27/immediate-window-a-forgotten-tool/">post</a> on <a href="http://ohnull.com/blog/2008/02/27/immediate-window-a-forgotten-tool/">oh
null!</a> that talks about how you can evaluate expressions within the immediate window,
whether you're simply retrieving a variable or performing a calculation on multiple
variables. I personally like to do all of this in the Watch Window because I can have
an easy history of what variables I've interrogated. Like the immediate window, you
can call Methods and display the results, but since methods can change state, they
will not execute automatically after you step into a new line of code, but there is
a nice little refresh button that will re-execute your method call. 
<br /><br /><img src="http://www.vonsharp.net/content/binary/watchWindow.jpg" border="0" /><br /><br />
As I understand it, the watch window is a wrapper around the simpler functionality
of the immediate window, so it also supports Intellisense. But there are some things
that you can only do in the immediate window, like the .load [dll] command which lets
you import another assembly for your use, which is pretty damn slick. I've only ever
really used that feature in one scenario: to load the Son of Strike assembly which
helps you get detailed information on your executable (very detailed call stack info,
very granular heap information, but kind of hard to use). 
<br /><br />
Another cool thing you can do in your immediate window: Declare new variables. Those
variables will have the same scope as the current breakpoint in execution, but the
ability opens the doors to some neat possibilities. For instance, you could declare
a new variable, copy a subset of information from your current in scope variables
and then use my <a href="http://www.vonsharp.net/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx">Xml
Utility Methods</a> to copy your new object out to disk! I'm not quite sure why you
would need to do that, but its nice to be able to!<br /></body>
      <title>Most Everything the Immediate Window Can Do the Watch Window Can Do Better</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,536dbbb8-ccd9-4251-9685-1dc83a95ef27.aspx</guid>
      <link>http://blog.nitriq.com/MostEverythingTheImmediateWindowCanDoTheWatchWindowCanDoBetter.aspx</link>
      <pubDate>Fri, 29 Feb 2008 14:53:29 GMT</pubDate>
      <description>I
saw a &lt;a href="http://ohnull.com/blog/2008/02/27/immediate-window-a-forgotten-tool/"&gt;post&lt;/a&gt; on &lt;a href="http://ohnull.com/blog/2008/02/27/immediate-window-a-forgotten-tool/"&gt;oh
null!&lt;/a&gt; that talks about how you can evaluate expressions within the immediate window,
whether you're simply retrieving a variable or performing a calculation on multiple
variables. I personally like to do all of this in the Watch Window because I can have
an easy history of what variables I've interrogated. Like the immediate window, you
can call Methods and display the results, but since methods can change state, they
will not execute automatically after you step into a new line of code, but there is
a nice little refresh button that will re-execute your method call. 
&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.vonsharp.net/content/binary/watchWindow.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
As I understand it, the watch window is a wrapper around the simpler functionality
of the immediate window, so it also supports Intellisense. But there are some things
that you can only do in the immediate window, like the .load [dll] command which lets
you import another assembly for your use, which is pretty damn slick. I've only ever
really used that feature in one scenario: to load the Son of Strike assembly which
helps you get detailed information on your executable (very detailed call stack info,
very granular heap information, but kind of hard to use). 
&lt;br&gt;
&lt;br&gt;
Another cool thing you can do in your immediate window: Declare new variables. Those
variables will have the same scope as the current breakpoint in execution, but the
ability opens the doors to some neat possibilities. For instance, you could declare
a new variable, copy a subset of information from your current in scope variables
and then use my &lt;a href="http://www.vonsharp.net/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx"&gt;Xml
Utility Methods&lt;/a&gt; to copy your new object out to disk! I'm not quite sure why you
would need to do that, but its nice to be able to!&lt;br&gt;

    
    


</description>
      <comments>http://blog.nitriq.com/CommentView,guid,536dbbb8-ccd9-4251-9685-1dc83a95ef27.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=c8ff4f30-3dbd-427a-88ea-7252e5219a22</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,c8ff4f30-3dbd-427a-88ea-7252e5219a22.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,c8ff4f30-3dbd-427a-88ea-7252e5219a22.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c8ff4f30-3dbd-427a-88ea-7252e5219a22</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">With my work, I regularly deal with obscene
amounts. Of course, our users demand that this information loads instantly and without
running out of memory. So optimizing our data storage objects for time and memory
constraints is incredibly important. So far, I think I've done a pretty good job,
because I can load 125 million data points in a shade over 3 seconds (using a database
to store some of this data flew out the window a while ago). But getting to this point
has been an interesting journey. Doing quick prototyping of prospective storage mechanisms
has been incredibly important and I thought I'd share some of the utility methods/classes
I've created to speed up the process.<br /><br />
The first piece of code is incredibly similar to my <a href="http://www.vonsharp.net/StopwatchWriterClass.aspx">StopwatchWriter</a> Class.
Instead of starting and stopping a Stopwatch, we're asking the garbage collector how
much total memory is being used (in bytes), before and after you instantiate an object
(or a whole set of objects)<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">class</span> MemoryWriter
: IDisposable { <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">long</span> _startMem; <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> _text; <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span> MemoryWriter(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> text)
{ _text <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> text <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">+</span><span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"
- "</span>; _startMem <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> GC.GetTotalMemory(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">true</span>);
} <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">void</span> Dispose()
{ Console.WriteLine(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"mem:
"</span><span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">+</span> _text <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">+</span> (GC.GetTotalMemory(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">true</span>) <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">-</span><br />
_startMem).ToString()); } } Usage looks like: <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> MemoryWriter(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"CrazyBigObject"</span>))
{ CrazyBigObject myCrazyBigObject <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> LoadCrazyBigObject(42);
}</span></pre><br />
This is the most accurate way of figuring out how much memory a specific object is
taking up in memory. But there is a limitation to this method if you're using it in
a multi-threaded application, such as a Win Form because another running thread could
dereference objects on the heap after you've instantiated your MemoryWriter , but
before its been disposed. I prefer to only use this class in small throw away console
applications, to make my results as accurate as possible. 
<br /><br />
Sometimes though, you'll find yourself looking at an object in someone else's code
and you want to easily find out how much memory its taking up, but the object in question
is "built" over several methods along with several other objects that you don't care
about. Which makes it impossible to use theMemoryWriter Class. You can use a memory
profiling application to do this, but I've found that they are notoriously hard to
pick up and use. And due to the nature of how they work, they take ages to work because
they have to take a snapshot before and after the code you care about (i.e. copy your
700MB object heap twice and then "diff" the two heaps). So I've wrote two small methods
that serialize the object to a stream and then return the length of the stream. Note:
This is approximately how much data the object is holding in memory. It may besignificantly
less than how much space it takes up on the heap. Case in point: Dictionary&lt;K,
V&gt; takes up much more space in memory than it does when serialized.That's because
it only serialized the key value pairs and it re-hydrates the dictionary on deserialization.
Nor will it reflect the size of any properties on your object that are marked with
the NonSerialized attribute. So it is far from perfect, but it helps give you an idea
with out the pain of using a memory profiler . You can use these methods by setting
a break point and calling them in your watch window (I prefer doing that over the
immediate window).<br /><br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;summary&gt;</span><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
Returns a rough approximation of the size of an object 
<br />
/// (including ALL objects in/directly referenced by the object)</span><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;/summary&gt;</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">static</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">long</span> ApproxSize(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">object</span> obj)
{ BinaryFormatter formatter <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> BinaryFormatter(); <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">long</span> length; <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (MemoryStream
stream <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> MemoryStream())
{ formatter.Serialize(stream, obj); stream.Seek(0, SeekOrigin.Begin); length <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> stream.Length;
} <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> length;
} </span></pre><br />
Sometimes though, your object is very large and serializing the object in memory will
cause an OutOfMemory Exception. So use the below method instead, it serializes the
object to disk and gives you the size of the file (and deletes the file after its
done). 
<br /><br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;summary&gt;<br />
/// Returns the approximate size of very large objects 
<br />
/// (time intensive) in bytes.<br />
/// &lt;/summary&gt;</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">static</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">long</span> ApproxSizeLarge(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">object</span> obj)
{ FileInfo info <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> FileInfo(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">@"c:\approxSizeTemp"</span>);
BinaryFormatter formatter <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> BinaryFormatter(); <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (StreamWriter
writer <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> StreamWriter(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">@"c:\approxSizeTemp"</span>))
{ formatter.Serialize(writer.BaseStream, obj); } <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">long</span> length <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> info.Length;
info.Delete(); <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> length;
}</span></pre><br /><p></p></body>
      <title>Quick and Dirty Memory Utility Methods</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,c8ff4f30-3dbd-427a-88ea-7252e5219a22.aspx</guid>
      <link>http://blog.nitriq.com/QuickAndDirtyMemoryUtilityMethods.aspx</link>
      <pubDate>Wed, 27 Feb 2008 19:36:28 GMT</pubDate>
      <description>With my work, I regularly
deal with obscene amounts. Of course, our users demand that this
information loads instantly and without running out of memory. So
optimizing our data storage objects for time and memory constraints is
incredibly important. So far, I think I've done a pretty good job,
because I can load 125 million data points in a shade over 3 seconds
(using a database to store some of this data flew out the window a
while ago). But getting to this point has been an interesting journey.
Doing quick prototyping of prospective storage mechanisms has been
incredibly important and I thought I'd share some of the utility
methods/classes I've created to speed up the process.&lt;br&gt;
&lt;br&gt;
The first piece of code is incredibly similar to my &lt;a href="http://www.vonsharp.net/StopwatchWriterClass.aspx"&gt;StopwatchWriter&lt;/a&gt; Class.
Instead of starting and stopping a Stopwatch, we're asking the garbage collector how
much total memory is being used (in bytes), before and after you instantiate an object
(or a whole set of objects)&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; MemoryWriter
: IDisposable { &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;long&lt;/span&gt; _startMem; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; _text; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; MemoryWriter(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; text)
{ _text &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; text &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;+&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"
- "&lt;/span&gt;; _startMem &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; GC.GetTotalMemory(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;true&lt;/span&gt;);
} &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; Dispose()
{ Console.WriteLine(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"mem:
"&lt;/span&gt; &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;+&lt;/span&gt; _text &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;+&lt;/span&gt; (GC.GetTotalMemory(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;true&lt;/span&gt;) &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;-&lt;/span&gt; 
&lt;br&gt;
_startMem).ToString()); } } Usage looks like: &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; MemoryWriter(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"CrazyBigObject"&lt;/span&gt;))
{ CrazyBigObject myCrazyBigObject &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; LoadCrazyBigObject(42);
}&lt;/span&gt;&lt;/pre&gt;
&lt;br&gt;
This is the most accurate way of figuring out how much memory a specific object is
taking up in memory. But there is a limitation to this method if you're using it in
a multi-threaded application, such as a Win Form because another running thread could
dereference objects on the heap after you've instantiated your MemoryWriter , but
before its been disposed. I prefer to only use this class in small throw away console
applications, to make my results as accurate as possible. 
&lt;br&gt;
&lt;br&gt;
Sometimes though, you'll find yourself looking at an object in someone else's code
and you want to easily find out how much memory its taking up, but the object in question
is "built" over several methods along with several other objects that you don't care
about. Which makes it impossible to use theMemoryWriter Class. You can use a memory
profiling application to do this, but I've found that they are notoriously hard to
pick up and use. And due to the nature of how they work, they take ages to work because
they have to take a snapshot before and after the code you care about (i.e. copy your
700MB object heap twice and then "diff" the two heaps). So I've wrote two small methods
that serialize the object to a stream and then return the length of the stream. Note:
This is approximately how much data the object is holding in memory. It may besignificantly
less than how much space it takes up on the heap. Case in point: Dictionary&amp;lt;K,
V&amp;gt; takes up much more space in memory than it does when serialized.That's because
it only serialized the key value pairs and it re-hydrates the dictionary on deserialization.
Nor will it reflect the size of any properties on your object that are marked with
the NonSerialized attribute. So it is far from perfect, but it helps give you an idea
with out the pain of using a memory profiler . You can use these methods by setting
a break point and calling them in your watch window (I prefer doing that over the
immediate window).&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
Returns a rough approximation of the size of an object 
&lt;br&gt;
/// (including ALL objects in/directly referenced by the object)&lt;/span&gt; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;static&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;long&lt;/span&gt; ApproxSize(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;object&lt;/span&gt; obj)
{ BinaryFormatter formatter &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; BinaryFormatter(); &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;long&lt;/span&gt; length; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (MemoryStream
stream &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; MemoryStream())
{ formatter.Serialize(stream, obj); stream.Seek(0, SeekOrigin.Begin); length &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; stream.Length;
} &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; length;
} &lt;/span&gt;&lt;/pre&gt;
&lt;br&gt;
Sometimes though, your object is very large and serializing the object in memory will
cause an OutOfMemory Exception. So use the below method instead, it serializes the
object to disk and gives you the size of the file (and deletes the file after its
done). 
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;summary&amp;gt;&lt;br&gt;
/// Returns the approximate size of very large objects 
&lt;br&gt;
/// (time intensive) in bytes.&lt;br&gt;
/// &amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;static&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;long&lt;/span&gt; ApproxSizeLarge(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;object&lt;/span&gt; obj)
{ FileInfo info &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; FileInfo(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;@"c:\approxSizeTemp"&lt;/span&gt;);
BinaryFormatter formatter &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; BinaryFormatter(); &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (StreamWriter
writer &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; StreamWriter(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;@"c:\approxSizeTemp"&lt;/span&gt;))
{ formatter.Serialize(writer.BaseStream, obj); } &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;long&lt;/span&gt; length &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; info.Length;
info.Delete(); &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; length;
}&lt;/span&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,c8ff4f30-3dbd-427a-88ea-7252e5219a22.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=f7bea287-6eb1-4e1e-8965-98a7c8eafe7a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,f7bea287-6eb1-4e1e-8965-98a7c8eafe7a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,f7bea287-6eb1-4e1e-8965-98a7c8eafe7a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f7bea287-6eb1-4e1e-8965-98a7c8eafe7a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">So I was never really expecting to make
much money from my AdSense advertisements, if I made $10 in a year, I'd be happy.
But perhaps I've only made 80 cents thus far because Google is serving absurd ads
like:<br /><br /><p></p><img src="http://www.vonsharp.net/content/binary/crappy%20adsense%20ad.png" border="0" /><br /><br />
What AdWords did these people buy that is displayed on my site talking about Microsoft
Technologies? Is this some sort of joke perpetrated the FOSS Commie Zealots? My content
might be a little crappy (<a href="http://www.dotnetkicks.com/zeitgeist/2008/2">or
not</a>) but C#, WPF and LINQ are simply bad-ass.<br /></body>
      <title>What The Hell?</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,f7bea287-6eb1-4e1e-8965-98a7c8eafe7a.aspx</guid>
      <link>http://blog.nitriq.com/WhatTheHell.aspx</link>
      <pubDate>Sat, 16 Feb 2008 17:07:21 GMT</pubDate>
      <description>So I was never really expecting to make much money from my AdSense advertisements, if I made $10 in a year, I'd be happy. But perhaps I've only made 80 cents thus far because Google is serving absurd ads like:&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/crappy%20adsense%20ad.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
What AdWords did these people buy that is displayed on my site talking about Microsoft
Technologies? Is this some sort of joke perpetrated the FOSS Commie Zealots? My content
might be a little crappy (&lt;a href="http://www.dotnetkicks.com/zeitgeist/2008/2"&gt;or
not&lt;/a&gt;) but C#, WPF and LINQ are simply bad-ass.&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,f7bea287-6eb1-4e1e-8965-98a7c8eafe7a.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=01d51ea8-2072-40fc-9dc9-dc75b078732d</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,01d51ea8-2072-40fc-9dc9-dc75b078732d.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,01d51ea8-2072-40fc-9dc9-dc75b078732d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=01d51ea8-2072-40fc-9dc9-dc75b078732d</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm sure there are plenty of you out there
who have your boss hankering to use some of that "Xml Stuff". Sometimes we get sheltered
in our own little world and haven't actually had to work with a whole lot of xml data
that wasn't already wrapped up by the Project Settings object created by Visual Studio.
So naturally, you'd probably go to the "<a title="tubes" href="http://www.urbandictionary.com/define.php?term=intertubes" id="t59e">tubes</a>"
and search for some additional information. Undoubtedly, you will run across pages
telling you how to construct some Xml in C# by creating a new XmlDocument and adding
XmlNode children which will have attributes and subnodes and namespaces, ad infinitum.
And you'll realize you now have some of the world's fugliest code. So you decide,
"oh, well xml is really similar to html, I'll just build it using a StringBuilder"
and you end up with slightly less fugly code, that is until you try to read it back
in.<br /><br />
These methods are completely unnecessary. PUT DOWN THE XMLNODE AND STEP AWAY FROM
THE STRINGBUILDER. Slowly move your hand to the mouse and scroll down to read about
the easiest way to write <b>and </b>read Xml in the .net framework. 
<br /><br />
Ok, quick show of hands: who thinks working with simple .net business model objects
is brain dead easy? Alright, if your hand isn't up, you are beyond hope, please leave
now. Of course, working with simple objects is about the simplest exercise for code
next to "Hello World". If you can create a .net object that models the xml you want
to store, you are 95% done with outputting well formed Xml. 
<br /><br />
Example: If I wanted to store information about a few people and their pets I would
create three classes:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">class</span> PetClub<br />
{<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span> List&lt;Person&gt;
Members { get; set; }<br />
}<br /><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">class</span> Person<br />
{<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> Name
{ get; set; }<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span> List&lt;Pet&gt;
Pets { get; set; }<br />
}<br /><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">class</span> Pet<br />
{<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> Name
{ get; set; }<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> Type
{ get; set; }<br />
}</span></pre>
To get an Xml representation of an instance of PetClub, all you have to do is use
the XmlSerializer found in the System.Xml.Serialization namespace. I've wrapped up
all the necessary code into a short utility method.<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">static</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> ConvertToXml(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">object</span> item)<br />
{<br />
XmlSerializer xmlser <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> XmlSerializer(item.GetType());<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (System.IO.MemoryStream
ms <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> System.IO.MemoryStream())<br />
{<br />
xmlser.Serialize(ms, item);<br />
UTF8Encoding textconverter <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> UTF8Encoding();<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> textconverter.GetString(ms.ToArray());<br />
}<br />
}</span></pre><br />
Simply calling: ConvertToXml(myPetClubInstance) will spit back the following xml:<br /><br /><font face="Courier New">&lt;PetClub xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;<br />
  &lt;Members&gt;<br />
    &lt;Person&gt;<br />
      &lt;Name&gt;Jon&lt;/Name&gt;<br />
      &lt;Pets&gt;<br />
        &lt;Pet&gt;<br />
          &lt;Name&gt;Chester&lt;/Name&gt;<br />
          &lt;Type&gt;Savannah Cat&lt;/Type&gt;<br />
        &lt;/Pet&gt;<br />
        &lt;Pet&gt;<br />
          &lt;Name&gt;Abby&lt;/Name&gt;<br />
          &lt;Type&gt;Domestic Miniature
Panther&lt;/Type&gt;<br />
        &lt;/Pet&gt;<br />
      &lt;/Pets&gt;<br />
    &lt;/Person&gt;<br />
    &lt;Person&gt;<br />
      &lt;Name&gt;Dan&lt;/Name&gt;<br />
      &lt;Pets&gt;<br />
        &lt;Pet&gt;<br />
          &lt;Name&gt;Lucy&lt;/Name&gt;<br />
          &lt;Type&gt;Semi-sweet Chocolate
Lab&lt;/Type&gt;<br />
        &lt;/Pet&gt;<br />
      &lt;/Pets&gt;<br />
    &lt;/Person&gt;<br />
  &lt;/Members&gt;<br />
&lt;/PetClub&gt;</font><br /><br />
At this point you might be saying: "That is cool and all, Jon, but this looks like
a lot of xml to be outputting for such little actual data. And what if I want to have
more control over xml element naming". Dear friend, let not your heart be troubled
for there is help on the way. By adding some simple Property Attributes to our classes
we can completely change how our xml is constructed.  We can have the object
in whatever form is most convienient for our program while still allowing us to interoperate
with an xml document created by a different application with a different idea of what
good names are.<br /><br />
Changing our two classes to:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">class</span> Person<br />
{<br />
[XmlElement(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"FirstName"</span>)]<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> Name
{ get; set; }<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span> List&lt;Pet&gt;
Pets { get; set; }<br />
}<br /><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">class</span> Pet<br />
{<br />
[XmlAttribute(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Name"</span>)]<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> Name
{ get; set; }<br />
[XmlAttribute(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Breed"</span>)]<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> Type
{ get; set; }<br />
} </span></pre><br />
Will output this xml:<br /><br /><font face="Courier New"> &lt;PetClub xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;<br />
  &lt;Members&gt;<br />
    &lt;Person&gt;<br />
      &lt;FirstName&gt;Jon&lt;/FirstName&gt;<br />
      &lt;Pets&gt;<br />
        &lt;Pet Name="Chester" Breed="Savannah
Cat" /&gt;<br />
        &lt;Pet Name="Abby" Breed="Domestic Miniature
Panther" /&gt;<br />
      &lt;/Pets&gt;<br />
    &lt;/Person&gt;<br />
    &lt;Person&gt;<br />
      &lt;FirstName&gt;Dan&lt;/FirstName&gt;<br />
      &lt;Pets&gt;<br />
        &lt;Pet Name="Lucy" Breed="Semi-sweet Chocolate
Lab" /&gt;<br />
      &lt;/Pets&gt;<br />
    &lt;/Person&gt;<br />
  &lt;/Members&gt;<br />
&lt;/PetClub&gt;</font><br /><br /><br />
Pretty simple, huh? Can you imagine how difficult it would be to make these changes
via XmlNodes or a StringBuilder? There are about 10 other property attributes available
for xml serialization, including the very useful XmlIgnore() attribute which makes
the appropriate property not serialized. I'll leave the rest of the research up to
you. 
<br /><br />
And I almost forgot, to read your xml back into an object use the following method:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">static</span> T
FromXml&lt;T&gt;(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> xml)<br />
{<br />
XmlSerializer xmlser <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> XmlSerializer(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">typeof</span>(T));<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (System.IO.StringReader
sr <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> System.IO.StringReader(xml))<br />
{<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> (T)xmlser.Deserialize(sr);<br />
}<br />
}<br /></span></pre><h1><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"></span></h1><p></p>
Sample Code - <a href="http://www.vonsharp.net/content/binary/XmlSerializerSample.%5Brename%20to%20cs%5D" temp_href="http://www.vonsharp.net/content/binary/XmlSerializerSample.[rename to cs]">XmlSerializerSample.cs
(2.33 KB)</a><br /><br /></body>
      <title>Put Down the XmlNode and Step Away From the StringBuilder</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,01d51ea8-2072-40fc-9dc9-dc75b078732d.aspx</guid>
      <link>http://blog.nitriq.com/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx</link>
      <pubDate>Tue, 12 Feb 2008 14:29:33 GMT</pubDate>
      <description>I'm sure there are plenty of you out there who have your boss hankering
to use some of that "Xml Stuff". Sometimes we get sheltered in our own
little world and haven't actually had to work with a whole lot of xml
data that wasn't already wrapped up by the Project Settings object
created by Visual Studio. So naturally, you'd probably go to the "&lt;a title="tubes" href="http://www.urbandictionary.com/define.php?term=intertubes" id="t59e"&gt;tubes&lt;/a&gt;"
and search for some additional information. Undoubtedly, you will run across pages
telling you how to construct some Xml in C# by creating a new XmlDocument and adding
XmlNode children which will have attributes and subnodes and namespaces, ad infinitum.
And you'll realize you now have some of the world's fugliest code. So you decide,
"oh, well xml is really similar to html, I'll just build it using a StringBuilder"
and you end up with slightly less fugly code, that is until you try to read it back
in.&lt;br&gt;
&lt;br&gt;
These methods are completely unnecessary. PUT DOWN THE XMLNODE AND STEP AWAY FROM
THE STRINGBUILDER. Slowly move your hand to the mouse and scroll down to read about
the easiest way to write &lt;b&gt;and &lt;/b&gt;read Xml in the .net framework. 
&lt;br&gt;
&lt;br&gt;
Ok, quick show of hands: who thinks working with simple .net business model objects
is brain dead easy? Alright, if your hand isn't up, you are beyond hope, please leave
now. Of course, working with simple objects is about the simplest exercise for code
next to "Hello World". If you can create a .net object that models the xml you want
to store, you are 95% done with outputting well formed Xml. 
&lt;br&gt;
&lt;br&gt;
Example: If I wanted to store information about a few people and their pets I would
create three classes:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; PetClub&lt;br&gt;
{&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; List&amp;lt;Person&amp;gt;
Members { get; set; }&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; Person&lt;br&gt;
{&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; Name
{ get; set; }&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; List&amp;lt;Pet&amp;gt;
Pets { get; set; }&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; Pet&lt;br&gt;
{&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; Name
{ get; set; }&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; Type
{ get; set; }&lt;br&gt;
}&lt;/span&gt;&lt;/pre&gt;
To get an Xml representation of an instance of PetClub, all you have to do is use
the XmlSerializer found in the System.Xml.Serialization namespace. I've wrapped up
all the necessary code into a short utility method.&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;static&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; ConvertToXml(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;object&lt;/span&gt; item)&lt;br&gt;
{&lt;br&gt;
XmlSerializer xmlser &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; XmlSerializer(item.GetType());&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (System.IO.MemoryStream
ms &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; System.IO.MemoryStream())&lt;br&gt;
{&lt;br&gt;
xmlser.Serialize(ms, item);&lt;br&gt;
UTF8Encoding textconverter &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; UTF8Encoding();&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; textconverter.GetString(ms.ToArray());&lt;br&gt;
}&lt;br&gt;
}&lt;/span&gt;&lt;/pre&gt;
&lt;br&gt;
Simply calling: ConvertToXml(myPetClubInstance) will spit back the following xml:&lt;br&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;lt;PetClub xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;Members&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Person&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;Jon&amp;lt;/Name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;Chester&amp;lt;/Name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Type&amp;gt;Savannah Cat&amp;lt;/Type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;Abby&amp;lt;/Name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Type&amp;gt;Domestic Miniature
Panther&amp;lt;/Type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Person&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Person&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;Dan&amp;lt;/Name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;Lucy&amp;lt;/Name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Type&amp;gt;Semi-sweet Chocolate
Lab&amp;lt;/Type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Person&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/Members&amp;gt;&lt;br&gt;
&amp;lt;/PetClub&amp;gt;&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
At this point you might be saying: "That is cool and all, Jon, but this looks like
a lot of xml to be outputting for such little actual data. And what if I want to have
more control over xml element naming". Dear friend, let not your heart be troubled
for there is help on the way. By adding some simple Property Attributes to our classes
we can completely change how our xml is constructed.&amp;nbsp; We can have the object
in whatever form is most convienient for our program while still allowing us to interoperate
with an xml document created by a different application with a different idea of what
good names are.&lt;br&gt;
&lt;br&gt;
Changing our two classes to:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; Person&lt;br&gt;
{&lt;br&gt;
[XmlElement(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"FirstName"&lt;/span&gt;)]&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; Name
{ get; set; }&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; List&amp;lt;Pet&amp;gt;
Pets { get; set; }&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; Pet&lt;br&gt;
{&lt;br&gt;
[XmlAttribute(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Name"&lt;/span&gt;)]&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; Name
{ get; set; }&lt;br&gt;
[XmlAttribute(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Breed"&lt;/span&gt;)]&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; Type
{ get; set; }&lt;br&gt;
} &lt;/span&gt;&lt;/pre&gt;
&lt;br&gt;
Will output this xml:&lt;br&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt; &amp;lt;PetClub xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;Members&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Person&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FirstName&amp;gt;Jon&amp;lt;/FirstName&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pet Name="Chester" Breed="Savannah
Cat" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pet Name="Abby" Breed="Domestic Miniature
Panther" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Person&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Person&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FirstName&amp;gt;Dan&amp;lt;/FirstName&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Pet Name="Lucy" Breed="Semi-sweet Chocolate
Lab" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Pets&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Person&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/Members&amp;gt;&lt;br&gt;
&amp;lt;/PetClub&amp;gt;&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Pretty simple, huh? Can you imagine how difficult it would be to make these changes
via XmlNodes or a StringBuilder? There are about 10 other property attributes available
for xml serialization, including the very useful XmlIgnore() attribute which makes
the appropriate property not serialized. I'll leave the rest of the research up to
you. 
&lt;br&gt;
&lt;br&gt;
And I almost forgot, to read your xml back into an object use the following method:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;static&lt;/span&gt; T
FromXml&amp;lt;T&amp;gt;(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; xml)&lt;br&gt;
{&lt;br&gt;
XmlSerializer xmlser &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;typeof&lt;/span&gt;(T));&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (System.IO.StringReader
sr &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; System.IO.StringReader(xml))&lt;br&gt;
{&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; (T)xmlser.Deserialize(sr);&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;h1&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p&gt;
&lt;/p&gt;
Sample Code - &lt;a href="http://www.vonsharp.net/content/binary/XmlSerializerSample.%5Brename%20to%20cs%5D" temp_href="http://www.vonsharp.net/content/binary/XmlSerializerSample.[rename to cs]"&gt;XmlSerializerSample.cs
(2.33 KB)&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,01d51ea8-2072-40fc-9dc9-dc75b078732d.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=fa13cb82-1f8d-4fec-bf61-10df57731a11</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,fa13cb82-1f8d-4fec-bf61-10df57731a11.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,fa13cb82-1f8d-4fec-bf61-10df57731a11.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=fa13cb82-1f8d-4fec-bf61-10df57731a11</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Well, as you can tell I've got a new DasBlog
theme I created myself. I'm not the most artistic person in the world, but I'm happy
with what I've accomplished. Good lord did it take a long time, its been a while since
I've pounded out HTML and CSS, but I'm glad to have it fresh in my head again but
I'm totally disgusted at how differently IE and Firefox render, what a gigantic waste
of time. 
<br /><br />
Have a good week!<br /><p></p></body>
      <title>Custom Created Theme</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,fa13cb82-1f8d-4fec-bf61-10df57731a11.aspx</guid>
      <link>http://blog.nitriq.com/CustomCreatedTheme.aspx</link>
      <pubDate>Mon, 11 Feb 2008 05:47:16 GMT</pubDate>
      <description>Well, as you can tell I've got a new DasBlog theme I created myself. I'm not the most artistic person in the world, but I'm happy with what I've accomplished. Good lord did it take a long time, its been a while since I've pounded out HTML and CSS, but I'm glad to have it fresh in my head again but I'm totally disgusted at how differently IE and Firefox render, what a gigantic waste of time. &lt;br&gt;
&lt;br&gt;
Have a good week!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,fa13cb82-1f8d-4fec-bf61-10df57731a11.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=482fcfaa-f3c6-4a1f-a21c-b3cf7f0e7a1b</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,482fcfaa-f3c6-4a1f-a21c-b3cf7f0e7a1b.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,482fcfaa-f3c6-4a1f-a21c-b3cf7f0e7a1b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=482fcfaa-f3c6-4a1f-a21c-b3cf7f0e7a1b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">That is all.<br /><p></p></body>
      <title>Damn It Feels Good To Write Unit Tests Again</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,482fcfaa-f3c6-4a1f-a21c-b3cf7f0e7a1b.aspx</guid>
      <link>http://blog.nitriq.com/DamnItFeelsGoodToWriteUnitTestsAgain.aspx</link>
      <pubDate>Fri, 08 Feb 2008 18:45:33 GMT</pubDate>
      <description>That is all.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,482fcfaa-f3c6-4a1f-a21c-b3cf7f0e7a1b.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=1cc24b4b-cfdb-46f2-af0d-320ce151fb19</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,1cc24b4b-cfdb-46f2-af0d-320ce151fb19.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,1cc24b4b-cfdb-46f2-af0d-320ce151fb19.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1cc24b4b-cfdb-46f2-af0d-320ce151fb19</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">It really does shock and amaze me how many
developers get through the day without knowing the wonders of the Exceptions Dialog
box. You can access it via Debug&gt;Exceptions or you can hit Ctrl-Alt-E. What this
dialog box allows you do is to pick a set of exceptions (or all of them for that matter)
and the debugger will automatically break when the exception is thrown. This allows
you to inspect your call stack and interrogate your variables to determine the state
of your application when the exception occurred. No longer do you have to look through
an error message to find a line number and start setting break points. This becomes
especially helpful if the error is occurring in a gigantic loop and your not sure
how many times the loop executes before it runs into a null reference exception. It
breaks automatically and voila, you can easily see all the variables that are associated
with your null object (or whatever the error may be).<br /><br />
Sometimes you'll be responsible for code, that for one reason or another uses exception
catching/handling as a normal part of code flow. This usually is considered a bad
practice but sometimes you don't have a choice under the circumstances. When that
happens, it is very easy to turn off custom typed exceptions, just click the "Add..."
button and type in the fully qualified name of the exception you don't want to see
every time it is thrown. As you can see in my screenshot, I've done this with the
Sybase.Data.AseClient.AseException exception. 
<br /><br />
I hope this helps speed up any future debugging.<br /><br /><br /><p></p><img src="http://www.vonsharp.net/content/binary/ExceptionsDialogBox2.jpg" border="0" /></body>
      <title>Most Useful VS Feature No One Knows About</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,1cc24b4b-cfdb-46f2-af0d-320ce151fb19.aspx</guid>
      <link>http://blog.nitriq.com/MostUsefulVSFeatureNoOneKnowsAbout.aspx</link>
      <pubDate>Thu, 07 Feb 2008 17:23:45 GMT</pubDate>
      <description>It really does shock and amaze me how many developers get through the day without knowing the wonders of the Exceptions Dialog box. You can access it via Debug&amp;gt;Exceptions or you can hit Ctrl-Alt-E. What this dialog box allows you do is to pick a set of exceptions (or all of them for that matter) and the debugger will automatically break when the exception is thrown. This allows you to inspect your call stack and interrogate your variables to determine the state of your application when the exception occurred. No longer do you have to look through an error message to find a line number and start setting break points. This becomes especially helpful if the error is occurring in a gigantic loop and your not sure how many times the loop executes before it runs into a null reference exception. It breaks automatically and voila, you can easily see all the variables that are associated with your null object (or whatever the error may be).&lt;br&gt;
&lt;br&gt;
Sometimes you'll be responsible for code, that for one reason or another uses exception
catching/handling as a normal part of code flow. This usually is considered a bad
practice but sometimes you don't have a choice under the circumstances. When that
happens, it is very easy to turn off custom typed exceptions, just click the "Add..."
button and type in the fully qualified name of the exception you don't want to see
every time it is thrown. As you can see in my screenshot, I've done this with the
Sybase.Data.AseClient.AseException exception. 
&lt;br&gt;
&lt;br&gt;
I hope this helps speed up any future debugging.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.vonsharp.net/content/binary/ExceptionsDialogBox2.jpg" border="0"&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,1cc24b4b-cfdb-46f2-af0d-320ce151fb19.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=460688c0-11c1-477f-87cb-855cdba1ccc7</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,460688c0-11c1-477f-87cb-855cdba1ccc7.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,460688c0-11c1-477f-87cb-855cdba1ccc7.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=460688c0-11c1-477f-87cb-855cdba1ccc7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I just found this site off of dotnetkicks,
and it looks like a great reference site for information on patterns and anti-patterns<br /><br /><a href="http://sourcemaking.com/">http://sourcemaking.com/</a><br /><p></p></body>
      <title>Patterns</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,460688c0-11c1-477f-87cb-855cdba1ccc7.aspx</guid>
      <link>http://blog.nitriq.com/Patterns.aspx</link>
      <pubDate>Mon, 04 Feb 2008 14:46:19 GMT</pubDate>
      <description>I just found this site off of dotnetkicks, and it looks like a great reference site for information on patterns and anti-patterns&lt;br&gt;
&lt;br&gt;
&lt;a href="http://sourcemaking.com/"&gt;http://sourcemaking.com/&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,460688c0-11c1-477f-87cb-855cdba1ccc7.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=4cc182ab-3611-4d0f-bea4-3a921e71dd16</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,4cc182ab-3611-4d0f-bea4-3a921e71dd16.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,4cc182ab-3611-4d0f-bea4-3a921e71dd16.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4cc182ab-3611-4d0f-bea4-3a921e71dd16</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Generic dictionaries are a great thing,
they let you add and retrieve objects very quickly. My current gig has a lot of need
for them because we've got tons of data that needs to be quickly referenced (I'll
post more about Dictionary memory performance later). The problem is that developers
everywhere like to use very un-descriptive names for their dictionaries, especially
nested dictionaries. Usually you'd like to avoid nesting these things, but sometimes
you don't have a choice and making a bunch of derived classes adds a lot of code and
more "stuff" you have to sift through.<br /><br />
Simple Example:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">Dictionary&lt;<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span>, <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span>&gt;
_peopleDictionary;</span></pre>
What is the key? Is it a PersonId? Is it a CustomerId? Is it an EmployeeId? Is it
a Social Security Number?<br /><br />
What about the value? Is it First Name, Last Name, First then Last, Last then First,
Nickname?<br /><br />
In order to find out, a developer who takes over your code has to look up all references
to PeopleDictionary and find out what the Key and Values are, yielding a gigantic
waste of time. (Worse yet, it could be you looking up all the references because you
haven't looked at this particular code in 7 months). And that is even a non-nested
dictionary!<br /><br />
Now, can you tell me what kind of data is stored in the below object?<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">Dictionary&lt;<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span>,
Dictionary&lt;<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span>,
List&lt;<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span>&gt;&gt;&gt;
_customerIdToOrderIdToDescriptions;</span></pre>
Sure the name is a little long, but think about how many different kinds of data are
being stored in it. Plus you didn't have to make a custom object for a one-off need.
Anyone who has to modify your code can easily use this object without trying to figure
out what "OrdersDictionary" is actually storing. 
<br /><br />
FXCop Guys: I'll give you $10 if you add a rule saying that generic dictionary variable
names have to contain the string literal "To".<br /><br />
Of note: it's generally considered bad practice to use nested generics, but if you
do, just make sure that you don't expose nested generic types by returning them in
public methods or by making a public property with a nested type. Keep them for internal
use within your class only.<br /><br /><p></p></body>
      <title>Dictionary Naming Guidelines</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,4cc182ab-3611-4d0f-bea4-3a921e71dd16.aspx</guid>
      <link>http://blog.nitriq.com/DictionaryNamingGuidelines.aspx</link>
      <pubDate>Wed, 23 Jan 2008 16:05:02 GMT</pubDate>
      <description>Generic dictionaries are a great thing, they let you add and retrieve objects very quickly. My current gig has a lot of need for them because we've got tons of data that needs to be quickly referenced (I'll post more about Dictionary memory performance later). The problem is that developers everywhere like to use very un-descriptive names for their dictionaries, especially nested dictionaries. Usually you'd like to avoid nesting these things, but sometimes you don't have a choice and making a bunch of derived classes adds a lot of code and more "stuff" you have to sift through.&lt;br&gt;
&lt;br&gt;
Simple Example:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;Dictionary&amp;lt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt;&amp;gt;
_peopleDictionary;&lt;/span&gt;&lt;/pre&gt;
What is the key? Is it a PersonId? Is it a CustomerId? Is it an EmployeeId? Is it
a Social Security Number?&lt;br&gt;
&lt;br&gt;
What about the value? Is it First Name, Last Name, First then Last, Last then First,
Nickname?&lt;br&gt;
&lt;br&gt;
In order to find out, a developer who takes over your code has to look up all references
to PeopleDictionary and find out what the Key and Values are, yielding a gigantic
waste of time. (Worse yet, it could be you looking up all the references because you
haven't looked at this particular code in 7 months). And that is even a non-nested
dictionary!&lt;br&gt;
&lt;br&gt;
Now, can you tell me what kind of data is stored in the below object?&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;Dictionary&amp;lt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt;,
Dictionary&amp;lt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt;,
List&amp;lt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;
_customerIdToOrderIdToDescriptions;&lt;/span&gt;&lt;/pre&gt;
Sure the name is a little long, but think about how many different kinds of data are
being stored in it. Plus you didn't have to make a custom object for a one-off need.
Anyone who has to modify your code can easily use this object without trying to figure
out what "OrdersDictionary" is actually storing. 
&lt;br&gt;
&lt;br&gt;
FXCop Guys: I'll give you $10 if you add a rule saying that generic dictionary variable
names have to contain the string literal "To".&lt;br&gt;
&lt;br&gt;
Of note: it's generally considered bad practice to use nested generics, but if you
do, just make sure that you don't expose nested generic types by returning them in
public methods or by making a public property with a nested type. Keep them for internal
use within your class only.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,4cc182ab-3611-4d0f-bea4-3a921e71dd16.aspx</comments>
      <category>Tips and Tricks</category>
      <category>Wishlist</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=a3fb8bcc-9e2e-478b-9a73-a4aad99141b0</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,a3fb8bcc-9e2e-478b-9a73-a4aad99141b0.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,a3fb8bcc-9e2e-478b-9a73-a4aad99141b0.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a3fb8bcc-9e2e-478b-9a73-a4aad99141b0</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Register and attend for your local launch
event and receive a free copy of Visual Studio 2008, SQL Server 2008 AND Windows Server
2008. Which by my estimate is at least $2000 in free software.<br /><br /><a href="http://www.microsoft.com/heroeshappenhere/register/default.mspx">http://www.microsoft.com/heroeshappenhere/register/default.mspx</a><br /><br />
(If you're feeling generous, I would accept a 10% finders fee)<br /><p></p></body>
      <title>Free Copy of VS 2008</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,a3fb8bcc-9e2e-478b-9a73-a4aad99141b0.aspx</guid>
      <link>http://blog.nitriq.com/FreeCopyOfVS2008.aspx</link>
      <pubDate>Fri, 18 Jan 2008 19:33:04 GMT</pubDate>
      <description>Register and attend for your local launch event and receive a free copy of Visual Studio 2008, SQL Server 2008 AND Windows Server 2008. Which by my estimate is at least $2000 in free software.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.microsoft.com/heroeshappenhere/register/default.mspx"&gt;http://www.microsoft.com/heroeshappenhere/register/default.mspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
(If you're feeling generous, I would accept a 10% finders fee)&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,a3fb8bcc-9e2e-478b-9a73-a4aad99141b0.aspx</comments>
      <category>Stuff</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=beb68c16-4e73-4dca-92c0-0dbfb35ddb85</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,beb68c16-4e73-4dca-92c0-0dbfb35ddb85.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,beb68c16-4e73-4dca-92c0-0dbfb35ddb85.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=beb68c16-4e73-4dca-92c0-0dbfb35ddb85</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Do you ever get sick of having to write
4 whole lines for timing certain parts of your code. I know 4 lines isn't that bad,
but they multiply quickly when you're testing a lot of different code, or different
parts of the same method. That is why I came up with a StopwatchWriter class, it implements
IDisposable so you can use it in a using statement which reduces the needed code to
one line, put at the top of the code your testing (as opposed to before to setup and
after to write). The constructor starts a stopwatch and when the Dispose method gets
called, it stops the stopwatch and writes the time to the console, but it could easily
be changed to write any type of log.<br /><br />
public class StopwatchWriter : IDisposable<br />
{<br />
    Stopwatch _stopwatch = new Stopwatch();<br />
    string _text;<br /><br />
    public StopwatchWriter(string text)<br />
    {<br />
        _text = text + " - ";<br />
        _stopwatch.Start();<br />
    }<br /><br />
    public void Dispose()<br />
    {<br />
        _stopwatch.Stop();<br />
        Console.WriteLine("stopw: "+_text + _stopwatch.ElapsedMilliseconds);<br />
    }<br />
}<br /><br />
Usage looks like:<br /><br />
using (new StopwatchWriter("populateStuff"))<br />
{<br />
    this.PopulateStep1();<br />
    this.PopulateStep2();<br />
}<br /><br />
-or-<br /><br />
using (new StopwatchWriter("doStuff"))<br />
    DoStuff();<br /><br /><br /><br /><p></p></body>
      <title>StopwatchWriter Class</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,beb68c16-4e73-4dca-92c0-0dbfb35ddb85.aspx</guid>
      <link>http://blog.nitriq.com/StopwatchWriterClass.aspx</link>
      <pubDate>Tue, 15 Jan 2008 15:06:25 GMT</pubDate>
      <description>Do you ever get sick of having to write 4 whole lines for timing certain parts of your code. I know 4 lines isn't that bad, but they multiply quickly when you're testing a lot of different code, or different parts of the same method. That is why I came up with a StopwatchWriter class, it implements IDisposable so you can use it in a using statement which reduces the needed code to one line, put at the top of the code your testing (as opposed to before to setup and after to write). The constructor starts a stopwatch and when the Dispose method gets called, it stops the stopwatch and writes the time to the console, but it could easily be changed to write any type of log.&lt;br&gt;
&lt;br&gt;
public class StopwatchWriter : IDisposable&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Stopwatch _stopwatch = new Stopwatch();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; string _text;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public StopwatchWriter(string text)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text = text + " - ";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _stopwatch.Start();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _stopwatch.Stop();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("stopw: "+_text + _stopwatch.ElapsedMilliseconds);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
Usage looks like:&lt;br&gt;
&lt;br&gt;
using (new StopwatchWriter("populateStuff"))&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PopulateStep1();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PopulateStep2();&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
-or-&lt;br&gt;
&lt;br&gt;
using (new StopwatchWriter("doStuff"))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DoStuff();&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,beb68c16-4e73-4dca-92c0-0dbfb35ddb85.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=047ace4f-12ab-4486-b6d8-ca7ce6722e7a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,047ace4f-12ab-4486-b6d8-ca7ce6722e7a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,047ace4f-12ab-4486-b6d8-ca7ce6722e7a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=047ace4f-12ab-4486-b6d8-ca7ce6722e7a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">So I was getting this real sweet "Error
Creating Window Handle" exception in one of my apps when I went to ".Show()" a window
in the app (not during the form's construction". I found that if I commented out attaching
a DataSource to the a combobox, showing the form worked fine. After reading a lot
about window handles and GDI objects and getting no where, lots of trial and error
commenced. Apparently Combobox does not like having the "DisplayMember" property set
after the datasource is set, but only if one of the objects in the datasource has
null for its DisplayMember property. (The DisplayMember was a property called "Name",
if one of the objects had null for its "Name" property, it blows up). But apparently
if you set the DisplayMember BEFORE you set your datasource, it is ok to have a displaymember
prop be null. Oy veh.<br /><p></p></body>
      <title>Error Creating Window Handle</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,047ace4f-12ab-4486-b6d8-ca7ce6722e7a.aspx</guid>
      <link>http://blog.nitriq.com/ErrorCreatingWindowHandle.aspx</link>
      <pubDate>Wed, 09 Jan 2008 15:48:59 GMT</pubDate>
      <description>So I was getting this real sweet "Error Creating Window Handle" exception in one of my apps when I went to ".Show()" a window in the app (not during the form's construction". I found that if I commented out attaching a DataSource to the a combobox, showing the form worked fine. After reading a lot about window handles and GDI objects and getting no where, lots of trial and error commenced. Apparently Combobox does not like having the "DisplayMember" property set after the datasource is set, but only if one of the objects in the datasource has null for its DisplayMember property. (The DisplayMember was a property called "Name", if one of the objects had null for its "Name" property, it blows up). But apparently if you set the DisplayMember BEFORE you set your datasource, it is ok to have a displaymember prop be null. Oy veh.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,047ace4f-12ab-4486-b6d8-ca7ce6722e7a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=f146f701-49d6-4d33-92bf-9229aa4542ad</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,f146f701-49d6-4d33-92bf-9229aa4542ad.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,f146f701-49d6-4d33-92bf-9229aa4542ad.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f146f701-49d6-4d33-92bf-9229aa4542ad</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">It certainly isn't easy to access what
winform control was ultimately responsible for bringing up a ContextMenuStrip, but
it is indeed possible, there is just some casting involved :)<br /><br /><br />
private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)<br />
{<br />
    if (((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl
== 
<br />
        this.PrimeNumbersCheckBoxList)<br />
    {<br />
        this.SelectAllThePrimeNumbers();<br />
    }<br />
    
<br />
    if (((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl
== 
<br />
        this.CompositeNumbersCheckBoxList)<br />
    {<br />
        this.SelectAllTheCompositeNumbers();<br />
    }<br />
}<br /><br /><br /><p></p></body>
      <title>Accessing The Control Responsible For A ContextMenuStrip</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,f146f701-49d6-4d33-92bf-9229aa4542ad.aspx</guid>
      <link>http://blog.nitriq.com/AccessingTheControlResponsibleForAContextMenuStrip.aspx</link>
      <pubDate>Thu, 27 Dec 2007 23:06:29 GMT</pubDate>
      <description>It certainly isn't easy to access what winform control was ultimately responsible for bringing up a ContextMenuStrip, but it is indeed possible, there is just some casting involved :)&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl
== 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.PrimeNumbersCheckBoxList)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.SelectAllThePrimeNumbers();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl
== 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.CompositeNumbersCheckBoxList)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.SelectAllTheCompositeNumbers();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,f146f701-49d6-4d33-92bf-9229aa4542ad.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=a1f97c5a-0ac1-48e4-a6ea-519f912ff37f</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,a1f97c5a-0ac1-48e4-a6ea-519f912ff37f.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,a1f97c5a-0ac1-48e4-a6ea-519f912ff37f.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a1f97c5a-0ac1-48e4-a6ea-519f912ff37f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">It is incredibly easy to add a <a href="http://www.dotnetkicks.com/">DotNetKicks</a> "Kick
It" Button to any DasBlog website. Simply navigate to your "themes" directory and
open up the "itemTemplate.blogtemplate" file with text editor. And simply paste the
following HTML wherever you'd like the button to display.<br /><br />
&lt;a href="http://www.dotnetkicks.com/kick/?url=&lt;%PermalinkUrl%&gt;"&gt;&lt;img
src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=&lt;%PermalinkUrl%&gt;"
border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;<br /><br />
Pretty simple, huh? Thanks to <a href="http://www.jforsythe.com/">John Forsythe</a> for
posting all the available <a href="http://www.jforsythe.com/jforsythe/projects/dasBlogMacros.html">DasBlog
Macros</a>.<br /><br />
If you're thinking about starting a blog, I highly recommend <a href="http://www.dasblog.info/">DasBlog</a>,
it was a very easy to setup, especially since it doesn't require a database! That
makes the cost of hosting a blog at <a href="http://www.discountasp.net/index.aspx?refcode=VONSHARP">DiscountAsp.net</a> only
$10/month! Subtext on the other hand needs a database to store and will run you $20
a month. I don't really know why DasBlog doesn't advertise that fact more, I would
have tried installing it first, is a relational database really that necessary for
a blog? It also makes it brain dead simple to backup your blog or move hosting providers.
I know because I started out hosting my blog at 1and1 (stay away!), I've been with <a href="http://www.discountasp.net/index.aspx?refcode=VONSHARP">DiscountAsp.net</a> for
a couple months and absolutely love it. Everything just works, I copied my DasBlog
files over and I was done. Plus its cheap and since all they do is focus on Microsoft
technologies, they always have the latest and greatest beta stuff running as soon
as it comes out (like .Net 3.5 and IIS 7.0).<p></p></body>
      <title>How To Easily Add A DotNetKicks Button To DasBlog </title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,a1f97c5a-0ac1-48e4-a6ea-519f912ff37f.aspx</guid>
      <link>http://blog.nitriq.com/HowToEasilyAddADotNetKicksButtonToDasBlog.aspx</link>
      <pubDate>Tue, 18 Dec 2007 02:03:54 GMT</pubDate>
      <description>It is incredibly easy to add a &lt;a href="http://www.dotnetkicks.com/"&gt;DotNetKicks&lt;/a&gt; "Kick
It" Button to any DasBlog website. Simply navigate to your "themes" directory and
open up the "itemTemplate.blogtemplate" file with text editor. And simply paste the
following HTML wherever you'd like the button to display.&lt;br&gt;
&lt;br&gt;
&amp;lt;a href="http://www.dotnetkicks.com/kick/?url=&amp;lt;%PermalinkUrl%&amp;gt;"&amp;gt;&amp;lt;img
src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=&amp;lt;%PermalinkUrl%&amp;gt;"
border="0" alt="kick it on DotNetKicks.com" /&amp;gt;&amp;lt;/a&amp;gt;&lt;br&gt;
&lt;br&gt;
Pretty simple, huh? Thanks to &lt;a href="http://www.jforsythe.com/"&gt;John Forsythe&lt;/a&gt; for
posting all the available &lt;a href="http://www.jforsythe.com/jforsythe/projects/dasBlogMacros.html"&gt;DasBlog
Macros&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
If you're thinking about starting a blog, I highly recommend &lt;a href="http://www.dasblog.info/"&gt;DasBlog&lt;/a&gt;,
it was a very easy to setup, especially since it doesn't require a database! That
makes the cost of hosting a blog at &lt;a href="http://www.discountasp.net/index.aspx?refcode=VONSHARP"&gt;DiscountAsp.net&lt;/a&gt; only
$10/month! Subtext on the other hand needs a database to store and will run you $20
a month. I don't really know why DasBlog doesn't advertise that fact more, I would
have tried installing it first, is a relational database really that necessary for
a blog? It also makes it brain dead simple to backup your blog or move hosting providers.
I know because I started out hosting my blog at 1and1 (stay away!), I've been with &lt;a href="http://www.discountasp.net/index.aspx?refcode=VONSHARP"&gt;DiscountAsp.net&lt;/a&gt; for
a couple months and absolutely love it. Everything just works, I copied my DasBlog
files over and I was done. Plus its cheap and since all they do is focus on Microsoft
technologies, they always have the latest and greatest beta stuff running as soon
as it comes out (like .Net 3.5 and IIS 7.0).&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,a1f97c5a-0ac1-48e4-a6ea-519f912ff37f.aspx</comments>
      <category>Tips and Tricks</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=87601a25-bdc8-45e5-a3ba-d2c0e62acf8a</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,87601a25-bdc8-45e5-a3ba-d2c0e62acf8a.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,87601a25-bdc8-45e5-a3ba-d2c0e62acf8a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=87601a25-bdc8-45e5-a3ba-d2c0e62acf8a</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">So I was totally stoked when I won my new
Zune last night, I've been using <a href="http://www.rhapsody.com">Rhapsody</a> for
quite some time and have really enjoyed it thus far, but I was looking forward to
using a device with it other than my Sansa e260. So tonight I fire up the rhapsody
client app on my desktop, plug in my new Zune, and there is no "device" icon popping
up in rhapsody (like there is with my Sansa). I think: oh, I wonder if I have to install
the Zune software first for some bizzare driver, then the rhapsody client will be
able to talk with my Zune. I install the Zune software, setup everything as necessary
and then start the rhapsody client. Nothing, still. Shit. I google "Zune Plays For
Sure", thinking that surely, Microsoft after spending millions of dollars coming up
with <a href="http://en.wikipedia.org/wiki/Microsoft_PlaysForSure">PlaysForSure</a>.
But no, Zune only works with the Zune Marketplace, not even music from the MSN MUSIC
STORE will play on a Zune. 
<br /><br />
Microsoft: I really am a big fan, a "fanboy" would probably be an acurate description
of my opinion on your company. I know that you're going through kind of an image problem,
people don't seem to be (or say at least) that they're usually satisfied with you
as a company. Here is why: people have a bad experience with one of your products
and that one experience colors their entire perception. It sucks to be in that position
because it puts a lot of pressure to have everything be top-notch, a difficult glass
to fill. I'm still a "fanboy". Your office productivity tools: Second-To-None. Your
developer tools: Awesome. Your development frameworks: Magnificent. Your gaming console:
Pretty Bad Ass. I know that having the best product isn't going to be possible, but
for the love of God, having the Zune support PlaysForSure is a NO BRAINER. This has
really left a bad taste in my mouth, I'm going gargle with some Minty <a href="http://www.microsoft.com/expression/products/overview.aspx?key=blend">Blend</a> to
get rid of it. 
<p></p></body>
      <title>Zune - Does NOT Play For Sure</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,87601a25-bdc8-45e5-a3ba-d2c0e62acf8a.aspx</guid>
      <link>http://blog.nitriq.com/ZuneDoesNOTPlayForSure.aspx</link>
      <pubDate>Fri, 14 Dec 2007 04:53:46 GMT</pubDate>
      <description>So I was totally stoked when I won my new Zune last night, I've been using &lt;a href="http://www.rhapsody.com"&gt;Rhapsody&lt;/a&gt; for
quite some time and have really enjoyed it thus far, but I was looking forward to
using a device with it other than my Sansa e260. So tonight I fire up the rhapsody
client app on my desktop, plug in my new Zune, and there is no "device" icon popping
up in rhapsody (like there is with my Sansa). I think: oh, I wonder if I have to install
the Zune software first for some bizzare driver, then the rhapsody client will be
able to talk with my Zune. I install the Zune software, setup everything as necessary
and then start the rhapsody client. Nothing, still. Shit. I google "Zune Plays For
Sure", thinking that surely, Microsoft after spending millions of dollars coming up
with &lt;a href="http://en.wikipedia.org/wiki/Microsoft_PlaysForSure"&gt;PlaysForSure&lt;/a&gt;.
But no, Zune only works with the Zune Marketplace, not even music from the MSN MUSIC
STORE will play on a Zune. 
&lt;br&gt;
&lt;br&gt;
Microsoft: I really am a big fan, a "fanboy" would probably be an acurate description
of my opinion on your company. I know that you're going through kind of an image problem,
people don't seem to be (or say at least) that they're usually satisfied with you
as a company. Here is why: people have a bad experience with one of your products
and that one experience colors their entire perception. It sucks to be in that position
because it puts a lot of pressure to have everything be top-notch, a difficult glass
to fill. I'm still a "fanboy". Your office productivity tools: Second-To-None. Your
developer tools: Awesome. Your development frameworks: Magnificent. Your gaming console:
Pretty Bad Ass. I know that having the best product isn't going to be possible, but
for the love of God, having the Zune support PlaysForSure is a NO BRAINER. This has
really left a bad taste in my mouth, I'm going gargle with some Minty &lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=blend"&gt;Blend&lt;/a&gt; to
get rid of it. 
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,87601a25-bdc8-45e5-a3ba-d2c0e62acf8a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=35b305da-fe25-4dcd-be1b-051a956d021e</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,35b305da-fe25-4dcd-be1b-051a956d021e.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,35b305da-fe25-4dcd-be1b-051a956d021e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=35b305da-fe25-4dcd-be1b-051a956d021e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.vonsharp.net/content/binary/gameOfLifeThumbnail.jpg" align="left" border="0" />Thanks
to everyone who came to the <a href="http://www.IADNUG.org">IADNUG</a> install-fest
last night. I received a 8GB Zune and second place with my Game of Life Demo. Thanks
to Microsoft and <a href="http://www.benkotips.com">Mike Benkovich</a> for supplying
the prizes, I thoroughly look forward to using my new Zune. Mike should have a post
at <a href="http://www.benkotips.com">BenkoTIPS</a> that will link to the other contestants
projects (if they're allowed to release them).<br /><br />
As promised, I've posted a link to the code I demo'd last night. It's a little messy
because I was more concerned with getting functionality and a pretty front-end than
in producing pretty code. I do, however intend on continuing work on it as a hobby
project, I think I've got a lot of neat ideas for new directions to take the project.
So if you're interested in staying updated, either subscribe to my "Projects" RSS
feed, or feel free to leave a comment with your email address and I'll be sure to
send you a note when I post a new version.<br /><br /><br /><br />
Thanks again to everyone who came.<br /><br /><a href="http://www.vonsharp.net/content/binary/GameOfLifeWpf.zip">GameOfLifeWpf.zip
(191.98 KB)</a><br /><br />
Note: When launching the 3D Form, you have to click on the "Cube" button first, before
you can hit start.<br /></body>
      <title>Game Of Life Demo</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,35b305da-fe25-4dcd-be1b-051a956d021e.aspx</guid>
      <link>http://blog.nitriq.com/GameOfLifeDemo.aspx</link>
      <pubDate>Thu, 13 Dec 2007 15:25:18 GMT</pubDate>
      <description>&lt;img src="http://www.vonsharp.net/content/binary/gameOfLifeThumbnail.jpg" align="left" border="0"&gt;Thanks
to everyone who came to the &lt;a href="http://www.IADNUG.org"&gt;IADNUG&lt;/a&gt; install-fest
last night. I received a 8GB Zune and second place with my Game of Life Demo. Thanks
to Microsoft and &lt;a href="http://www.benkotips.com"&gt;Mike Benkovich&lt;/a&gt; for supplying
the prizes, I thoroughly look forward to using my new Zune. Mike should have a post
at &lt;a href="http://www.benkotips.com"&gt;BenkoTIPS&lt;/a&gt; that will link to the other contestants
projects (if they're allowed to release them).&lt;br&gt;
&lt;br&gt;
As promised, I've posted a link to the code I demo'd last night. It's a little messy
because I was more concerned with getting functionality and a pretty front-end than
in producing pretty code. I do, however intend on continuing work on it as a hobby
project, I think I've got a lot of neat ideas for new directions to take the project.
So if you're interested in staying updated, either subscribe to my "Projects" RSS
feed, or feel free to leave a comment with your email address and I'll be sure to
send you a note when I post a new version.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Thanks again to everyone who came.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.vonsharp.net/content/binary/GameOfLifeWpf.zip"&gt;GameOfLifeWpf.zip
(191.98 KB)&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Note: When launching the 3D Form, you have to click on the "Cube" button first, before
you can hit start.&lt;br&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,35b305da-fe25-4dcd-be1b-051a956d021e.aspx</comments>
      <category>IADNUG</category>
      <category>Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=e58a296c-1a6c-4bf6-92f7-12c5e06e3ea7</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,e58a296c-1a6c-4bf6-92f7-12c5e06e3ea7.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,e58a296c-1a6c-4bf6-92f7-12c5e06e3ea7.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e58a296c-1a6c-4bf6-92f7-12c5e06e3ea7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I've been working a lot lately on a demo
for tomorrow night's <a href="http://www.iadnug.org">VS 2008 Installfest Event</a>.
I plan on posting my code after the demo (because I probably won't be done until right
before I have to present), but I wanted to let everyone know what tutorials I used
to help create my demo. Expression Blend is frickin awesome, I had been dabling in
WPF a little bit, but not a whole lot was "clicking", but I had about 12 "A-HA" moments
while watching these videos. Highly recommended, especially if you're visual learner.<br /><br /><a href="http://channel9.msdn.com">Channel 9</a>: Introduction to Blend (<a href="http://channel9.msdn.com/Showpost.aspx?postid=286758">Part
1</a>) (<a href="http://channel9.msdn.com/Showpost.aspx?postid=286763">Part 2</a>)
(<a href="http://channel9.msdn.com/ShowPost.aspx?PostID=286767">Part 3</a>) (<a href="http://channel9.msdn.com/ShowPost.aspx?PostID=289325">Part
4</a>)<br /><br />
Way to go Mike Grayson and Richard Godfrey.<br /><p></p></body>
      <title>Blend Tutorial Videos</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,e58a296c-1a6c-4bf6-92f7-12c5e06e3ea7.aspx</guid>
      <link>http://blog.nitriq.com/BlendTutorialVideos.aspx</link>
      <pubDate>Wed, 12 Dec 2007 02:18:52 GMT</pubDate>
      <description>I've been working a lot lately on a demo for tomorrow night's &lt;a href="http://www.iadnug.org"&gt;VS
2008 Installfest Event&lt;/a&gt;. I plan on posting my code after the demo (because I probably
won't be done until right before I have to present), but I wanted to let everyone
know what tutorials I used to help create my demo. Expression Blend is frickin awesome,
I had been dabling in WPF a little bit, but not a whole lot was "clicking", but I
had about 12 "A-HA" moments while watching these videos. Highly recommended, especially
if you're visual learner.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://channel9.msdn.com"&gt;Channel 9&lt;/a&gt;: Introduction to Blend (&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=286758"&gt;Part
1&lt;/a&gt;) (&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=286763"&gt;Part 2&lt;/a&gt;)
(&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=286767"&gt;Part 3&lt;/a&gt;) (&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=289325"&gt;Part
4&lt;/a&gt;)&lt;br&gt;
&lt;br&gt;
Way to go Mike Grayson and Richard Godfrey.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://blog.nitriq.com/CommentView,guid,e58a296c-1a6c-4bf6-92f7-12c5e06e3ea7.aspx</comments>
      <category>Blend</category>
      <category>IADNUG</category>
    </item>
    <item>
      <trackback:ping>http://blog.nitriq.com/Trackback.aspx?guid=43c3d6b1-6525-4c36-9a44-c270815897a9</trackback:ping>
      <pingback:server>http://blog.nitriq.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.nitriq.com/PermaLink,guid,43c3d6b1-6525-4c36-9a44-c270815897a9.aspx</pingback:target>
      <dc:creator>Jon von Gillern</dc:creator>
      <wfw:comment>http://blog.nitriq.com/CommentView,guid,43c3d6b1-6525-4c36-9a44-c270815897a9.aspx</wfw:comment>
      <wfw:commentRss>http://blog.nitriq.com/SyndicationService.asmx/GetEntryCommentsRss?guid=43c3d6b1-6525-4c36-9a44-c270815897a9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Whether it is a heat map or a simple legend
on a graph, color has the uncanny ability to instantly convey to users the intricacies
of their data. But like most powerful constructs, color can easily be <a href="http://www.w3.org/WAI/ER/IG/ert/test22A.htm" target="_blank" title="misunderstood and abused">misunderstood
and abused</a>. I highly recommend that all GUI developers read up on all the crazy
(and cool) things you can do to <a href="http://www.codeproject.com/cs/algorithms/colorspace1.asp" target="_blank" title="manipulate colors">manipulate
colors</a>. 
<br /><br />
Last year I spent a fair amount of time scouring the net trying to find a solution
to a frequently experienced problem: background - foreground color readability. And
for the most part I came up empty handed, so I did even more digging and researching
and have found the optimal way of determining whether white or black text will look
best on an arbitrary background color. At first I tried solely looking at the "V"
component of the <a href="http://en.wikipedia.org/wiki/HSV_color_space" target="_blank" title="HSV">HSV</a> color
space, but that would dictate the I use black text on a blue backgro<font face="Tahoma">und
(<span style="background: rgb(0, 0, 153) none repeat scroll 0% 50%; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">which
doesn't work</span>). </font><br /><br />
I tried making my own custom metrics like if (R + G + B)/(255 * 3) was greater than
1/2 then use black, else white, but when you test the results, it just doesn't seem
to work all that well. The problem lies with the human eye, while the monitor has
a certain color addressing space, people actually perceive color differently. It makes
sense when you think about it, for most of homo sapiens history have primarily looked
at all the green vegitation surrounding us; so naturally the human eye is more perceptive
to <a href="http://www.hownightvisionworks.com/" target="_blank" title="shades of green">shades
of green</a> than red or blue. After some extra long digging, I stumbled upon the <a href="http://en.wikipedia.org/wiki/YIQ" target="_blank" title="YIQ">YIQ</a> color
space, where "Y" is the <a href="http://en.wikipedia.org/wiki/Luminance_%28video%29" target="_blank" title="luma">luma</a> a.k.a.
perceived luminance. The formula for calculating Y from RGB is Y = 0.299 * R + 0.587
* G + 0.114 * B<br /><br />
We can now calculate the maximum perceived luminance of white (0.299 * 255 + 0.587
* 255 + 0.114 * 255) and the midpoint at which something is "half-bright" by dividing
the max into 2. Because I'm calculating values relative to one another, I simply made
each color coefficient a whole integer to make an infinitesimally small difference
in performance. You should try it out, it works really well.<br /><br /><br />
//perceived luminance<br />
private const int RED_LUMINANCE = 299;<br />
private const int GREEN_LUMINANCE = 587;<br />
private const int BLUE_LUMINANCE = 114;<br />
//calculated from <a href="http://en.wikipedia.org/wiki/Luminance%28video%29" target="_blank">http://en.wikipedia.org/wiki/Luminance(video)</a><br />
private const int MAX_LUMINANCE = (RED_LUMINANCE * 255 + GREEN_LUMINANCE * 255 + BLUE_LUMINANCE
* 255);<br />
private const int MID_LUMINANCE = MAX_LUMINANCE / 2;<br /><br />
/// &lt;summary&gt; 
<summary><br />
/// Finds the foreground (white or black) that will be easiest to read<br />
/// with the given background<br />
/// &lt;/summary&gt;
</summary><br />
public static Color CalculateForeColor(Color backColor)<br />
{<br />
    int totalCustomBrightness = 
<br />
        ((backColor.R * RED_LUMINANCE) + (backColor.G
* GREEN_LUMINANCE) + (backColor.B * BLUE_LUMINANCE));<br /><br />
    if (totalCustomBrightness &lt;= MID_LUMINANCE)<br />
        return Color.White;<br />
    else<br />
        return Color.Black;<br />
}<div><div id="_com_1"><br /></div></div><br /></body>
      <title>Black vs White Text</title>
      <guid isPermaLink="false">http://blog.nitriq.com/PermaLink,guid,43c3d6b1-6525-4c36-9a44-c270815897a9.aspx</guid>
      <link>http://blog.nitriq.com/BlackVsWhiteText.aspx</link>
      <pubDate>Fri, 07 Dec 2007 04:01:31 GMT</pubDate>
      <description>Whether it is a heat map or a simple legend on a graph,
color has the uncanny ability to instantly convey to users the intricacies of
their data. But like most powerful constructs, color can easily be &lt;a href="http://www.w3.org/WAI/ER/IG/ert/test22A.htm" target="_blank" title="misunderstood and abused"&gt;misunderstood
and abused&lt;/a&gt;. I highly recommend that all GUI developers read up on all the crazy
(and cool) things you can do to &lt;a href="http://www.codeproject.com/cs/algorithms/colorspace1.asp" target="_blank" title="manipulate colors"&gt;manipulate
colors&lt;/a&gt;. 
&lt;br&gt;
&lt;br&gt;
Last year I spent a fair amount of time scouring the net trying to find a solution
to a frequently experienced problem: background - foreground color readability. And
for the most part I came up empty handed, so I did even more digging and researching
and have found the optimal way of determining whether white or black text will look
best on an arbitrary background color. At first I tried solely looking at the "V"
component of the &lt;a href="http://en.wikipedia.org/wiki/HSV_color_space" target="_blank" title="HSV"&gt;HSV&lt;/a&gt; color
space, but that would dictate the I use black text on a blue backgro&lt;font face="Tahoma"&gt;und
(&lt;span style="background: rgb(0, 0, 153) none repeat scroll 0% 50%; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;which
doesn't work&lt;/span&gt;). &lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
I tried making my own custom metrics like if (R + G + B)/(255 * 3) was greater than
1/2 then use black, else white, but when you test the results, it just doesn't seem
to work all that well. The problem lies with the human eye, while the monitor has
a certain color addressing space, people actually perceive color differently. It makes
sense when you think about it, for most of homo sapiens history have primarily looked
at all the green vegitation surrounding us; so naturally the human eye is more perceptive
to &lt;a href="http://www.hownightvisionworks.com/" target="_blank" title="shades of green"&gt;shades
of green&lt;/a&gt; than red or blue. After some extra long digging, I stumbled upon the &lt;a href="http://en.wikipedia.org/wiki/YIQ" target="_blank" title="YIQ"&gt;YIQ&lt;/a&gt; color
space, where "Y" is the &lt;a href="http://en.wikipedia.org/wiki/Luminance_%28video%29" target="_blank" title="luma"&gt;luma&lt;/a&gt; a.k.a.
perceived luminance. The formula for calculating Y from RGB is Y = 0.299 * R + 0.587
* G + 0.114 * B&lt;br&gt;
&lt;br&gt;
We can now calculate the maximum perceived luminance of white (0.299 * 255 + 0.587
* 255 + 0.114 * 255) and the midpoint at which something is "half-bright" by dividing
the max into 2. Because I'm calculating values relative to one another, I simply made
each color coefficient a whole integer to make an infinitesimally small difference
in performance. You should try it out, it works really well.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
//perceived luminance&lt;br&gt;
private const int RED_LUMINANCE = 299;&lt;br&gt;
private const int GREEN_LUMINANCE = 587;&lt;br&gt;
private const int BLUE_LUMINANCE = 114;&lt;br&gt;
//calculated from &lt;a href="http://en.wikipedia.org/wiki/Luminance%28video%29" target="_blank"&gt;http://en.wikipedia.org/wiki/Luminance(video)&lt;/a&gt;
&lt;br&gt;
private const int MAX_LUMINANCE = (RED_LUMINANCE * 255 + GREEN_LUMINANCE * 255 + BLUE_LUMINANCE
* 255);&lt;br&gt;
private const int MID_LUMINANCE = MAX_LUMINANCE / 2;&lt;br&gt;
&lt;br&gt;
/// &amp;lt;summary&amp;gt; 
&lt;summary&gt;
&lt;br&gt;
/// Finds the foreground (white or black) that will be easiest to read&lt;br&gt;
/// with the given background&lt;br&gt;
/// &amp;lt;/summary&amp;gt;
&lt;/summary&gt;
&lt;br&gt;
public static Color CalculateForeColor(Color backColor)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int totalCustomBrightness = 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ((backColor.R * RED_LUMINANCE) + (backColor.G
* GREEN_LUMINANCE) + (backColor.B * BLUE_LUMINANCE));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (totalCustomBrightness &amp;lt;= MID_LUMINANCE)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Color.White;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Color.Black;&lt;br&gt;
}&lt;div&gt;
&lt;div id="_com_1"&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

</description>
      <comments>http://blog.nitriq.com/CommentView,guid,43c3d6b1-6525-4c36-9a44-c270815897a9.aspx</comments>
      <category>Design</category>
      <category>Tips and Tricks</category>
    </item>
  </channel>
</rss>