<?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>Dot Net Technologies -- MS Tech talk and more - Tools</title>
    <link>http://www.dotnettechnologies.com/</link>
    <description>Creating Solutions with Microsoft's .Net Technologies</description>
    <language>en-us</language>
    <copyright>© Copyright 2010 </copyright>
    <lastBuildDate>Tue, 03 Aug 2010 05:13:07 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>daryl@rubiconcomputing.com</managingEditor>
    <webMaster>daryl@rubiconcomputing.com</webMaster>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=1b1a5647-ec5f-4480-9708-f51c7d6e1f05</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,1b1a5647-ec5f-4480-9708-f51c7d6e1f05.aspx</pingback:target>
      <dc:creator>Daryl</dc:creator>
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,1b1a5647-ec5f-4480-9708-f51c7d6e1f05.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1b1a5647-ec5f-4480-9708-f51c7d6e1f05</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I was setting up a new template, and I needed to look at the unique constraints
as part of my task.
</p>
        <p>
The following CodeSmith script will load the columns that have unique constraints
(but not the primary key) into an ArrayList.
</p>
        <code>
          <pre>
            <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">ArrayList
uniqueColumns <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> ArrayList(); <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">for</span> (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span> i <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> 0;
i &lt; SourceTable.Indexes.Count; i++) { <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (SourceTable.Indexes[i].IsUnique)
{ <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">for</span> (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span> y=0;
y &lt; SourceTable.Indexes[i].MemberColumns.Count; y++) { <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (!SourceTable.Indexes[i].MemberColumns[y].IsPrimaryKeyMember)
uniqueColumns.Add(SourceTable.Indexes[i].MemberColumns[y].Name); } } }</span>
          </pre>
        </code>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=1b1a5647-ec5f-4480-9708-f51c7d6e1f05" />
      </body>
      <title>Tip of the Day: CodeSmith - Retrieve the unique columns from a table</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,1b1a5647-ec5f-4480-9708-f51c7d6e1f05.aspx</guid>
      <link>http://www.dotnettechnologies.com/2010/08/03/TipOfTheDayCodeSmithRetrieveTheUniqueColumnsFromATable.aspx</link>
      <pubDate>Tue, 03 Aug 2010 05:13:07 GMT</pubDate>
      <description>&lt;p&gt;
Today I was setting up a new template, and I needed to look at the unique constraints
as part of my task.
&lt;/p&gt;
&lt;p&gt;
The following CodeSmith script will load the columns that have unique constraints
(but not the primary key) into an ArrayList.
&lt;/p&gt;
&lt;code&gt; &lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;ArrayList
uniqueColumns &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; ArrayList(); &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; i &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; 0;
i &amp;lt; SourceTable.Indexes.Count; i++) { &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (SourceTable.Indexes[i].IsUnique)
{ &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; y=0;
y &amp;lt; SourceTable.Indexes[i].MemberColumns.Count; y++) { &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (!SourceTable.Indexes[i].MemberColumns[y].IsPrimaryKeyMember)
uniqueColumns.Add(SourceTable.Indexes[i].MemberColumns[y].Name); } } }&lt;/span&gt;&lt;/pre&gt;&lt;/code&gt;&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=1b1a5647-ec5f-4480-9708-f51c7d6e1f05" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,1b1a5647-ec5f-4480-9708-f51c7d6e1f05.aspx</comments>
      <category>All Things</category>
      <category>C#</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=35527443-4621-4bec-a4b6-b853ecf6a880</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,35527443-4621-4bec-a4b6-b853ecf6a880.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,35527443-4621-4bec-a4b6-b853ecf6a880.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=35527443-4621-4bec-a4b6-b853ecf6a880</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am a big fan of Resharper, but right now I am at a client who doesn't use it. Today,
I accidentally reset my toolbar, so I was going through and adding my settings (yes,
I could have restored an old one..)
</p>
        <p>
As I was doing it, I ran across two items I relied on Resharper to handle. 
</p>
        <p>
One will remove unused "using" statements, and the other will sort them in your
class by namespace. 
</p>
        <p>
Here's what they look like:
</p>
        <p>
          <img src="http://www.dotnettechnologies.com/content/binary/usingShortcuts.png" border="0" />
        </p>
        <p>
They can be found in the Edit Menu items.
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=35527443-4621-4bec-a4b6-b853ecf6a880" />
      </body>
      <title>Tip of the Day: Eliminating unused "using" statements and sorting them</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,35527443-4621-4bec-a4b6-b853ecf6a880.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/12/29/TipOfTheDayEliminatingUnusedUsingStatementsAndSortingThem.aspx</link>
      <pubDate>Tue, 29 Dec 2009 04:43:28 GMT</pubDate>
      <description>&lt;p&gt;
I am a big fan of Resharper, but right now I am at a client who doesn't use it. Today,
I accidentally reset my toolbar, so I was going through and adding my settings (yes,
I could have restored an old one..)
&lt;/p&gt;
&lt;p&gt;
As I was doing it, I ran across two items I relied on Resharper to handle. 
&lt;/p&gt;
&lt;p&gt;
One&amp;nbsp;will remove unused "using" statements, and the other will sort them in your
class by namespace. 
&lt;/p&gt;
&lt;p&gt;
Here's what they look like:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.dotnettechnologies.com/content/binary/usingShortcuts.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
They can be found in the Edit Menu items.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=35527443-4621-4bec-a4b6-b853ecf6a880" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,35527443-4621-4bec-a4b6-b853ecf6a880.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>CSharp</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
      <category>WinForms</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=a0f5b464-8bcd-43d2-a17d-58c4bb7b392b</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,a0f5b464-8bcd-43d2-a17d-58c4bb7b392b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,a0f5b464-8bcd-43d2-a17d-58c4bb7b392b.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a0f5b464-8bcd-43d2-a17d-58c4bb7b392b</wfw:commentRss>
      <title>New features of VS2010 which have me smiling (Part 2)</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,a0f5b464-8bcd-43d2-a17d-58c4bb7b392b.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/11/07/NewFeaturesOfVS2010WhichHaveMeSmilingPart2.aspx</link>
      <pubDate>Sat, 07 Nov 2009 03:45:19 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Session compression – For out-of-process session
maintenance, the session state is compressed using the &lt;i style="mso-bidi-font-style: normal"&gt;System.IO.Compression.GZipStream&lt;/i&gt; class.
It also looks like it will only do this when CPU cycles are available (but I need
to investigate this further).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If that’s
the case, you might want to set up some Performance indicators or alerts when it’s
not being compressed because that might indicate further problems.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #666666; FONT-FAMILY: 'Tahoma','sans-serif'"&gt;&amp;lt;&lt;a href="http://www.asp.net/learn/whitepapers/aspnet4/default.aspx"&gt;http://www.asp.net/learn/whitepapers/aspnet4/default.aspx&lt;/a&gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Multi-Targeting – I’ve mentioned this before,
but it allows you to specify which .Net version you are writing for in the VS2010
IDE. This expands the support that VS2008 has by adaptively changing&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;the
IDE to the targeted environment. The IDE adjusts its Intellisense and compilation
towards the targeted version.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The whitepaper
indicates ASP.Net, so I need to test and see if it applies to WPF and WinForm as well.
Some features:&lt;/font&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo2"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Specified in the .config file, defaults to
4.0 when not specified.&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo2"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Compiles the code to the &lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo2"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Intellisense adapts to the current version
of the framework selected&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #666666; FONT-FAMILY: 'Tahoma','sans-serif'"&gt;&amp;lt;&lt;a href="http://www.asp.net/learn/whitepapers/aspnet4/default.aspx"&gt;http://www.asp.net/learn/whitepapers/aspnet4/default.aspx&lt;/a&gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/08/27/multi-targeting-support-vs-2010-and-net-4-series.aspx"&gt;&lt;font face=Calibri size=3&gt;http://weblogs.asp.net/scottgu/archive/2009/08/27/multi-targeting-support-vs-2010-and-net-4-series.aspx&lt;/font&gt;&lt;/a&gt;&lt;font face=Calibri color=#000000 size=3&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Script Loading – The AJAX library includes
the ability to have better control of script loading in .Net 4.0. It loads the scripts
automatically, and in the order needed. From the whitepaper, here’s the features:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3&gt;&lt;font face=Calibri&gt;Automatically
loads all resources that are required by a script. &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3&gt;&lt;font face=Calibri&gt;Makes
sure that each script is loaded only once. &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3&gt;&lt;font face=Calibri&gt;Improves
performance by loading scripts in parallel and by combining scripts. &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3&gt;&lt;font face=Calibri&gt;Supports
loading scripts only when they are needed (“lazy loading”). &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=3&gt;&lt;font face=Calibri&gt;Supports
loading third-party scripts like jQuery and your own scripts.&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face=Calibri size=3&gt;Supports
loading scripts from the Microsoft Ajax Content Delivery Network&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;One of the client features is the Sys.require.
When a component and a function is provided, the callback function is called when
the scripts are done loading.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #666666; FONT-FAMILY: 'Tahoma','sans-serif'"&gt;&amp;lt;&lt;a href="http://www.asp.net/learn/whitepapers/aspnet4/default.aspx"&gt;http://www.asp.net/learn/whitepapers/aspnet4/default.aspx&lt;/a&gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;jQuery integration – Speaking of jQuery, it’s
now included&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;as part of the ASP.Net Web
forms and the MVC project.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #666666; FONT-FAMILY: 'Tahoma','sans-serif'"&gt;&amp;lt;&lt;a href="http://www.asp.net/learn/whitepapers/aspnet4/default.aspx"&gt;http://www.asp.net/learn/whitepapers/aspnet4/default.aspx&lt;/a&gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;ClientID changes – I am mixed about this one,
simply because once In understood how ASP.Net set its clientIDs upon rendering, I
could generate my script accordingly&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;in
my code behind.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;However, it’s been simplified
in VS2010 to allow the user to have control over setting the client IDs. Be forewarned
though, this could open you up to naming issues within container controls as such.
Regardless, I am always supportive of giving the developer the option of more control.
There’s a new property at the configuration file, page and control level called &lt;i style="mso-bidi-font-style: normal"&gt;ClientIDMode&lt;/i&gt; which
has the following settings:&lt;/font&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l2 level1 lfo4"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;AutoID – mimics the previous version naming
scheme&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l2 level1 lfo4"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Static – This specifies that the ClientID
value will be the same as the ID without concatenating the IDs of parent naming containers. &lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l2 level1 lfo4"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Predictable – useful for controls which will
be generated in template controls&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l2 level1 lfo4"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Inherit – take the setting of the parent control
(lots of this in VS2010, which is great, since I have been a champion for UI inheritance
and control-centric programming).&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #666666; FONT-FAMILY: 'Tahoma','sans-serif'"&gt;&amp;lt;&lt;a href="http://www.asp.net/learn/whitepapers/aspnet4/default.aspx"&gt;http://www.asp.net/learn/whitepapers/aspnet4/default.aspx&lt;/a&gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Improved “Add Reference” functionality – Over
the past couple of days, I found myself converting a project from VS2005 to VS2008.
As a result, I found myself needing to change some references as well as I changed
some of the related projects. This change in VS2008 is sort of a “nice to have”. While
it’s not a big win, it’s still nice as it can get painful at times changing the references.
Here are the changes with this:&lt;/font&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;The .Net and COM tabs are loaded asynchronously&lt;/font&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Defaults opening to the project tab (I find
myself using this a LOT anyways, but would have preferred this to start at the “Browse”
tab, or better, consider this like a MRU action and remember where I was last time)&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link&lt;/font&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #666666; FONT-FAMILY: 'Tahoma','sans-serif'"&gt;:
&amp;lt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/29/add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2009/10/29/add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx&lt;/a&gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;font face=Calibri&gt;UML Support! Visual Studio 2010
will support the creation of UML diagrams via a modeling project. I like Visio and
all, but I look forward to being able to create UML diagrams right from the same IDE
I develop in. As of now, there’s no code generation support. I do think a clever developer
could possible do some code generation from the saved file via CodeSmith or IDE programming,
so I bet we’ll see something like that soon if Microsoft doesn’t provide it first.
Check out the link below and you can see some of the functionality.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;a href="http://weblogs.asp.net/gunnarpeipman/archive/2009/11/04/visual-studio-2010-uml-modeling-projects.aspx"&gt;&lt;font face=Calibri size=3&gt;http://weblogs.asp.net/gunnarpeipman/archive/2009/11/04/visual-studio-2010-uml-modeling-projects.aspx&lt;/font&gt;&lt;/a&gt;&lt;font face=Calibri color=#000000 size=3&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Although available in v3.5, VS2010/v4 will
have the chart control integrated into it. In the past, your options were a third-party
control for charting or to use Interop and Excel, or writing your own charting libraries
(gulp!). &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;The link below lists some details
on this impressive charting library if you’ve never used it.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Link: &lt;/font&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx"&gt;&lt;font face=Calibri size=3&gt;http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx&lt;/font&gt;&lt;/a&gt;&lt;font face=Calibri color=#000000 size=3&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Developers will have more deployment options
Web application &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face=Calibri color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Calibri color=#000000 size=3&gt;Get it here: &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;&lt;font face=Calibri size=3&gt;http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx&lt;/font&gt;&lt;/a&gt;&lt;font face=Calibri color=#000000 size=3&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=a0f5b464-8bcd-43d2-a17d-58c4bb7b392b" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,a0f5b464-8bcd-43d2-a17d-58c4bb7b392b.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>CSharp</category>
      <category>Debugging</category>
      <category>Design</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
      <category>WinForms</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=f1dddb05-8006-4567-a998-73be29abf147</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,f1dddb05-8006-4567-a998-73be29abf147.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,f1dddb05-8006-4567-a998-73be29abf147.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f1dddb05-8006-4567-a998-73be29abf147</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier, I posted a <a href="http://www.rubiconcomputing.com/DevArea.aspx" target="_blank">useful
link</a> at <a href="http://www.rubiconcomputing.com/" target="_blank">Rubicon Computing
Solutions </a>for a poster of all the keyboard shortcuts in the Visual Studio IDE.
As I was looking for some more neat shortcuts, I came across this site with more useful
tips -- mainly, <a href="http://msdn.microsoft.com/en-us/library/bb245788(VS.80).aspx" target="_blank">how
to enumerate all the shortcuts, and how to customize them</a>. 
</p>
        <p>
I have had many occasions to have to remap the shortcuts, primarily related to add-ons
I have placed in my IDE. The macro in the referenced Microsoft link will help show
what the <em>current</em> mappings are, which would be extremely useful if you needed
to do a lot of remapping.
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=f1dddb05-8006-4567-a998-73be29abf147" />
      </body>
      <title>Useful Link -- Information on shortcut keys in the Visual Studio IDE</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,f1dddb05-8006-4567-a998-73be29abf147.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/09/16/UsefulLinkInformationOnShortcutKeysInTheVisualStudioIDE.aspx</link>
      <pubDate>Wed, 16 Sep 2009 05:22:12 GMT</pubDate>
      <description>&lt;p&gt;
Earlier, I posted a &lt;a href="http://www.rubiconcomputing.com/DevArea.aspx" target=_blank&gt;useful
link&lt;/a&gt; at &lt;a href="http://www.rubiconcomputing.com/" target=_blank&gt;Rubicon Computing
Solutions &lt;/a&gt;for a poster of all the keyboard shortcuts in the Visual Studio IDE.
As I was looking for some more neat shortcuts, I came across this site with more useful
tips -- mainly, &lt;a href="http://msdn.microsoft.com/en-us/library/bb245788(VS.80).aspx" target=_blank&gt;how
to enumerate all the shortcuts, and how to customize them&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I have had many occasions to have to remap the shortcuts, primarily related to add-ons
I have placed in my IDE. The macro in the referenced Microsoft link will help show
what the &lt;em&gt;current&lt;/em&gt; mappings are, which would be extremely useful if you needed
to do a lot of remapping.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=f1dddb05-8006-4567-a998-73be29abf147" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,f1dddb05-8006-4567-a998-73be29abf147.aspx</comments>
      <category>All Things</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=6c4a70ac-6885-4331-b8ad-4ad09a77c62f</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,6c4a70ac-6885-4331-b8ad-4ad09a77c62f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,6c4a70ac-6885-4331-b8ad-4ad09a77c62f.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6c4a70ac-6885-4331-b8ad-4ad09a77c62f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Since I am going back into full time consulting, I decided lugging around twenty 800
page books is a bad idea. Tonight, I pulled the trigger in a <a href="http://www.amazon.com/Kindle-DX-Amazons-Wireless-Generation/dp/B0015TCML0" target="_blank">Kindle
DX</a>. A bit pricy, but the fact I can annotate my books (and export the annotations)
and read native PDFs, I can see the value in the price. I only wish it allowed you
to annotate PDFs, as I know I can put a LOT of things in PDF form and place on there. 
</p>
        <p>
So I was noticing Amazon charges for placing RSS feeds on the Kindle, and I decided
to either find a service which converts RSS feeds to PDF format, or write one myself.
Fortunately, I found <a href="http://www.tabbloid.com/" target="_blank">Tabbloid</a>,
which mails your RSS feeds in PDF format at an interval you specify. Even better,
it looks free. I may still write one and put some filtering capability in it, but
this is a win for now. 
</p>
        <p>
The other gadget I have and just enjoy is my <a href="http://reviews.cnet.com/satellite-radio-tuners/pioneer-xmp3/4505-7873_7-33364879.html" target="_blank">Pioneer
XMp3</a> player. It allows me to record XM content, and place all kinds of music on
the Micro SD card. It's still kind of buggy, and with the XM-Sirius merger, I don't
imagine that will change, but I still enjoy it immensely. 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=6c4a70ac-6885-4331-b8ad-4ad09a77c62f" />
      </body>
      <title>Gadgets and more</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,6c4a70ac-6885-4331-b8ad-4ad09a77c62f.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/08/31/GadgetsAndMore.aspx</link>
      <pubDate>Mon, 31 Aug 2009 04:26:21 GMT</pubDate>
      <description>&lt;p&gt;
Since I am going back into full time consulting, I decided lugging around twenty 800
page books is a bad idea. Tonight, I pulled the trigger in a &lt;a href="http://www.amazon.com/Kindle-DX-Amazons-Wireless-Generation/dp/B0015TCML0" target=_blank&gt;Kindle
DX&lt;/a&gt;. A bit pricy, but the fact I can annotate my books (and export the annotations)
and read native PDFs, I can see the value in the price. I only wish it allowed you
to annotate PDFs, as I know I can put a LOT of things in PDF form and place on there. 
&lt;/p&gt;
&lt;p&gt;
So I was noticing Amazon charges for placing RSS feeds on the Kindle, and I decided
to either find a service which converts RSS feeds to PDF format, or write one myself.
Fortunately, I found &lt;a href="http://www.tabbloid.com/" target=_blank&gt;Tabbloid&lt;/a&gt;,
which mails your RSS feeds in PDF format at an interval you specify. Even better,
it looks free. I may still write one and put some filtering capability in it, but
this is a win for now. 
&lt;/p&gt;
&lt;p&gt;
The other gadget I have and just enjoy is my &lt;a href="http://reviews.cnet.com/satellite-radio-tuners/pioneer-xmp3/4505-7873_7-33364879.html" target=_blank&gt;Pioneer
XMp3&lt;/a&gt; player. It allows me to record XM content, and place all kinds of music on
the Micro SD card. It's still kind of buggy, and with the XM-Sirius merger, I don't
imagine that will change, but I still enjoy it immensely. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=6c4a70ac-6885-4331-b8ad-4ad09a77c62f" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,6c4a70ac-6885-4331-b8ad-4ad09a77c62f.aspx</comments>
      <category>All Things</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=df218446-0028-4b48-8451-3c2d8d807084</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,df218446-0028-4b48-8451-3c2d8d807084.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,df218446-0028-4b48-8451-3c2d8d807084.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=df218446-0028-4b48-8451-3c2d8d807084</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Normally, I don't have enough time to really dig into the bleeding edge technologies,
but I am trying to rectify that. The question is always "When is it too early.."
</p>
        <p>
For now, I have been looking at some of .Net 4.0's newer features, and one really
cool thing for environments which have years of legacy software is called "Multi-targeting".
Essentially, it allows you set the target environment for an application in the same
IDE (but later target new versions).
</p>
        <p>
As an example, let's say you are currently using ASP.Net 2.0, and you have to because
of client concerns. No problem, you'll be able to set the VS IDE to target the 2.0
framework. However, when you decide to upgrade, you can just change the target framework
version. The neat thing is that the IDE willl hide and show Intellisense based on
the target framework as well.
</p>
        <p>
Scott Guthie is writing a <a href="http://weblogs.asp.net/scottgu/archive/2009/08/27/multi-targeting-support-vs-2010-and-net-4-series.aspx" target="_blank">series</a> on
it I plan on following closely. This time, I may just have to be more bleeding edge
than I have been in the past.
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=df218446-0028-4b48-8451-3c2d8d807084" />
      </body>
      <title>.Net 4.0 Multi-Targeting</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,df218446-0028-4b48-8451-3c2d8d807084.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/08/30/Net40MultiTargeting.aspx</link>
      <pubDate>Sun, 30 Aug 2009 15:31:31 GMT</pubDate>
      <description>&lt;p&gt;
Normally, I don't have enough time to really dig into the bleeding edge technologies,
but I am trying to rectify that. The question is always "When is it too early.."
&lt;/p&gt;
&lt;p&gt;
For now, I have been looking at some of .Net 4.0's newer features, and one really
cool thing for environments which have years of legacy software is called "Multi-targeting".
Essentially, it allows you set the target environment for an application in the same
IDE (but later target new versions).
&lt;/p&gt;
&lt;p&gt;
As an example, let's say you are currently using ASP.Net 2.0, and you have to because
of client concerns. No problem, you'll be able to set the VS IDE to target the 2.0
framework. However, when you decide to upgrade, you can just change the target framework
version. The neat thing is that the IDE willl hide and show Intellisense based on
the target framework as well.
&lt;/p&gt;
&lt;p&gt;
Scott Guthie is writing a &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/08/27/multi-targeting-support-vs-2010-and-net-4-series.aspx" target=_blank&gt;series&lt;/a&gt; on
it I plan on following closely. This time, I may just have to be more bleeding edge
than I have been in the past.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=df218446-0028-4b48-8451-3c2d8d807084" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,df218446-0028-4b48-8451-3c2d8d807084.aspx</comments>
      <category>All Things</category>
      <category>CSharp</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=dbeb28b9-75cc-4b79-9b41-102b83a7c279</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,dbeb28b9-75cc-4b79-9b41-102b83a7c279.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,dbeb28b9-75cc-4b79-9b41-102b83a7c279.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=dbeb28b9-75cc-4b79-9b41-102b83a7c279</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font color="#000000">I am a huge fan of <a href="http://www.codesmithtools.com/" target="_blank">CodeSmith</a>.
If you are not familiar with it, and you do any amount of coding at all, you owe it
to yourself to check it out. </font>
        </p>
        <p>
          <font color="#000000">Below is some template code which loads the foreign keys of
a table into a Dictionary object. It stores the name of the table and foreign key
field name. As you can see, it generates a notice when it comes across a recursive
relationship. </font>
        </p>
        <p>
 
</p>
        <p>
public Dictionary&lt;string,string&gt; GetForeignKeyTables()<br />
{<br />
    Dictionary&lt;string,string&gt; dic = new Dictionary&lt;string,string&gt;(
);
</p>
        <p>
 for (int idx = 0; idx &lt; SourceTable.ForeignKeys.Count; idx ++)<br />
 {<br />
        string primaryTable = String.Empty;<br />
        string primaryKey = String.Empty;
</p>
        <p>
  // To get the foreign key columns<br />
  ColumnSchema col1 = SourceTable.ForeignKeys[idx].ForeignKeyMemberColumns[0];<br />
        primaryKey = col1.Name.Trim();
</p>
        <p>
  // To get the foreign key tables<br />
        primaryTable = SourceTable.ForeignKeys[idx].PrimaryKeyTable.ToString().Replace("dbo.",String.Empty).Trim();<br />
        if (!dic.ContainsKey(primaryKey))<br />
            dic.Add(primaryKey,
primaryTable);<br />
        else<br />
            MessageBox.Show("This
table may contain recursive relationships. You must set those relationships up manually.");<br />
    }
</p>
        <p>
    return dic;<br />
}
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=dbeb28b9-75cc-4b79-9b41-102b83a7c279" />
      </body>
      <title>Tip of the Day: CodeSmith Template -- Load all foreign keys into a Dictionary object</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,dbeb28b9-75cc-4b79-9b41-102b83a7c279.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/08/28/TipOfTheDayCodeSmithTemplateLoadAllForeignKeysIntoADictionaryObject.aspx</link>
      <pubDate>Fri, 28 Aug 2009 21:48:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font color=#000000&gt;I am a huge fan of &lt;a href="http://www.codesmithtools.com/" target=_blank&gt;CodeSmith&lt;/a&gt;.
If you are not familiar with it, and you do any amount of coding at all, you owe it
to yourself to check it out. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#000000&gt;Below is some template code which loads the foreign keys of a
table into a Dictionary object. It stores the name of the table and foreign key field
name. As you can see, it generates a notice when it comes across a recursive relationship. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
public Dictionary&amp;lt;string,string&amp;gt; GetForeignKeyTables()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dictionary&amp;lt;string,string&amp;gt; dic = new Dictionary&amp;lt;string,string&amp;gt;(
);
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;for (int idx = 0; idx &amp;lt; SourceTable.ForeignKeys.Count; idx ++)&lt;br&gt;
&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string primaryTable = String.Empty;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string primaryKey = String.Empty;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;// To get the foreign key columns&lt;br&gt;
&amp;nbsp;&amp;nbsp;ColumnSchema col1 = SourceTable.ForeignKeys[idx].ForeignKeyMemberColumns[0];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; primaryKey = col1.Name.Trim();
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;// To get the foreign key tables&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; primaryTable = SourceTable.ForeignKeys[idx].PrimaryKeyTable.ToString().Replace("dbo.",String.Empty).Trim();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!dic.ContainsKey(primaryKey))&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; dic.Add(primaryKey,
primaryTable);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; MessageBox.Show("This
table may contain recursive relationships. You must set those relationships up manually.");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dic;&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=dbeb28b9-75cc-4b79-9b41-102b83a7c279" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,dbeb28b9-75cc-4b79-9b41-102b83a7c279.aspx</comments>
      <category>All Things</category>
      <category>CSharp</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=c0cbc280-544f-45b1-943c-3715fb32920c</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,c0cbc280-544f-45b1-943c-3715fb32920c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,c0cbc280-544f-45b1-943c-3715fb32920c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c0cbc280-544f-45b1-943c-3715fb32920c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tonight was a short night of development, as my folks were in town as my dad needed
to go to the doctor. I did get some database work done, and my business objects done.
I use a hybrid of Rockford Lhotka's CSLA. I don't need all the functionality (such
as layers of undo) so I trimmed them back the amount of functionality I needed and
created CodeSmith templates to generate my classes. Let me just say I can code really
fast now. :) If you haven't taken a look at Lhotka's Business Objects book, I highly
recommend taking a look at them. I began using his concepts in VB, and they have proven
very reliable and scalable.
</p>
        <p>
QDJ: Do you use ORM's, and if so, what flavor do you like?
</p>
        <p>
I have to admit, I am not the biggest fan of the various ORMs I have tried. They do
serve a purpose though, but I have found most inflexible. I am currently using nHibernate,
and while they make themselves readily available to code generation, so far, it seems
like a lot of code. See my previous comments about another ORM I tried. My brother
uses it, and seems to be happy with it. I just thought the learning curve was very
steep, and the documentation was very lacking. I took a beating for that opinion.
:)
</p>
        <p>
So tonight, I want to post a couple of links I used today. Soon there will be a control
for this on the <a href="http://www.rubiconcomputing.com/" target="_blank">Rubicon
Computing</a> site, but until then, I will post them here.
</p>
        <p>
First, I referred to this before, but here's a site with a lot of good links to various
"cheat sheets". Some are really good and useful. You can find those <a href="http://john-sheehan.com/blog/net-cheat-sheets/" target="_blank">here</a>.
</p>
        <p>
Next, I found some neat add-ins for Visual Studio 2008. The first is the <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/bea9ed59-8857-4032-9666-9af1c1a33969" target="_blank">Source
Code Power Toy</a>. It outlines your code in a treeview, which makes navigating your
code, especially in complex classes, very easy. Best of all, it's free! It's available
for VS2005 as well.
</p>
        <p>
I also installed the <a href="http://code.msdn.microsoft.com/PowerCommands" target="_blank">Power
Commands</a> for the VS 2008 IDE. It has some useful right-click functionality, such
as opening a command prompt, and opening the containing folder, and that's just a
small glimpse of what it can do. It seems to be well documented, and I look forward
to exploring all it's functionality. And best thing, this one is free too.
</p>
        <p>
I'll probably post some useful CodeSmith templates I created. I love <a href="http://www.codesmithtools.com/" target="_blank">CodeSmith</a>,
but sometimes it's tough to find out exactly how to do things, so I will spare the
world the trial-and-error where I can. In the current project I am working on, our
team saved 1,100+ hours, and over $50,000 dollars last month alone by generating nHibernate
code from the templates we created. Yeah, I earned my rate last month for sure. :)
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=c0cbc280-544f-45b1-943c-3715fb32920c" />
      </body>
      <title>Some neat things I found today...</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,c0cbc280-544f-45b1-943c-3715fb32920c.aspx</guid>
      <link>http://www.dotnettechnologies.com/2009/08/12/SomeNeatThingsIFoundToday.aspx</link>
      <pubDate>Wed, 12 Aug 2009 05:31:11 GMT</pubDate>
      <description>&lt;p&gt;
Tonight was a short night of development, as my folks were in town as my dad needed
to go to the doctor. I did get some database work done, and my business objects done.
I use a hybrid of Rockford Lhotka's CSLA. I don't need all the functionality (such
as layers of undo) so I trimmed them back the amount of functionality I needed and
created CodeSmith templates to generate my classes. Let me just say I can code really
fast now. :) If you haven't taken a look at Lhotka's Business Objects book, I highly
recommend taking a look at them. I began using his concepts in VB, and they have proven
very reliable and scalable.
&lt;/p&gt;
&lt;p&gt;
QDJ: Do you use ORM's, and if so, what flavor do you like?
&lt;/p&gt;
&lt;p&gt;
I have to admit, I am not the biggest fan of the various ORMs I have tried. They do
serve a purpose though, but I have found most inflexible. I am currently using nHibernate,
and while they make themselves readily available to code generation, so far, it seems
like a lot of code. See my previous comments about another ORM I tried. My brother
uses it, and seems to be happy with it. I just thought the learning curve was very
steep, and the documentation was very lacking. I took a beating for that opinion.
:)
&lt;/p&gt;
&lt;p&gt;
So tonight, I want to post a couple of links I used today. Soon there will be a control
for this on the&amp;nbsp;&lt;a href="http://www.rubiconcomputing.com/" target=_blank&gt;Rubicon
Computing&lt;/a&gt;&amp;nbsp;site, but until then, I will post them here.
&lt;/p&gt;
&lt;p&gt;
First, I referred to this before, but here's a site with a lot of good links to various
"cheat sheets". Some are really good and useful. You can find those &lt;a href="http://john-sheehan.com/blog/net-cheat-sheets/" target=_blank&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Next, I found some neat add-ins for Visual Studio 2008. The first is the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/bea9ed59-8857-4032-9666-9af1c1a33969" target=_blank&gt;Source
Code Power Toy&lt;/a&gt;. It outlines your code in a treeview, which makes navigating your
code, especially in complex classes, very easy. Best of all, it's free! It's available
for VS2005 as well.
&lt;/p&gt;
&lt;p&gt;
I also installed the &lt;a href="http://code.msdn.microsoft.com/PowerCommands" target=_blank&gt;Power
Commands&lt;/a&gt; for the VS 2008 IDE. It has some useful right-click functionality, such
as opening a command prompt, and opening the containing folder, and that's just a
small glimpse of what it can do.&amp;nbsp;It seems to be well documented, and I look forward
to exploring all it's functionality. And best thing, this one is free too.
&lt;/p&gt;
&lt;p&gt;
I'll probably post some useful CodeSmith templates I created. I love &lt;a href="http://www.codesmithtools.com/" target=_blank&gt;CodeSmith&lt;/a&gt;,
but sometimes it's tough to find out exactly how to do things, so I will spare the
world the trial-and-error where I can. In the current project I am working on, our
team saved 1,100+ hours, and over $50,000 dollars last month alone by generating nHibernate
code from the templates we created. Yeah, I earned my rate last month for sure. :)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=c0cbc280-544f-45b1-943c-3715fb32920c" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,c0cbc280-544f-45b1-943c-3715fb32920c.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>C#</category>
      <category>CSharp</category>
      <category>Design</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=e71c0a9e-e77d-4544-8698-d2c8674e7435</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,e71c0a9e-e77d-4544-8698-d2c8674e7435.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,e71c0a9e-e77d-4544-8698-d2c8674e7435.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e71c0a9e-e77d-4544-8698-d2c8674e7435</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So it has been hit or miss posting here, but I am trying to correct it by bringing
on some additional help. I set up a new blog, <a href="http://www.developernation.net">developernation.net</a>,
and begun getting some content on there. Likely I'll crosspost on here too (my content
anyways) but likely most new entries are going to be there first. I figured if I could
get someone else on there helping doing some content, it will have more regular posts.
This blog will continue, just a lag a few days on the content of theother site, and
contain more personal observations.
</p>
        <p>
So swing on by and pop in. I've started off with a bang, and I am in the process of
posting a web service design I created and tested which handles paging and sorting
of data on the server, which my initial tests have shown to be highly efficient. I
am walking through the entire design, and by the end of the weekend I hope to have
the series done and the code posted. If not, you can wait a few days and I will post
it all here as well. 
</p>
        <p>
Thanks!
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=e71c0a9e-e77d-4544-8698-d2c8674e7435" />
      </body>
      <title>A change of directions...</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,e71c0a9e-e77d-4544-8698-d2c8674e7435.aspx</guid>
      <link>http://www.dotnettechnologies.com/2006/04/28/AChangeOfDirections.aspx</link>
      <pubDate>Fri, 28 Apr 2006 15:38:06 GMT</pubDate>
      <description>&lt;p&gt;
So it has been hit or miss posting here, but I am trying to correct it by bringing
on some additional help. I set up a new blog, &lt;a href="http://www.developernation.net"&gt;developernation.net&lt;/a&gt;,
and begun getting some content on there. Likely I'll crosspost on here too (my content
anyways) but likely most new entries are going to be there first. I figured if I could
get someone else on there helping doing some content, it will have more regular posts.
This blog will continue, just a lag a few days on the content of theother site, and
contain more personal observations.
&lt;/p&gt;
&lt;p&gt;
So swing on by and pop in. I've started off with a bang, and I am in the process of
posting a web service design I created and tested which handles paging and sorting
of data on the server, which my initial tests have shown to be highly efficient. I
am walking through the entire design, and by the end of the weekend I hope to have
the series done and the code posted. If not, you can wait a few days and I will post
it all here as well. 
&lt;/p&gt;
&lt;p&gt;
Thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=e71c0a9e-e77d-4544-8698-d2c8674e7435" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,e71c0a9e-e77d-4544-8698-d2c8674e7435.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>C#</category>
      <category>CSharp</category>
      <category>Debugging</category>
      <category>Design</category>
      <category>General</category>
      <category>SQL Tips</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
      <category>VB.Net</category>
      <category>Web Services</category>
      <category>Windows</category>
      <category>WinForms</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a great need again for WinCV today, and was beginning to work out in my mind
how I would rewrite it, as I posted earlier. However, it hit me that <a href="http://www.aisto.com/roeder/dotnet/" target="_blank">Lutz
Roeder's Reflector for .Net</a> might actually do what I needed. It does, it turns
out. I did have to modify the .cfg file to look at the new assemblies for VS2005,
but once I did that, the search functionality worked wonders. So, even though it would
have proven to be a great learning experience, I am going to forego putting a rehash
together, and stick with something that works very nicely..
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f" />
      </body>
      <title>Solution to the WinCV issue...</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f.aspx</guid>
      <link>http://www.dotnettechnologies.com/2006/03/22/SolutionToTheWinCVIssue.aspx</link>
      <pubDate>Wed, 22 Mar 2006 23:00:20 GMT</pubDate>
      <description>&lt;p&gt;
I had a great need again for WinCV today, and was beginning to work out in my mind
how I would rewrite it, as I posted earlier. However, it hit me that &lt;a href="http://www.aisto.com/roeder/dotnet/" target=_blank&gt;Lutz
Roeder's Reflector for .Net&lt;/a&gt; might actually do what I needed. It does, it turns
out. I did have to modify the .cfg file to look at the new assemblies for VS2005,
but once I did that, the search functionality worked wonders. So, even though it would
have proven to be a great learning experience, I am going to forego putting a rehash
together, and stick with something that works very nicely..
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,5dafa1e9-5ed0-4f7e-bb5e-bf0aa92b019f.aspx</comments>
      <category>All Things</category>
      <category>C#</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=48b279f9-c7e2-406f-aa87-64856644c179</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,48b279f9-c7e2-406f-aa87-64856644c179.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,48b279f9-c7e2-406f-aa87-64856644c179.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=48b279f9-c7e2-406f-aa87-64856644c179</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I found some details on WinCV for VS2005 (or the lack thereof). As near as I can ascertain,
if you have VS2005 only, and place WinCV on that system it will work for the .Net
2.0 libraries. I don't know how that works as it seems the information is
hardcoded into WinCV.
</p>
        <p>
So, it was such a great utility, and I think it lends itself to some great enhancements,
so I think I am going to write a version which is VS2005+ compliant. Some features
I want to add:
</p>
        <ul>
          <li>
Quick linking to the help topic for a class/method</li>
          <li>
Ability to easily add external assemblies WITHOUT having to use the command line</li>
        </ul>
        <p>
I plan on keeping the same basic interface though, as it was simple and effective.
Not sure how much I willl get to work on this, or how long it will take, but I will
post it here and probably CodeProject when I get it finished.
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=48b279f9-c7e2-406f-aa87-64856644c179" />
      </body>
      <title>WinCV v2 revisited</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,48b279f9-c7e2-406f-aa87-64856644c179.aspx</guid>
      <link>http://www.dotnettechnologies.com/2006/03/22/WinCVV2Revisited.aspx</link>
      <pubDate>Wed, 22 Mar 2006 15:44:55 GMT</pubDate>
      <description>&lt;p&gt;
I found some details on WinCV for VS2005 (or the lack thereof). As near as I can ascertain,
if you have VS2005 only, and place WinCV on that system it will work for the .Net
2.0 libraries.&amp;nbsp;I don't know how that works&amp;nbsp;as it seems the information is
hardcoded into WinCV.
&lt;/p&gt;
&lt;p&gt;
So, it was such a great utility, and I think it lends itself to some great enhancements,
so I think I am going to write a version which is VS2005+ compliant. Some features
I want to add:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Quick linking to the help topic for a class/method&lt;/li&gt;
&lt;li&gt;
Ability to easily add external assemblies WITHOUT having to use the command line&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I plan on keeping the same basic interface though, as it was simple and effective.
Not sure how much I willl get to work on this, or how long it will take, but I will
post it here and probably CodeProject when I get it finished.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=48b279f9-c7e2-406f-aa87-64856644c179" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,48b279f9-c7e2-406f-aa87-64856644c179.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>C#</category>
      <category>CSharp</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=2c537831-a01e-4f1a-83a6-3861b8ec6ba9</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,2c537831-a01e-4f1a-83a6-3861b8ec6ba9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,2c537831-a01e-4f1a-83a6-3861b8ec6ba9.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2c537831-a01e-4f1a-83a6-3861b8ec6ba9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Is it just my installation, or is WinCV missing from the latest version of .Net? Granted,
I can still use the old WinCV by changing the config file, but why was such a useful
tool pulled from VS2005?
</p>
        <p>
If you've never used WinCV, check it out for VS2003 and prior version. It essentially
lets you search the framework for a certain keyword. For example, if you want to find
out which namespace "Registry" is in, type it in, and see the entire implementation.
By using the configuration file, you can add additional assemblies for WinCV, to search
your own libraries or those of third party vendors.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=2c537831-a01e-4f1a-83a6-3861b8ec6ba9" />
      </body>
      <title>WinCV, where for art thou?</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,2c537831-a01e-4f1a-83a6-3861b8ec6ba9.aspx</guid>
      <link>http://www.dotnettechnologies.com/2006/03/21/WinCVWhereForArtThou.aspx</link>
      <pubDate>Tue, 21 Mar 2006 13:48:01 GMT</pubDate>
      <description>&lt;p&gt;
Is it just my installation, or is WinCV missing from the latest version of .Net? Granted,
I can still use the old WinCV by changing the config file, but why was such a useful
tool pulled from VS2005?
&lt;/p&gt;
&lt;p&gt;
If you've never used WinCV, check it out for VS2003 and prior version. It essentially
lets you search the framework for a certain keyword. For example, if you want to find
out which namespace "Registry" is in, type it in, and see the entire implementation.
By using the configuration file, you can add additional assemblies for WinCV, to search
your own libraries or those of third party vendors.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=2c537831-a01e-4f1a-83a6-3861b8ec6ba9" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,2c537831-a01e-4f1a-83a6-3861b8ec6ba9.aspx</comments>
      <category>All Things</category>
      <category>CSharp</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=5876a92e-efe9-4698-ab08-cf57d4ed2112</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,5876a92e-efe9-4698-ab08-cf57d4ed2112.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,5876a92e-efe9-4698-ab08-cf57d4ed2112.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5876a92e-efe9-4698-ab08-cf57d4ed2112</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font face="Lucida Sans Typewriter" color="#000000">A year ago, I completed my MCSD
for .Net. One of the attractive<br />
benefits of this certification (as well as the MCDBA) was a $500<br />
discount on a one-year MSDN Universal subscription during the first<br />
year of certification.<br /><br />
Although the MCSD benefits page still lists this benefit<br />
(</font>
          <a href="http://www.microsoft.com/learning/mcp/mcsd/benefits.asp" target="_blank">
            <font face="Lucida Sans Typewriter" color="#9136ad">http://www.microsoft.com/learning/mcp/mcsd/benefits.asp</font>
          </a>
          <font face="Lucida Sans Typewriter" color="#000000">),
they<br />
quietly removed it as of April 2005. The text on the page still<br />
states the following:<br />
Rebates or discounts on a one-year subscription to MSDN during the<br />
first year of certification.<br /><br />
If you call or write to get the certificate as I did, you'll get the<br />
terse response it's no longer available, and they just haven't<br />
updated the site. I figured I would help them get the word out since<br />
they didn't deem it important enough to change on their site or<br />
announce. It would be a shame if anyone expected this benefit based<br />
on the MS web site information.</font>
        </p>
        <p>
-------------------------------------------------------------------------
</p>
        <p>
Above is what I posted to our local .Net community group on Yahoo. Now I am going
to add some personal comments. Once again, MS has dropped the ball in supporting the
developer community. Earlier this year, MS announced the MSDN Universal would not
include the new .Net Team Development system (or some name like that -- I am too lazy
to go look it up). Fortunately, enough of an uproar went out that they reversed that
decision. Their waning support of VB also caused a petition/uproar. Likely, since
the MCSD/MCDBA community is a lot smaller, there isn't likely to be a huge outcry
on this issue.
</p>
        <p>
This is a HUGE mistake on MS's behalf. Someone that is likely to spend the extra time
and money to get certifications are the ones MS should really cater to. There's always
been a criticism that the certifications are worthless, and that benefit alone
made it real easy to justify spending the money on books, training materials and exam
costs for achieving the certification. I won't argue the merits of the certifications
here, but I have a lot of them -- MCP, MCDBA, MCSD for VB, MCSD for .Net (C#), and
MCAD. Will I continue? I may have to given I am an Independent Contractor and it helps
to get me in the door. Will I recommend it to someone not in my position? Not likely.
</p>
        <p>
Don't get me wrong, the MSDN Universal is still a great deal. My disgust over this
situation is that the benefit is <strong>still</strong> listed, as well as no announcement
in April 2005 when they made this decision (or if they did, I sure didn't see it).
I have been one of the most stalwart supporters of Microsoft over the years,
and I have personally been involved in projects which have generated millions in
licensing revenues for Microsoft in the last 10 years. The past 1.5 years I have watched
MS anger the core base of developers.
</p>
        <p>
I think this is indicative of the internal problems at MS, and why Google is going
to be a viable competitor to MS. In a paraphrase of the words of Stephen King, and
the Dark Tower series, MS has forgotten the face of their father. One of the reasons
MS dominated the market over Apple was that MS supported developers way beyond the
norm. In the name of profit, I think we are seeing this slowly change.<br /></p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=5876a92e-efe9-4698-ab08-cf57d4ed2112" />
      </body>
      <title>MSDN Universal Discount for MCSD/MCDBA </title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,5876a92e-efe9-4698-ab08-cf57d4ed2112.aspx</guid>
      <link>http://www.dotnettechnologies.com/2005/10/07/MSDNUniversalDiscountForMCSDMCDBA.aspx</link>
      <pubDate>Fri, 07 Oct 2005 15:57:27 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font face="Lucida Sans Typewriter" color=#000000&gt;A year ago, I completed my MCSD
for .Net. One of the attractive&lt;br&gt;
benefits of this certification (as well as the MCDBA) was a $500&lt;br&gt;
discount on a one-year MSDN Universal subscription during the first&lt;br&gt;
year of certification.&lt;br&gt;
&lt;br&gt;
Although the MCSD benefits page still lists this benefit&lt;br&gt;
(&lt;/font&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcsd/benefits.asp" target=_blank&gt;&lt;font face="Lucida Sans Typewriter" color=#9136ad&gt;http://www.microsoft.com/learning/mcp/mcsd/benefits.asp&lt;/font&gt;&lt;/a&gt;&lt;font face="Lucida Sans Typewriter" color=#000000&gt;),
they&lt;br&gt;
quietly removed it as of April 2005. The text on the page still&lt;br&gt;
states the following:&lt;br&gt;
Rebates or discounts on a one-year subscription to MSDN during the&lt;br&gt;
first year of certification.&lt;br&gt;
&lt;br&gt;
If you call or write to get the certificate as I did, you'll get the&lt;br&gt;
terse response it's no longer available, and they just haven't&lt;br&gt;
updated the site. I figured I would help them get the word out since&lt;br&gt;
they didn't deem it important enough to change on their site or&lt;br&gt;
announce. It would be a shame if anyone expected this benefit based&lt;br&gt;
on the MS web site information.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
-------------------------------------------------------------------------
&lt;/p&gt;
&lt;p&gt;
Above is what I posted to our local .Net community group on Yahoo. Now I am going
to add some personal comments. Once again, MS has dropped the ball in supporting the
developer community. Earlier this year, MS announced the MSDN Universal would not
include the new .Net Team Development system (or some name like that -- I am too lazy
to go look it up). Fortunately, enough of an uproar went out that they reversed that
decision. Their waning support of VB also caused a petition/uproar. Likely, since
the MCSD/MCDBA&amp;nbsp;community is a lot smaller, there isn't likely to be a huge outcry
on this issue.
&lt;/p&gt;
&lt;p&gt;
This is a HUGE mistake on MS's behalf. Someone that is likely to spend the extra time
and money to get certifications are the ones MS should really cater to. There's always
been a criticism that the certifications are worthless, and that benefit&amp;nbsp;alone
made it real easy to justify spending the money on books, training materials and exam
costs for achieving the certification. I won't argue the merits of the certifications
here, but I have a lot of them -- MCP, MCDBA, MCSD for VB, MCSD for .Net (C#), and
MCAD. Will I continue? I may have to given I am an Independent Contractor and it helps
to get me in the door. Will I recommend it to someone not in my position? Not likely.
&lt;/p&gt;
&lt;p&gt;
Don't get me wrong, the MSDN Universal is still a great deal. My disgust over this
situation is that the benefit is &lt;strong&gt;still&lt;/strong&gt; listed, as well as no announcement
in April 2005 when they made this decision (or if they did, I sure didn't see it).
I have&amp;nbsp;been one of the most stalwart supporters of Microsoft over the years,
and I have personally been involved in projects which have generated millions&amp;nbsp;in
licensing revenues for Microsoft in the last 10 years. The past 1.5 years I have watched
MS anger the core base of developers.
&lt;/p&gt;
&lt;p&gt;
I think this is indicative of the internal problems at MS, and why Google is going
to be a viable competitor to MS. In a paraphrase of the words of Stephen King, and
the Dark Tower series, MS has forgotten the face of their father. One of the reasons
MS dominated the market over Apple was that MS supported developers way beyond the
norm. In the name of profit, I think we are seeing this slowly change.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=5876a92e-efe9-4698-ab08-cf57d4ed2112" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,5876a92e-efe9-4698-ab08-cf57d4ed2112.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>C#</category>
      <category>CSharp</category>
      <category>Design</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
      <category>VB.Net</category>
      <category>Windows</category>
      <category>WinForms</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=303d10f5-f6ad-43aa-b22c-35d4768481da</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,303d10f5-f6ad-43aa-b22c-35d4768481da.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,303d10f5-f6ad-43aa-b22c-35d4768481da.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=303d10f5-f6ad-43aa-b22c-35d4768481da</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
OK, time for a little fairness in the world. When I wrote my blog entry on Monday,
I was certainly frustrated with LLBLGen. Franz Bouma has responded to my comments
about LLBLGen (little did I know I had such illustrious visitors!). So in fairness,
I want to make sure anyone out there reading my blog sees those comments so they can
see both sides of the review and form opinions on more than just my emotional outbursts,
and my semi-apology for blogging while frustrated. :)
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=303d10f5-f6ad-43aa-b22c-35d4768481da" />
      </body>
      <title>See the LLBLGen comments from July 18th...</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,303d10f5-f6ad-43aa-b22c-35d4768481da.aspx</guid>
      <link>http://www.dotnettechnologies.com/2005/07/20/SeeTheLLBLGenCommentsFromJuly18th.aspx</link>
      <pubDate>Wed, 20 Jul 2005 20:31:12 GMT</pubDate>
      <description>&lt;p&gt;
OK, time for a little fairness in the world. When I wrote my blog entry on Monday,
I was certainly frustrated with LLBLGen. Franz Bouma has responded to my comments
about LLBLGen (little did I know I had such illustrious visitors!). So in fairness,
I want to make sure anyone out there reading my blog sees those comments so they can
see both sides of the review and form opinions on more than just my emotional outbursts,
and my semi-apology for blogging while frustrated. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=303d10f5-f6ad-43aa-b22c-35d4768481da" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,303d10f5-f6ad-43aa-b22c-35d4768481da.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>CSharp</category>
      <category>Design</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=9884adf4-7314-4f4e-a5d5-e2855a819af8</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,9884adf4-7314-4f4e-a5d5-e2855a819af8.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,9884adf4-7314-4f4e-a5d5-e2855a819af8.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9884adf4-7314-4f4e-a5d5-e2855a819af8</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have tons I need to blog about but no time to do it, as once again I am up to my
head in projects. So this entry is going to be to vent....
</p>
        <p>
One of my current clients is requiring me to use a product called LLBLGen Pro (see
it at <a href="http://www.llblgen.com/" target="_blank">http://www.llblgen.com</a>).
I am certain it's a powerful product, and while it generates enough code to make a
COBOL program to look efficient, it seems to perform OK, although my gut tells me
this thing would be a pig in a high-demand environment. But here's my gripe -- the
documentation is <em>horrendous</em>. I have spent at least 50 hours trying to get
this thing to generate code effectively as well as consistantly. And even then, I
don't understand a tenth of what's generated. I understand enough to make minor changes,
and after a lot of wrestling, I can finally get it to generate code. OK, 50 hours
may not seem like a lot to learn a new paradigm which might reap a lot of benefits
later, but let me tell you what that 50 hours (billable to my client, I might add,
since I begged them after 10 hours to scrap it) bought you. I managed to add 2 fields
to a table, and add two tables. The two new table still don't work right. 
</p>
        <p>
Let's put that into perspective. First, I code lightning fast. Not spaghetti code
mind you, but robust code which typically is right the first time. In that 50 hours,
I could have re-written a good chunk of the app, and believe me, it needs it. Fortunately,
I did my consultant's duty to bring that point up. It would have taken me three hours
tops to make the changes which we are looking at 50 hours and still not working.  
</p>
        <p>
Second, the code is difficult to read at best. The project has fallen behind because
of the insistance we use this tool, so they brought on two other developers. Guess
what, they are having the same problems. They have spent two solid days now, and not
one line of code written. Using standard objects, any developer with experience in
.Net can peruse the object model quickly and begin coding. Not with this tool!
</p>
        <p>
You can't compare CodeSmith, which I have praised before, with LLBLGen. LLBLGen is
far more sophisticated, unfortunately to the point of being unusable. I know there
are a few people who swear by it, and that's great, but I get paid to come in and
make a difference fast, and LLBLGen has proven to be more an expensive hindrance than
a solution.
</p>
        <p>
OK, that's the end of the vent. I have been deploying some web services for another
client, and once we have everything debugged, I have a ton of tips related to web
services and deployment which I promise will save a ton of hours to other developers
entering into this domain. Until then!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=9884adf4-7314-4f4e-a5d5-e2855a819af8" />
      </body>
      <title>When code generation goes bad....</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,9884adf4-7314-4f4e-a5d5-e2855a819af8.aspx</guid>
      <link>http://www.dotnettechnologies.com/2005/07/19/WhenCodeGenerationGoesBad.aspx</link>
      <pubDate>Tue, 19 Jul 2005 04:49:51 GMT</pubDate>
      <description>&lt;p&gt;
I have tons I need to blog about but no time to do it, as once again I am up to my
head in projects. So this entry is going to be to vent....
&lt;/p&gt;
&lt;p&gt;
One of my current clients is requiring me to use a product called LLBLGen Pro (see
it at &lt;a href="http://www.llblgen.com/" target=_blank&gt;http://www.llblgen.com&lt;/a&gt;).
I am certain it's a powerful product, and while it generates enough code to make a
COBOL program to look efficient, it seems to perform OK, although my gut tells me
this thing would be a pig in a high-demand environment. But here's my gripe -- the
documentation is &lt;em&gt;horrendous&lt;/em&gt;. I have spent at least 50 hours trying to get
this thing to generate code effectively as well as consistantly. And even then, I
don't understand a tenth of what's generated. I understand enough to make minor changes,
and after a lot of wrestling, I can finally get it to generate code. OK, 50 hours
may not seem like a lot to learn a new paradigm which might reap a lot of benefits
later, but let me tell you what that 50 hours (billable to my client, I might add,
since I begged them after 10 hours to scrap it) bought you. I managed to add 2 fields
to a table, and add two tables. The two new table still don't work right. 
&lt;/p&gt;
&lt;p&gt;
Let's put that into perspective. First, I code lightning fast. Not spaghetti code
mind you, but robust code which typically is right the first time. In that 50 hours,
I could have re-written a good chunk of the app, and believe me, it needs it. Fortunately,
I did my consultant's duty to bring that point up.&amp;nbsp;It would have taken me three&amp;nbsp;hours
tops to make the changes which we are looking at 50 hours and still not working.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Second, the code is difficult to read at best. The project has fallen behind because
of the insistance we use this tool, so they brought on two other developers. Guess
what, they are having the same problems. They have spent two solid days now, and not
one line of code written. Using standard objects, any developer with experience in
.Net can peruse the object model quickly and begin coding. Not with this tool!
&lt;/p&gt;
&lt;p&gt;
You can't compare CodeSmith, which I have praised before, with LLBLGen. LLBLGen is
far more sophisticated, unfortunately to the point of being unusable. I know there
are a few people who swear by it, and that's great, but I get paid to come in and
make a difference fast, and LLBLGen has proven to be more an expensive hindrance than
a solution.
&lt;/p&gt;
&lt;p&gt;
OK, that's the end of the vent. I have been deploying some web services for another
client, and once we have everything debugged, I have a ton of tips related to web
services and deployment which I promise will save a ton of hours to other developers
entering into this domain. Until then!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=9884adf4-7314-4f4e-a5d5-e2855a819af8" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,9884adf4-7314-4f4e-a5d5-e2855a819af8.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>Design</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=d98820c4-cb7c-4348-8d80-b59c6d514d01</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,d98820c4-cb7c-4348-8d80-b59c6d514d01.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,d98820c4-cb7c-4348-8d80-b59c6d514d01.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d98820c4-cb7c-4348-8d80-b59c6d514d01</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tentatively, my current project is set to end in October. No big deal there, as I
have had absolutely no bench days in the past 10 years as an Independent Contractor.
In fact, during most of those 10 years I have been working 55-80+ hours per week and
having a great time doing it. I don't do the book thing or magazine article thing
because quite frankly, I don't have time because I am busy doing billable work which
pays a lot more. I havn't needed self-promotion thing either because almost all my
business comes from referrals from current or past customers.
</p>
        <p>
Then along come kids, and dang if you don't suddenly want to spend more time at home
and improve their quality of life (and mine). My current project wants to bring me
on full time, and we've had some preliminary discussions on it, and I am willing to
take the pay cut in my pay for one simple thing: I want to work remotely
and raise my kids in the country. Their attitude is like mine, which is that should
be fine since I have a strong work ethic and can get things done, what does it matter
where I work as long as I have a phone and internet connection. However, there are
data security concerns and management concerns which would need to be overcome. 
</p>
        <p>
I have plenty of time, since barring disaster, the contract won't be over until
October sometime. But I figure I will start self-promoting just in case someone from
a company who doesn't mind remote employees stumbles on this blog. Towards October,
I will go full bore trying to close something out, and in the meantime I plan on blogging
much more so I can display what talents I can bring to the table. 
</p>
        <p>
If any companies out there that come up on this, and want a great employee (C#/VB
developer with lots of SQL Server and architect/designer/coding and full-life cycle
development) that brings a lot of experience, a great professional attitude and
presence as well as the ability to code like the wind (and good code at that..), then
drop me a line and let's talk. 
</p>
        <p>
Here's a <a href="http://www.rubiconcomputing.com/resume/resume.html" target="_blank">resume </a>just
in case.. 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=d98820c4-cb7c-4348-8d80-b59c6d514d01" />
      </body>
      <title>Self Promotion</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,d98820c4-cb7c-4348-8d80-b59c6d514d01.aspx</guid>
      <link>http://www.dotnettechnologies.com/2005/05/26/SelfPromotion.aspx</link>
      <pubDate>Thu, 26 May 2005 23:33:35 GMT</pubDate>
      <description>&lt;p&gt;
Tentatively, my current project is set to end in October. No big deal there, as I
have had absolutely no bench days in the past 10 years as an Independent Contractor.
In fact, during most of those 10 years I have been working 55-80+ hours per week and
having a great time doing it. I don't do the book thing or magazine article thing
because quite frankly, I don't have time because I am busy doing billable work which
pays a lot more. I havn't needed self-promotion thing either because almost all my
business comes from referrals from current or past customers.
&lt;/p&gt;
&lt;p&gt;
Then along come kids, and dang if you don't suddenly want to spend more time at home
and improve their quality of life (and mine). My current project wants to bring me
on full time, and we've had some preliminary discussions on it, and I am willing to
take&amp;nbsp;the pay&amp;nbsp;cut in my pay for one simple thing: I want to work remotely
and raise my kids in the country. Their attitude is like mine, which is that should
be fine since I have a strong work ethic and can get things done, what does it matter
where I work as long as I have a phone and internet connection. However, there are
data security concerns and management concerns which would need to be overcome. 
&lt;/p&gt;
&lt;p&gt;
I&amp;nbsp;have plenty of time, since barring disaster, the contract won't be over until
October sometime. But I figure I will start self-promoting just in case someone from
a company who doesn't mind remote employees stumbles on this blog. Towards October,
I will go full bore trying to close something out, and in the meantime I plan on blogging
much more so I can display what talents I can bring to the table. 
&lt;/p&gt;
&lt;p&gt;
If any companies out there that come up on this, and want a great employee (C#/VB
developer with lots of SQL Server and architect/designer/coding and full-life cycle
development)&amp;nbsp;that brings a lot of experience, a great professional attitude and
presence as well as the ability to code like the wind (and good code at that..), then
drop me a line and let's talk. 
&lt;/p&gt;
&lt;p&gt;
Here's a &lt;a href="http://www.rubiconcomputing.com/resume/resume.html" target=_blank&gt;resume &lt;/a&gt;just
in case.. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=d98820c4-cb7c-4348-8d80-b59c6d514d01" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,d98820c4-cb7c-4348-8d80-b59c6d514d01.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>C#</category>
      <category>CSharp</category>
      <category>Design</category>
      <category>General</category>
      <category>SQL Tips</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
      <category>VB.Net</category>
      <category>Windows</category>
      <category>WinForms</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=9371af86-0405-4beb-bd2e-b0b1f0884ae1</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,9371af86-0405-4beb-bd2e-b0b1f0884ae1.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,9371af86-0405-4beb-bd2e-b0b1f0884ae1.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9371af86-0405-4beb-bd2e-b0b1f0884ae1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I bought CodeSmith back in v2, but I was so busy I never got a chance to do more than
play around with it. So now v3 is released, and I was looking at the improvements
(like Intellisense) and decided I would take a look at it again. Boy, was I glad I
did..
</p>
        <p>
Don't get me wrong, I wasn't putting it off because I think code generation and templates
are bad. In fact, quite the opposite. When I first started my business, I had a few
people working with me part-time, and then finally full time as the business grew.
What I found was that in the end, I apparently hold my coding standards to a higher
value than others and I would end up coding 90% of the application myself. I realized
quickly there were a few huge advantages to automated code generation. Here's a few:
</p>
        <ul>
          <li>
Fewer errors (as long as you fix the templates as errors are encountered)</li>
          <li>
One developer can do the work of 4-5 once you get a good architecture set up</li>
          <li>
Standards enforcement is a no-brainer when you are all working off the same templates</li>
          <li>
You can spend more time on UI usability and data structure because 90% of the infrastructure
stuff is done automatically</li>
          <li>
Changes are easy. Change the structure and regenerate the code, and you are off again.</li>
        </ul>
        <p>
I could go on and on about it. I had written a series of VB6 addins which I used based
off Rocky Lhotka's BusinessObjects book for VB5. In hours I could generate almost
all of my middle and data tier code. A tweak here and there, and I was doing the fun
stuff like UI coding. 
</p>
        <p>
Along comes .Net, and my addins were irrelevant. I created a couple of quick and dirty
addins, but I was so busy heads-down coding, I didn't have time to create new templates
to reflect the impact of .Net. I did create some common libraries of functions which
got me through a good chunk of redundant coding, so that was going to have to do the
job for the time.  I had always intended on going back and re-coding some new
templates, but it never happened. 
</p>
        <p>
I am currently working on a project and we are horribly understaffed, and there's
no relief in sight. There are some huge deadlines coming up, and it's time to make
the rubber hit the road. I already code fast (and tight), but I needed to clone myself
a couple times over to make the deadlines. So when the announcement came this week
of CodeSmith 3.0, I decided I would take a new serious look at it and see what it
could do for me. 
</p>
        <p>
Holy crap! In a matter of hours I had some pretty solid templates up and running,
which will save the team many, many hours of redundant coding tasks in building this
application. I have so many ideas for new templates it's scary, and I have only
scratched the surface for what the tool can do. If you haven't looked at it yet, I
recommend immediately going to <a href="http://www.codesmithtools.com/" target="_blank">CodeSmith</a> and
downloading a trial.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=9371af86-0405-4beb-bd2e-b0b1f0884ae1" />
      </body>
      <title>CodeSmith rocks!</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,9371af86-0405-4beb-bd2e-b0b1f0884ae1.aspx</guid>
      <link>http://www.dotnettechnologies.com/2005/05/26/CodeSmithRocks.aspx</link>
      <pubDate>Thu, 26 May 2005 23:19:32 GMT</pubDate>
      <description>&lt;p&gt;
I bought CodeSmith back in v2, but I was so busy I never got a chance to do more than
play around with it. So now v3 is released, and I was looking at the improvements
(like Intellisense) and decided I would take a look at it again. Boy, was I glad I
did..
&lt;/p&gt;
&lt;p&gt;
Don't get me wrong, I wasn't putting it off because I think code generation and templates
are bad. In fact, quite the opposite. When I first started my business, I had a few
people working with me part-time, and then finally full time as the business grew.
What I found was that in the end, I apparently hold my coding standards to a higher
value than others and I would end up coding 90% of the application myself. I realized
quickly there were a few huge advantages to automated code generation. Here's a few:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Fewer errors (as long as you fix the templates as errors are encountered)&lt;/li&gt;
&lt;li&gt;
One developer can do the work of 4-5 once you get a good architecture set up&lt;/li&gt;
&lt;li&gt;
Standards enforcement is a no-brainer when you are all working off the same templates&lt;/li&gt;
&lt;li&gt;
You can spend more time on UI usability and data structure because 90% of the infrastructure
stuff is done automatically&lt;/li&gt;
&lt;li&gt;
Changes are easy. Change the structure and regenerate the code, and you are off again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I could go on and on about it. I had written a series of VB6 addins which I used based
off Rocky Lhotka's BusinessObjects book for VB5. In hours I could generate almost
all of my middle and data tier code. A tweak here and there, and I was doing the fun
stuff like UI coding. 
&lt;/p&gt;
&lt;p&gt;
Along comes .Net, and my addins were irrelevant. I created a couple of quick and dirty
addins, but I was so busy heads-down coding, I didn't have time to create new templates
to reflect the impact of .Net. I did create some common libraries of functions which
got me through a good chunk of redundant coding, so that was going to have to do the
job for the time.&amp;nbsp; I had always intended on going back and re-coding some new
templates, but it never happened. 
&lt;/p&gt;
&lt;p&gt;
I am currently working on a project and we are horribly understaffed, and there's
no relief in sight. There are some huge deadlines coming up, and it's time to make
the rubber hit the road. I already code fast (and tight), but I needed to clone myself
a couple times over to make the deadlines. So when the announcement came this week
of CodeSmith 3.0, I decided I would take a new serious look at it and see what it
could do for me. 
&lt;/p&gt;
&lt;p&gt;
Holy crap! In a matter of hours I had some pretty solid templates up and running,
which will save the team many, many hours of redundant coding tasks in building this
application. I have so many ideas for new templates it's scary, and&amp;nbsp;I have only
scratched the surface for what the tool can do. If you haven't looked at it yet, I
recommend immediately going to &lt;a href="http://www.codesmithtools.com/" target=_blank&gt;CodeSmith&lt;/a&gt; and
downloading a trial.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=9371af86-0405-4beb-bd2e-b0b1f0884ae1" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,9371af86-0405-4beb-bd2e-b0b1f0884ae1.aspx</comments>
      <category>All Things</category>
      <category>C#</category>
      <category>CSharp</category>
      <category>Design</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=53bbfb29-c343-4e75-9f9f-c54021a83496</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,53bbfb29-c343-4e75-9f9f-c54021a83496.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,53bbfb29-c343-4e75-9f9f-c54021a83496.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=53bbfb29-c343-4e75-9f9f-c54021a83496</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was out late last night in my first “real” poker tournament, so I am
a bit too tired to whip out some good code. (I did OK at the tournament, and hit my
target, just as an FYI). So tonight's tip is going to be about a great set of free
components I use occasionally in ASP.Net. And at least for this one, you can get the
source at a very reasonable price. Check these out:
</p>
        <p>
          <a href="http://www.eworldui.net/CustomControls/" target="_blank">Excentrics World</a>
        </p>
        <p>
They have a great collapsible panel, masked textbox, breadcrumb tracker and a popup
calendar, plus a few others. Definitely worth looking, and throw him a bone and buy
the source!
</p>
        <p>
More cool tools I have found if I can stay awake!
</p>
        <p>
-- Daryl
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=53bbfb29-c343-4e75-9f9f-c54021a83496" />
      </body>
      <title>Some great free tools for ASP.Net</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,53bbfb29-c343-4e75-9f9f-c54021a83496.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/12/10/SomeGreatFreeToolsForASPNet.aspx</link>
      <pubDate>Fri, 10 Dec 2004 02:30:27 GMT</pubDate>
      <description>&lt;p&gt;
I was out late last night in my first &amp;#8220;real&amp;#8221; poker tournament, so I am
a bit too tired to whip out some good code. (I did OK at the tournament, and hit my
target, just as an FYI). So tonight's tip is going to be about a great set of free
components I use occasionally in ASP.Net. And at least for this one, you can get the
source at a very reasonable price. Check these out:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.eworldui.net/CustomControls/" target=_blank&gt;Excentrics World&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
They have a great collapsible panel, masked textbox, breadcrumb tracker and a&amp;nbsp;popup
calendar, plus a few others. Definitely worth looking, and throw him a bone and buy
the source!
&lt;/p&gt;
&lt;p&gt;
More cool tools I have found if I can stay awake!
&lt;/p&gt;
&lt;p&gt;
-- Daryl
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=53bbfb29-c343-4e75-9f9f-c54021a83496" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,53bbfb29-c343-4e75-9f9f-c54021a83496.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=77bcec51-e4bf-4317-b81b-19d3b5edd0e6</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,77bcec51-e4bf-4317-b81b-19d3b5edd0e6.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,77bcec51-e4bf-4317-b81b-19d3b5edd0e6.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=77bcec51-e4bf-4317-b81b-19d3b5edd0e6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The winner of the cool application for the Tablet PC was announced, and the top prize
winner was an application called ArtRage. Holy cow! I am no artist but this thing
is cool. Although you can use it with a mouse, if you hae a Tablet PC, the play factor
alone on this is worth the download. Best of all, it's free.
</p>
        <p>
My favorite part: the trace feature. Essentially, it allows you to place a picture
in the background, trace over what you want, then save the tracing (without the picture
in the background). I may become an artist yet!
</p>
        <p>
For all the apps (which I am sure to check out!) check the contest out here:
</p>
        <p>
          <a href="http://www.microsoft.com/presspass/press/2004/dec04/12-01TabletPCWinnerPR.asp" target="_blank">http://www.microsoft.com/presspass/press/2004/dec04/12-01TabletPCWinnerPR.asp</a>
        </p>
        <p>
or go right to the site at:
</p>
        <p>
          <a href="http://www.ambientdesign.com/artrage.html" target="_blank">http://www.ambientdesign.com/artrage.html</a>
        </p>
        <p>
Here's a weak sample:
</p>
        <p>
          <img height="300" src="http://www.dotnettechnologies.com/DotNetTechnologies/content/binary/cool.png" width="200" border="0" />
        </p>
        <p>
Notice the brush textures of the paintbrush.... 
</p>
        <p>
-- Daryl
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=77bcec51-e4bf-4317-b81b-19d3b5edd0e6" />
      </body>
      <title>Too cool for words!</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,77bcec51-e4bf-4317-b81b-19d3b5edd0e6.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/12/03/TooCoolForWords.aspx</link>
      <pubDate>Fri, 03 Dec 2004 03:23:38 GMT</pubDate>
      <description>&lt;p&gt;
The winner of the cool application for the Tablet PC was announced, and the top prize
winner was an application called ArtRage. Holy cow! I am no artist but this thing
is cool. Although you can use it with a mouse, if you hae a Tablet PC, the play factor
alone on this is worth the download. Best of all, it's free.
&lt;/p&gt;
&lt;p&gt;
My favorite part: the trace feature. Essentially, it allows you to place a picture
in the background, trace over what you want, then save the tracing (without the picture
in the background). I may become an artist yet!
&lt;/p&gt;
&lt;p&gt;
For all the apps (which I am sure to check out!) check the contest out here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/presspass/press/2004/dec04/12-01TabletPCWinnerPR.asp" target=_blank&gt;http://www.microsoft.com/presspass/press/2004/dec04/12-01TabletPCWinnerPR.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
or go right to the site at:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ambientdesign.com/artrage.html" target=_blank&gt;http://www.ambientdesign.com/artrage.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Here's a weak sample:
&lt;/p&gt;
&lt;p&gt;
&lt;img height=300 src="http://www.dotnettechnologies.com/DotNetTechnologies/content/binary/cool.png" width=200 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Notice the brush textures of the paintbrush.... 
&lt;/p&gt;
&lt;p&gt;
-- Daryl
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=77bcec51-e4bf-4317-b81b-19d3b5edd0e6" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,77bcec51-e4bf-4317-b81b-19d3b5edd0e6.aspx</comments>
      <category>All Things</category>
      <category>General</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=6394fc3f-d3b8-46c7-bd71-035b286bf35c</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,6394fc3f-d3b8-46c7-bd71-035b286bf35c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,6394fc3f-d3b8-46c7-bd71-035b286bf35c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6394fc3f-d3b8-46c7-bd71-035b286bf35c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Someone on the project I am currently working on stumbled on some documentation for
WinCV, and in that documentation, it tells you how to add Assemblies which aren't
in the GAC. Here's the link from the MSDN, and then I will point out the interesting
part:
</p>
        <p>
          <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconwindowsformsclassviewerwincvexe.asp" target="_blank">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconwindowsformsclassviewerwincvexe.asp</a>
        </p>
        <p>
By using a <em>response file</em>, you can issue the necessary the parameters to look
at one or more files. From the documentation:
</p>
        <p>
          <font color="#0000ff">The following code shows the contents of a response file <code><code class="ce">myFile.rsp</code>. </code>Using
a response file eliminates the need to individually type the commands at the command
prompt.</font>
        </p>
        <pre class="code">
          <font color="#0000ff">/r:myAssembly.dll /r:myOtherAssembly.dll</font>
        </pre>
        <p>
          <font color="#0000ff">The following command reads the response file <code class="ce">myFile.rsp</code> and
executes the commands specified in the file.</font>
        </p>
        <pre class="code">
          <font color="#0000ff">wincv @myFile.rsp</font>
        </pre>
        <pre class="code">
          <font color="#000000">So,
you could set up a standard response file which holds all the names of assemblies
to search! </font>
        </pre>
        <pre class="code">Pretty neat!</pre>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=6394fc3f-d3b8-46c7-bd71-035b286bf35c" />
      </body>
      <title>WinCV revisited...</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,6394fc3f-d3b8-46c7-bd71-035b286bf35c.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/12/02/WinCVRevisited.aspx</link>
      <pubDate>Thu, 02 Dec 2004 05:42:28 GMT</pubDate>
      <description>&lt;p&gt;
Someone on the project I am currently working on stumbled on some documentation for
WinCV, and in that documentation, it tells you how to add Assemblies which aren't
in the GAC. Here's the link from the MSDN, and then I will point out the interesting
part:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconwindowsformsclassviewerwincvexe.asp" target=_blank&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconwindowsformsclassviewerwincvexe.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
By using a &lt;em&gt;response file&lt;/em&gt;, you can issue the necessary the parameters to look
at one or more files. From the documentation:
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#0000ff&gt;The following code shows the contents of a response file &lt;code&gt;&lt;code class=ce&gt;myFile.rsp&lt;/code&gt;. &lt;/code&gt;Using
a response file eliminates the need to individually type the commands at the command
prompt.&lt;/font&gt;
&lt;/p&gt;
&lt;pre class=code&gt;&lt;font color=#0000ff&gt;/r:myAssembly.dll /r:myOtherAssembly.dll&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;font color=#0000ff&gt;The following command reads the response file &lt;code class=ce&gt;myFile.rsp&lt;/code&gt; and
executes the commands specified in the file.&lt;/font&gt;
&lt;/p&gt;
&lt;pre class=code&gt;&lt;font color=#0000ff&gt;wincv @myFile.rsp&lt;/font&gt;&lt;/pre&gt;&lt;pre class=code&gt;&lt;font color=#000000&gt;So,
you could set up a standard response file which holds all the names of assemblies
to search! &lt;/font&gt;&lt;/pre&gt;&lt;pre class=code&gt;Pretty neat!&lt;/pre&gt;&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=6394fc3f-d3b8-46c7-bd71-035b286bf35c" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,6394fc3f-d3b8-46c7-bd71-035b286bf35c.aspx</comments>
      <category>All Things</category>
      <category>C#</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
      <category>VB.Net</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=0897315b-cdb0-4c1f-9f4a-09dd99cf3b50</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,0897315b-cdb0-4c1f-9f4a-09dd99cf3b50.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,0897315b-cdb0-4c1f-9f4a-09dd99cf3b50.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0897315b-cdb0-4c1f-9f4a-09dd99cf3b50</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It took me a few minutes to find, so I wanted to blog on it just so I could find it
again, and anyone out there can use too. I am currently working in a wierd development
environment which uses Novell over an NT network. So I have two passwords, and the
only way I can change the NT password is through Outlook or using Terminal Services
to go to an all NT machine and do it. Outlook wasn't working, so I went route #2.
</p>
        <p>
In order to send the Ctrl-Alt-Delete sequence in Terminal Services, I had to use Ctrl-Alt-End...
Go figure!
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=0897315b-cdb0-4c1f-9f4a-09dd99cf3b50" />
      </body>
      <title>Tip of the Day: Sending Ctrl-Alt-Delete through a Terminal Services Client</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,0897315b-cdb0-4c1f-9f4a-09dd99cf3b50.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/11/29/TipOfTheDaySendingCtrlAltDeleteThroughATerminalServicesClient.aspx</link>
      <pubDate>Mon, 29 Nov 2004 18:16:26 GMT</pubDate>
      <description>&lt;p&gt;
It took me a few minutes to find, so I wanted to blog on it just so I could find it
again, and anyone out there can use too. I am currently working in a wierd development
environment which uses Novell over an NT network. So I have two passwords, and the
only way I can change the NT password is through Outlook or using Terminal Services
to go to an all NT machine and do it. Outlook wasn't working, so I went route #2.
&lt;/p&gt;
&lt;p&gt;
In order to send the Ctrl-Alt-Delete sequence in Terminal Services, I had to use Ctrl-Alt-End...
Go figure!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=0897315b-cdb0-4c1f-9f4a-09dd99cf3b50" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,0897315b-cdb0-4c1f-9f4a-09dd99cf3b50.aspx</comments>
      <category>All Things</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
On my last project, as part of the agile process, we utilized nAnt with Draco.Net
to create automated builds. I didn't implement that part of the project, but I certainly
did see the value in automating the build. So, while I set up my environment for my
topic of Component Based Development, I am going to write my learning's on generating
an automated build. If you've used these tools, feel free to hop in and add some help.
</p>
        <p>
That's one downside of open source projects -- the documentation can either be lacking
or just as distributed. So hopefully by blogging about it, I can save someone some
frustration.
</p>
        <p>
So I am going to start by looking at the tools I am planning on using:
</p>
        <p>
          <a href="http://nant.sourceforge.net/">nAnt Home Page</a> -- Get nAnt here. nAnt is
the tool you'll use to configure your build
</p>
        <p>
          <a href="http://draconet.sourceforge.net/">Draco.Net</a> -- How to generate a build
when your source control changes (or you trigger it)
</p>
        <p>
Some other interesting links I saw: 
</p>
        <p>
For nAnt help: <a href="http://nant.sourceforge.net/wiki/index.php/NAntUsage">NAntUsage
wiki</a> -- Some help on how to use nAnt
</p>
        <p>
For Draco.Net help: <a href="http://draconet.sourceforge.net/wiki/">Draco.Net wiki</a> --
Some help on how to use Draco.net
</p>
        <p>
Tomorrow I am going to start implementing nAnt on a fairly complex project, so I will
post my findings as I go along!
</p>
        <p>
          <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5" />
        </p>
      </body>
      <title>My trek into automated builds</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/11/23/MyTrekIntoAutomatedBuilds.aspx</link>
      <pubDate>Tue, 23 Nov 2004 21:47:25 GMT</pubDate>
      <description>&lt;p&gt;
On my last project, as part of the agile process, we utilized nAnt with Draco.Net
to create automated builds. I didn't implement that part of the project, but I certainly
did see the value in automating the build. So, while I set up my environment for my
topic of Component Based Development, I am going to write my learning's on generating
an automated build. If you've used these tools, feel free to hop in and add some help.
&lt;/p&gt;
&lt;p&gt;
That's one downside of open source projects -- the documentation can either be lacking
or just as distributed. So hopefully by blogging about it, I can save someone some
frustration.
&lt;/p&gt;
&lt;p&gt;
So I am going to start by looking at the tools I am planning on using:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://nant.sourceforge.net/"&gt;nAnt Home Page&lt;/a&gt; -- Get nAnt here. nAnt is
the tool you'll use to configure your build
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://draconet.sourceforge.net/"&gt;Draco.Net&lt;/a&gt; -- How to generate a build
when your source control changes (or you trigger it)
&lt;/p&gt;
&lt;p&gt;
Some other interesting links I saw: 
&lt;/p&gt;
&lt;p&gt;
For nAnt help: &lt;a href="http://nant.sourceforge.net/wiki/index.php/NAntUsage"&gt;NAntUsage
wiki&lt;/a&gt;&amp;nbsp;-- Some help on how to use nAnt
&lt;/p&gt;
&lt;p&gt;
For Draco.Net help: &lt;a href="http://draconet.sourceforge.net/wiki/"&gt;Draco.Net wiki&lt;/a&gt;&amp;nbsp;--
Some help on how to use Draco.net
&lt;/p&gt;
&lt;p&gt;
Tomorrow I am going to start implementing nAnt on a fairly complex project, so I will
post my findings as I go along!&lt;p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,7450e1ce-9e9b-4e68-aa3f-7ec0026ffdc5.aspx</comments>
      <category>All Things</category>
      <category>Design</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=86628950-3c69-4cb6-89cb-4dc4c69ba78a</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,86628950-3c69-4cb6-89cb-4dc4c69ba78a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,86628950-3c69-4cb6-89cb-4dc4c69ba78a.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=86628950-3c69-4cb6-89cb-4dc4c69ba78a</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you are looking to add logging to your application, whether for error logging or
debugging or tracing, one decent option is the open source log4net. I give it a “decent”
only in that there seems to be some bugs, and I am still not totally sold on the open
source concept for a variety of reasons. But given that, some good thought has been
placed into log4net, so that you have a good variety of options on where and in what
format your logging information will be output. Note that I looked at v2, since it's
the one which allows you to output to the database.
</p>
        <p>
I am a huge proponent of logging error information to a database because you can check
on errors real-time, as well as give yourself some powerful searching mechanisms.
The client I was working for was logging to a file using an older version of log4net,
so I decided to check out the log4net database functionality. Here's where you can
find all the information you may want to know, including how to download log4net: <a href="http://logging.apache.org/log4net/" target="_blank">http://logging.apache.org/log4net/</a></p>
        <p>
What I found was mixed. On the upside, you can (to a degree) use log4net with an existing
database error log to a certain degree (I say to a certain degree because without
going in an changing the source -- which is a plus for open source). A lot of thought
has been placed into the design with regards to flexibility and performance.
</p>
        <p>
On the downside, the code seemed buggy and the documentation is pretty bad. In
order to get v2 database logging to work, I had to resort to stepping into the code
to determine what the correct configuration settings would be. So as a bonus today,
I will save the reader any heartache and post my file, along with a description of
what the reader will need to change to use it!
</p>
        <p>
First, I created a database (called test) in SQL Server 2000, and created a table
called Log. Here's the fields, and I will leave the size out so you can make your
own decisions about that, but given the amount of detail in the Message parameter
of an error message, you might want to make some big varchars in there. 
</p>
        <p>
          <table height="100" cellspacing="0" cellpadding="0" width="300" border="1">
            <tbody>
              <tr>
                <td align="middle">
Column</td>
                <td align="middle">
Type</td>
              </tr>
              <tr>
                <td align="middle">
ErrorId</td>
                <td align="middle">
Identity (int)</td>
              </tr>
              <tr>
                <td align="middle">
Date</td>
                <td align="middle">
datetime</td>
              </tr>
              <tr>
                <td align="middle">
Thread</td>
                <td align="middle">
varchar</td>
              </tr>
              <tr>
                <td align="middle">
Level</td>
                <td align="middle">
int</td>
              </tr>
              <tr>
                <td align="middle">
Logger</td>
                <td align="middle">
varchar</td>
              </tr>
              <tr>
                <td align="middle">
Message</td>
                <td align="middle">
varchar</td>
              </tr>
              <tr>
                <td align="middle">
Exception</td>
                <td align="middle">
varchar</td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
Create the table, then configure the log4net configuration file. Here's what mine
looked like with the table structure above:
</p>
        <pre>&lt;?xml version="1.0" encoding="utf-8" ?&gt;</pre>
        <pre>&lt;log4net debug="false"&gt;</pre>
        <pre>&lt;appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"&gt;</pre>
        <pre>&lt;param name="BufferSize" value="1" /&gt;</pre>
        <pre>&lt;param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /&gt;</pre>
        <pre>&lt;param name="ConnectionString" value="server=localhost;uid=test;pwd=test;database=test" /&gt;</pre>
        <pre>&lt;param name="CommandText" value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /&gt;</pre>
        <pre>&lt;param name="Parameter"&gt;</pre>
        <pre>&lt;param name="ParameterName"&amp;#0;value="@log_date" /&gt;</pre>
        <pre>&lt;param name="DbType" value="DateTime" /&gt;</pre>
        <pre>&lt;param name="Layout" type="log4net.Layout.RawTimeStampLayout" /&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;param name="Parameter"&gt;</pre>
        <pre>&lt;param name="ParameterName"&amp;#0;value="@thread" /&gt;</pre>
        <pre>&lt;param name="DbType" value="String" /&gt;</pre>
        <pre>&lt;param name="Size" value="255" /&gt;</pre>
        <pre>&lt;param name="Layout" type="log4net.Layout.PatternLayout"&gt;</pre>
        <pre>&lt;param name="ConversionPattern" value="%t" /&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;param name="Parameter"&gt;</pre>
        <pre>&lt;param name="ParameterName"&amp;#0;value="@log_level" /&gt;</pre>
        <pre>&lt;param name="DbType" value="String" /&gt;</pre>
        <pre>&lt;param name="Size" value="50" /&gt;</pre>
        <pre>&lt;param name="Layout" type="log4net.Layout.PatternLayout"&gt;</pre>
        <pre>&lt;param name="ConversionPattern" value="%p" /&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;param name="Parameter"&gt;</pre>
        <pre>&lt;param name="ParameterName"&amp;#0;value="@logger" /&gt;</pre>
        <pre>&lt;param name="DbType" value="String" /&gt;</pre>
        <pre>&lt;param name="Size" value="255" /&gt;</pre>
        <pre>&lt;param name="Layout" type="log4net.Layout.PatternLayout"&gt;</pre>
        <pre>&lt;param name="ConversionPattern" value="%c" /&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;param name="Parameter"&gt;</pre>
        <pre>&lt;param name="ParameterName"&amp;#0;value="@message" /&gt;</pre>
        <pre>&lt;param name="DbType" value="String" /&gt;</pre>
        <pre>&lt;param name="Size" value="4000" /&gt;</pre>
        <pre>&lt;param name="Layout" type="log4net.Layout.PatternLayout"&gt;</pre>
        <pre>&lt;param name="ConversionPattern" value="%m" /&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;param name="Parameter"&gt;</pre>
        <pre>&lt;param name="ParameterName"&amp;#0;value="@exception" /&gt;</pre>
        <pre>&lt;param name="DbType" value="String" /&gt;</pre>
        <pre>&lt;param name="Size" value="2000" /&gt;</pre>
        <pre>&lt;param name="Layout" type="log4net.Layout.ExceptionLayout" /&gt;</pre>
        <pre>&lt;/param&gt;</pre>
        <pre>&lt;/appender&gt;</pre>
        <pre>&lt;root&gt;</pre>
        <pre>&lt;level value="DEBUG" /&gt;</pre>
        <pre>&lt;appender-ref ref="ADONetAppender" /</pre>
        <pre>&lt;/root&gt;</pre>
        <pre>&lt;/log4net&gt;</pre>
        <p>
          <a href="http://www.dotnettechnologies.com/dotnettechnologies/content/binary/config.log4net">config.log4net
(2.32 KB)</a>
        </p>
        <p>
Of course, first thing you'll want to do is change the ConnectionString value to your
situation. Now, some weird things I found. It doesn't seem to use the stored procedure
it says it does. I stepped through the source, and it looks like it just tries to
execute a SQL statement, which can be found in the CommandText parameter in the configuration
file. So really, you could likely strip out all the parameters listed above. I have
to confess it has been some months since I looked at log4net, so there might be a
reason I left them in, such as a different part of the code that uses them and without
it, it fails. So, take a few minutes and strip them out, and see what you get. But
the saving you get from my slogging through the code should more than justify looking
at this configuration file.
</p>
        <p>
My final review is this: If you're creating a production app, here's your two options:
roll your own solution or use log4net. If you plan on using log4net, download the
source, learn it, and be prepared to spend some time (possibly considerable) debugging
it. As a consultant, unless you need to ability to switch logging types (e.g. database
to file to application log) dynamically, I would recommend rolling your own logging
system, and write it such you can use it in multiple applications. Use log4net to
get some ideas on the best way to accomplish it. Why? I think it tries to be too much
to everyone, and it's not quite yet complete, and the documentation is lacking. In
the end, KISS wins (keep it simple, stupid).
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=86628950-3c69-4cb6-89cb-4dc4c69ba78a" />
      </body>
      <title>using log4net database storage -- review and database configuration correction</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,86628950-3c69-4cb6-89cb-4dc4c69ba78a.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/11/21/usingLog4netDatabaseStorageReviewAndDatabaseConfigurationCorrection.aspx</link>
      <pubDate>Sun, 21 Nov 2004 16:05:01 GMT</pubDate>
      <description>&lt;p&gt;
If you are looking to add logging to your application, whether for error logging or
debugging or tracing, one decent option is the open source log4net. I give it a &amp;#8220;decent&amp;#8221;
only in that there seems to be some bugs, and I am still not totally sold on the open
source concept for a variety of reasons. But given that, some good thought has been
placed into log4net, so that you have a good variety of options on where and in what
format your logging information will be output. Note that I looked at v2, since it's
the one which allows you to output to the database.
&lt;/p&gt;
&lt;p&gt;
I am a huge proponent of logging error information to a database because you can check
on errors real-time, as well as give yourself some powerful searching mechanisms.
The client I was working for was logging to a file using an older version of log4net,
so I decided to check out the log4net database functionality. Here's where you can
find all the information you may want to know, including how to download log4net: &lt;a href="http://logging.apache.org/log4net/" target=_blank&gt;http://logging.apache.org/log4net/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
What I found was mixed. On the upside, you can (to a degree) use log4net with an existing
database error log to a certain degree (I say to a certain degree because without
going in an changing the source -- which is a plus for open source). A lot of thought
has been placed into the design with regards to flexibility and performance.
&lt;/p&gt;
&lt;p&gt;
On the downside, the code&amp;nbsp;seemed buggy and the documentation is pretty bad. In
order to get v2 database logging to work, I had to resort to stepping into the code
to determine what the correct configuration settings would be. So as a bonus today,
I will save the reader any heartache and post my file, along with a description of
what the reader will need to change to use it!
&lt;/p&gt;
&lt;p&gt;
First, I created a database (called test) in SQL Server 2000, and created a table
called Log. Here's the fields, and I will leave the size out so you can make your
own decisions about that, but given the amount of detail in the Message parameter
of an error message, you might want to make some big varchars in there. 
&lt;/p&gt;
&lt;p&gt;
&lt;table height=100 cellspacing=0 cellpadding=0 width=300 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Column&lt;/td&gt;
&lt;td align=middle&gt;
Type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
ErrorId&lt;/td&gt;
&lt;td align=middle&gt;
Identity (int)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Date&lt;/td&gt;
&lt;td align=middle&gt;
datetime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Thread&lt;/td&gt;
&lt;td align=middle&gt;
varchar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Level&lt;/td&gt;
&lt;td align=middle&gt;
int&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Logger&lt;/td&gt;
&lt;td align=middle&gt;
varchar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Message&lt;/td&gt;
&lt;td align=middle&gt;
varchar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
Exception&lt;/td&gt;
&lt;td align=middle&gt;
varchar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
Create the table, then configure the log4net configuration file. Here's what mine
looked like with the table structure above:
&lt;/p&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;log4net debug="false"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="BufferSize" value="1" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ConnectionString" value="server=localhost;uid=test;pwd=test;database=test" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="CommandText" value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Parameter"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ParameterName"&amp;amp;#0;value="@log_date" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="DbType" value="DateTime" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Layout" type="log4net.Layout.RawTimeStampLayout" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Parameter"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ParameterName"&amp;amp;#0;value="@thread" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="DbType" value="String" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Size" value="255" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Layout" type="log4net.Layout.PatternLayout"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ConversionPattern" value="%t" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Parameter"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ParameterName"&amp;amp;#0;value="@log_level" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="DbType" value="String" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Size" value="50" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Layout" type="log4net.Layout.PatternLayout"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ConversionPattern" value="%p" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Parameter"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ParameterName"&amp;amp;#0;value="@logger" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="DbType" value="String" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Size" value="255" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Layout" type="log4net.Layout.PatternLayout"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ConversionPattern" value="%c" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Parameter"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ParameterName"&amp;amp;#0;value="@message" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="DbType" value="String" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Size" value="4000" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Layout" type="log4net.Layout.PatternLayout"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ConversionPattern" value="%m" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Parameter"&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="ParameterName"&amp;amp;#0;value="@exception" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="DbType" value="String" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Size" value="2000" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;param name="Layout" type="log4net.Layout.ExceptionLayout" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/appender&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;root&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;level value="DEBUG" /&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;appender-ref ref="ADONetAppender" /&lt;/pre&gt;&lt;pre&gt;&amp;lt;/root&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;/log4net&amp;gt;&lt;/pre&gt;
&lt;p&gt;
&lt;a href="http://www.dotnettechnologies.com/dotnettechnologies/content/binary/config.log4net"&gt;config.log4net
(2.32 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Of course, first thing you'll want to do is change the ConnectionString value to your
situation. Now, some weird things I found. It doesn't seem to use the stored procedure
it says it does. I stepped through the source, and it looks like it just tries to
execute a SQL statement, which can be found in the CommandText parameter in the configuration
file. So really, you could likely strip out all the parameters listed above. I have
to confess it has been some months since I looked at log4net, so there might be a
reason I left them in, such as a different part of the code that uses them and without
it, it fails. So, take a few minutes and strip them out, and see what you get. But
the saving you get from my slogging through the code should more than justify looking
at this configuration file.
&lt;/p&gt;
&lt;p&gt;
My final review is this: If you're creating a production app, here's your two options:
roll your own solution or use log4net. If you plan on using log4net, download the
source, learn it, and be prepared to spend some time (possibly considerable) debugging
it. As a consultant, unless you need to ability to switch logging types (e.g. database
to file to application log) dynamically, I would recommend rolling your own logging
system, and write it such you can use it in multiple applications. Use log4net to
get some ideas on the best way to accomplish it. Why? I think it tries to be too much
to everyone, and it's not quite yet complete, and the documentation is lacking. In
the end, KISS wins (keep it simple, stupid).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=86628950-3c69-4cb6-89cb-4dc4c69ba78a" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,86628950-3c69-4cb6-89cb-4dc4c69ba78a.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=925253af-3292-429e-9476-73db036cded4</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,925253af-3292-429e-9476-73db036cded4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,925253af-3292-429e-9476-73db036cded4.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=925253af-3292-429e-9476-73db036cded4</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When you install the .Net framework, you also get a ton of utilities with it. For
a complete listing, follow this link:
</p>
        <p>
          <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconNETFrameworkTools.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconNETFrameworkTools.asp</a>
        </p>
        <p>
One of these utilities is insanely useful if you want to find something fast, and
you don't feel like going through the overhead and all the excess listings of the
MSDN. This miracle utility is the Windows Class Viewer, also known as WinCV.exe.
</p>
        <p>
To run it, use the .Net DOS prompt, and type in WinCV. You'll be able to enter a serach
string (or partial string), and it will list the namespace it was found in, as well
as the definitions of the accessible methods.
</p>
        <p>
Now, the neat thing which isn't really mentioned is that you can include 3rd party
searches by placing an entry in the WinCV config file. For example, I tested
this by using the Infragistics libraries. Once I placed them in the config file, I
was able to search them like any other Microsoft assembly. One caveat though -- it
only works for assemblies registered in the GAC.  I won't tell you
exactly how to edit the config file, because if you can't look at it and figure it
out, you probably shouldn't be editing that file. 
</p>
        <p>
          <img height="865" src="http://www.dotnettechnologies.com/DotNetTechnologies/content/binary/wincv.PNG" width="705" border="0" />
        </p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=925253af-3292-429e-9476-73db036cded4" />
      </body>
      <title>WinCV -- Great .Net search tool</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,925253af-3292-429e-9476-73db036cded4.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/11/10/WinCVGreatNetSearchTool.aspx</link>
      <pubDate>Wed, 10 Nov 2004 04:47:53 GMT</pubDate>
      <description>&lt;p&gt;
When you install the .Net framework, you also get a ton of utilities with it. For
a complete listing, follow this link:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconNETFrameworkTools.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconNETFrameworkTools.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
One of these utilities is insanely useful if you want to find something fast, and
you don't feel like going through the overhead and all the excess listings of the
MSDN. This miracle utility is the Windows Class Viewer, also known as WinCV.exe.
&lt;/p&gt;
&lt;p&gt;
To run it, use the .Net DOS prompt, and type in WinCV. You'll be able to enter a serach
string (or partial string), and it will list the namespace it was found in, as well
as the definitions of the accessible methods.
&lt;/p&gt;
&lt;p&gt;
Now, the neat thing which isn't really mentioned is that you can include 3rd party
searches by placing an entry in the WinCV config file. For example,&amp;nbsp;I tested
this by using the Infragistics libraries. Once I placed them in the config file, I
was able to search them like any other Microsoft assembly. One caveat though -- it
only works for&amp;nbsp;assemblies registered in the GAC.&amp;nbsp;&amp;nbsp;I won't tell you
exactly how to edit the config file, because if you can't look at it and figure it
out, you probably shouldn't be editing that file. 
&lt;/p&gt;
&lt;p&gt;
&lt;img height=865 src="http://www.dotnettechnologies.com/DotNetTechnologies/content/binary/wincv.PNG" width=705 border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=925253af-3292-429e-9476-73db036cded4" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,925253af-3292-429e-9476-73db036cded4.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=b37e885c-ab36-44a7-a0f8-41aad6f2035d</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,b37e885c-ab36-44a7-a0f8-41aad6f2035d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,b37e885c-ab36-44a7-a0f8-41aad6f2035d.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=b37e885c-ab36-44a7-a0f8-41aad6f2035d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As a consultant, I need to be able to port a bag of tricks from one project to the
next. Accessing MS Repository isn't always the easiest, although I have used it in
the past for internal projects.
</p>
        <p>
I ran across <a href="http://dotnet.4all.cc/" target="_blank">CodeLib for .Net by
Fish</a>, and it's a great tool, with searching, the ability to append files, notes,
code (which it formats) as well as web pages (which I have yet to figure out how to
work with).
</p>
        <p>
Best of all, it's Freeware. So give it a try, you'll like it. Heck, once you get a
library put together, maybe we can swap! ;)
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=b37e885c-ab36-44a7-a0f8-41aad6f2035d" />
      </body>
      <title>Another Great tool</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,b37e885c-ab36-44a7-a0f8-41aad6f2035d.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/11/09/AnotherGreatTool.aspx</link>
      <pubDate>Tue, 09 Nov 2004 05:34:42 GMT</pubDate>
      <description>&lt;p&gt;
As a consultant, I need to be able to port a bag of tricks from one project to the
next. Accessing MS Repository isn't always the easiest, although I have used it in
the past for internal projects.
&lt;/p&gt;
&lt;p&gt;
I ran across &lt;a href="http://dotnet.4all.cc/" target=_blank&gt;CodeLib for .Net by Fish&lt;/a&gt;,
and it's a great tool, with searching, the ability to append files, notes, code (which
it formats) as well as web pages (which I have yet to figure out how to work with).
&lt;/p&gt;
&lt;p&gt;
Best of all, it's Freeware. So give it a try, you'll like it. Heck, once you get a
library put together, maybe we can swap! ;)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=b37e885c-ab36-44a7-a0f8-41aad6f2035d" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,b37e885c-ab36-44a7-a0f8-41aad6f2035d.aspx</comments>
      <category>All Things</category>
      <category>ASP.Net</category>
      <category>Design</category>
      <category>General</category>
      <category>Tips and Tricks</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.dotnettechnologies.com/Trackback.aspx?guid=c3cbb979-216b-4db0-b8ca-922656e6da85</trackback:ping>
      <pingback:server>http://www.dotnettechnologies.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.dotnettechnologies.com/PermaLink,guid,c3cbb979-216b-4db0-b8ca-922656e6da85.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.dotnettechnologies.com/CommentView,guid,c3cbb979-216b-4db0-b8ca-922656e6da85.aspx</wfw:comment>
      <wfw:commentRss>http://www.dotnettechnologies.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c3cbb979-216b-4db0-b8ca-922656e6da85</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ran across this nifty little tool, so I decided to create a whole new feed dedicated
to some neat tools I have come across in my travels. So here's the first one. 
</p>
        <p>
This tool is an addin which takes source code from the Visual Studio IDE, and formats
it in HTML so you can post it on the web, in a blog, etc. It's easy to access and
use, just a simple right-mouse click. And now the moment of truth, what it looks like:
</p>
        <p>
          <style type="text/css">
.csharpcode
{
 font-size: 10pt;
 color: black;
 font-family: Courier New , Courier, Monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0px; }
.rem { color: #008000; }
.kwrd { color: #0000ff; }
.str { color: #006080; }
.op { color: #0000c0; }
.preproc { color: #cc6633; }
.asp { background-color: #ffff00; }
.html { color: #800000; }
.attr { color: #ff0000; }
.alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0px;
}
.lnum { color: #606060; }
</style>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd"> public</span>
            <span class="kwrd">static</span>
            <span class="kwrd">string</span> ReadConfigurationValue(<span class="kwrd">string</span> p_strConfigString)</pre>
          <pre>        {</pre>
          <pre class="alt">
            <span class="kwrd">try</span>
          </pre>
          <pre>            {</pre>
          <pre class="alt">
            <span class="kwrd">string</span> strValue
= <span class="str">""</span>;</pre>
          <pre>                System.Configuration.AppSettingsReader l_configurationAppSettings = <span class="kwrd">new</span> System.Configuration.AppSettingsReader();</pre>
          <pre class="alt">                l_configurationAppSettings = <span class="kwrd">new</span> System.Configuration.AppSettingsReader();</pre>
          <pre>                strValue = (<span class="kwrd">string</span>)(l_configurationAppSettings.GetValue(p_strConfigString,Type.GetType(<span class="str">"System.String"</span>)));</pre>
          <pre class="alt"> </pre>
          <pre>
            <span class="kwrd">return</span> strValue;</pre>
          <pre class="alt">            }</pre>
          <pre>
            <span class="kwrd">catch</span> (Exception
ex)</pre>
          <pre class="alt">            {</pre>
          <pre>                ErrorHandler.LogError(ex);</pre>
          <pre class="alt">
            <span class="kwrd">return</span>
            <span class="str">""</span>;</pre>
          <pre>            }</pre>
          <pre class="alt">        }</pre>
        </div>
        <p>
So far, it looks great. I will need to get used to a couple of little quirks, but
all in all, I am impressed!
</p>
        <p>
Where to get this great tool?
</p>
        <p>
          <a href="http://www.jtleigh.com/people/colin/blog/archives/2004/10/copysourceashtm_1.html">http://www.jtleigh.com/people/colin/blog/archives/2004/10/copysourceashtm_1.html</a>
        </p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=c3cbb979-216b-4db0-b8ca-922656e6da85" />
      </body>
      <title>Neat tool for blogging / web posting</title>
      <guid isPermaLink="false">http://www.dotnettechnologies.com/PermaLink,guid,c3cbb979-216b-4db0-b8ca-922656e6da85.aspx</guid>
      <link>http://www.dotnettechnologies.com/2004/10/23/NeatToolForBloggingWebPosting.aspx</link>
      <pubDate>Sat, 23 Oct 2004 16:31:16 GMT</pubDate>
      <description>&lt;p&gt;
Ran across this nifty little tool, so I decided to create a whole new feed dedicated
to some neat tools I have come across in my travels. So here's the first one. 
&lt;/p&gt;
&lt;p&gt;
This tool is an addin which takes source code from the Visual Studio IDE, and formats
it in HTML so you can post it on the web, in a blog, etc. It's easy to access and
use, just a simple right-mouse click. And now the moment of truth, what it looks like:
&lt;/p&gt;
&lt;p&gt;
&lt;style type=text/css&gt;
.csharpcode
{
 font-size: 10pt;
 color: black;
 font-family: Courier New , Courier, Monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0px; }
.rem { color: #008000; }
.kwrd { color: #0000ff; }
.str { color: #006080; }
.op { color: #0000c0; }
.preproc { color: #cc6633; }
.asp { background-color: #ffff00; }
.html { color: #800000; }
.attr { color: #ff0000; }
.alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0px;
}
.lnum { color: #606060; }
&lt;/style&gt;
&lt;div class=csharpcode&gt;&lt;pre class=alt&gt;&lt;span class=kwrd&gt; public&lt;/span&gt; &lt;span class=kwrd&gt;static&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; ReadConfigurationValue(&lt;span class=kwrd&gt;string&lt;/span&gt; p_strConfigString)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class=alt&gt;            &lt;span class=kwrd&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class=alt&gt;                &lt;span class=kwrd&gt;string&lt;/span&gt; strValue
= &lt;span class=str&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;                System.Configuration.AppSettingsReader l_configurationAppSettings = &lt;span class=kwrd&gt;new&lt;/span&gt; System.Configuration.AppSettingsReader();&lt;/pre&gt;&lt;pre class=alt&gt;                l_configurationAppSettings = &lt;span class=kwrd&gt;new&lt;/span&gt; System.Configuration.AppSettingsReader();&lt;/pre&gt;&lt;pre&gt;                strValue = (&lt;span class=kwrd&gt;string&lt;/span&gt;)(l_configurationAppSettings.GetValue(p_strConfigString,Type.GetType(&lt;span class=str&gt;"System.String"&lt;/span&gt;)));&lt;/pre&gt;&lt;pre class=alt&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                &lt;span class=kwrd&gt;return&lt;/span&gt; strValue;&lt;/pre&gt;&lt;pre class=alt&gt;            }&lt;/pre&gt;&lt;pre&gt;            &lt;span class=kwrd&gt;catch&lt;/span&gt; (Exception
ex)&lt;/pre&gt;&lt;pre class=alt&gt;            {&lt;/pre&gt;&lt;pre&gt;                ErrorHandler.LogError(ex);&lt;/pre&gt;&lt;pre class=alt&gt;                &lt;span class=kwrd&gt;return&lt;/span&gt; &lt;span class=str&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class=alt&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
So far, it looks great. I will need to get used to a couple of little quirks, but
all in all, I am impressed!
&lt;/p&gt;
&lt;p&gt;
Where to get this great tool?
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jtleigh.com/people/colin/blog/archives/2004/10/copysourceashtm_1.html"&gt;http://www.jtleigh.com/people/colin/blog/archives/2004/10/copysourceashtm_1.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnettechnologies.com/aggbug.ashx?id=c3cbb979-216b-4db0-b8ca-922656e6da85" /&gt;</description>
      <comments>http://www.dotnettechnologies.com/CommentView,guid,c3cbb979-216b-4db0-b8ca-922656e6da85.aspx</comments>
      <category>Tools</category>
    </item>
  </channel>
</rss>