<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Cutting Code</title>
        <link>http://geekswithblogs.net/codesailor/category/2810.aspx</link>
        <description>This category provides a place to evaluate the coding issues such as .NET vs. Java/PHP/Perl/Python/Ruby/et. al., Microsoft vs. All-You-Anti-Microsoft-People, and coding styles and theories.</description>
        <language>en-US</language>
        <copyright>Brian Lanham</copyright>
        <managingEditor>codesailor@yahoo.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>.NET Development is Free</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/07/16/123821.aspx</link>
            <description>&lt;p&gt;Although I was more-or-less lambasted for my post about free vs. open source software, I want to follow-up with a comment or two about .NET development.  There is a common misconception that developing for Windows using .NET is an expensive endeavor.  For the record, .NET development is free.  &lt;/p&gt;
&lt;p&gt;&lt;u&gt;.NET Framework SDK&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;The .NET framework itself (a.k.a. runtime) is completely free.  In fact, if you don't have it, go and download it right now.  Check out "Get the Framework" on the right.&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/default.aspx"&gt;http://msdn.microsoft.com/en-us/netframework/default.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The Software Development Kit (SDK) is also free.  The SDK contains the framework (of course) as well as all the utilities you need to build .NET applications.  This includes compilers, registration tools, and other utilities that are useful and necessary for .NET development.&lt;/p&gt;
&lt;p&gt;All you really need is Notepad and a command-line.  However, there are a number of freely available Notepad-esque utilies such as Notepad++ and VI ( :D ).&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Development Environments&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;If you are partial to an integrated development environment (IDE) Visual Studio is free too.  Yeah, I know, hard to believe but it's true.  Visual Studio is free.  Don't believe me?  Check it out.  &lt;font face="Arial"&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/default.aspx"&gt;http://msdn.microsoft.com/en-us/netframework/default.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Need a relational database management system?  That's free too.  SQL Server Express Edition as well as SQL Management Studio Express are free.  They are both available from the link above.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Systems &amp;amp; Productivity Tools&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Okay, you Linux guys win here.  Windows is not free...usually.  There are times when you can get it for free.  I do, however, want to point out that if you buy a stock machine it usually comes with Windows.  You don't need IIS because Visual Studio can use the File System for Web application development.  However, in general, you &lt;em&gt;need to buy the Operating System&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That being said, Microsoft is known to give away operating systems and productivity tools (such as Windows Server 2008 and Microsoft Office 2007).  All you have to do is attend a launch event.  I'm not joking.  I use a fully functional completely legal licensed copy of Microsoft Office 2007 Professional that I received for attending a conference.&lt;/p&gt;
&lt;p&gt;The bottom line is that .NET development is free (but not open source).  "But Brian, what about the restrictions associated with the Express Editions?"  Well, you don't need Visual Studio at all to do .NET development.  You can use the command-line.  Some would argue that this is the best way to learn anyway.  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123821"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123821" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/123821.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/07/16/123821.aspx</guid>
            <pubDate>Wed, 16 Jul 2008 15:17:36 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/123821.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/07/16/123821.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/123821.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/123821.aspx</trackback:ping>
        </item>
        <item>
            <title>RVNUG Unit Testing Festival</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/07/10/123729.aspx</link>
            <description>&lt;p&gt;The &lt;a href="http://www.rvnug.org/"&gt;Roanoke Valley .NET User Group&lt;/a&gt; held a monthly meeting tonight.  The topic was Unit Testing with Visual Studio 2008.  It was arguably one of the better meetings we have held.  &lt;/p&gt;
&lt;p&gt;Even though I have been using Unit Testing for years (starting with JUnit forever ago).  Although I feel that I perform unit testing well enough, I am amazed and how much I can learn in just a few hours by collaborating and interacting with others.  It seems that over the past 7 years or so I have performed a significant amount of development alone or with a team of people new to unit testing.  As such, I have had little opportunity to collaborate with others.  Tonight's meeting was extremely beneficial for me by increasing my knowledge and skills.&lt;/p&gt;
&lt;p&gt;I also continue to be impressed by the members of the NUG.  I want to specifically recognize several members.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;u&gt;Bret Shawn&lt;/u&gt; - Bret did a great job leading and coordinating the arrangements for the meeting.  He also led a unit testing group with incredible success (the best on the night).&lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Will Ashley&lt;/u&gt; - Will was the impetus behind the idea and he led tonight's education.  Will covered the varying philosophies of unit testing and provided an overview of the unit testing features in Visual Studio 2008.&lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Brian Johnston&lt;/u&gt; - Brian created the buggy code.  He didn't just add simple defects, he added different types of defects to demonstrate the various types of bugs encountered in the software.&lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Robin Edwards&lt;/u&gt; - Robin continues to impressively lead the user group.  Traditionally the summer months result in relatively low turnout but tonight's turnout was very high.  So high, in fact, that she had to get snacks!&lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Playahz on my Team&lt;/u&gt; - I don't recall your names but there were some funny and smart people on my team and they were very helpful in not only debugging the software but also in helping me see new ways to think about problem identification as well as how to write appropriate tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are not involved in your local UG, consider getting involved.  I know that time is valuable so be selective and attend those meetings that provide the most value to your work.  &lt;/p&gt;
&lt;p&gt;Go to the RVNUG site and &lt;a href="http://www.rvnug.org/default.aspx"&gt;get the code from tonight's unit testing festival&lt;/a&gt;.  Look at the unit tests that Brian Johnston wrote.  It is an excellent educational opportunity.  &lt;/p&gt;
&lt;p&gt;Happy Coding!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123729"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123729" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/123729.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/07/10/123729.aspx</guid>
            <pubDate>Fri, 11 Jul 2008 03:03:08 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/123729.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/07/10/123729.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/123729.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/123729.aspx</trackback:ping>
        </item>
        <item>
            <title>XSLT Anyone?</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/02/26/119975.aspx</link>
            <description>&lt;p&gt;Does anyone reading this have an XSLT script that determines the number of elements in an XML file (obviously) with a certain attribute equal to a certain value?  For example, suppose you have an XML file similar to the following:&lt;/p&gt;
&lt;p&gt;&amp;lt;root&amp;gt;&lt;/p&gt;
&lt;p&gt;     &amp;lt;someElem Status="closed"/&amp;gt;&lt;/p&gt;
&lt;p&gt;     &amp;lt;someElem Status="open"/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/root&amp;gt;&lt;/p&gt;
&lt;p&gt;I want to count the number of "closed" items, etc.  I have some references and books but it's becoming a big hassle.  They all seem to want to specify the query using Elements instead of Attributes.  Thanks in advance!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119975"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119975" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/119975.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/02/26/119975.aspx</guid>
            <pubDate>Tue, 26 Feb 2008 12:33:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/119975.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/02/26/119975.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/119975.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/119975.aspx</trackback:ping>
        </item>
        <item>
            <title>I Fought the Artificial Key...</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/01/21/118766.aspx</link>
            <description>&lt;p&gt;and the Artificial Key won.&lt;/p&gt;
&lt;p&gt;I don't know what my problem is with artificial keys.  I am a HUGE advocate of natural keys.  My problem is, I tend to use "natural" keys where one really doesn't exist.  For some reason, I am fixated on &lt;u&gt;avoiding duplication&lt;/u&gt;.  However, I tend forget what is an appropriate duplication and what isn't.  Take the following example:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Entity-Relationship Diagrams" src="http://geekswithblogs.net/images/geekswithblogs_net/codesailor/3571/o_ArtificialKeyERD.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;What do I care if someone duplicates a URL?  I mean, really...does it matter if the same link is listed twice?  It does NOT.  Sheesh!  I am just killing myself.&lt;/p&gt;
&lt;p&gt;So, in the end, had I conducted a little database design I would have never incurred the problem.  So the next time you see me blogging about databound controls or database design issues...please remind me to use artificial keys where appropriate.  Thanks!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118766"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118766" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/118766.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/01/21/118766.aspx</guid>
            <pubDate>Tue, 22 Jan 2008 01:34:53 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/118766.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/01/21/118766.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/118766.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/118766.aspx</trackback:ping>
        </item>
        <item>
            <title>Databound Controls &amp; Composite Keys</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/01/15/118583.aspx</link>
            <description>&lt;p&gt;I blogged previously on databound controls.  I am back to hating them.  Okay, so I guess in a few situations they're still okay.  But now I am dealing with a table that has a composite key.  One of the keys is artificial, and one is natural (and I prefer natural keys...but that's a REALLY old blog entry).  &lt;/p&gt;
&lt;p&gt;The natural key can be changed but the other key (which is both artificial and foreign) can-obviously-not be changed.  Using the databound controls for this situation doesn't seem to work.  In fact, quite the opposite.  It's almost like I can hear the controls speaking to me.  &lt;/p&gt;
&lt;p&gt;&lt;em&gt;"You should change that to an artificial key...then I'll work just fine."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118583"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118583" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/118583.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/01/15/118583.aspx</guid>
            <pubDate>Tue, 15 Jan 2008 20:24:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/118583.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/01/15/118583.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/118583.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/118583.aspx</trackback:ping>
        </item>
        <item>
            <title>But...My Brain is Already Full!</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/01/14/118534.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;As a consultant I am often asked to provide training and mentoring.  Let's face it:  Technology changes extremely often and typical IT departments have plenty of work.   As a result, staying on top of technology is tough.  So organizations often (and smartly) hire consultants to help weed out the most appropriate technologies and provide focused mentoring and training.&lt;/font&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;em&gt;Note:  Everytime you read "world class" insert your tongue firmly into your cheek.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Occasionally, however, an organizational representative (CIO, IT Directory, Development Manager) makes the request to "turn my organization into world class developers."  That's a tall order…huge in fact.  In fact, I argue that when that request comes along, it is made out of ignorance.  If the requestor really understood all that goes into that, they wouldn't ask.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;I guess there probably was a time when being a world class developer was a reasonable endeavor (although I don't believe it whole heartedly).  Today, however, it seems that there is simply too much to know and it changes regularly.  I started thinking about all the things we need to know as developers and I created the following diagram:&lt;/font&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="Knowledge Domain of so-called &amp;quot;World Class&amp;quot; Developers" src="http://geekswithblogs.net/images/geekswithblogs_net/codesailor/3571/o_WorldClassDeveloperKnowledgeDomain.jpg" /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Each of these aspects is part of each project (arguably security should be incorporated in others…but it's so symmetrical this way don't you think?).  However, they do NOT need to be used at the nth level of detail.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I will have future entries relating to why I think we, the developers, need to know all of this stuff.  I will also probably spend a little time on some of the aspects to give you more info about why I mean.&lt;/p&gt;
&lt;p&gt;In the meantime, what do you think?  What did I miss?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118534"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118534" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/118534.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/01/14/118534.aspx</guid>
            <pubDate>Mon, 14 Jan 2008 19:20:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/118534.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/01/14/118534.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/118534.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/118534.aspx</trackback:ping>
        </item>
        <item>
            <title>To DataBind or Not To Databind...</title>
            <link>http://geekswithblogs.net/codesailor/archive/2008/01/06/118299.aspx</link>
            <description>&lt;p&gt;I have generally avoided the databound controls provided by the .NET framework.  I am referring specifically to controls such as the GridView.  Oh don't get me wrong, I use the GridView like I use oxygen.  I just don't use an associated DataSource control.  Utlimately, therefore, I manually bind controls to data.  There are three main reasons I have opted to avoid databound&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;u&gt;Distributed Applications&lt;/u&gt; - Most of the business applications I design incorporate a business layer so it is rare that I bind directly to a relational database. 
    &lt;ol&gt;
        &lt;li&gt;&lt;em&gt;&lt;u&gt;Response&lt;/u&gt; - .NET 2.0 responded to this with the ObjectDataSource.  The ObjectDataSource is wickedly powerful.&lt;/em&gt;&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Data Normalization&lt;/u&gt; - Most of the business applications I design utilize data sources in at least 3rd normal form and sometimes even in 4th normal form.  I must confess that the practicality of 5th normal form eludes me.
    &lt;ol&gt;
        &lt;li&gt;&lt;em&gt;&lt;u&gt;Response&lt;/u&gt; - I have to admit that I am still unsure as to the best way to handle relational data in databound controls.   Shame on me, I suppose, but this is the point I am trying to make.&lt;/em&gt;&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Debugging&lt;/u&gt; - My #1 absolute biggest hatred of declarative programming is the (in)ability to debug. 
    &lt;ol&gt;
        &lt;li&gt;&lt;em&gt;&lt;u&gt;Response&lt;/u&gt; - .NET 2.0 offers the ability to trap events and process exceptions only.  Basically, this allows you to trap and event, check for exceptions and, if no exception occurs, let the DataSource control do its thing.&lt;/em&gt;&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Recently I had occasion to build a small application under extremely tight time constrants.  As such, I decided to use databound controls.  I found that it isn't that bad.  I did run into normalization and debugging issues (as described above) but overall I had a generally positive experience.&lt;/p&gt;
&lt;p&gt;I went on to write a small file sharing application over the holidays.  I decided once again to rely on databound controls.  I did find certain situations where programming the databound controls was simply too complicated and time consuming for me.  In those situations, I opted for some good ol' fashioned coding.  &lt;/p&gt;
&lt;p&gt;My recent experiences are making me rethink the databound controls.  I am finding that in some situations it is very useful and appropriate.  I am also finding that in other situations I shouldn't feel forced to stick with them.&lt;/p&gt;
&lt;p&gt;There are some problems with this, of course.  One is that the application will be a mix of databound and non-databound controls.  So when someone comes along to maintain it they might be wondering "Why did you...here...and there you....what the?"  That's why should always always always rely on best practices.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;u&gt;Proper Design&lt;/u&gt; - A good design (based, of course, on proper requirements) will allow you to implement each feature in the most appropriate way.&lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Coding Standards &amp;amp; Guidelines&lt;/u&gt; - These will dictate appropriate situations for both implementation techniques and can help alleviate some of the confusion caused by a mixed application.&lt;/li&gt;
    &lt;li&gt;&lt;u&gt;Enterprise Architecture&lt;/u&gt; - Part of the enterprise architecture is to help define the &lt;em&gt;de facto&lt;/em&gt; implementation techniques for applications.  That's not to say you are forced to use that technique.  However, it is to say "when in doubt, do this."  This helps promote consistency among implementations.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, as usual, I am going to ask you.  Do you use databound controls or not?  What is your opinion?  What are your general experiences?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118299"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118299" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/118299.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2008/01/06/118299.aspx</guid>
            <pubDate>Sun, 06 Jan 2008 20:17:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/118299.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2008/01/06/118299.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/118299.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/118299.aspx</trackback:ping>
        </item>
        <item>
            <title>What is your Object's IQ?</title>
            <link>http://geekswithblogs.net/codesailor/archive/2007/12/09/117520.aspx</link>
            <description>&lt;p&gt;For years I have been &lt;em&gt;against&lt;/em&gt; so-called "smart" objects.  (In fact, I thought I blogged on it at once time but can't seem to find it...guess I'm getting old.)  I have taught and mentored that objects shouldn't know how to perform certain operations.  Recently, however, I've started having a change of heart.  That is NOT to say that I am changing my position.  It is to say, however, that I am starting to see the other side of the coin.  However, I need your feedback.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Object-Oriented Programming - In Theory&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;According to object-oriented lore, object-orientation is intended to allow programmers to model the "real world" (whatever that is) in their software systems.  There is an old joke to this effect:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;How many C++ programmers does it take to screw in a light bulb?  If you answered with a number greater than zero, you're still thinking functionallity (imperatively).  C++ programmers have the socket object call the "replace" method on itself.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Of course this is ridiculous...light bulb sockets don't change the bulbs themselves.  But wait, an object is, by definition, "an entity which has state and behaviors that act on that state."  And that's where the fun begins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;My Perspective - Smart Objects BAD!&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A hundred years or so ago, Visual Basic 6 utilized the Collection class.  Many VB6 programmers utilize(d) the "smart" object approach.  For example, the collections would sort themselves.  So here has been my argument for years.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Assumptions: &lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;You have a collection of magazines.  You can even imagine a stack of magazines sitting on a table.&lt;/li&gt;
    &lt;li&gt;Object-Oriented Programming models the real world.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Coding:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You write a collection class for magazines (MagazineCollection).  The class has a "Sort" method.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Problem:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the real world, magazine collections do NOT sort themselves.  Go ahead and try it.  Stack some magazines on your desk and ask the stack of magazines to sort itself.  Let me know when it happens.  (P.S.  If it happens, I'll print this post and eat the paper.)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Solution:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, in the "real" world, what sorts magazines?  You do.  And what are you when you are doing this?  A magazine sorter.  So I would implement a class called "MagazineSorter".  &lt;/p&gt;
&lt;p&gt;The same is true (in my not so humble opinion) for database operations as well.  Why should objects know about how they are persisted?  Of course with configuration files and such it is much easier to change the persistence mechanism and location.  However, it seems to me that having an object that understands the database schema violates about a bazillion abstraction best practices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;My Perspective Change&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So my good friend Brian Johnston is a HUGE CSLA fan.  (I think he has "CSLA ROX" on his boxers.)  Rocky and I have (obviously) disagreed for years on the whole "smart" object thing.  Rocky has promoted smart objects since at least VB5 and the CSLA framework is no different. &lt;/p&gt;
&lt;p&gt;Well, I'm trying to be open-minded about it so I gave Brian (and his cohort, Stephen Richards) props and listened as they extolled the benefits of smart-er objects and panned the downsides of "manager" classes.  (In one slide, Brian even writes "Kill Your Managers" but secretly I think this has a more Freudian meaning for him.)  &lt;/p&gt;
&lt;p&gt;So I was trying to think about groups of things in the "real" world that sort themselves.  True that magazines still don't (are you &lt;em&gt;still &lt;/em&gt;trying?).  However, collections of humans do.  In fact, humans do a lot on their own like respirate, defecate, procreate, and eat (tip-o--da-hat to Fox Mulder).  &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Disclaimer:  I am NOT under any circumstances trying to imply that humans are smart.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Help Please&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So now I'm having a change of heart.  It seems that &lt;em&gt;some&lt;/em&gt; things in nature are smart about themselves while others are not.  So here are my questions:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Where do you draw the line between smart objects and not-so-smart objects?  Are all of your objects "smart"? &lt;/li&gt;
    &lt;li&gt;How smart are your objects?  Do they know how to persist themselves in the database?&lt;/li&gt;
    &lt;li&gt;How do you accomplish abstraction with smart objects?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks in advance for any advice you have on this.  I may not agree with you but I appreciate your perspective.  Help an old dogg learn an old trick.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.S. Rocky, if you're reading, I gots nuttin' but luv fo' ya.  CSLA framework is amazing. &lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117520"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117520" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/117520.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2007/12/09/117520.aspx</guid>
            <pubDate>Sun, 09 Dec 2007 15:29:45 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/117520.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2007/12/09/117520.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/117520.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/117520.aspx</trackback:ping>
        </item>
        <item>
            <title>N Sync - Microsoft Style</title>
            <link>http://geekswithblogs.net/codesailor/archive/2007/11/30/117269.aspx</link>
            <description>&lt;p&gt;Any y'all playahz lookt at this?  Whaddya think?&lt;/p&gt;
&lt;p align="center"&gt;&lt;font size="4"&gt;Introduction to the Microsoft Sync Framework &lt;/font&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;font face="Arial"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/sync/bb821992.aspx"&gt;&lt;font size="4"&gt;http://msdn2.microsoft.com/en-us/sync/bb821992.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="4"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117269"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117269" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/117269.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2007/11/30/117269.aspx</guid>
            <pubDate>Fri, 30 Nov 2007 20:16:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/117269.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2007/11/30/117269.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/117269.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/117269.aspx</trackback:ping>
        </item>
        <item>
            <title>Who Do You Love?</title>
            <link>http://geekswithblogs.net/codesailor/archive/2007/11/28/117179.aspx</link>
            <description>&lt;p&gt;Chris Williams, MVP (VB.NET) has a new site running.  It promises to be a great collaboration community for VB.NET developers.  Check it out!&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://www.ilovevb.net"&gt;&lt;font size="5"&gt;http://www.ilovevb.net&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117179"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117179" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/codesailor/aggbug/117179.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brian Lanham</dc:creator>
            <guid>http://geekswithblogs.net/codesailor/archive/2007/11/28/117179.aspx</guid>
            <pubDate>Wed, 28 Nov 2007 14:15:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/codesailor/comments/117179.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/codesailor/archive/2007/11/28/117179.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/codesailor/comments/commentRss/117179.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/codesailor/services/trackbacks/117179.aspx</trackback:ping>
        </item>
    </channel>
</rss>