<feed 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="http://www.w3.org/2005/Atom" xml:lang="en-US">
    <title>Breadcrumbs of Jason Pettys</title>
    <link rel="self" type="application/atom+xml" href="http://jason.pettys.name/Atom.aspx" />
    <subtitle type="html">Marks of where I've been to help with where I'm going.</subtitle>
    <id>http://jason.pettys.name/Default.aspx</id>
    <author>
        <name>Jason Pettys</name>
        <uri>http://jason.pettys.name/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 2.1.0.5">Subtext</generator>
    <updated>2010-08-18T09:44:36Z</updated>
    <entry>
        <title>Digging For Requirements</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/08/18/digging-for-requirements.aspx" />
        <id>http://jason.pettys.name/archive/2010/08/18/digging-for-requirements.aspx</id>
        <published>2010-08-18T09:31:37Z</published>
        <updated>2010-08-18T09:44:36Z</updated>
        <content type="html">&lt;p&gt;I think my favorite programming book of all time is &lt;a href="http://pragprog.com/titles/tpp/the-pragmatic-programmer"&gt;The Pragmatic Programmer&lt;/a&gt;. It was the first introduction I had to being more intentional with my programming. There were certain types of programming patterns that &lt;em&gt;felt&lt;/em&gt; good, but I didn't know why. This book taught me &lt;em&gt;why&lt;/em&gt; those things were good, what name people had given to those good things, and showed me the next steps to take in those areas of good.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.buccaneerscholar.com/"&gt;James Marcus Bach&lt;/a&gt; had a series of tweets on Tuesday that reminded me of the Pragmatic Programmer's section, "The Requirements Pit." I still haven't fully grasped the depth of the wisdom of this quote from the book:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Requirements rarely lie on the surface. Normally, they're buried deep beneath layers of assumptions, misconceptions, and politics.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here's what James had to say on twitter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Here's the typical pattern for requirements definition on software products:&lt;/p&gt;    &lt;p&gt;"What do you want?"&lt;/p&gt;    &lt;p&gt;"We want this!"&lt;/p&gt;    &lt;p&gt;"You sure?"&lt;/p&gt;    &lt;p&gt;"Yes!"&lt;/p&gt;    &lt;p&gt;"This is what that looks like."&lt;/p&gt;    &lt;p&gt;"Oh, we didn't what THAT."&lt;/p&gt;    &lt;p&gt;"Okay, what do you want?"&lt;/p&gt;    &lt;p&gt;The purpose of testing is largely to force everyone to see the detailed implications of their vague daydreams.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This resonates with my experiences very well. There's especially a problem &lt;strong&gt;if you don't take the time up front to say, "This is what that looks like."&lt;/strong&gt; Because the next opportunity for the end user to find out that what they asked for isn't what they wanted is after a bunch of time and money has been spent.&lt;/p&gt;&lt;img src="http://jason.pettys.name/aggbug/29.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/29.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/29.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/29.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Hyperthreading Explained</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/08/11/hyperthreading-explained.aspx" />
        <id>http://jason.pettys.name/archive/2010/08/11/hyperthreading-explained.aspx</id>
        <published>2010-08-11T13:15:01Z</published>
        <updated>2010-08-11T13:15:01Z</updated>
        <content type="html">&lt;p&gt;Near the end of .NET Rocks &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=582"&gt;show #582&lt;/a&gt; Richard Campbell explains hyperthreading in such a way that I feel like a hardware expert.&lt;/p&gt;  &lt;p&gt;The guest, Scott Hanselman, has a 6 core hyperthreaded processor, which shows up at 12 cores in Windows Task Manager. How many cores does this CPU actually have?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Richard: &lt;/strong&gt;You have six, with six brain-damaged cousins. And sometimes you can hand the cousin, "Here, eat this, while I'm doing the real work." And everything is fine. But once in a while he chokes. And then the brother actually has to pat him on the back to get him cleaned up.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Carl: &lt;/strong&gt;He's gotta do the Heimlich on his cousin.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Richard: &lt;/strong&gt;That's exactly what happens. When the pipeline drains, it is the Heimlich. You are barfing 64-bits of instructions out of the core.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now I know, and will never forget (no matter how hard I try), how hyperthreading works.&lt;/p&gt;&lt;img src="http://jason.pettys.name/aggbug/28.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/28.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/28.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/28.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Keep Local Copies Up-to-Date Automatically</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/07/21/keep-local-copies-up-to-date-automatically.aspx" />
        <id>http://jason.pettys.name/archive/2010/07/21/keep-local-copies-up-to-date-automatically.aspx</id>
        <published>2010-07-21T10:49:41Z</published>
        <updated>2010-07-21T10:50:14Z</updated>
        <content type="html">&lt;p&gt;A coworker sent me this today; this idea had never crossed my mind:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Not sure if you’ve already got something setup to automatically update your svn checkouts, but thought I’d mention this.  I just created a .bat file:&lt;/p&gt; &lt;/blockquote&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:a5469ceb-68b0-4bed-93d4-058e71e031dd" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #000000;"&gt;TortoiseProc&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;exe &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;command&lt;/span&gt;&lt;span style="color: #800000;"&gt;:update&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;path&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;C:\Code\Path\to\Proj1&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;closeonend:&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;

TortoiseProc&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;exe &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;command&lt;/span&gt;&lt;span style="color: #800000;"&gt;:update&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;path&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;C:\Code\Path\to\Proj2&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;closeonend:&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;

etc&lt;/span&gt;&lt;span style="color: #000000;"&gt;...&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Then setup a windows task to run the file everyday at 4:30am. No more out of date code! &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, that's cool.  Two benefits I see to this:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;If you happen to go for several days without checking in (not a good practice, but it happens) your chance of getting a nasty merge conflict is reduced.&lt;/li&gt;

  &lt;li&gt;If you switch over to a project that you haven't worked on for a while you don't have to wait for a long, drawn-out update to execute before you can jump right in.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://jason.pettys.name/aggbug/27.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/27.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/27.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/27.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Running Multiple AJAX Requests in Parallel</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/06/21/running-multiple-ajax-requests-in-parallel.aspx" />
        <id>http://jason.pettys.name/archive/2010/06/21/running-multiple-ajax-requests-in-parallel.aspx</id>
        <published>2010-06-21T15:34:11Z</published>
        <updated>2010-06-21T15:35:42Z</updated>
        <content type="html">&lt;p&gt;In some JavaScript I needed several independent items from the web server, and so I abstracted a solution for this into a jQuery plugin. After building the plugin I searched Stack Overflow and found a relevant question with some non-generalized answers, so I put my sample code up there.&lt;/p&gt;  &lt;p&gt;I'm posting a link to it here so I can find it when I need it in the future :)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://stackoverflow.com/questions/1060539/parallel-asynchronous-ajax-requests-using-jquery/3087699#3087699"&gt;http://stackoverflow.com/questions/1060539/parallel-asynchronous-ajax-requests-using-jquery/3087699#3087699&lt;/a&gt;&lt;/p&gt;&lt;img src="http://jason.pettys.name/aggbug/26.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/26.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/26.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/26.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Microsoft Small Basic Fun</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/06/04/microsoft-small-basic-fun.aspx" />
        <id>http://jason.pettys.name/archive/2010/06/04/microsoft-small-basic-fun.aspx</id>
        <published>2010-06-04T00:44:11Z</published>
        <updated>2010-06-04T00:44:11Z</updated>
        <content type="html">&lt;p&gt;After listening to &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=562"&gt;.NET Rocks Episode 562&lt;/a&gt;, "Teaching Kids Programming," I downloaded Small Basic again to play around a bit. I uploaded a little triangle fractal program that's available here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://smallbasic.com/program/?ZTR830"&gt;http://smallbasic.com/program/?ZTR830&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here are a couple notables:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The web-based view scales down the graphics, doesn't appear to support PenWidth, and doesn't draw as smoothly as the installed IDE does, so it's a little less nifty through the above URL.&lt;/li&gt;    &lt;li&gt;As far as I can tell, subroutines in Small Basic don't support parameters, which makes recursion a little more difficult, which makes fractals a little more interesting since they're naturally recursive. It was fun to work around this with a Stack.&lt;/li&gt;    &lt;li&gt;I'm so used to reducing the scope of variables as far as possible in my daily work, and avoiding the use of global variables. Small Basic feels funny because everything is global. (I definitely think that makes good sense considering what Small Basic is intended for.)&lt;/li&gt;    &lt;li&gt;It was a good trigonometry review. I had an inkling that ArcTan was going to give me some trouble, but I couldn't remember exactly what.  After a bit of trial and error I have it down that if we're on the left side of the unit circle we need to go in the opposite direction. Adjusting the angle by 180 degrees doesn't seem to cut it.&lt;/li&gt;    &lt;li&gt;I played around with some recipes at &lt;a href="http://teachingkidsprogramming.org/"&gt;http://teachingkidsprogramming.org/&lt;/a&gt;, and can see how that technique might help kids learn things pretty well. Maybe I'll try that with my oldest two this summer.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://jason.pettys.name/aggbug/25.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/25.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/25.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/25.aspx</trackback:ping>
    </entry>
    <entry>
        <title>log4net Template for CodeRush</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/05/28/log4net-template-for-coderush.aspx" />
        <id>http://jason.pettys.name/archive/2010/05/28/log4net-template-for-coderush.aspx</id>
        <published>2010-05-28T14:03:12Z</published>
        <updated>2010-05-28T14:03:12Z</updated>
        <content type="html">&lt;p&gt;If you use log4net for logging in the traditional way you end up having a lot of classes with the following line:&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e9d22ad9-1a80-48c4-a243-dfbf04d303eb" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;Private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Shared&lt;/span&gt;&lt;span style="color: #000000;"&gt; mLog &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;As&lt;/span&gt;&lt;span style="color: #000000;"&gt; log4net.ILog &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;


&lt;p&gt;This is the VB version of the recommendation from &lt;a href="http://logging.apache.org/log4net/release/faq.html"&gt;the log4net FAQ&lt;/a&gt; (see the section, "How do I get the fully-qualified name of a class in a static block?").&lt;/p&gt;

&lt;p&gt;In order to tell CodeRush, "whenever I type &lt;font size="2" face="Consolas"&gt;l4n&lt;/font&gt; and then a space, fill in the above text," I created a new CodeRush template for l4n with the above text.  I used the following condition:&lt;/p&gt;

&lt;p&gt;(InType and OnEmptyLine) but not (InComment or InMethod or InProperty or InString)&lt;/p&gt;&lt;img src="http://jason.pettys.name/aggbug/24.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/24.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/24.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/24.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Drop a SQL column default constraint that has been implicitly named</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/05/25/drop-a-sql-column-default-constraint-that-has-been-implicitly.aspx" />
        <id>http://jason.pettys.name/archive/2010/05/25/drop-a-sql-column-default-constraint-that-has-been-implicitly.aspx</id>
        <published>2010-05-25T19:00:00Z</published>
        <updated>2010-05-25T19:01:25Z</updated>
        <content type="html">&lt;p&gt;CodeMinder: to remind myself of stuff that I usually have to look up each time I do it.&lt;/p&gt;  &lt;p&gt;Notice the unnamed default in the following line:&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:DFDE9937-D816-47f4-A306-7B60D5CE5AC0:2ce9cf58-028a-4e0b-85ec-814f9dfcebc4" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql; gutter: false; first-line: 1; tab-size: 4;  toolbar: true; "&gt;alter table test add col1 int not null default 1&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;


&lt;p&gt;This creates a default constraint in the database that is named something like “DF__test__col1__182C9B23,” which is pretty ugly.  The last several characters are some sort of random-ish sequence, and will be different on everybody’s database.  The difficulty comes later if some needs to modify this table:
  &lt;br /&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:DFDE9937-D816-47f4-A306-7B60D5CE5AC0:8ea1d021-1ae3-4cd0-a979-be31cc7b83d8" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql; gutter: false; first-line: 1; tab-size: 4;  toolbar: true; "&gt;alter table test drop column col1&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;You’ll get the error:&lt;/p&gt;

&lt;p&gt;&lt;font color="#ff0000"&gt;The object 'DF__test__col1__182C9B23' is dependent on column 'col1'.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#ff0000"&gt;ALTER TABLE DROP COLUMN col1 failed because one or more objects access this column.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;So to drop the column you have to first drop the constraint:&lt;/p&gt;

&lt;p&gt;alter table test drop constraint DF__test__col1__182C9B23&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Checking this script into source control is probably a big mistake.&lt;/b&gt;  That script will only work on my database – everyone else will get this error, because their constraint is named something else.  They’ll get the following error:&lt;/p&gt;

&lt;p&gt;&lt;font color="#ff0000"&gt;'DF__test__col1__182C9B23' is not a constraint.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#ff0000"&gt;Could not drop constraint. See previous errors.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;So rewind to the beginning.  Instead of this:&lt;/p&gt;

&lt;p&gt;
  &lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:DFDE9937-D816-47f4-A306-7B60D5CE5AC0:3bc2bbee-e265-4e4f-9843-1c2295bc919b" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql; gutter: false; first-line: 1; tab-size: 4;  toolbar: true; "&gt;alter table test add col1 int not null default 1&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;


&lt;p&gt;Do this:&lt;/p&gt;

&lt;p&gt;
  &lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:DFDE9937-D816-47f4-A306-7B60D5CE5AC0:e7678501-6dd5-41b6-96c1-0be9fe8582be" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql; gutter: false; first-line: 1; tab-size: 4;  toolbar: true; "&gt;alter table test add col1 int not null constraint DF_test_col1 default 1&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;


&lt;p&gt;Now everyone’s default constraint is named the same, and it’s trivial to write a script that will drop the constraint on anyone’s database.  I think it’s a fairly standard naming convention for default constraints to be DF_[table name]_[column name].&lt;/p&gt;

&lt;p&gt;By the way, here is the definition of a stored procedure that can be used to drop unnamed default constraints.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:aa5abaeb-9ff8-4d98-b06c-dd54428129ea" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;create&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;proc&lt;/span&gt;&lt;span style="color: #000000;"&gt; DropColumnDefault (
      &lt;/span&gt;&lt;span style="color: #008000;"&gt;@table_name&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;),
      &lt;/span&gt;&lt;span style="color: #008000;"&gt;@col_name&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;declare&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@Command&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1000&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@Command&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;ALTER TABLE &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@table_name&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; drop constraint &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; d.name
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt; sys.tables t   
&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt; sys.default_constraints d &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt; d.parent_object_id &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; t.&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;object_id&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt; sys.columns c &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;object_id&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; t.&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;object_id&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.column_id &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; d.parent_column_id
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt; t.name &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@table_name&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.name &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@col_name&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@Command&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;not&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;execute&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Command&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;img src="http://jason.pettys.name/aggbug/23.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/23.aspx</wfw:comment>
        <slash:comments>1200</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/23.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/23.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Update a SQL table&amp;rsquo;s XML value to remove nodes</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/05/25/update-a-sql-tablersquos-xml-value-to-remove-nodes.aspx" />
        <id>http://jason.pettys.name/archive/2010/05/25/update-a-sql-tablersquos-xml-value-to-remove-nodes.aspx</id>
        <published>2010-05-25T18:53:01Z</published>
        <updated>2010-05-25T18:53:01Z</updated>
        <content type="html">&lt;p&gt;CodeMinder: to remind myself of stuff that I usually have to look up each time I do it.&lt;/p&gt;  &lt;p&gt;To delete all PersonAlternativeName nodes from XmlColumn of the People table:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:65e1d02e-8330-4c08-9718-15c7af3d9e9c" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;with&lt;/span&gt;&lt;span style="color: #000000;"&gt; xmlnamespaces(
    &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;http://mydomain.com/person/extension/0.1&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; px)
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;update&lt;/span&gt;&lt;span style="color: #000000;"&gt; People
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; XmlColumn.modify(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;delete //px:PersonAlternateName&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;img src="http://jason.pettys.name/aggbug/22.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/22.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/22.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/22.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Select multiple XML nodes out of each row in a SQL table</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/05/25/select-multiple-xml-nodes-out-of-each-row-in-a.aspx" />
        <id>http://jason.pettys.name/archive/2010/05/25/select-multiple-xml-nodes-out-of-each-row-in-a.aspx</id>
        <published>2010-05-25T18:50:04Z</published>
        <updated>2010-05-25T18:50:04Z</updated>
        <content type="html">&lt;p&gt;CodeMinder: to remind myself of stuff that I usually have to look up each time I do it.&lt;/p&gt;  &lt;p&gt;If a People table has a column named XML, and the XML column may specify multiple PersonAlternativeName entities, then to get all PersonAlternativeNames in a single result set use &lt;strong&gt;CROSS APPLY &lt;/strong&gt;or &lt;strong&gt;OUTER APPLY&lt;/strong&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:91a7c514-6804-4405-9d5d-291a509bc7c4" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:White;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;with&lt;/span&gt;&lt;span style="color: #000000;"&gt; xmlnamespaces(
    &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;http://mydomain.com/person/extension/0.1&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; px,
    &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;http://niem.gov/niem/niem-core/2.0&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; n)
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt; p.PersonId,
    n.value(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;(n:PersonGivenName)[1]&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;varchar(100)&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; FN,
    n.value(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;(n:PersonMiddleName)[1]&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;varchar(100)&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; MN,
    n.value(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;(n:PersonSurName)[1]&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;varchar(100)&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; LN
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt; People p
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;cross&lt;/span&gt;&lt;span style="color: #000000;"&gt; apply XmlColumn.nodes(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;//px:PersonAlternateName&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; ppl(n)&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;img src="http://jason.pettys.name/aggbug/21.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/21.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/21.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/21.aspx</trackback:ping>
    </entry>
    <entry>
        <title>The Bruce Lee Approach to Becoming Agile</title>
        <link rel="alternate" type="text/html" href="http://jason.pettys.name/archive/2010/04/16/the-bruce-lee-approach-to-becoming-agile.aspx" />
        <id>http://jason.pettys.name/archive/2010/04/16/the-bruce-lee-approach-to-becoming-agile.aspx</id>
        <published>2010-04-16T03:27:20Z</published>
        <updated>2010-04-16T05:21:24Z</updated>
        <content type="html">&lt;blockquote&gt;   &lt;p&gt;"Learn the principle, abide by the principle, and dissolve the principle."&lt;/p&gt;    &lt;p&gt;&lt;em&gt;- Bruce Lee&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;    &lt;p&gt;I first saw this line in one of Ron Jeffries's sig lines years ago. It struck me then and has stuck with me over the years.&lt;/p&gt;  &lt;p&gt;I was reminded of it a few months ago when I read &lt;a href="http://www.agilecollab.com/interview-with-ken-schwaber"&gt;this observation&lt;/a&gt; about Scrum:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The intention of Scrum is to make [an organization's inadequacy or dysfunction] transparent so the organization can fix them. Unfortunately, many organizations change Scrum to accommodate the inadequacies or dysfunctions instead of solving them.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The latest experience that reminded me of this was &lt;a href="http://www.udidahan.com/"&gt;Udi Dahan's&lt;/a&gt; week long eye-opening Advanced Distributed System Design class. It's been like Yoda's teaching Luke Skywalker, "You must unlearn what you have learned."&lt;/p&gt;  &lt;p&gt;Bruce Lee's thought has particular applications for software developers. I'll explain my interpretation of what he was saying and then apply it to software development.&lt;/p&gt;  &lt;h1&gt;Learn the principle&lt;/h1&gt;  &lt;p&gt;Step one is pretty simple: learn the subject you are exploring. If you want to do &lt;em&gt;x&lt;/em&gt;, where &lt;em&gt;x&lt;/em&gt; could be &lt;a href="http://www.amazon.com/Becoming-Agile-imperfect-world/dp/1933988258"&gt;agile&lt;/a&gt;, &lt;a href="http://xprogramming.com/articles/scrum-alliance-drop-certified/"&gt;scrum&lt;/a&gt;, &lt;a href="http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530"&gt;TDD&lt;/a&gt;, &lt;a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202"&gt;DDD&lt;/a&gt;, &lt;a href="http://www.udidahan.com/2010/02/26/cqrs-video-online/"&gt;CQRS&lt;/a&gt;, etc., there are tons of material available. When you feel like you've found a trustworthy source for the &lt;em&gt;x&lt;/em&gt; that you currently want to do it'll provide instructions: break work into user stories, write a test for something before you build it, make sure a class has only one reason to change, etc. You’ll need to discover for your &lt;em&gt;x&lt;/em&gt; what are the &lt;em&gt;things to do&lt;/em&gt;.&lt;/p&gt;  &lt;h4&gt;&lt;font color="#ff0000"&gt;Warnings:&lt;/font&gt;&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;If you learn to do a &lt;a href="http://judoinfo.com/images/animations/blue/ashiguruma.htm"&gt;Judo Ashi Guruma throw&lt;/a&gt;, that’s great and may even be useful in some situations, but if you start telling people that you "do Judo" just because of that, the people who &lt;em&gt;really do&lt;/em&gt; do Judo are going to be annoyed with you and Ashi Guruma you to the floor. Keep this in mind when you casually leaf through &lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215"&gt;the Blue Book&lt;/a&gt; and learn about entities, value objects, and repositories. Those chapters are an exciting read and the tools are useful. But be careful claiming to be "doing DDD." The first letter of DDD is for &lt;em&gt;domain&lt;/em&gt;, not &lt;em&gt;design&lt;/em&gt;; there may be a few more important things about DDD that you haven't picked up yet, and the people who have picked those up may get annoyed if you claim you're doing DDD just because you have an entity and an IRepository&amp;lt;T&amp;gt;.&lt;/li&gt;    &lt;li&gt;No matter how much you try to jump into Tae Kwon Do by learning the &lt;a href="http://www.ehow.com/video_2279802_tae-spinning-hook-kick-combination.html"&gt;Reverse Spinning Hook Kick&lt;/a&gt;, you may not get it. That’s because it's hard, and it builds on a foundation of other things that must come first. "But I don't have time for that; I just want a nifty move so I can start &lt;a href="http://beagleweb.com/fun-taekwanleap.html"&gt;trashing bozos&lt;/a&gt;." Our tendency is to blame Tae Kwon Do. "I tried it; it didn’t work for me." So goes the parable of the organizations who tried XP but it didn't work for them. Did you work in iterations? Was your customer available? Did you try to fix it when it broke? The answer is usually "No, there wasn't time for all that; we have deadlines after all." But &lt;em&gt;all&lt;/em&gt; of XP working together makes a cohesive solution, and each part builds and supports the whole. Be careful about picking and choosing what you'll try. If everyone around you is raving about peaches and cream, and you try it but leave out the cream, you'll be missing out, and may give up on the peaches without ever knowing what you're missing.&lt;/li&gt; &lt;/ol&gt;  &lt;h1&gt;Abide by the principle&lt;/h1&gt;  &lt;p&gt;Now that you've learned a few things to do, you need to do the things you've learned. Yes, you really do need to write a unit test for that piece of business logic you're about to hack into that class. I understand that it's a small change and this class isn't quite set up for unit testing and it may take you 25 minutes instead of 5 minutes to make the change. Daniel-san, abide by the principle: wax on, wax off.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0087538/"&gt;The Karate Kid&lt;/a&gt; thought he was just doing a bunch of work for Mr. Miyagi, painting the fence, painting the house, sanding the floor, and waxing the cars. &lt;a href="http://www.youtube.com/watch?v=8aYl7N0JPWs"&gt;It was really frustrating for him&lt;/a&gt;: why do I have to do all this stupid work? I just want to do karate! But in order to learn to do karate, &lt;em&gt;he had to do all the "stupid stuff" first&lt;/em&gt;. In fact, the stupid stuff &lt;em&gt;was the path &lt;/em&gt;to doing karate. Daniel was very surprised after all the hard, tedious work was done to find he could block punches and kicks like an expert because of all the "stupid stuff."&lt;/p&gt;  &lt;p&gt;Pursuit of mastery requires learning through &lt;em&gt;experience&lt;/em&gt;, not just academic study. There are things that are too subtle to see without sharpening our perception through practice. So when the frustration mounts and you feel like quitting or compromising, take heart that you may be at the threshold of a meaningful step in your journey.&lt;/p&gt;  &lt;h4 /&gt;  &lt;h4&gt;&lt;font color="#ff0000"&gt;Warnings:&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;Now in The Karate Kid, Part III, Daniel gets a new sensei, Terry Silver, who is actually Daniel's enemy. Silver teaches Daniel bad techniques that are painful in the short-term and harmful for his long-term technique.&lt;/p&gt;  &lt;p&gt;Silver meant harm; I know of no software development teacher who means harm. Nonetheless there are materials out there that mean well, but if you follow their teaching you'll experience pain in the short-term and have to deprogram yourself later in order to progress. It pains me to see the casualties of bad teaching engrained by years of use, and the technological fallout. Beware the false teachers; in your pursuit of good material consider what Jesus Christ says about false prophets: "By your fruits you will know them." His words have more wisdom than appear on the surface: fruit is not evident right away; it takes time to be manifested, and until it fully manifests itself it takes a trained eye to identify whether the fruit will be good or bad.&lt;/p&gt;  &lt;h1&gt;Dissolve the principle&lt;/h1&gt;  &lt;p&gt;Once you've learned some good techniques, obeyed them long enough to learn some of their more finer points, and given them time to bear some fruit to see whether you like the way it tastes, another important consideration remains: dissolve the principle.&lt;/p&gt;  &lt;p&gt;Bruce Lee expounds with the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;...In short, enter a mold without being caged in it. Obey the principle without being bound by it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Lee invented &lt;a href="http://en.wikipedia.org/wiki/Jeet_Kune_Do"&gt;Jeet Kune Do&lt;/a&gt;, a system of fighting that "works on the use of different 'tools' for different situations." Opponents using a single martial art may become predictable, forced to operate within his art's implicit limits. The principles of any one way give strength and have their utility, but come with limits, and for you to exceed those limits you must know the principle well enough to know when it is out of place, when to dissolve it.&lt;/p&gt;  &lt;p&gt;Domain models are great and all the rage. Everyone should probably always use one, right? Martin Fowler in &lt;a href="http://martinfowler.com/books.html#eaa"&gt;his great book&lt;/a&gt; gives four paragraphs describing when to use it (p119), one of the main criteria being "if you have complicated and everchanging business rules." How many of us have &lt;font size="2"&gt;Customer.FirstName&lt;/font&gt; in our domain model? Is that really a complicated and everchanging business rule?&lt;/p&gt;  &lt;p&gt;Everyone should always use a layered architecture, right? Does that necessarily mean we draw huge horizontal lines through every application? Are there other ways to obtain separation of concerns? Are there parts of my application where I'm actually &lt;em&gt;limited&lt;/em&gt; by NHibernate?&lt;/p&gt;  &lt;p&gt;As the old adage goes, and is oft repeated by software developers, if all you have is a hammer, everything looks like a nail. You &lt;em&gt;can&lt;/em&gt; pound a screw into a board with a hammer, but it sure takes a lot of effort.&lt;/p&gt;  &lt;h4&gt;&lt;font color="#ff0000"&gt;Warnings:&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;So does this last section sooth your conscience from those design decisions you didn’t feel good about, where you didn’t abide by the principle? Do not too quickly "tip the vessel of knowledge," and earn yourself an architectural &lt;a href="http://beagleweb.com/fun-taekwanleap.html"&gt;boot to the head&lt;/a&gt;. The tendency of most of us is to quit the guiding principles too soon through impatience. Don't &lt;em&gt;abandon&lt;/em&gt; the principle and think you're dissolving the principle. When you &lt;em&gt;dissolve&lt;/em&gt; something in water, it's still there, it just no longer exists as a distinct thing; it becomes an integral part of something more than itself.&lt;/p&gt;&lt;img src="http://jason.pettys.name/aggbug/20.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://jason.pettys.name/comments/20.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://jason.pettys.name/comments/commentRss/20.aspx</wfw:commentRss>
        <trackback:ping>http://jason.pettys.name/services/trackbacks/20.aspx</trackback:ping>
    </entry>
</feed>