<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feeds.feedburner.com/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.2" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>MikeDuncan.com C# Dev tips, patterns and tools you can actually use.</title>
	<link>http://www.mikeduncan.com</link>
	<description>C# code, SEO stuff, tools, and patterns for aggressive slacking from Mike Duncan.</description>
	<pubDate>Mon, 05 May 2008 15:46:44 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/mikeduncan" type="application/rss+xml" /><item>
		<title>Yes, you too can be a metrosexual developer! An interview with Justice Gray.</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/283939929/</link>
		<comments>http://www.mikeduncan.com/metrosexual-developer/#comments</comments>
		<pubDate>Mon, 05 May 2008 13:27:54 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[interview]]></category>

		<category><![CDATA[fun]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/metrosexual-developer/</guid>
		<description><![CDATA[ YOU, yes YOU! can be a programmer and still be ridiculously good looking!  
You&#8217;re a developer and like what you do, but never quite felt like you fit the mold. Sure you are slightly bemused by the semi-nerdy reference here or there, but you could never quite buy into the full depth and [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.mikeduncan.com/wp-content/uploads/2008/03/2007-7-21-beckham.jpg" alt="You can be dashing, classy, high-voiced, soccer-playing metrosexual coder like me." class="frame left" /> <strong>YOU, yes YOU! can be a programmer and still be ridiculously good looking!</strong>  </p>
<p>You&#8217;re a developer and like what you do, but never quite felt like you fit the mold. Sure you are <a href="http://www.youtube.com/watch?v=9wy4wq_lTbc">slightly bemused</a> by the semi-nerdy reference here or there, but you could never quite buy into the full depth and breadth of geekitude that seems to come attendant with the job. To stay current and bad-ass, you need to stay on top of the new technology and best practices and engage the tech community on the web, but is it really worth suffering through the 133t IM-speak, WOW fan fiction, or shitty homemade anime? Subtract out those social liabilities and you are left for the most part with the boring, monotone (written monotone even!) code posters with their foo / bar / baz examples of how to overoptimize some academic jerk-sort algorithm applicable only in string theory super-manifold physics, a field which yields decidedly *no play*.</p>
<p>I mean, come on, you&#8217;ve actually <strong>*got*</strong> game with the ladies, you can pick your own clothes, work a room, hotwire a car, defuse a bomb. Are you alone afloat in a lifeboat of despair in a sea of jack-assery? Who can you identify with on the web in these trying times?  The answer is the man who singlehandedly changed the internet as we know it, <a href="http://graysmatter.codivation.com/" title="Justice Gray.">Justice Gray</a>.&nbsp; </p>
<p><span style="color: green; font-weight: bold;">*** For the uninitiated, Justice Gray is an Edmonton-based leading .Net developer, .Net convention speaker, influential opinion maker, paradigm-challenger and lady killer. From the outset he has championed the suave, charismatic, virile and pithy route as a fast track the top of the industry, and has largely pulled it off. <i>Read on to learn his tricks of the trade&#8230;</i></span></p>
<p><a href="http://graysmatter.codivation.com/" title="Justice Gray's Blog"> <img align="right" src="http://www.mikeduncan.com/wp-content/uploads/2008/05/justice_gray_perm.jpg" alt="Justice Gray is a leading .Net developer, .Net convention speaker, opinion maker, and lady killer." class="frame"/> </a> <strong> A mentor to shake you out of your career doldrums has arrived &#8230; </p>
<p></strong>  Justice Gray is North America&#8217;s favorite metrosexual software consultant and he&#8217;ll be the first one to tell you so. He brazenly boasts to be &quot;a seething cauldron of rampaging masculinity. A fighter! A brother! Your secret lover!&quot; &#8230;. And he&#8217;s right.  </p>
<p>Alright Mike, what did this guy do that&#8217;s friggin&#8217; awesome? He some sort of guru? Did he orchestrate some awesome HACK? Are you being remunerated for writing this? </p>
<p>The answer is this: <i>He staked his claim on the development world as someone who was over the top and didn&#8217;t give a crap</i>.</p>
<p>Somewhere along the line , Justice Gray decided he was going to write posts people might actually want to read, and others that they probably weren&#8217;t cool enough to read. He&#8217;s written informative tech posts that don&#8217;t suck such as his seminal &quot;<a href="http://graysmatter.codivation.com/MyGrandmotherAndTheGlobalAssemblyCacheAndStarWars.aspx" target="_blank" title="My grandmother and the Global Assembly Cache">My Grandmother And..&quot; series</a>. He&#8217;s talked about tricks and techniques for staying ahead of the game, <a href="http://graysmatter.codivation.com/CategoryView,category,BookReviews.aspx" target="_blank" title="Justice Gray's book reviews">book reviews</a>, and started <a href="http://graysmatter.codivation.com/HowIAmBecomingABetterDeveloperPart1OfInfinity.aspx" target="_blank" title="How I am becoming a better developer, part 1 of infinity">viral memes </a>which wormed their way through the ether. From witty bombast blogger, Justice has become a full blown Dude, now making the conference-presenting circuit and dancing dangerously close to that tier of blogger / consultant / opinion makers that have been getting snapped up by Redmond in rapid succession these days (<a href="http://www.hanselman.com/blog/" target="_blank" title="Scott Hanselman's ComputerZen.com" id="x1_s">Hanselman</a>, <a href="http://blog.wekeroad.com/" target="_blank" title="Rob Conery - Bare-Knuckle Coding" id="x7:s">Conrey</a>, <a href="http://haacked.com/" target="_blank" title="You've been HAACKED" id="tdrz">Haak</a>, etc).  <strong></p>
<p>What can YOU learn from Justice Gray?</strong>  <br />
I&#8217;ve never met the guy but wanted to give a shout out on my blog, <a href="http://graysmatter.codivation.com/" target="_blank" title="Justice Gray's blog of funk." id="d733">urging people to check out his style</a>. What better way than with an interview? So get off your mouse-ass, go poke around his site, then come back here and read:</p>
<h3><b>12 Questions with Justice Gray:</b></h3>
<p><b><img border="0" alt="" src="http://www.mikeduncan.com/wp-content/uploads/2008/05/whalers.jpg" /> vs. <img border="0" alt="" src="http://www.mikeduncan.com/wp-content/uploads/2008/05/oliers.jpg" /></b></p>
<p><b><i>MD</i></b> :&quot;Justice Gray&quot;? What kind of name is that? What are you some sort of superhero or something?</p>
<p><b>JG</b> :  Yes, a *sexual* superhero.&nbsp; As for &quot;what kind of name is that&quot;, considering how many hostesses worldwide have told me it&#8217;s an awesome one, I&#8217;m inclined to agree.&nbsp; Maybe you should try going through life with a name like Justice and see what it does for your seduction success ratio!<i></p>
<p>
<b>MD</b></i>: &lt;sychophant&gt;Your metrosexual bombastic blog persona certainly stands out in the otherwise tedious world of tech blogs.&lt;/sychophant&gt; Was there ever a concern that having an over-the-top blog would hurt you professionally? Do you &quot;forget to mention&quot; it to clients, potential mistresses, parole officers, etc?</p>
<p><b>JG</b> :  You mention the &quot;metrosexual bombastic blog *persona*&quot; as if that&#8217;s *assumed* - that&#8217;s actually who I really am (just ask my wife).&nbsp; It&#8217;s the Justice Gray that initially meets with clients and is a little &quot;dialed down&quot; that is the assumed persona, and once my relationship with a client is a little more entrenched it gets a lot more bombastic - I&#8217;d say it gets more metrosexual as well but that&#8217;s not something I hide at any point.&nbsp; =)&nbsp;&nbsp; I like things better that way, and judging from my ability to avoid being out on the streets begging for change - okay, fair enough, to avoid doing that as my <b>sole </b>source of income - my clients do as well.</p>
<p>
My experience has been that companies also prefer someone who is authentic even if they seem a little &quot;out there&quot;.&nbsp; Now, there&#8217;s important caveats here - there&#8217;s still the normal decorum and tact one has to use in everyday conversation.&nbsp; Being authentic means *nothing* if you&#8217;re authentically an @$$hole; no one wants to work with you.&nbsp; I can think of a couple blogs I have read where I knew the person was being open and speaking their mind, but doing so in such a way that I was concerned that said person would be a cancer in a group of developers with me.&nbsp; That&#8217;s not the kind of reaction I&#8217;m looking to engender.&nbsp; I think there are enough developer slap fights out there where guys who never got laid in their lives figure their big call to manhood is to have a flame war in someone&#8217;s comments thread.&nbsp; </p>
<p>Clients get lied to often, either by:<br />
a) passive-aggressive, non-confrontational nerds who try to avoid confrontation and thus also avoid telling them what needs to be said<br />
b) good talkers with absolutely no technical credibility whatsoever </p>
<p>Having someone on their side who doesn&#8217;t treat them like idiots because they haven&#8217;t spent their lives tinkering in machine language is a pretty big bonus, an even bigger bonus if that someone isn&#8217;t trying to exploit their lack of technical ability to make a buck charging $700 to add a value to a drop-down field.</p>
<p>Anyway, this blog has made me so many great friendships and opened up so many different opportunities I can&#8217;t possibly say being myself on the internet was a bad idea.&nbsp; Then again, you&#8217;re talking to a man whose ex-girlfriend used to throw dictionaries at his head so my ability to determine &quot;bad idea&quot; may be suspect.&nbsp; <img src='http://www.mikeduncan.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>(As an aside, the only time being &quot;myself&quot; got me in trouble was several years ago, when I was at large company X and co-wrote a technical design document that was later rejected for being &quot;unprofessional&quot; by one of the project managers at the time, despite him not being attached to the development project.&nbsp; Fast-forward 5-7 years later, I&#8217;m being interviewed by you about why I&#8217;m so awesome, while he is now <b>unemployed.</b>&nbsp; Guess that&#8217;s a lesson for everyone).</p>
<p>From a blogging standpoint, it&#8217;s also far more important to be authentic than it is to be <b>dull as dishwater.</b>&nbsp; Seriously, 90% of the technical &quot;writers&quot; out there have forgotten the <b>writing</b> component of technical writing.&nbsp;&nbsp;&nbsp; Most blogs out there just aren&#8217;t memorable; they say the same things everyone else is saying and they use the same canned generic templates as everybody else.&nbsp; What makes you *different*?&nbsp; <b>If you have something to say, you should say it in a way that people will remember, otherwise you&#8217;re just filling up space.</b></p>
<p><b><i>MD</i></b>: You seem to be transitioning from blogger / consultant into the ranks of the presenters / tech evangelist. Is this a path you considered all along and see part of career development or did this just &quot;happen&quot; (like say, pregnancy)? Do you think this is a standard progression that other metrosexual consultants should consider? </p>
<p><b>JG</b> : Yike.&nbsp; </p>
<p>This is an interesting question, and I will admit I had a bad case of the twitches when I first read the part about transitioning into the presenter/technical evangelist role.&nbsp; This is mostly because I think<b> the current presentation circuit (at least .NET-wise) is at least 70% fraudulent</b>.</p>
<p>A lot of the so-called &quot;presenters&quot; out there are out there talking about technology concepts they barely understand, putting together half-baked, ill-prepared &quot;demos&quot; that are barely anything more than surface-level explorations into technology and even worse, showing off poor practices when they&#8217;re up there.&nbsp; When you are a presenter, I feel that you are <b>an example </b>to people and some will hold you up as a way to do things better.&nbsp; <b>Many .NET presenters out there present simply because they like getting a paid vacation somewhere and a hotel - not because they&#8217;re actually helping the community in any way. &nbsp; </b>I had a meeting with INETA themselves where it was indicated that many speakers simply *refuse* to speak at venues other than big-name cities because &quot;the speaker wants a holiday, and going to [x] doesn&#8217;t qualify as a holiday for them&quot;. &nbsp; Look, I won&#8217;t lie - it does look good on your resume if you are doing presentations, because many people assume that because you are presenting on something at a local or even national level, you are a de facto &quot;expert&quot; in that technology.&nbsp; But there are a lot of charlatans out there who, through the code examples they demonstrate and their lack of *knowledge* of any sort of best practice are anything but experts.&nbsp; People fall all over themselves to latch on to a &quot;hot new tech piece&quot; so they can have a speaking gig for the next 6 months.&nbsp; And trust me, though I am an attention whore, I have *nothing* on a lot of the people in the circuit who think it&#8217;s impressive to offer up a self-written 3-10 page bio telling people how the world thinks they&#8217;re a pioneer.&nbsp; </p>
<p>Half of the presentations I see are so out of the realm of &quot;real-world&quot; that the only use they might possibly have is an ego-stroke to the presenter.&nbsp; That&#8217;s unfortunate because it doesn&#8217;t help our industry very much.&nbsp; Ideally, people would not be presenting out of desire to market themselves but more out of a desire to <b>help the community and by extension, our industry, become better.</b>&nbsp; </p>
<p>I&#8217;m sure to some people that the rush of &quot;celebrity&quot; that comes from speaking or whatnot is intoxicating, but as I have said to friends before, it&#8217;s really akin to being the best singer at your high school.&nbsp; And let&#8217;s say you eventually get that Microsoft MVP, or you get that exclusive speaking engagement at the hot conference - is *that* really going to make you happy?&nbsp; Or are you going to find yourself wanting?&nbsp; And in the end, does it make your industry better or just your resume?&nbsp; </p>
<p>*ahem*&#8230;all right, off of my soapbox&#8230;.</p>
<p>I&#8217;m not sure if I considered tech evangelism/presenting as part of my career development; it certainly wasn&#8217;t something I thought was inevitable.&nbsp; Part of this has to do with my perception that in many cases the route of tech evangelism is where programmers go to die.&nbsp; ;)&nbsp; This is entirely dependent on the person, however; there are some tech evangelists out there who are probably about 5-10 years away from having worked on a &quot;real-world&quot; solution, but there are also evangelists who still attempt to build applications or be involved in open source.&nbsp; </p>
<p>I think it is definitely an arena to consider, provided you&#8217;re doing it for the right reasons.&nbsp; Another path to consider, however, is that of an agile coach or almost development coach; I&#8217;ve performed this role at a couple of startups and I&#8217;ve found that being able to pair up with someone on an extended basis is a much easier way to have someone else learn and get inflamed with passion for the industry.&nbsp; Presentations are a fantastic way to maybe get someone thinking about bigger issues but how much is a newbie to *mocking* really going to take away in an hour, for example?</p>
<p><b><i>MD</i></b>: How do YOU stay on top of the unending deluge of new tech stuff constantly coming down the pike to retain your mack-daddy status? Google reader, particular sites, podcasts, tips from MS insiders? </p>
<p><b>JG</b> :   I feel the need to clarify that my mack-daddy status is simply part of my genetics and isn&#8217;t influenced by my knowledge of technical matters.&nbsp; I don&#8217;t want your readers obsessively poring over &quot;The Art of Computer Programming&quot; simply thinking that&#8217;s *all* that is needed to become a<br />
MASTER<br />
SEDUCER~!<br />
such as myself.&nbsp; That being said, I don&#8217;t stay on top of it all - I pick and choose based on what I&#8217;m personally passionate about and what is technically relevant.&nbsp; I subscribe to a large number of blogs (I&#8217;m not as big on podcasts, though any podcasts that mention me personally are always worth my time) and even my Twitter feed is pretty helpful when it comes to keeping up on discussions.&nbsp; </p>
<p>On a normal morning, what I will do is go through Google Reader and quickly skim all of the articles.&nbsp; Anything that either:<br />
a) is written by a friend of mine<br />
b) something that looks potentially interesting</p>
<p>I file under a list called &quot;Saturday Stuff&quot; in Backpack.&nbsp; Then (surprise) I take some time out of my day on Saturday to read those articles and whatever books are in my pile to read.&nbsp; </p>
<p>It helps that I&#8217;m a fairly fast reader and can get through a technical book in a fairly short amount of time&#8230;<br />
&nbsp;</p>
<p><b>MD</b>: That does bring up the question of whatever happened to your infamous &quot;Make Yourself A Better Dev in 6 Months&quot; post&#8230;</p>
<p><b> JG:</b> &#8230;sigh. It&#8217;s honestly not abandoned!&nbsp; =)&nbsp; I know it looks like it given that only 3 or 4 of those books have actually been reviewed by me.&nbsp; I know Hanselman and Franklin were wondering &quot;How does he have time to code?&quot; but that was the easy part, actually, given how I had scheduled my time.&nbsp; However, about 2 months after making that post I also took on some coaching work and some new opportunities came up career-wise that I absolutely couldn&#8217;t pass up.&nbsp; Then of course I was called up to present at DevTeach and that took a large portion of my time as well - it was clear something had to give, and my wife and I did not want it to be our marriage, so&#8230;;)&nbsp; </p>
<p>I will be resuming my reviews soon as well as going on with some isolated posts discussing pieces of the books themselves.&nbsp; Hopefully within the next month or so.&nbsp; I have to announce the winner of the &quot;What Justice Gray Means to Me&quot; contest first (yes, a winner has been decided) and then we&#8217;ll get back to business.</p>
<p><center><span style="color: red; font-weight: bold;"><b>Interview INTERMISSION&#8230;</b></span></center></p>
<p>
<img border="0" alt="" src="http://www.mikeduncan.com/wp-content/uploads/2008/05/dog_watch.GIF" class="frame center" /></p>
<p><center><span style="color: red; font-weight: bold;">&#8230; And we&#8217;re back &#8230;</p>
<p></span></center></p>
<p><i><b>MD</b></i>: From your posts its clear that you have some non-technical books that have shaped your productive, time / career management side, ex Beyond Code. Hit me with a list of non-purely-tech books you think tech workers should read to not be such insufferable dweebs. </p>
<p><b>JG</b> : The *most* influential book for me career-wise was definitely &quot;<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FHabits-Highly-Effective-People%2Fdp%2F0743269519%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208137363%26sr%3D8-1&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">The 7 Habits of Effective People</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" />&quot;.&nbsp; No other book changed my thinking (and eventually my life) as much as that one did.&nbsp; Other books that have shaped me include:</p>
<ul>
<li>Arnold Schwarzengger&#8217;s &quot;<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FNew-Encyclopedia-Modern-Bodybuilding-Updated%2Fdp%2F0684857219%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208137476%26sr%3D1-1&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Encyclopedia of BodyBuilding</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" />&quot; (seriously, yes, this influenced me career-wise)</li>
<li>Napoleon Hill&#8217;s &quot;<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FThink-Grow-Rich-Original-Restored%2Fdp%2F1593302002%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208137552%26sr%3D1-1&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Think and Grow Rich</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" />&quot;.&nbsp;</li>
<li>Robin Sharma&#8217;s &quot;<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FMonk-Who-Sold-His-Ferrari%2Fdp%2F0062515675%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208137600%26sr%3D1-1&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">The Monk Who Sold His Ferrari</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" />&quot; (you have to push past some of horrid dialogue <img src='http://www.mikeduncan.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</li>
<li>The Bible, by various</li>
<li><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FMindfulness-Plain-English-Updated-Expanded%2Fdp%2F0861713214%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208137655%26sr%3D1-1&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Mindfulness in Plain English</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" />, <font size="-1"><span>Henepola Gunaratana</span></font></li>
<li>Any of the <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Furl%3Dsearch-alias%253Dstripbooks%26field-keywords%3DHarrington%2Bhold%2Bem%26x%3D0%26y%3D0&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Harrington on Hold &#8216;Em</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" /> books</li>
</ul>
<p>
I would be remiss if I did not also give special note to &quot;<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FGetting-Things-Done-Stress-Free-Productivity%2Fdp%2F0142000280%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208137801%26sr%3D1-1&amp;tag=mikeduncacom-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Getting Things Done</a><img width="1" height="1" border="0" src="http://www.assoc-amazon.com/e/ir?t=mikeduncacom-20&amp;l=ur2&amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" />&quot; by David Allen - I have had pretty much a &quot;zero inbox&quot; count for the last 4 years and benefited immensely from it!</p>
<p><i><b>MD</b></i>: Tell me a joke I probably haven&#8217;t heard. </p>
<p><b>JG</b> :  <a title="Donald Belcham" href="http://www.igloocoder.com/" target="_blank">Donald Belcham</a>.</p>
<p><i><br />
<b>MD</b></i>: You&#8217;re a prolific blogger, and have mentioned before the concept of career security over job security. Do you consciously schedule time to blog or does it just happen as it happens? How do you have the time to write these posts all the time? Really. Must be nice. </p>
<p><b>JG</b> :  I do try to lay out some time for blogging and I keep a list of ideas written down in <a href="http://www.backpackit.com/">Backpack</a> when I have a topic I feel is worth consideration.&nbsp; I try to be responsible to my clients and not spend their money blogging - now, in my case I&#8217;m getting up somewhere between 3-5 AM so that I can have time for everything else I want to do; not everyone feels the same way. I often wondered how <a href="http://www.codinghorror.com/blog/" target="_blank">Atwood</a> actually had the time to post all the time until I found out he was a &quot;tech evangelist&quot;.&nbsp; I carve out the time from my schedule because I enjoy the community interaction that comes with it; the sacrifice of an extra 30-60 min every couple of days is definitely a worthwhile trade-off for the experiences I have had.</p>
<p>
<i><b>MD</b></i>: Ever since my Vic-20, Commodore 64 &amp; 128, and Amiga, I&#8217;ve been a windows guy. Are you just frontin&#8217; or do you really use a Mac as your daily machine as your blog would lead one to believe? As a .NET guy what do you get out of running a mac, is it more than just a glorified log-in screen to running Visual Studio in parallels? Is there some sexual component to this? </p>
<p><b>JG</b> :  I use a Mac all the time.&nbsp; To be honest, I wanted a Mac for the last several years but it was only upon them running Intel that I was able to justify the switch, since I did want to be able to do development work off of the machine and while I love <a href="http://www.rubyonrails.org/">Rails</a>, my current contracts are all .NET-based.&nbsp; I love the user experience of OSX, especially when compared to Vista.&nbsp; I can&#8217;t recommend it highly enough.</p>
<p>And let&#8217;s be real here - *everything* I do has a sexual component to it!</p>
<p>
<i><b>MD</b></i> I&#8217;m a big time tools fiddler, <a href="http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx" target="_blank" title="Scott Hanselmans's awesome tools list" id="xe7:">Hanselman&#8217;s list</a> is like crack. What non-obvious tools do you use that you can&#8217;t live without? </p>
<p><b>JG</b> :  A short list would have to include:</p>
<p><img border="0" align="right" class="frame" alt="" src="http://www.mikeduncan.com/wp-content/uploads/2008/05/steel-blue.jpg" /></p>
<ul>
<li>Lancome Eye Serum</li>
<li>American Crew Forming Cream</li>
<li>Nivea For Men&#8217;s Energizing Gel</li>
<li>The Morning Scrub Invigorating Exfoliant from Johnson &amp; Johnson (ridiculous quality for its price - wakes up my face like nothing else)</li>
<li>Eternity for Men</li>
</ul>
<p>
The above 5 are pretty much my license to GET LAID.&nbsp; Seriously, I normally end up dodging bras and panties being thrown at me just trying to leave my apartment building, let alone walking down the street to my office.</p>
<p>In addition, I *would* have included</p>
<ul>
<li>charm</li>
<li>wit</li>
<li>fantastic shirts</li>
<li>ridiculous good looks&nbsp;</li>
</ul>
<p>
but I believe your criteria was &quot;non-obvious&quot;.</p>
<p>There&#8217;s always the off chance you were asking about technical tools, in which case the biggest one most recently has been the &quot;Remember the Milk&quot; extension for Gmail.&nbsp; I can&#8217;t remember who pointed this out to me but it&#8217;s awesome.&nbsp; I was never really a fan of &quot;<a href="http://www.rememberthemilk.com">Remember the Milk</a>&quot; (Backpack works just fine for most of the things I want to track) but having it <a href="http://www.rememberthemilk.com/services/gmail/">integrated into Gmail</a> makes it a completely different experience to me.</p>
<p>
<i><b>MD</b></i>: What are some tips you give to new metrosexual developers to distinguish themselves from the crowd? </p>
<p><b> JG:</b>  Be yourself, above all else.&nbsp; I know this may sound a little bit hippie to some people, but we are all unique and have unique spins to put on things.&nbsp; You have a voice no one else has - your own!&nbsp; If you try to conform yourself to what you think will either get you a job, a Microsoft MVP, or a slot on the presentation circuit you will inevitably find that there&#8217;s no longer any &quot;you&quot; left in your blog.&nbsp; </p>
<p>Now, you *did* say &quot;new *metrosexual* developers&quot;, so to them:</p>
<p>To you, the socially balanced, the well-dressed, the technically credible: you are the only hope for the software development field to pull itself out of the stereotypical abyss of social retardation and insular incestuousness.&nbsp; You are future leaders of software developers, and (if you so choose to be) the leaders who will guide, shape, and inspire the entire industry in the years to come.</p>
<p>And to everyone else, *please* stop wearing those Microsoft polo shirts or launch T-shirts in public.&nbsp; That&#8217;s just embarrassing!</p>
<p>
<i><b>MD</b></i>: (Paraphrased <a href="http://www.bravotv.com/Inside_the_Actors_Studio" target="_blank" title="what is your favorite swear word?" id="tgcx">James Lipton</a> ripoff question): What profession other than your own would you like to try?<br />
<b><br />
JG</b> :  Male stripper, strategy consultant, karaoke singer.&nbsp; Preferably something that can combine all three for the best of both worlds!!</p>
<p><i></p>
<p><b>MD</b></i>: What didn&#8217;t I ask that you want to self-aggrandizingly answer here anyway?</p>
<p><b>JG</b> :  The *only* man in the software development field with better hair than I have is Calgary&#8217;s <a title="Terry Thibodeau" href="http://www.connicus.com/" target="_blank">Terry Thibodeau</a>.&nbsp; *#@&amp;#ing guy.&nbsp; No, I&#8217;m not jealous in the least.</p>
<p>You&#8217;ve read this far. You&#8217;ll have my many thanks if you give this post a Digg / DZone / Delicious or whatever. Thanks, brotha!</p>
<p>&nbsp;</p>
<p><b><b>As always, air your grievances or add your pithy wisdom! ADD A COMMENT!</b></b></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.mikeduncan.com%2fmetrosexual-developer%2f"><img border="0" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.mikeduncan.com%2fmetrosexual-developer%2f" alt="kick it on DotNetKicks.com" /></a></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Fmetrosexual-developer%2F';
  addthis_title  = 'Yes%2C+you+too+can+be+a+metrosexual+developer%21+An+interview+with+Justice+Gray.++';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/metrosexual-developer/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/metrosexual-developer/</feedburner:origLink></item>
		<item>
		<title>How YOUR tech blog posts are RIPPED OFF while you sleep!</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/257025119/</link>
		<comments>http://www.mikeduncan.com/tech-post-ripoff/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 13:12:57 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[seo]]></category>

		<category><![CDATA[info]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/tech-post-ripoff/</guid>
		<description><![CDATA[ 
You work hard on your posts&#8230; 
So you get an idea for a blog post. You mull it over, finally commit to it, and start to get down to work.  Now that you&#8217;re in it for the long haul there&#8217;s probably a good time sink involved.  Depending on your writing style your [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.mikeduncan.com/wp-content/uploads/2008/03/resized_copyflex.jpg" title="Technical blog posts are ripped off in this fashion" alt="Technical blog posts are ripped off in this fashion" class="frame center" /> <strong><br />
You work hard on your posts&#8230;</strong> </p>
<p>So you get an idea for a blog post. You mull it over, finally commit to it, and start to get down to work.  Now that you&#8217;re in it for the long haul there&#8217;s probably a good time sink involved.  Depending on your writing style your work involved might be something like:</p>
<ul>
<li>Researching the topic so you understand it really as well as you think you do.</li>
<li>Thinking about the points you are going to make, what order makes some sort of sense.</li>
<li>Collecting and wiring up good outbound links to more authoritative, encylopedic reference for your readers to continue on with.</li>
<li><strong><span style="font-size: 18px; color: red;">(HOLY CRAP, DON&#8217;T READ THIS!!!)</span></strong> Thinking up a good magnetic headline to grab some interest.</li>
<li>Thinking about how to break up your content into manageable, scannable bits.</li>
<li>Searching for / creating / farming-out some for some pithy images to break the monotony of endless text.</li>
</ul>
<p>If you are into copywriting, a slow worker, disturbed by animals, etc, this process may be long and soul crushing.  <strong></p>
<p>And the payoff is&#8230;.</strong>  </p>
<p>You birth your creation into the wild.  You lord it over your friends, shamelessly promote it on a few social networks, get your mom to check it out, etc.  As people add comments and you watch the visitors count in your analytics, you get that satisfying ego-boost you had hoped for.  You can feel your social capital on the rise.  Rad.  <strong></p>
<p>And then, YOU ARE RIPPED OFF!</strong>  </p>
<p>Ok, so here&#8217;s my story.  As avid readers of www.mikeduncan.com you&#8217;ve undoubtedly read my scintillating post <a href="http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/">SQLite on .NET - Get up and running in 3 minutes</a>.  Catchy, isn&#8217;t it?  It was birthed into the world as the timestamp clearly reminds us on January 15th, 2008.  People seemed to dig it, a good time was had by all.  Maybe <b>*too good*</b> of a time.</p>
<p><a href="http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/" title="My sqlite on .net blog post, check it out!"><img src="http://www.mikeduncan.com/wp-content/uploads/2008/03/croppercapture12.jpg" alt="My sqlite on .net blog post, check it out!" class="frame center" /></a>  </p>
<p><strong>TWO DAYS</strong> after my post was out in the wild, I started seeing some interesting inbound links coming in from InfoQ, a tech news - paid story aggregator type site.  While not somewhere I go often, their site is indeed large, thriving, and as it turns out, morally bankrupt.  It seems that one Robert Bazinet has a story on the front page of the 250,000 unique visitors per month, page rank 7, mega-site that is InfoQ.com cleverly titled:</p>
<p><a href="http://www.infoq.com/news/2008/01/sqlite-in-three-minutes" title="Hmmmmmmmmmmm." target="_blank" rel="nofollow"><img src="http://www.mikeduncan.com/wp-content/uploads/2008/03/croppercapture11.jpg" alt="A very original blog post" class="frame center" /></a>  <strong></p>
<p>Up and Running with SQLite on .Net in 3 Minutes</strong>  </p>
<p>Come on,&#8230;&#8230; really?  That&#8217;s really what its called?  You bet.  So what do we find in this lovely post?  You got it, exactly my post, just stripped of its sexy mikeduncan.com voice and replaced with a few business buzzwords.</p>
<ul>
<li>The steps of what to do are the same.</li>
<li>And in the same order.</li>
<li>And the arbitrary number of minutes is the same.</li>
<li>And the links to the further sources are the same.</li>
<li>And the footer says <strong>&quot;InfoQ.com and all content copyright &copy; 2006-2007&quot; !!!</strong></li>
</ul>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2008/03/jackiechiles.jpg" title="Who told you to put the balm on?" alt="Who told you to put the balm on?" class="frame center" /></p>
<p><center><strong>You&#8217;re damn right Jackie!</p>
<p></strong></center></p>
<p>
Ok, to set the record straight, they do give a shout-out to me briefly mentioning I have a post similar to this on my site, and if you bothered to go to my site, you&#8217;d see that they are maybe-admittedly re-hashing my post? Or maybe you wouldn&#8217;t.</p>
<p><strong>The Pros and Cons of this intellectual larceny&#8230;</strong></p>
<p>So let&#8217;s see what to make of this situation in inverse pro/con order (to build suspense)<strong></p>
<p>Cons:</strong></p>
<ul>
<li>My personal work and time invested in this post is being leveraged for InfoQ / Robert Bazinet&#8217;s big-uppance.</li>
<li>Organic search traffic relating to SQLite on .net will ultimately be split between mikeduncan.com and InfoQ.&nbsp; As a corporate, constantly updated entity, they have a lot of page rank that will flow down into their version of my story, probably trumping mine in the SERPs in the long run.</li>
</ul>
<p><strong>Pros: </strong></p>
<ul>
<li>InfoQ will send me some traffic I might not otherwise get from regular infoq readers who don&#8217;t already know about my post from DotNetKicks, Google, my blog feed, etc.</li>
<li>I gain greater *perceived authority* (if thats even possible) by being linked to from a supposedly authoritative, news publishing source.</li>
<li>My ego still gets boosted in some small way in that someone thought my post was worth paraphrasing and submitting.  Perhaps they got $20 out of it.</li>
</ul>
<p>The *real* pro though, is I have now have this very topic to write about on mikeduncan.com, which I&#8217;m sure will be identifiable to a lot of other folks.  Looking through InfoQ, there are indeed many stories just like this one that are just paraphrased versions of other bloggers hard work.  Many other people are knowingly or not, in the same boat.  (Maybe it&#8217;s time to do a search on InfoQ ey?)  <br />
<b><br />
You WILL be next!!!</b></p>
<p>Clearly any blog is up for <strike>thievery</strike> a source of inspiration.  If indeed you as a writer get a kickback for stories are accepted on InfoQ, why not scan DotNetKicks, maybe DZone, looking for catchy stories you can paraphrase into cold, hard Jacksons? A quick look through Infoq shows a number of posts that are similarly just paraphrased summaries of bloggers work. Just picking the first one on the front page that that I recognized by the title,</p>
<p><a rel="nofollow" target="_blank" href="http://www.infoq.com/news/2008/03/linq-nolock">Implementing NOLOCK with LINQ to SQL and LINQ to Entities</a> for instance is just a <a href="http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx">Scott Hansleman post</a> rehashed.  Again, Scott is quickly credited, but then pretty much his whole post is just copied over into the Infoq system.  Scott, on one hand, being in a tech evangelist role and all around Dude, is probably fine with getting the word out however he can. On the other hand, Scott does have advertisers and runs diabetes research fundraising campaigns through his site.  A part of his fundraising ability relies upon the popularity of and traffic to his authoritative site based on his original content.&nbsp; Maybe Scott is OK with this, maybe not.&nbsp; Either way I doubt InfoQ told him they were rehashing his posts.</p>
<p>My direct boss and good friend is a lawyer, but does not play one on tv. He advised me that I could certainly send them a letter asking for the post to be removed, but would probably not really be worth his time as he had compelling video games scheduled to be played.  Thinking about the above mentioned pros and cons I think I&#8217;m ok with the net gain on this one.</p>
<p><img class="frame right" alt="Hmm, the capital of France is The Hartford Whalers?  Oh well, Must be right." title="Hmm, the capital of France is The Hartford Whalers?  Oh well, Must be right." src="http://www.mikeduncan.com/wp-content/uploads/2008/03/thumb_handbook-pp02-09-13.jpg" /></p>
<p><b>&nbsp;What do YOU think? <br />
</b></p>
<p>Ok, the internet is all about learning, communicating, extending what has come before, standing on the shoulders of giants, blah blah blah.&nbsp; I&#8217;m not really trying to push for some sort of copyright policing, I like the wild west days we are in.&nbsp; At the same time, when it happens to you, it&#8217;s kind of phony / corny in a <a href="http://en.wikipedia.org/wiki/Catcher_in_the_rye">Catcher In the Rye</a> way. Particularly the <strong>InfoQ.com and all content copyright &copy; 2006-2007</strong> footer.&nbsp;</p>
<p><b>What do you, esteemed readers, think?</b> Should I just quit complaining and consider it flattery?&nbsp; Or is this something that as tech writers / bloggers we should be more in tune with.&nbsp; With <a href="http://www.portfolio.com/views/blogs/market-movers/2008/03/21/blogonomics-gawkers-payroll-redux">Gawker Media type bloggers making 9K a month</a>, perhaps this isn&#8217;t just bitching.&nbsp; Original content is certainly some kind of currency these days be it devalued US dollars, career credibility, or promoting charities. Tell me your tales!&nbsp; </p>
<p>If you don&#8217;t <b>post comments</b>, I&#8217;ll just cut and paste some from your blogs into here anyway, copyright 2008 mikeduncan.com. Man, you&#8217;ve read this far, if you feel like it, hook a humble blogger up with some diggs or whatever.&nbsp; Your awesomeness will be <a href="http://www.urbandictionary.com/define.php?term=Embiggen">embiggened</a>, I promise.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.mikeduncan.com%2ftech-post-ripoff%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.mikeduncan.com%2ftech-post-ripoff%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Ftech-post-ripoff%2F';
  addthis_title  = 'How+YOUR+tech+blog+posts+are+RIPPED+OFF+while+you+sleep%21';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/tech-post-ripoff/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/tech-post-ripoff/</feedburner:origLink></item>
		<item>
		<title>AlligatorTags.com - sweet new ASP.NET links aggregator site! (short post)</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/241251694/</link>
		<comments>http://www.mikeduncan.com/alligatortags-com-is-hot/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 03:28:39 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/alligatortags-com-is-hot/</guid>
		<description><![CDATA[Hot site for the day, www.alligatortags.com.
It&#8217;s pretty slick , like a popurls but with daily links for everything cool thats ASP.NET.  Pretty hot site, worth checking out. Definitely adding to my daily run through of sites. Maybe I&#8217;ll get &#8216;em to add mikeduncan.com!
A real mikeduncan.com post coming soon with explanation of my blogging hiatus! [...]]]></description>
			<content:encoded><![CDATA[<p><strong><font color="red">Hot</font></strong> site for the day, <a href="http://www.alligatortags.com" title="AlligatorTags.com - your daily asp.net news with teeth">www.alligatortags.com</a>.</p>
<p>It&#8217;s pretty slick , like a popurls but with daily links for everything cool thats ASP.NET.  Pretty hot site, worth checking out. Definitely adding to my daily run through of sites. Maybe I&#8217;ll get &#8216;em to add mikeduncan.com!</p>
<p>A real mikeduncan.com post coming soon with explanation of my blogging hiatus!  Stay tuned.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Falligatortags-com-is-hot%2F';
  addthis_title  = 'AlligatorTags.com+-+sweet+new+ASP.NET+links+aggregator+site%21+%28short+post%29';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/alligatortags-com-is-hot/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/alligatortags-com-is-hot/</feedburner:origLink></item>
		<item>
		<title>SQLite on .NET - Get up and running in 3 minutes.</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/217071971/</link>
		<comments>http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 15:09:02 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[grokable]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/</guid>
		<description><![CDATA[You found it! The quick and dirty guide to setting up SQLite with .Net in 3 minutes.  Small, fast, and ass-kicking like a transactional Jackie Chan.  At least that&#8217;s what this campy image created just for this post says.  (Shout out to righteous graphics dude Brian Cook for the sweet photoshoppery)


SQLite: The [...]]]></description>
			<content:encoded><![CDATA[<p>You found it! The quick and dirty guide to setting up SQLite with .Net in 3 minutes.  Small, fast, and ass-kicking like a transactional Jackie Chan.  At least that&#8217;s what this campy image created just for this post says.  (Shout out to righteous graphics dude <a href="http://www.thecookblog.com/" title="Brian Cook (yeah Brian, this link is followed)" target="_blank">Brian Cook</a> for the sweet photoshoppery)</p>
<p><center><img src="http://www.mikeduncan.com/wp-content/uploads/2008/01/sqlite.jpg" alt="SQLite on .Net, small, fast, ass-kicking." class="frame" align="middle" /></center></p>
<h3 style="margin: 8px 0px 0px"></h3>
<p><strong>SQLite: The compelling introduction</strong><br />
You&#8217;re writing some smallish app. You know the type.  Those little one-offs where you clean up some data, scrape your competitor&#8217;s web site, change traffic light colors, blah blah blah.  It&#8217;s cool enough to warrant it&#8217;s own solution, but not so big that you are going to tie into your company&#8217;s SQL Server instances. Let&#8217;s face it, you don&#8217;t really need the hassle of dealing power tripping DBA / IT guys for this project, especially now that their delusions of grandeur have been magnified by the return of American Gladiators to prime time.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p><strong>Enter SQLite: the quick skinny / speed-date overview:</strong><br />
SQLite, if you weren&#8217;t already aware, is an open source,  tiny (600K!), *zero install*, transactional database.  But theres more!  <em>SQLite is as fast or faster than some of the big guys you use every day</em>, largely because there is no server process, no listeners, no FD&amp;C Yellow #5, none of that crapola.  The database is just a single file and you communicate with it through a linked in library.  Think of the old access days, but not really.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p>SQLite implements most of the SQL-92 standard.  All of the query related stuff you actually care about is there, triggers, views, etc.  The only thing missing is stored procedures but that&#8217;s probably not a requirement for your project, if at all.  And no, I don&#8217;t want to get in to the old sps vs. not-sps tangent, man thats so aggressively nerdy in a Kirk vs Picard way.</p>
<p>&#8230; But I digest&#8230;.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p>As the the SQLite home page will happily tell you, &#8220;SQLite is the most widely deployed SQL database engine in the world.&#8221; It&#8217;s used by little guys you may have heard of like, oh, I don&#8217;t know, Adobe, Apple, FireFox, GE, Google, Skype, Sun, and several <a href="http://en.wikipedia.org/wiki/New_World_Order_(conspiracy)" title="this is not a link">shadow governments best left un-named.</a>  The crazy part is that you rarely hear about SQLite as a real .Net Dude / Dudette developer.  I think this is because it&#8217;s often bundled inside of things you didn&#8217;t really think were using a database like FireFox or Google Gears, but the research bears out that this bad boy is more than capable for real-life tasks like being the back-end db for dynamic web sites with some pretty serious traffic.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p>SQLite is great for that small-mediumish application we already spec-ed out so lets get into the quick and dirty setup to get this hog rockin&#8217; on .NET.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p><strong>SQLite : The Quick and Dirty Setup for .NET.</strong></p>
<p><strong>1) Download SQLite</strong><br />
While you can get the generic windows binary on the <a href="http://www.sqlite.org/download.html" title="SQLite official download page" target="_blank">SQLite download page</a>, I&#8217;m going to recommend you instead grab the <a href="http://sourceforge.net/projects/sqlite-dotnet2" title="ADO.NET provider for SQLite">ADO.NET</a><a href="http://sourceforge.net/projects/sqlite-dotnet2" title="ADO.NET provider for SQLite"> 2.0 Provider for SQLite from sourceforge</a>.  I&#8217;m not saying this is the most performant version (it does have an ADO wrapper with its attendant malarkey<span class="infl-inline"></span>), but it really is a super-easy starting implementation that&#8217;s probably good enough for the long haul.</p>
<p><strong>2) Copy the resultant DLL </strong>(System.Data.SQLite.DLL) to your project and add a reference.</p>
<p><strong>3) Download and install one of the billions of SQLite GUI clients</strong>.  I&#8217;ve been using the aptly named <a href="http://sqliteadmin.orbmu2k.de/" title="SQLite administrator, pretty cool." target="_blank">&#8220;SQLite Administrator&#8221;</a>  (FREE) which has a sweet, Query Analyzer-alike interface.  You can find a big list of SLQLite gui clients here <a href="http://www.sqlite.org/cvstrac/wiki?p=ManagementTools" title="List of sqlite gui clients">http://www.sqlite.org/cvstrac/wiki?p=ManagementTools</a> if you are so inclined.<a href="http://sqliteadmin.orbmu2k.de/" title="SQLite administrator tool, free and badassed."><img src="http://www.mikeduncan.com/wp-content/uploads/2008/01/sqlite_administrator.jpg" alt="SQLite administrator tool, free and badassed." class="frame center" /></a></p>
<p><strong>4) Through the GUI, create a database</strong> and make a test table of whatever floats your boat. The result will be a single file with a .s3db extension.</p>
<p><strong>5) There is no step 5! DONE! </strong>You can now query, insert, update, delete, create, truncate, etc, to your heart&#8217;s content using the System.Data.SQLite ADO wrapper.  Here is a little helper db util type class to show you the basic schleck:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ --></p>
<pre class="csharpcode">
<span class="kwrd">public</span> <span class="kwrd">static</span> DataTable GetDataTable (<span class="kwrd">string</span> sql)

   {

    DataTable dt = <span class="kwrd">new</span> DataTable();

    <span class="kwrd">try</span>

    {

    SQLiteConnection cnn = <span class="kwrd">new</span> SQLiteConnection(<span class="str">&#8220;DataSource=C:CheckoutWorldDominator.s3db&#8221;</span>);

    cnn.Open();

    SQLiteCommand mycommand = <span class="kwrd">new</span> SQLiteCommand(cnn);

    mycommand.CommandText = sql;

    SQLiteDataReader reader = mycommand.ExecuteReader();

    dt.Load(reader);

    reader.Close();

    cnn.Close();

    } <span class="kwrd">catch</span> {

    <span class="rem">// Catching exceptions is for communists</span>

    }

    <span class="kwrd">return</span> dt;

}<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">int</span> ExecuteNonQuery(<span class="kwrd">string</span> sql)

{

    SQLiteConnection cnn = <span class="kwrd">new</span> SQLiteConnection(<span class="str">&#8220;Data Source=C:CheckoutWorldDominator.s3db&#8221;</span>);

    cnn.Open();

    SQLiteCommand mycommand = <span class="kwrd">new</span> SQLiteCommand(cnn);

    mycommand.CommandText = sql;

    <span class="kwrd">int</span> rowsUpdated = mycommand.ExecuteNonQuery();

    cnn.Close();

    <span class="kwrd">return</span> rowsUpdated;

}

<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> ExecuteScalar(<span class="kwrd">string</span> sql)

{

    SQLiteConnection cnn = <span class="kwrd">new</span> SQLiteConnection(<span class="str">&#8220;DataSource=C:CheckoutWorldDominator.s3db&#8221;</span>);

    cnn.Open();

    SQLiteCommand mycommand = <span class="kwrd">new</span> SQLiteCommand(cnn);

    mycommand.CommandText = sql;

    <span class="kwrd">object</span> <span class="kwrd">value</span> = mycommand.ExecuteScalar();

    cnn.Close();

<span class="kwrd">if</span> (<span class="kwrd">value</span> != <span class="kwrd">null</span>)

    {

        <span class="kwrd">return</span> <span class="kwrd">value</span>.ToString();

    }

    <span class="kwrd">return</span> <span class="str">&#8220;&#8221;</span>;

}</pre>
<p>NOTE: Above code is quicky crap. It&#8217;s just to show you the gist.</p>
<p><strong>Some uses for SQLite to consider:</strong></p>
<p><strong>Configs / Settings:</strong>  SQLite is a good alternative to xml config files or registry settings for things like user account info and application preferences.  It supports encryption, so feel free to keep your brilliant patent ideas in there.</p>
<p><strong>Persistent Caching:</strong> You can use SQLite as a DB for cache data that needs to persist through reboots / application recycles.  Maybe you have some expensive one-time-on-loadup queries from your enterprise db that you cache up and use in your website or app.  By timestamping the data into a local SQLite db, you can live through application restarts and only refresh your cache at the threshold you want to.</p>
<p><strong>Slicing and Dicing data:</strong>  Load in some data and query to your heart&#8217;s content.  Great for analyzing data at your leisure, worming through subsets of data, etc.  Since its just a little db on your on box, no one is going to hassle you.  Managers who were once developers will appreciate being to query through data with SQLite vs. using excel as they usually are too crusty to still have permissions on the real db.</p>
<p><strong>Full DB for One-off apps:</strong> Sometimes you write a quickie app that just harvests something in a funky way and collects data.  You can output the data as you are grabbing it in all kinds of ways, but throwing into a db is ideal.</p>
<p><strong>Linkage to some more in-depth stuff &#8230;&#8230;&#8230;.</strong></p>
<p>- SQLite is pretty hip with with the alt.net scene, you can follow on from here to check out a <a href="http://www.hibernate.org/361.html#A9" title="SQLite NHibernate provider" target="_blank">SQLite NHibernate provider</a>, or<a href="http://codefornothing.wordpress.com/2007/07/19/sqlite-data-provider-for-subsonic-part-2/" title="SQLite for subsonic" target="_blank"> here for a SQLite Subsonic provider.</a></p>
<p>- If you are rockin&#8217; the 3.0 framework there is even a <a href="http://kubasik.net/blog/2007/10/25/sqllite-linq-provider/" title="SQLite linq provider">SQLite Linq provider</a>.</p>
<p>- For a comprehensive SQLite how-to (emphasizing command line, non-MS specific) : <a href="http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html" title="SQLite Tutorial" target="_blank">SQLite Tutorial</a></p>
<p>- And in case you missed it up top, the <a href="http://www.sqlite.org/" title="SQLite main project page in the interweb" target="_blank">main SQLite project page is here</a>.</p>
<p><a href="http://video.google.com/videoplay?docid=5432370943769437669&amp;q=moleman+football&amp;total=13&amp;start=0&amp;num=100&amp;so=0&amp;type=search&amp;plindex=3" title="But football in the groin had a football in the groin!" target="_blank"><img src="http://www.mikeduncan.com/wp-content/uploads/2008/01/hans.jpg" class="frame" alt="But football in the groin had a football in the groin!" align="right" /></a>Have a good idea for ways to use SQLite in .Net projects?  <a href="http://video.google.com/videoplay?docid=5432370943769437669&amp;q=moleman+football&amp;total=13&amp;start=0&amp;num=100&amp;so=0&amp;type=search&amp;plindex=3" title="But football in the groin had a football in the groin!" target="_blank">Been hit in the groin with a football</a> for even suggesting using something like this at your company?  Have some award-winning successes or outlandish failures already with SQLite? <strong>Leave a funky-fresh comment! </strong></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.mikeduncan.com%2fsqlite-on-dotnet-in-3-mins%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.mikeduncan.com%2fsqlite-on-dotnet-in-3-mins%2f" alt="kick it on DotNetKicks.com" border="0" /></a></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Fsqlite-on-dotnet-in-3-mins%2F';
  addthis_title  = 'SQLite+on+.NET+-+Get+up+and+running+in+3+minutes.';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/</feedburner:origLink></item>
		<item>
		<title>15 -hot- tools that made me a coding Paris Hilton.</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/187895768/</link>
		<comments>http://www.mikeduncan.com/15-hot-tools-that-made-me-a-coding-paris-hilton/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 14:12:19 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/15-hot-tools-that-made-me-a-coding-paris-hilton/</guid>
		<description><![CDATA[You sling code every day.  So do I.  You sit down at your box, throw on those noise canceling headphones, fire up some mp3s, and get jiggy wit&#8217; it.  That&#8217;s hot.  But could it be hotter?

Look good while doing things the easy way
After doing this day in, day out, for many [...]]]></description>
			<content:encoded><![CDATA[<p>You sling code every day.  So do I.  You sit down at your box, throw on those noise canceling headphones, fire up some mp3s, and get jiggy wit&#8217; it.  That&#8217;s hot.  But could it be hotter?</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/paris_hilton_code_hacker.jpg" alt="Paris Hilton is a “hot” developer." class="frame center" /></p>
<p><center><strong>Look good while doing things the easy way</strong></center><br />
After doing this day in, day out, for many years I&#8217;ve picked up some apps and tools that let me get a lot done in a way that may seem effortless and a bit cheeky to my peers.  This <strong>Paris Hilton</strong> style of coding is mostly seen as flashy, decadent, or sophisticated, all of which are true. Some few curmudgeons on the other hand may find it <a href="http://www.msnbc.msn.com/id/18472845/" title="Criminally awesome">criminal</a> in its use of short cuts, helpers, and preferential treatment I give it.  Those people are just jealous.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p>Here they are, the &#8220;hot&#8221; apps I use every day to be the Paris Hilton of developers.  These apps are hot, fast, easy and a little bit dangerous. Oh yeah&#8230;.</p>
<h3 style="margin: 8px 0px 0px"></h3>
<p>Note:  I don&#8217;t pretend that these apps are super-secrets noone has listed before.  Some of them can be found on <a href="http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx" title="Scott Hanselman's 2007 Ultimate Developer and Power Users Tool List for Windows ">Scott Hanselman&#8217;s awesome tools list</a> or elsewhere on the interweb, but the list that follow, (broken down into general applicability) are things I use every day and have made me the defacto go-to guy in my shop for apps and tools.  Now you can be too.</p>
<p><strong>Universal, non-development specific apps </strong></p>
<p><strong>#1 Launchy</strong>.  Price = Free<br />
Launchy, as its name would imply, is an application launcher.  Any time not spent clicking desktop icons or start bars is time well spent, and this app is fast, slick, and looks damn cool doing it.  As their propaganda aptly reads, &#8220;Launchy  indexes and launches your applications, documents, project files, folders, and  bookmarks with just a few keystrokes.&#8221; I use this all day every day.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/launchy_looks_cool.jpg" alt="Launchy looks cool!" class="frame center" /></p>
<p><a href="http://sourceforge.net/projects/launchy">Launchy on sourceforge.</a><br />
<a href="http://sourceforge.net/forum/forum.php?forum_id=677087">Launchy Plug-Ins</a><br />
<a href="http://lifehacker.com/software/hack-attack/take-launchy-beyond-application-launching-284127.php">Lifehacker Tips on extending launch</a></p>
<p><strong>#2 Texter</strong> -Price = Free</p>
<p><a href="http://lifehacker.com/software/texter/lifehacker-code-texter-windows-238306.php" title="Texter Rocks">Texter </a>is a &#8220;Text substitution app Texter saves you countless keystrokes by replacing abbreviations with commonly used phrases you define.&#8221;  It&#8217;s also totally awesome.  Built on top of <a href="http://www.autohotkey.com/" title="AutoHotKey">AutoHotKey</a>, Texter lets you setup keystrokes that automatically expand themselves into whatever words, phrases, signatures, ascii art, snippets of code, or full blown  pages of text your desire.  Texter works in any and all windows apps making it a very attractive alternative to setting up app-specific code snippets in your text editor, Visual Studio, etc.  Texter can also be used to script logins to websites or fill out forms, what more could you want?</p>
<p>I got to give the latest version a full workout as a <a href="http://www.lifehacker.com" title="LifeHacker, read it.">LifeHacker</a> beta tester and can tell you that the author <a href="http://www.adampash.org/" title="Adam makes Texter rock">Adam Pash</a> (a LifeHacker employee) is very committed to having it kick ass.  So far it succeeds in spades.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/texter.png" alt="Texter rules" class="frame center" /></p>
<p><a href="http://lifehacker.com/software/texter/lifehacker-code-texter-windows-238306.php" title="Read about and download texter here">Read about and download Texter HERE</a></p>
<p><strong>#3 JRuler</strong> -Price = Free<br />
JRuler is a super small and simple screen ruler you can pop up in a moments notice.  I do a significant amount of asp.net coding and this small, simple app is great for getting a quick low down on images, tables,  coordinating with creative folks, whatever.  I&#8217;ve been known to use this as a bookmark I drag around to read the web.  But that&#8217;s probably just me.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/jruler-image.gif" alt="Jruler is a ruler with a J in front of it" class="frame center" /></p>
<p><a href="http://www.spadixbd.com/freetools/jruler.htm">http://www.spadixbd.com/freetools/jruler.htm</a></p>
<p><strong>#4  ColorMania</strong>  -Price = Free<br />
ColorMania is a great, slick, freeware color picker.  I use it as my go-to eyedropper utility to get colors for the web.  Zoom around for just the right pixel, eyedropper that pig, and bam! you have the hex you need to drop in a stylesheet.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/colormania.jpg" alt="Colormania is color-maniacal" class="frame center" /></p>
<p><a href="http://www.blacksunsoftware.com/colormania.html">http://www.blacksunsoftware.com/colormania.html</a></p>
<p><strong>#5 Cropper</strong> Price = Free<br />
Cropper is a fast, free screen  / window / arbitrary area capture tool that really doesn&#8217;t warrant a screen shot of its own.  Saves in lots of formats, has great options.  Can&#8217;t beat it for free.  I use this all the time even though I have Snaggit on my box.</p>
<p><a href="http://blogs.geekdojo.net/brian/articles/Cropper.aspx">http://blogs.geekdojo.net/brian/articles/Cropper.aspx</a></p>
<p><strong>#6  WinGrep</strong> Price = Free<br />
I&#8217;ve already written extensively about this bad boy here <a href="http://www.mikeduncan.com/wingrep-code-tool/">http://www.mikeduncan.com/wingrep-code-tool</a> . (screenshots, download links, etc are there too).  I use this every single day at work.  No joke.</p>
<p><strong>#7  Unlocker</strong> Price = Free<br />
Ever try to delete or rename a file only to have windows spit in your face, insult your ancestors and then make some off-hand comment about it being used by another person or program?  Don&#8217;t even answer that because I know the answer.  Unlocker hangs out in the background and when it sees you trying to delete what is rightfully yours, pops up and gives you the option to free all the locks on the file and get rid of that bad boy once and for all.  Awesome.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/unlocker.jpg" alt="Unlocker?,.. I don’t even know her!" class="frame center" /></p>
<p><a href="http://ccollomb.free.fr/unlocker/">http://ccollomb.free.fr/unlocker/</a></p>
<p><strong>#8 Sizer </strong>Price = Free<br />
Sizer is a cool little tasktray app that will give you the dimensions of any window as you resize it around which is pretty handy.</p>
<p><strong>THE SECRET AWESOME HOTNESS NO ONE KNOWS ABOUT:</strong></p>
<p>If you RDP your box and have apps open on your 2nd or 3rd monitor that you can&#8217;t get to, you can resize them from the task bar and they will pop onto your main monitor.  You heard it here first kids, get it now.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/sizer.png" alt="Give me that damn window back!" class="frame center" /></p>
<p><a href="http://www.brianapps.net/sizer.html">http://www.brianapps.net/sizer.html</a></p>
<p><strong>IT / System administration type apps </strong></p>
<p><strong>#9 Terminals</strong>  -Free<br />
If you have to RDP to a number of machines with any frequency, you know how it can be a pain trying to keep track of which window is which server, and the tedium of firing up all those connections all the time.  Terminals is a free, tabbed interface to RDP sessions that lets you save groups of machines as single click shortcuts among a raft of other noble features.  If you RDP with any frequency, you really want this.<br />
<a href="http://www.codeplex.com/Terminals">http://www.codeplex.com/Terminals</a></p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/terminals.jpg" alt="Terminals, tabbed RDP sessions." class="frame center" /></p>
<p><strong>#10 Baretail</strong>  -Free<br />
How could a entry about coding like Paris Hilton  not include an app called baretail.  Seriously folks. Baretail is a great, free, color coded windows version of the tail command in unix.</p>
<ul>
<li>I use this constantly to watch the output of my <a href="http://logging.apache.org/log4net/" title="Log4Net" target="_blank">log4net</a> logging.</li>
<li>I use it to look at IIS logs.</li>
<li>I use it to impress non-technical co-workers when they walk by my desk as it looks like reading magical code out of the frigging Matrix.</li>
</ul>
<p>It works well in all of these circumstances.</p>
<p><a href="http://www.mikeduncan.com/wp-content/uploads/2007/11/baretail.gif" title="BareTail.  Rad."><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/baretail.thumbnail.gif" alt="BareTail.  Rad." class="frame center" /></a></p>
<p><a href="http://www.baremetalsoft.com/baretail/">http://www.baremetalsoft.com/baretail/</a></p>
<p><strong>Developer Specific apps</strong></p>
<p><strong>#11</strong> <strong>Resharper </strong>Visual Studio Add-On 49-$349 depending on license<br />
If you are a .Net guy / gal, I&#8217;m sure you have at the very least heard of ReSharper by now.  All the A-lister&#8217;s can&#8217;t stop talking about it and it&#8217;s with good reason.  Everything you at one time wished was already in Visual Studio, ReSharper adds in.  It&#8217;s  the single biggest productivity booster you can have if you live in Visual Studio for a living.</p>
<p>A point about ReSharper I don&#8217;t often see made is that the automation of ReSharper is a great enabler for doing things the &#8220;right way&#8221;.  Following design patterns, refactoring, frequent renaming of methods or classes, programming to interfaces are all hallmarks of good programming, but can have barriers to adoption if your GUI makes doing these things tedious.  ReSharper&#8217;s quick shortcuts allow you to do all of the above with no penalty in time or effort, so you have no excuse not to build that project they way you know you ought to.</p>
<p><a href="http://www.jetbrains.com/resharper/">http://www.jetbrains.com/resharper/</a><br />
<a href="http://www.excastle.com/blog/archive/2007/01/31/13141.aspx">http://www.excastle.com/blog/archive/2007/01/31/13141.aspx</a><a href="http://www.roland-weigelt.de/ghostdoc/"></a></p>
<p><strong>#12</strong> <strong>RegexBuddy</strong> $39.95<br />
I write a lot of regular expressions for all sorts of uses.  UrlRewriting, updating 100s of semi-templated files at once, cleaning up datafiles, you name it.  Even with my expertise in regex syntax, it&#8217;s great to have an app that will show you exactly what your regex will match against a test case, color coded in real time.  RegexBuddy highlights your matches and capturing groups on the fly, has a great library of canned regexes, and will even generate instant language specific code for you if can&#8217;t recall offhand the differences in syntax between say C# and JavaScript.  Easily worth the $40 if you do regex  stuff with any regularity.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/regexbuddytiny.png" alt="RegEx Buddy is regtastic." class="frame center" /></p>
<p><a href="http://www.regexbuddy.com/cgi-bin/affref.pl?aff=borgamo&amp;ref=paris&amp;targeturl=download.html">http://www.regexbuddy.com/download.html</a></p>
<p><strong>#13</strong> <strong>EditPad Pro</strong> - Free or $49.95 Paid versions.</p>
<p>Everyone has a favorite text editor for non-visual-studio tasks.  I hopped from one to another with the frequency of a cheap ham radio until I settled upon edit pad pro.  It&#8217;s by JGsoft, the same people as the aforementioned RegexBuddy and has all the usual stuff you&#8217;d expect from an all purpose, multi-language text editor, but has one key killer feature I&#8217;ve not seen elsewhere:</p>
<p><strong>EditPad Pro will let you easily search and replace (plain text, wildcards, regex) across multiple lines.</strong>  If you are search and replacing in 10 files at once, and your search phrase is at the start of some of the files line, but breaks across two lines on others, the replace will still happen.  This is a total deal-maker for me.  My editor search is over.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/eppsmallest.png" alt="Edit Pad Pro rocks" class="frame center" /></p>
<p><a href="http://www.editpadpro.com/cgi-bin/affref.pl?aff=borgamo&amp;ref=paris&amp;targeturl=download.html">http://www.editpadpro.com/download.html</a>  -Free Trial<br />
<strong>#14</strong> <strong>Reflector</strong> -Free<br />
Reflector is the class browser, explorer, analyzer and documentation viewer for  .NET.  When you want to see just how a framework class does it&#8217;s magic, it&#8217;s great to be able to view the nitty gritty of how things run under the hood.  This is a great learning tool that any .Net coder needs to take it to the next level.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/reflectorshot.png" alt="You are using Reflector right?" class="frame center" /><br />
<a href="http://www.aisto.com/roeder/dotnet/">http://www.aisto.com/roeder/dotnet/</a></p>
<p><strong>#15</strong> <strong>GhostDoc</strong> -Free</p>
<p>GhostDoc is a free add-in for Visual Studio that automatically generates  XML documentation comments for C#. Either by using existing documentation  inherited from base classes or implemented interfaces, or by deducing  comments from name and type of e.g. methods, properties or parameters.</p>
<p>Basically if you name your methods and parameters with nice descriptive names, you get full XML documentation for free.</p>
<p><a href="http://www.roland-weigelt.de/ghostdoc/">http://www.roland-weigelt.de/ghostdoc/</a></p>
<p><strong>Closing thoughts  &#8230;</strong></p>
<p>Leverage apps to give yourself <a href="http://en.wikipedia.org/wiki/Church_of_the_SubGenius#Slack" title="slack">slack</a> while still <a href="http://en.wikipedia.org/wiki/Gtd" title="Get things done!">getting things done</a> and get yourself noticed for being a coding celebrity, a Paris Hilton developer.  Conversely, repeat yourself over and over, write boated code by hand, or just erratically cobble together what seems right at the time, and fate will not be so kind &#8230;</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/britney_spears_is_a_bad_programmer.jpg" alt="Britney Spears is a bad programmer." class="frame center" /></p>
<p align="center"><strong>Britney Spears: Looking bad while doing things the hard way</strong></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.mikeduncan.com%2f15-hot-tools-that-made-me-a-coding-paris-hilton%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.mikeduncan.com%2f15-hot-tools-that-made-me-a-coding-paris-hilton%2f" alt="kick it on DotNetKicks.com" border="0" /></a><br />
<hints id="hah_hints"></hints></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2F15-hot-tools-that-made-me-a-coding-paris-hilton%2F';
  addthis_title  = '15+-hot-+tools+that+made+me+a+coding+Paris+Hilton.';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/15-hot-tools-that-made-me-a-coding-paris-hilton/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/15-hot-tools-that-made-me-a-coding-paris-hilton/</feedburner:origLink></item>
		<item>
		<title>3 hot uses for HttpContext.Current.Items “They” won’t tell you about.</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/187895769/</link>
		<comments>http://www.mikeduncan.com/3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 02:07:40 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[grokable]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about/</guid>
		<description><![CDATA[It&#8217;s been a while since I rapped at ya, so I figured I&#8217;d write a little about one of my good friends, HttpContext.Current.Items.
Generally, HttpContext.Current.Items doesn&#8217;t get all that much hot blog press, but let me tell you, I&#8217;m here to change all that.  For those out of the know, System.Web.HttpContext.Current.Items is a sweet key-value [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theonion.com/content/taxonomy/tag/Jim_Anchower?page=5" title="Jim Anchower " target="_blank">It&#8217;s been a while since I rapped at ya</a>, so I figured I&#8217;d write a little about one of my good friends, <a href="http://msdn2.microsoft.com/en-us/library/system.web.httpcontext.items(vs.80).aspx" title="Microsoft low down on HttpContext.Current.Items" target="_blank">HttpContext.Current.Items</a>.</p>
<p>Generally, <strong>HttpContext.Current.Items</strong> doesn&#8217;t get all that much hot blog press, but let me tell you, I&#8217;m here to change all that.  For those out of the know, System.Web.HttpContext.Current.Items is a sweet key-value pair collection you can use to pass objects around up and through all components that participate in a single HTTP request.  What does this mean?  This means that in a way similar to sticking something in the Session or cache, you can jam some values into the HttpContext.Current.Items for your request, say in a HttpModule way down low before you&#8217;ve even begun to fetch a page, and have those values readable/writable later from your page and all its usercontrols.  The Items only persist through this one-night-stand of a single request and then supposedly &#8220;lose your number&#8221; but that&#8217;s ok, because we don&#8217;t really need all their drama after that anyway.</p>
<p><strong>1)</strong> <strong>Preparing objects down low, on the down-low</strong>.</p>
<p>As alluded to earlier, one sweet use of  HCI (as we call in on the street) is in HttpModules.  Let&#8217;s say you are doing some url-rewriting for user-friendliness or SEO reasons.  While you&#8217;re at it, why not do a little preparation for your page?  If you have a query param of state abbreviation that comes in commonly, populate an additional full state name display field ahead of time.  Clean up your strings with proper casing, do whatever utils you think you can get away with while you have the request in your hand.  I have a little object of getters and setters that I populate in the the HttpModule, and stick it in the Current.Items for its way up the stack.  Now my pages and usercontrols can pull out my cleaned up custom object from the Context.Items and act accordingly, pass it down the line to methods, whatever.  The vibe is maybe a hint at a smidgen of a wee bit <a href="http://en.wikipedia.org/wiki/Model_view_controller" title="What the damn wikipedia has to say about MVC" target="_blank">Model View Controller-ish</a>, but not really.</p>
<p><strong>2) Making params and pages more unit-testable.</strong></p>
<p>With something like #1 in place, you can pull objects of params and prepared goodness out of the request and process them in your code behind, presenter, usercontrol, whatever strikes your pattern fancy.  If this bundle of params is a in a nice little object that implements an interface, this makes unit testing logic that under normal circumstances relies upon getting info from the System.Web namespace (querystring params mostly) nice and easily decoupled.  Pros of this are that your view calling your presenter can stay super lean and mean without having to populate a bunch info from query strings which will end up going through standard transformations you could have handled earlier on.  A con is that the population of these params might be a bit mysterious to other devs who don&#8217;t see the HttpModule in action, sort of a like a table that gets populated from somewhere or other, but you don&#8217;t know what trigger where. I hate that.</p>
<p><strong>3) Populating usercontrols without the hassle.</strong></p>
<p>If you know you have values in your hand at page on_load or earlier, it&#8217;s pretty damn convenient to stick them in the HttpContext.Current.Items and then just read them out from whatever usercontrols may or may not be dynamically included on the page.  No finding child controls from the page, no finding parent info from the controls.  No casting, scoping or otherwise thinking about precisely what order what will fire.  If you have the data at page_load, your controls can get it.  Don&#8217;t call me, and I won&#8217;t call you either.  <a href="http://www.urbandictionary.com/define.php?term=Tadow" title="HttpContext.Current.Items is from the streets and proud." target="_blank">Ta-dow</a> (does anyone say that anymore?).</p>
<p>So there you have it,  <em>HttpContext.Current.Items</em>, arcane enough to give you guru-cred to the mid-range noobs, simple enough that it can be leveraged for good and / or evil.  Awesome.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/11/seal-1.gif" alt="HttpContext.Current.Items is awesome." class="frame center" /></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.mikeduncan.com%2f3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.mikeduncan.com%2f3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about%2f" alt="kick it on DotNetKicks.com" border="0" /></a></p>
<p><hints id="hah_hints"></hints></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2F3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about%2F';
  addthis_title  = '3+hot+uses+for+HttpContext.Current.Items+%22They%22+won%27t+tell+you+about.';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/3-hot-uses-for-httpcontextcurrentitems-they-wont-tell-you-about/</feedburner:origLink></item>
		<item>
		<title>Google Website Optimizer tips and hacks</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/187895770/</link>
		<comments>http://www.mikeduncan.com/google-website-optimizer-hacks/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 11:51:05 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/google-website-optimizer-hacks/</guid>
		<description><![CDATA[This post could make you tons of money.  Seriously. If you have an ecommerce web presence of any kind, you are nuts if you are not taking advantage of Google Website Optimizer. This post will show you some of my personal hacks and developer tips I’ve whipped up for using this tool on a [...]]]></description>
			<content:encoded><![CDATA[<p>This post could make you tons of money.  Seriously. If you have an ecommerce web presence of any kind, you are nuts if you are not taking advantage of <a href="http://www.google.com/websiteoptimizer" title="Google Website Optimizer" target="_blank">Google Website Optimizer</a>. This post will show you some of my personal hacks and developer tips I’ve whipped up for using this tool on a real-deal fully dynamic SEO-ed site (we’re talking 2 million + unique visitors a month).</p>
<p><a href="http://www.mikeduncan.com/google-website-optimizer-hacks/google-website-optimizer/" rel="attachment wp-att-25" title="Google Website Optimizer"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/07/google-website-optimizer-logo.jpg" alt="Google Website Optimizer" class="frame center" /></a></p>
<p>For anyone who doesn’t know, Google Website Optimizer, is a slick, designed from the ground up <a href="http://en.wikipedia.org/wiki/Multivariate_testing" title="Multivariate_testing on wikipedia">multivariate web testing</a> suite that Google, as is their custom, gives away for *free* (this is a free product in a space where the  usual players run you around 40K a year, all you need is an Adwords account).</p>
<p>In simplest terms for those not familiar with multivariate testing, Optimizer lets you carve up different areas of a given page you want to test by enclosing said areas with simple javascript tags. You add another javascript snippet to a second page that serves as the goal for what your tested page is trying to accomplish (ex. your checkout page might be the goal for the product page you are testing). You then submit through the Website Optimizer interface different alternatives for content to be displayed in each area you have specified, say three different header variations, two different footers, and maybe two different product-pitch-blurbs like a hard sell and soft sell. Once you have it all wired up and turned on, distinct users are served a different ‘recipe’ of the different possible combinations, and Google logs their relative success in making it to your goal page vs. your original content. Run those tests until a statistical conclusion can be draw, implement the best scoring recipe, and there are potentially HUGE conversion gains to be had.</p>
<p><img src="http://www.mikeduncan.com/wp-content/uploads/2007/07/google-website-optimizer.png" alt="Google Website Optimizer workflow" class="frame center" /></p>
<p><em>The website optimizer diagram Google shows at SEO conferences.</em></p>
<p>First here are some quick tips of information that aren’t immediately obvious when reading the weak online documentation.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Three Tips</strong><strong> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong><strong> </strong></p>
<p><strong>Experiment time = performance more than alternatives. </strong></p>
<p>As you might imagine, the more combinations possible from your alternatives, the longer it may take for Optimizer to come to a statistically significant conclusion about anything. This is true in general but there is a bit more to it than that. While there is a dependency on enough traffic allocation to each of your recipes, what really drives experiment time is the difference between how well your best recipe performs vs. your original vs. your worst recipe. An experiment with 144 combinations, which Google does *not* recommend, can actually return results within a couple days so long as your best recipe clearly outperforms your original version of the page. On the flip side, an experiment between only 2 alternatives can cause Optimizer to spit out “28 days remaining” if the conversion difference between those two alternatives is very slim. The lesson? Don’t start with tests of subtle phrasing differences in the copy or a tiny difference in graphic look and feel, brainstorm and test real *alternatives* to your flow or offering first.</p>
<p><strong>Don’t worry about dynamic URLs</strong>.</p>
<p>While the Optimizer interface will ask you for an URL for your test page, your test is really of course determined by your javascript placement. If you have dynamic querystring action, or more likely in ecommerce, massive url-rewriting where one one aspx page answers to 30,000 totally different URLs, Optimizer will roll with that just fine. When setting up the experiment, simply use the “upload flat html” option when submitting the test or goal page. Nothing about the experiment is actually tied to any urls other than the preview-your-recipe mode of Optimizer, so just so long as your test page emits the test javascript and your goal emits the goal javascript, you are in business.</p>
<p><strong>Use Javascript in your variations! </strong></p>
<p>Examples of this make up the hacks section that follows. Javascript *is* allowed in variations; you can call functions in the main tested page from your variation or use Javascript in the variation to read DOM elements in the test page.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong><strong> Two Dynamic page hacks</strong><strong> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>The following tricks are bits of code you as the developer can implement in your experiment pages that will help with dynamic data in your experiments as well as keeping the experiments themselves as straight-forward as possible so you can let your creative team autonomously plug in alternatives without developer help.</p>
<p><strong>Pull variables from your page into your experiment.</strong></p>
<p>Sometimes you will want to pull out some dynamic data from the page to add to your variation’s content.  Maybe you need to grab the current page’s product name and model number to incorporate them into some alternate sales copy.  With url rewriting or just highly dynamic pages you can’t very well have this info hard-coded into your variation.  One hacky solution I’ve used with success is to backfill the dynamic content into the experiment with Javascript InnerHTML swapping.</p>
<p>In this example, I would set up two input type = “hidden” fields in the page code and set their values to the model number and product name respectively like so (ASP.net):<br />
<code class="prettyprint"><br />
&lt;input id="HiddenModelNumber" value="&lt;%=ModelNumber%&gt;" type="hidden" /&gt;<br />
&lt;input id="HiddenProductName" value="&lt;%==ProductName%&gt;;" type="hidden" /&gt;<br />
</code></p>
<p>Next, we implement a little quick Javascript that when called will swap the InnerHTML of all elements with a certain class with the value of our hidden field:</p>
<p><code class="prettyprint"><br />
function PopulateInnerHTMLByClass(classNameOfElementToInject, hiddenValueID)<br />
{<br />
if (document.getElementById(hiddenValueID) != null)<br />
{<br />
searchClass = classNameOfElementToInject;<br />
var classElements = new Array();<br />
node = document;<br />
tag = '*';<br />
var els = node.getElementsByTagName(tag);<br />
var elsLen = els.length;<br />
var pattern = new RegExp('(^|s)'+searchClass+'(s|$)');<br />
for (i = 0, j = 0; i &lt; elsLen; i++) {<br />
if ( pattern.test(els[i].className) ) {<br />
classElements[j] = els[i];<br />
els[i].innerHTML = document.getElementById(hiddenValueID).value;<br />
j++;<br />
}<br />
}<br />
}<br />
}<br />
</code></p>
<p><strong>Push variables from your experiment into other parts of your page.</strong></p>
<p>Say you have a long list of 200 items on your page, each with a button that says “Buy” and you want to test how that page would convert if the button instead said “Add to cart”. A good way to accomplish this is create an experiment area that *encloses nothing*. In your test page, code up a Javascript function that replaces the InnerHTML of everything that has a certain class, in this case the class of our button. (see snippet below).  Whatever is passed into the function will becomes the new button text on the fly. From there your button-text variations are very easy to administer, simply have each one break into a script block and call your swapper method. Ex swapButtonText(’add to cart’); , swapButtonText(’fork it over’); etc.</p>
<p><code class="prettyprint"><br />
function swapButtonText(newInnerHtml) {<br />
searchClass = 'buttonClass';<br />
var classElements = new Array();<br />
node = document;<br />
tag = '*';<br />
var els = node.getElementsByTagName(tag);<br />
var elsLen = els.length;<br />
var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');<br />
for (i = 0, j = 0; i &lt; elsLen; i++) {<br />
if ( pattern.test(els[i].className) ) {<br />
els[i].innerHTML = newInnerHtml;<br />
j++;}<br />
}<br />
}</code></p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong><strong> The next step, AJAX </strong><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Of course the next natural progression of this DOM javascript swapping is to make AJAX calls conditionally fetching custom dynamic information per experiment type.  This has a lot of potential but is pretty custom to your given workflow so I&#8217;ll just leave it at that for you to mull over.</p>
<p>For more developer thoughts on Google Website Optimizer check out <a href="http://groups.google.com/group/websiteoptimizer">google&#8217;s own forum</a> dedicated to this tool.</p>
<p>Have some other good Google Website Optimizer tips and hacks?  Post them in the comments!!</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http://www.mikeduncan.com/google-website-optimizer-hacks/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.mikeduncan.com/google-website-optimizer-hacks/" alt="kick it on DotNetKicks.com" border="0" /></a><br />
<hints id="hah_hints"></hints></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Fgoogle-website-optimizer-hacks%2F';
  addthis_title  = 'Google+Website+Optimizer+tips+and+hacks';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/google-website-optimizer-hacks/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/google-website-optimizer-hacks/</feedburner:origLink></item>
		<item>
		<title>Windows Grep - a free top-5 must-have developer tool you really want. Trust me.</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/187895771/</link>
		<comments>http://www.mikeduncan.com/wingrep-code-tool/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 02:00:43 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/wingrep-code-tool/</guid>
		<description><![CDATA[I&#8217;ve gained a bit of notoriety at work as the guru of little freeware tools to automate tasks, solve odd problems, and generally enable lazyness through letting tools do the work for me.  As such, you should blindly follow what I recommend for you see, I&#8217;m not here to make a profit, I&#8217;m here [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Heavens_Gate" title="Your grepping time is nigh! I hope you have your Nikes ready."><img src="http://www.mikeduncan.com/wp-content/uploads/2007/07/heavens-gate.jpg" alt="Your grepping time is nigh!" class="left frame" /></a>I&#8217;ve gained a bit of notoriety at work as the guru of little freeware tools to automate tasks, solve odd problems, and generally enable lazyness through letting tools do the work for me.  As such, you should blindly follow what I recommend for you see, <strong>I&#8217;m not here to make a profit, I&#8217;m here to *be* a prophet.</strong> Here is one of my number-one gun tools that you really must have no matter what IDE you use or what language you code with (or which sentences you end with prepositions). Enter <strong>Wingrep</strong>.  No, really.</p>
<p><strong><a href="http://www.wingrep.com/" title="Home of wingrep" target="_blank">WinGrep</a> </strong>is a great, small, free GUI tool that lets you find all the files that in their content match a given string or regex recursively through any directory tree.  Pick a dir, type in a string, and by the power of Grayskull, there you have it, near-instant matches served up all wiggly and steamy.  As you review the files with matches, the GUI shows you the previous and next 5 matching lines around the match to put everything in delightful context.</p>
<p>This is of course similar to the purported purposes of windows explorer, Visual Studio search, and Google desktop with the minor exceptions of:</p>
<p>1) actually working (as in the case of explorer search)<br />
2) being application / language independent (VS)<br />
3) searching through ALL text file types that programmers care about (google desktop)</p>
<p>Check it:</p>
<p><a href="http://www.wingrep.com/" title="How cool did you really expect this to look?"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/07/wingreppic.png" alt="How cool did you really expect this to look?" class="center frame" /></a></p>
<p>This bad boy will also do hot reg-ex search-and-replaces and is fast as all the spice girls put together.  Not a day goes by that I don&#8217;t use this pig, and I love it every time. If this app were any more ass-kicking it would probably spray out those <a href="http://en.wikipedia.org/wiki/Isle_of_Mann" title="Isle of Mann">Isle of Mann</a> ass-kicking-machine-flags<a href="http://en.wikipedia.org/wiki/Flag_of_the_Isle_of_Man" title="Greatest Flag in the whole world ever."><img src="http://www.mikeduncan.com/wp-content/uploads/2007/07/ass-kicking-machine.jpg" alt="Greatest Flag in the whole world ever." class="right frame" /></a> all over your screen like you just p0wned solitaire for the 723th time. (Which would be totally awesome.)   It&#8217;s free to download and use indefinitely provided you blithely ignore the nag screen or you can register for the trifling sum of $30. (I think that equates to about $524 Canadian or something like 1/234th of a euro, but you should probably check that for yourself.)</p>
<p>This is really one of those must have apps that I would install instantly upon reinstalling a new box.  Quick, easy, app-agnostic, no more or less features than you need.</p>
<p>5 out of 5<br />
<img src="http://www.mikeduncan.com/wp-content/uploads/2007/07/invaders_green_rank_5.gif" /></p>
<p>Have a secret little app you love thats not totally played out on <a href="http://www.lifehacker.com" title="yeah.">Lifehacker</a> or hasn&#8217;t been on <a href="http://www.hanselman.com/blog/ScottHanselmans2006UltimateDeveloperAndPowerUsersToolListForWindows.aspx" title="Tools a plenty.">Hanselman&#8217;s tools list</a> for the last 2 years?  Lay it on me with some hot comments!  Do it!</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Fwingrep-code-tool%2F';
  addthis_title  = 'Windows+Grep+-+a+free+top-5+must-have+developer+tool+you+really+want.+Trust+me.';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/wingrep-code-tool/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/wingrep-code-tool/</feedburner:origLink></item>
		<item>
		<title>The quick skinny on Domain Driven Design (DDD)</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/187895772/</link>
		<comments>http://www.mikeduncan.com/domain-driven-design-explained/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 12:07:35 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[grokable]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/domain-driven-design-explained/</guid>
		<description><![CDATA[This post is another one of my quick cheat sheets to an alt-coder buzz phrase being bandied about, in this case Domain Driven Design.  After reading this you should be able to understand what the A-Listers are talking about when they post about how they emphasize DDD to their teams along with TDD, IoC, [...]]]></description>
			<content:encoded><![CDATA[<p>This post is another one of my quick cheat sheets to an alt-coder buzz phrase being bandied about, in this case Domain Driven Design.  After reading this you should be able to understand what the A-Listers are talking about when they post about how they emphasize DDD to their teams along with<a href="http://en.wikipedia.org/wiki/Test-driven_development" title="Test Driven Development"> TDD</a>, <a href="http://en.wikipedia.org/wiki/Inversion_of_Control" title="Inversion Of Control">IoC</a>, and F73-persistence (Ok, I just made that last one up).</p>
<p>First off lets clear up a quick point. The &#8216;Domain&#8217; in Domain Driven Design refers to a domain of expertise or business such as banking, aerospace, llama farming, etc. It does not in this case refer to any sort of technical-system use of the word domain like a Microsoft network domain or any other such imaginary nonsense.</p>
<p>For comparison, here is a quick bullet list of typical tighty-whitey, non-DDD project:</p>
<ul>
<li>Some non-social-liability business analyst or project manager (PM) meets with business guys / gals to get the specs.</li>
</ul>
<ul>
<li>Said PM learns from business people about the business, figures out how their business need might translate into an app or website or whatever.</li>
</ul>
<ul>
<li>PM talks to technical lead of software team, describes what the desired inputs, outputs, and business rules of the future system are.</li>
</ul>
<ul>
<li>Dev team architects and jams out code to meet those ins-and-outs requirements based upon their best coding practices for making the calculations calculate and the reports report and wraps it up in an interface mocked up by emo Apple dude or chick.</li>
</ul>
<p>Ok, with that in mind then, <span style="color: red"><strong>here is the fundamental DDD gist</strong></span>:</p>
<p>Domain Driven Design is a OOP software design which models itself on the way a given business domain works in the <strong>real business world</strong>.  The classes, objects, naming of things, code mechanisms, etc are designed as best as possible to match the way the business that the software is being written for really functions.  Rather than an end product that just takes the requisite ins and produces the requisite outs via developers coding whatever formulas and utilities they can come up with to satisfy the requirements, you strive for a product that under the code hood, actually *works* the way that the real domain does.</p>
<p><strong>The DDD Process:</strong></p>
<p>DDD attempts to level the information playing field, mixing the actual <strong>developers</strong> with the <strong>board room</strong> domain experts so that everyone speaks about business concepts in a shared vocabulary.  While these colliding worlds may be shocking on a number of fashion, hygienic, and social levels, it is crucial to the process.</p>
<p><a href="http://www.mikeduncan.com/wp-content/uploads/2007/06/nerdsintoboardroom.jpg" title="Get Nerds Into the board room"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/06/nerdsintoboardroom.jpg" alt="Get Nerds Into the board room" class="center border" /></a>These real developers work with the business domain folks to determine how the domain works, modeling out a proposed system using a more generic UML-like workflow diagram that both the developers and business folks can understand.  This visual model expresses the way the domain entities (customers, factories, widgets) and business rules work in a way that is compatible with turning into real code.</p>
<p><a href="http://www.mikeduncan.com/wp-content/uploads/2007/06/asskickingmodel.jpg" title="Domain Model everyone can understand"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/06/asskickingmodel.jpg" alt="Domain Model everyone can understand" class="center border" /></a></p>
<p>When it comes to hacking up the actual code, classes and objects are named according to the vocabulary of the domain and try to interact with each other in a way that as close as possible that reflects the way the domain works.  This type of scenario lends itself to certain types of OOP coding practices such as services for business rules, factory patterns for object creation, modules for delineating big like sections of a domain (say shipping vs accounting) and loose coupling.  The domain layer shouldn&#8217;t care about the UI above or the DB below.</p>
<p>Ok, now that you know the basics of Domain Driven Design, don&#8217;t overestimate the value of referring to it exclusively as DDD with an air of sophisticated arrogance.  This is very useful for intimidating the buzzword-weak who will be too emasculated to publicly ask what it means thereby reinforcing your technical bad-assitude.  Forget winning friends, influencing people is where its at!</p>
<p>Linkification:</p>
<p><a href="http://www.jpboodhoo.com/blog/" title="JPBDDD">JP BoodHoo</a> - DDD proponent</p>
<p>Not terribly clear <a href="http://www.domaindrivendesign.org/" title="Not hotly written like this page is">&#8216;official&#8217; DDD site</a></p>
<p>Free 100 page-ish ebook &#8216;<a href="http://www.infoq.com/news/2006/12/domain-driven-design" title="Free Ebook I found on DDD">Domain Driven Design Quickly</a>&#8216;</p>
<p><hints id="hah_hints"></hints></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Fdomain-driven-design-explained%2F';
  addthis_title  = 'The+quick+skinny+on+Domain+Driven+Design+%28DDD%29';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/domain-driven-design-explained/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/domain-driven-design-explained/</feedburner:origLink></item>
		<item>
		<title>Head First Design Patterns Cover Chick sighted yet again!</title>
		<link>http://feeds.feedburner.com/~r/mikeduncan/~3/187895773/</link>
		<comments>http://www.mikeduncan.com/head-first-design-patterns-cover-chick-sighted-yet-again/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 00:41:55 +0000</pubDate>
		<dc:creator>Duncan</dc:creator>
		
		<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://www.mikeduncan.com/head-first-design-patterns-cover-chick-sighted-yet-again/</guid>
		<description><![CDATA[Alt-coder hot seller Head First Design Patterns is notable for a couple of reasons.  For one thing, it&#8217;s a great, super accessible, upbeat discussion of design patterns that is about as close to &#8216;fun&#8217; is you are likely to find in a tech book.  (Boodhoo, Gray, and others in the know all agree.) [...]]]></description>
			<content:encoded><![CDATA[<p>Alt-coder hot seller <a href="http://www.oreilly.com/catalog/hfdesignpat/cover.html" title="Head First Design Patterns Close Up" target="_blank">Head First Design Patterns</a> is notable for a couple of reasons.  For one thing, it&#8217;s a great, super accessible, upbeat discussion of design patterns that is about as close to &#8216;fun&#8217; is you are likely to find in a tech book.  (<a href="http://www.jpboodhoo.com/blog/" title="This guy likes design patterns">Boodhoo</a>, <a href="http://graysmatter.codivation.com/" title="This guy also likes desgin patterns.">Gray</a>, and others in the know all agree.) While that fact alone makes this title stand out, more immediately notable off the shelf is the brassy, semi in-your-face, pop-punky, top down perspective stock photography riot grrrl chick on the book&#8217;s cover.</p>
<p><a href="http://www.mikeduncan.com/wp-content/uploads/2007/06/headfirstcover.jpg" title="Head First Design Patterns Chick"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/06/headfirstcover.jpg" alt="Head First Design Patterns Chick" class="center frame" /></a></p>
<p>In a tech book world populated by drab blue and white, or &#8216;dare to be different&#8217; uninspired red and white covers, this nameless Gwen-Stefani-inspired glossy shot stands out in much the same way that the occasional &#8220;nerds rogue gallery actual author&#8217;s mugshots&#8221; cover theme doesn&#8217;t. (See <a href="http://www.wrox.com/WileyCDA/" title="WROX, not metrosexual." target="_blank">wrox</a> et al.) <a href="http://www.mikeduncan.com/wp-content/uploads/2007/06/yeah.gif" title="50s Sweet Bowling Ad"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/06/yeah.gif" alt="50s Sweet Bowling Ad" class="frame left" /></a>One wonders why is it that O&#8217;Reilly&#8217;s Head First is the only imprint with a nod to marketing in their design? Is the stereotype of the fashionless, sexless, non-metrosexual programmer so ingrained in popular culture that even old fashioned Madison Avenue 1950&#8217;s Marketing 101 doesn&#8217;t apply? In a still predominantly male field with a sea of book titles, here we have the single tome of import that has bothered to bring sexy back.</p>
<p>&#8220;Gwen&#8221; has been mentioned on other blogs inasmuch as she has been supposedly sighted time to time in clip art form promoting several other products. Many of the claimed sightings have been transient marketing campaigns that are &#8220;impossible to still link to&#8221; and have been written off as possibly apocryphal if not just pure BS.</p>
<p>With this in mind, you can imagine my surprise then when I happened upon this advertisement while on vacation with the in-laws last week in Cape Cod.</p>
<p><a href="http://www.mikeduncan.com/wp-content/uploads/2007/06/hfdpchickgetsaround1.jpg" title="Head First Design Patterns Cover Chick Redux"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/06/hfdpchickgetsaround1.jpg" alt="Head First Design Patterns Cover Chick Redux" class="center frame" /></a></p>
<p>Yes indeed pattern and practice fanboys, it&#8217;s unquestionably her. You&#8217;ll note the necklace only alluded to in HFDP, the dangerous hair, stealthy kung fu pants, semi-threatening smile, etc. There is <strong><em>No Doubt</em></strong> it&#8217;s her. Oh yeah, I just said that.</p>
<p><a href="http://www.mikeduncan.com/wp-content/uploads/2007/06/head-first-gwen-stefani.jpg" title="NOT the Head First Design Patterns Cover Chick"><img src="http://www.mikeduncan.com/wp-content/uploads/2007/06/head-first-gwen-stefani.jpg" alt="NOT the Head First Design Patterns Cover Chick" class="left frame" /></a><br />
This time Gwen is quite fittingly extolling the virtues of temporary tattoos, and has the aggressive confidence to do so from a slightly more head-on angle. Booyah.</p>
<p>In summation, Head On Design Patterns is a great book, but most everyone knows that. The inside skinny revealed here first at mikeduncan.com though, is that if you want to represent when dropping some pattern bombs around the office your cred goes way up when sporting a fierce Singleton or Factory tattoo on your mouse-wrangling bicep, revealed when your sleeve gets rolled up as a matter of course when taking over to drive your co-workers machine. If you want A-list status and your office is more casual attire, consider a tight tribal Proxy neck tat climbing out of your <a href="http://en.wikipedia.org/wiki/Dropkick_Murphies" title="Dropkick Murphys are frickin sweet.">Dropkick Murphys</a> teeshirt. For sure it takes some cajones to &#8220;own it&#8221;, but this falls into the &#8216;wimps need not apply&#8217; category of best practices.</p>
<p>DISCLAIMER: Singleton / Factory tattoo washes off under normal usage in 10-14 days.</p>
<p><hints id="hah_hints"></hints></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.mikeduncan.com%2Fhead-first-design-patterns-cover-chick-sighted-yet-again%2F';
  addthis_title  = 'Head+First+Design+Patterns+Cover+Chick+sighted+yet+again%21';
  addthis_pub    = 'mduncan';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeduncan.com/head-first-design-patterns-cover-chick-sighted-yet-again/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeduncan.com/head-first-design-patterns-cover-chick-sighted-yet-again/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.365 seconds -->
