<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>private override</title>
	
	<link>http://jonfuller.codingtomusic.com</link>
	<description />
	<lastBuildDate>Wed, 24 Feb 2010 18:32:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jonfuller" /><feedburner:info uri="jonfuller" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/jonfuller" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fjonfuller" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Managing Distractions</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/wd2zqpSAuJI/</link>
		<comments>http://jonfuller.codingtomusic.com/2010/02/24/managing-distractions/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 18:32:39 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2010/02/24/managing-distractions/</guid>
		<description><![CDATA[I’ve recently started to practice the pomodoro technique.&#160; Holy F!&#160; This super simple practice has uncovered how much time I completely waste in a workday (not to mention my non-work time).
I feel like I’m cheating myself and my customer (read employer), so I’m going to do something about it.&#160; I’ve never read much of Covey, [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve recently started to practice the <a href="http://www.pomodorotechnique.com/">pomodoro</a> <a href="http://www.pomodorotechnique.com/">technique</a>.&#160; Holy F!&#160; This super simple practice has uncovered how much time I <strong>completely</strong> waste in a workday (not to mention my non-work time).</p>
<p>I feel like I’m cheating myself and my <em>customer</em> (<em>read employer</em>), so I’m going to do something about it.&#160; I’ve never read much of <a href="https://www.stephencovey.com/">Covey</a>, but <a href="http://twitter.com/shanselman">@shanselman</a> mentioned Covey’s quadrants (see a mind-map version below) in this <a href="http://vimeo.com/7680468">video</a> I watched the other day.&#160; For me, living only in quadrants 1 &amp; 2 (the top two) is all good, but there are times when I basically want to just ‘check out’ and be a bum (Office Space style).&#160; My goal is to be intentional and choose when I’m doing that, rather than just letting it happen.</p>
<p><a href="http://mindmapblog.wordpress.com/2008/06/21/stephen-coveys-time-management-matrix-in-a-mindmap/"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="time-management-1" border="0" alt="time-management-1" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2010/02/timemanagement1.jpg" width="467" height="386" /></a> </p>
<h4>Baby Steps</h4>
<p>The pomodoro technique is a great start to help manage and become aware, but I need some help.&#160; Here’s what I set up for myself at this point:</p>
<ul>
<li><a href="http://github.com/jonfuller/pomodo7o">Pomodo7o</a> with Growl Plugin </li>
<li><a href="http://www.growlforwindows.com/gfw/">Growl</a> using the Visor notification (I don’t like toast, so this is great for me) </li>
<li><a href="http://virtuawin.sourceforge.net/">VirtuaWin</a> (for Windows, this is built into most other OS’s, e.g. Spaces on OSX) </li>
<li>Throw ALL distracting things to a second VirtuaWin workspace.
<ul>
<li>Gmail </li>
<li>GReader </li>
<li>Twitter (turn off twitter notifications) </li>
<li>Outlook (turn off new mail toast and new mail tray indicator) </li>
<li><a href="http://www.evernote.com/">Evernote</a> (turn off any messages) </li>
<li>Windows Live Writer </li>
<li>Time tracking applications </li>
<li>Anything else that dings/hoots/toasts or otherwise distracts you </li>
</ul>
</li>
<li>Only check email (Gmail <strong>and </strong>Outlook) during pomodoro breaks or other scheduled times </li>
<li>Only check twitter during pomodoro breaks or other scheduled times (I’ve started only checking twitter before I start work, and right before I head home). </li>
<li>Hook <a href="http://www.growlforwindows.com/plugins/outlook">Outlook into Growl</a> so I don’t miss meetings </li>
<li>Keep a text file or post-it note ready to capture interruptions.&#160; Most interruptions can be logged, and then dealt with in a subsequent pomodoro. </li>
</ul>
<p>I only allow myself to go over to my other desktop during a pomodoro break.&#160; This makes it really easy to know when I’m going off task.&#160; It also makes it REALLY hard to find something wasteful to do.&#160; There isn’t anything in my “workspace” that is wasteful anymore, so if I do ANYTHING in there, it’ll probably be productive.</p>
<h4>Feeling Too Disconnected?</h4>
<p>I’ve got the shakes!&#160; Doing this thing cold turkey is hella hard.&#160; So here’s a patch to wean you off.</p>
<p>Download <a href="http://www.mageuzi.com/trowl/">Trowl</a> and hook up @’s and DM’s (and select other folks you might need to hear from throughout the day).&#160; Now those tweets will be Growled at you.&#160; I don’t get @’ed or DM’ed too often, so it’s not terribly distracting, but has high reward in helping to reduce the withdrawal symptoms.</p>
<p>&#160;</p>
<p>I’m just starting, so this is my first attempt really.&#160; How do you manage?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=wd2zqpSAuJI:XqDsbog1Wj0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=wd2zqpSAuJI:XqDsbog1Wj0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=wd2zqpSAuJI:XqDsbog1Wj0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=wd2zqpSAuJI:XqDsbog1Wj0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=wd2zqpSAuJI:XqDsbog1Wj0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/wd2zqpSAuJI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2010/02/24/managing-distractions/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2010/02/24/managing-distractions/</feedburner:origLink></item>
		<item>
		<title>Yet Another Pomodoro App</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/2i6Jm752toc/</link>
		<comments>http://jonfuller.codingtomusic.com/2010/02/11/yet-another-pomodoro-app/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 14:16:34 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2010/02/11/yet-another-pomodoro-app/</guid>
		<description><![CDATA[No, it isn’t called YAPA.
Basically, I wanted a gentle introduction to the Pomodoro Technique, so I thought, what better way to introduce myself to it, than to build a pomodoro app while pomodoro’ing (new word, probably).
So I whipped up an app that uses some of the fancy taskbar features of Windows 7.&#160; If you don’t [...]]]></description>
			<content:encoded><![CDATA[<p>No, it isn’t called YAPA.</p>
<p>Basically, I wanted a gentle introduction to the <a href="http://www.lmgtfy.com/?q=pomodoro+technique">Pomodoro Technique</a>, so I thought, what better way to introduce myself to it, than to build a pomodoro app while pomodoro’ing (new word, probably).</p>
<p>So I whipped up an app that uses some of the fancy taskbar features of Windows 7.&#160; If you don’t have Windows 7, this thing is going to be pretty useless to you.</p>
<p>Intoducing… Pomodo7o:</p>
<ul>
<li>Simple </li>
<li>Provides minimal distraction (to keep flow) </li>
<li>25/5 Pomodoros </li>
<li>Pause/Reset [I know, I know, but sometimes you just gotta] </li>
<li>Awesome </li>
<li>Taskbar Progress Indicator </li>
<li>Taskbar Thumbnail Controls </li>
</ul>
<p>You may not know what the heck I’m talking about on the last two bullets and they probably sound like some bullet point on a marketing brochure created by the marketing drones at Microsoft (wait… that is where those names came from).&#160; They’re both Windows 7 features which I think are pretty cool.</p>
<p>Here’s a couple screenshots for ya… the first one shows the progress indicator.&#160; The progress is how far you are into your pomodoro.&#160; The second one shows the thumbnail controls when you hover over the tomato icon.&#160; You can pause or reset your current pomodoro using those buttons.</p>
<p><a href="http://jonfuller.codingtomusic.com/wp-content/uploads/2010/02/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2010/02/image_thumb.png" width="94" height="65" /></a>&#160;</p>
<p><a href="http://jonfuller.codingtomusic.com/wp-content/uploads/2010/02/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2010/02/image_thumb1.png" width="244" height="226" /></a> </p>
<p>Take it or leave it… either way, it’ll be a fun toy to play with.</p>
<p>Feedback/Requests: <a href="http://pomodo7o.uservoice.com">http://pomodo7o.uservoice.com</a>     <br />Source: <a href="http://github.com/jonfuller/pomodo7o">http://github.com/jonfuller/pomodo7o</a>     <br />Download: <a title="http://github.com/jonfuller/pomodo7o/downloads" href="http://github.com/jonfuller/pomodo7o/downloads">http://github.com/jonfuller/pomodo7o/downloads</a>     <br />Bug Reports: <a title="http://github.com/jonfuller/pomodo7o/issues" href="http://github.com/jonfuller/pomodo7o/issues">http://github.com/jonfuller/pomodo7o/issues</a></p>
</p>
<p>Out!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=2i6Jm752toc:2BMFP4ixIoY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=2i6Jm752toc:2BMFP4ixIoY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=2i6Jm752toc:2BMFP4ixIoY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=2i6Jm752toc:2BMFP4ixIoY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=2i6Jm752toc:2BMFP4ixIoY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/2i6Jm752toc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2010/02/11/yet-another-pomodoro-app/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2010/02/11/yet-another-pomodoro-app/</feedburner:origLink></item>
		<item>
		<title>Apprenticeship/Mentorship Success!</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/dtx7Tj9v0Ys/</link>
		<comments>http://jonfuller.codingtomusic.com/2010/01/25/apprenticeshipmentorship-success/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 18:26:27 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2010/01/25/apprenticeshipmentorship-success/</guid>
		<description><![CDATA[One of my apprentices from this past summer just accepted a job… at another company.  I’m totally pumped for him, but most of the people I brag to about it say the same thing with the same reaction:
&#60;sigh_of_defeat&#62;Shoot, we didn’t get him.&#60;/sigh_of_defeat&#62;
As if we failed miserably.
For me, the apprenticeship/intern process has the following 4 goals [...]]]></description>
			<content:encoded><![CDATA[<p>One of my <a href="http://twitter.com/hammerdr">apprentices</a> from this past summer just accepted a job… at <a href="http://www.thoughtworks.com/">another company</a>.  I’m totally pumped for him, but most of the people I brag to about it say the same thing with the same reaction:</p>
<blockquote><p>&lt;sigh_of_defeat&gt;Shoot, we didn’t get him.&lt;/sigh_of_defeat&gt;</p></blockquote>
<p>As if we failed miserably.</p>
<p><strong>For me</strong>, the apprenticeship/intern process has the following 4 goals (in order of importance, most to least).</p>
<ul>
<li>Teach and develop the apprentice as much as they can possibly absorb.  This includes technical skills, sof-tech skills (like how to learn, what it means to be an engineer, passion, etc.), and soft skills (e.g. how to deal with your lead/PM/that annoying guy next door, etc.).</li>
<li>Learn from the apprentice as much as I possibly can.  These guys are at school at an amazing time with amazing things happening.  Leech this new knowledge… it’s relatively free. (I’m unapologetically selfish in this regard… I love to learn <img src='http://jonfuller.codingtomusic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Develop an environment where the apprentice feels comfortable with his mentor, and can start to learn and teach with his mentor back and forth… <a href="http://blog.objectmentor.com/articles/2009/08/17/the-sculptors">a true partnership</a>.</li>
<li>Oh yeah, the last/least benefit… recruiting.  (Sorry <a href="http://www.sep.com/ohri">Raman</a>)</li>
</ul>
<p>If at the end of this he happens to also be productive, great, win-win… but that isn’t the point (again, that’s my opinion).</p>
<p>After that list, does this look like defeat?  Not to me.  This looks like a dead-on success.  We NAILED it.  Let’s celebrate!  Congrats Man.  Next time we meet, I’m sure I’ll have something to learn.</p>
<p>[I’m at least going to pretend I played some small part in this outcome.  Whether I really did or not, is debatable.]</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=dtx7Tj9v0Ys:LKc0T7g_C5I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=dtx7Tj9v0Ys:LKc0T7g_C5I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=dtx7Tj9v0Ys:LKc0T7g_C5I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=dtx7Tj9v0Ys:LKc0T7g_C5I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=dtx7Tj9v0Ys:LKc0T7g_C5I:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/dtx7Tj9v0Ys" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2010/01/25/apprenticeshipmentorship-success/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2010/01/25/apprenticeshipmentorship-success/</feedburner:origLink></item>
		<item>
		<title>Single File Split Buffers in Visual Studio!</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/FS6sWfbcDv0/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/12/11/single-file-split-buffers-in-visual-studio/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 16:47:52 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2009/12/11/single-file-split-buffers-in-visual-studio/</guid>
		<description><![CDATA[Man, I’d searched for this feature time and time again.  And finally found it here: http://www.kevinwilliampang.com/post/Visual-Studio-Split-Views.aspx
If you don’t want to follow the link…
Just double click that guy, or drag it downward, and you’ve split your file into two buffers.  Awesomeness.

]]></description>
			<content:encoded><![CDATA[<p>Man, I’d searched for this feature time and time again.  And finally found it here: <a href="http://www.kevinwilliampang.com/post/Visual-Studio-Split-Views.aspx">http://www.kevinwilliampang.com/post/Visual-Studio-Split-Views.aspx</a></p>
<p>If you don’t want to follow the link…</p>
<p>Just double click that guy, or drag it downward, and you’ve split your file into two buffers.  Awesomeness.</p>
<p><a href="http://jonfuller.codingtomusic.com/wp-content/uploads/2009/12/split.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="split" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2009/12/split_thumb.png" border="0" alt="split" width="644" height="338" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=FS6sWfbcDv0:Vhz_76Fm09U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=FS6sWfbcDv0:Vhz_76Fm09U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=FS6sWfbcDv0:Vhz_76Fm09U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=FS6sWfbcDv0:Vhz_76Fm09U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=FS6sWfbcDv0:Vhz_76Fm09U:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/FS6sWfbcDv0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/12/11/single-file-split-buffers-in-visual-studio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/12/11/single-file-split-buffers-in-visual-studio/</feedburner:origLink></item>
		<item>
		<title>Don’t Single Me out!</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/W_MHO9sPixk/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/11/18/dont-single-me-out/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 02:10:04 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[inversion of control]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2009/11/18/dont-single-me-out/</guid>
		<description><![CDATA[In my few days of being a developer, I’ve heard and seen lots of talk about Singletons.&#160; Things like
Singletons are teh suck.&#160; Don’t use them.&#160; EVAR.

to
Singleton’s saved my life and marriage!

In fact, I might’ve been the person that said both of these… gasp!
I never like to speak in absolutes, so I’ll say it this way [...]]]></description>
			<content:encoded><![CDATA[<p>In my few days of being a developer, I’ve heard and seen lots of talk about Singletons.&#160; Things like</p>
<blockquote><p>Singletons are teh suck.&#160; Don’t use them.&#160; EVAR.</p>
</blockquote>
<p>to</p>
<blockquote><p>Singleton’s saved my life and marriage!</p>
</blockquote>
<p>In fact, I might’ve been the person that said both of these… gasp!</p>
<p>I never like to speak in absolutes, so I’ll say it this way (see what I did there?)… if you’re striving to implement a singleton, you’re <em>probably </em>wrong.&#160; For all you guys that are <em>right, </em>I guess you’re right, and you can leave now, I guess.&#160; <a href="http://zombo.com/">This might help you out</a>.</p>
<p>I was reading a blog from <a href="http://codebetter.com/blogs/patricksmacchia/default.aspx">Mr. Dependency</a> where he was talking about statics and basically what amounts to <a href="http://codebetter.com/blogs/patricksmacchia/archive/2009/11/16/back-to-basics-usage-of-static.aspx">global state</a>, and how that<a href="http://jonfuller.codingtomusic.com/wp-content/uploads/2009/11/ultimategeeksmultitoolhammer.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="ultimate-geeks-multi-tool-hammer" border="0" alt="ultimate-geeks-multi-tool-hammer" align="left" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2009/11/ultimategeeksmultitoolhammer_thumb.jpg" width="244" height="225" /></a> binds you into globally available, global data, which usually (always?) turns into anarchy.</p>
<p>How do we always get ourselves into this mess if we know it’s bad in the first place?&#160; Well, some of us (those who are now zombocomming, from above) don’t know it’s bad in the first place, and the rest of us probably do it because it’s easy to <a href="http://en.wikipedia.org/wiki/Singleton_pattern">implement</a>, and we understand it.&#160; Long story short, we can do the singleton implementation in our sleep, so we pull out the singleton hammer, and smack the nail.&#160; It always goes in a little sideways, but at least it goes in.</p>
<p>Maybe we should be using a different <a href="http://sethgodin.typepad.com/seths_blog/2009/11/hammer-time.html">hammer</a>?</p>
<p>What I’d like to do now, is propose to split singleton in two.&#160; I think there are two distinct responsibilities that the current thought of ‘singleton’ introduces. It:</p>
<ul>
<li>Manages Session Scoping/Lifecycle/Lifestyle (albeit, poorly, only one strategy is available)</li>
<li>Disables the ability to create more</li>
</ul>
<p>When I talk about this out loud, I call the two approaches the <em>singleton implementation pattern</em>, and <em>singleton lifecycle</em>.</p>
<p>What I am a fan of, is the singleton lifecycle.&#160; You create one of those objects, and use it throughout the application.&#160; You don’t get messy and allow global access to it all over the place (which necessarily happens when you have global state).&#160; You intentionally inject it to collaborators, and&#160; intentionally don’t inject it to non-collaborators (don’t just hand this guy out willy-nilly, he’s important).</p>
<p>So naturally, the naysayers ask/demand:</p>
<blockquote><p>How do you manage that there is a public constructor on this class!?&#160; Dev’s are going to be new’ing this thing up all over the place!</p>
</blockquote>
<p>I say:</p>
<blockquote><p>False.&#160; Use a DI tool and let it manage it for you.&#160; Or establish a convention with your team, and enforce it through social contracts. </p>
</blockquote>
<p>Both of these approaches allow your scope lifecycle turn into whatever you want at any time, in case you decide global isn’t what you really want.&#160; It can be application session scoped, or some other scope, test scoped, or whatever you want… incredibly flexible.</p>
<p>If you go with the DI tool approach, instead of tying yourself to a particular scope, you can now have any scope you want, by changing a configuration parameter.&#160; Delaying decisions until the latest responsible moment… seems like I’ve <a href="http://www.poppendieck.com/pdfs/Interview.pdf">heard</a> <a href="http://www.codinghorror.com/blog/archives/000705.html">that</a> <a href="http://asserttrue.blogspot.com/2009/04/principle-of-last-responsible-moment_11.html">one</a> <a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/01/18/136648.aspx">before</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=W_MHO9sPixk:TDWdpEHhmKs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=W_MHO9sPixk:TDWdpEHhmKs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=W_MHO9sPixk:TDWdpEHhmKs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=W_MHO9sPixk:TDWdpEHhmKs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=W_MHO9sPixk:TDWdpEHhmKs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/W_MHO9sPixk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/11/18/dont-single-me-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/11/18/dont-single-me-out/</feedburner:origLink></item>
		<item>
		<title>every team needs a toolsmith</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/qI8aHXWg7QY/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/11/11/every-team-needs-a-toolsmith/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:17:39 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2009/11/11/every-team-needs-a-toolsmith/</guid>
		<description><![CDATA[
Every software project is different, and there are subtleties associated with each one.  Every project  requires unique and specific tools, and we need someone to build them, or each member of the team needs the freedom and responsibility to do it him/herself.
I have very little (zero?) tolerance for waste when it comes to automatable processes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.premiere.com.mx/premiere/files/u7/the_dawn_of_man_2001_a_space_odyssey-400-400.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="the_dawn_of_man_2001_a_space_odyssey-400-400" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2009/11/the_dawn_of_man_2001_a_space_odyssey400400.jpg" border="0" alt="the_dawn_of_man_2001_a_space_odyssey-400-400" width="244" height="244" align="right" /></a></p>
<p>Every software project is different, and there are subtleties associated with each one.  Every project  requires unique and specific tools, and we need someone to build them, or each member of the team needs the freedom and responsibility to do it him/herself.</p>
<p>I have very little (zero?) tolerance for waste when it comes to automatable processes that aren’t automated because “we don’t have time”, or “we’ll discuss it later” and then it gets dropped, or any other reason that is less than justified.</p>
<p>Zero Friction Development is what I’m going for here. (<a href="http://codebetter.com/blogs/rodpaddock/archive/2009/07/03/move-the-chair.aspx">here is an article</a> that I found interesting around this topic… it’s not really our fault, it’s built into our nature)</p>
<p>What kinds of things am I talking about?  Anything that slows down my development that can be automated away to make me a happier developer.  Whoa, wait, <em>happy</em>? Is that a requirement I have of my workplace?  Absolutely.  I can put up with periods of un-happiness, but long-term unhappiness is not acceptable (for me).  Oops, sorry, <em>almost </em>derailed there for a minute. <img src='http://jonfuller.codingtomusic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Specific frictions I’ve addressed or have seen addressed…  just so you can get an idea about the things that I’ve seen done, that might trigger an idea for you:</p>
<ul>
<li><strong>Code-diff generation</strong> – On a previous project, all the code for our product was stored in the database itself (<a href="http://www.intersystems.com/cache/index.html">Intersystems’ Cache</a>), so we didn’t have a real decent way to generate diff-sets for code review.  So we wrote a tool to do it.  A previously laborious task (at least 30 minutes for a simple changeset), with much room for human error, turned into a 30-second, enter in a task number and press ‘Go’ joy.</li>
<li><strong>Code Generation</strong> – On a previous project the best way to get where we needed was simply to inspect the structure of a piece of data, and then generate code to deal with it.  You’ve probably done this one before… many times.</li>
<li><strong>Source Control Integration</strong> – Again with the <a href="http://www.intersystems.com/cache/index.html">Cache</a> project, we needed a way to version our code using standard tools.  We wrote a tool to bridge between the file system (for TortoiseCVS, or any other VCS) and the database storage.</li>
<li><strong>Client requires code-diff uploaded to their CMS for each completed task</strong> – Seems like a bogus business process, but it needs done.  It’s painful because their CMS is slow and clunky.  So I wrote a ruby script, paired with selenium, to automatically create a diff of my code and upload it to their CMS with some browser automation.</li>
<li><strong>Data generation</strong> – Ever need test datasets?  Yeah, me too.  Whip out some ruby and get it done.</li>
<li><strong>Tool integration</strong> – ever have two systems that need to be kept in sync?  Yeah, it’s a pain, especially when neither have an API.  What they both usually have though is either a command line interface or a web interface.  Both of those are easy enough to script with, given some ruby magic and some browser automation.</li>
<li><strong>Time tracking</strong> – There have got to be 8 billion time tracking tools out there… if one doesn’t match your style, bust out a quick one that matches the way you work.  Need it to integrate, there’s probably either a web interface, command line, or API, go for it… it’ll make you happier (hmm… there that is again!).</li>
</ul>
<p>What other things have you automated?  What are your thoughts on the toolsmith?  There is a whole book about doing this type of stuff with Ruby.  I’ve never read it, but I’ve heard it’s pretty good: <a href="http://www.pragprog.com/titles/bmsft/everyday-scripting-with-ruby">Every Day Scripting with Ruby</a>.  Another excellent book by the guys at the prag bookshelf is <a href="http://pragprog.com/titles/auto/pragmatic-project-automation">Pragmatic Project Automation</a>.  It deals a lot with things we already do (build automation), but takes it further as well.  Here is an intro: <a href="http://media.pragprog.com/titles/auto/introduction.pdf">Pragmatic Project Automation Intro</a>.</p>
<p>For sake of full disclosure, <a href="http://www.lmgtfy.com/?q=every+team+needs+a+toolsmith">this is not a new idea</a>, and I’m not claiming to have come up with it.  It’s been tossed around for years, just wanted to bring it up again.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=qI8aHXWg7QY:U7j1RmE30Cg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=qI8aHXWg7QY:U7j1RmE30Cg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=qI8aHXWg7QY:U7j1RmE30Cg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=qI8aHXWg7QY:U7j1RmE30Cg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=qI8aHXWg7QY:U7j1RmE30Cg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/qI8aHXWg7QY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/11/11/every-team-needs-a-toolsmith/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/11/11/every-team-needs-a-toolsmith/</feedburner:origLink></item>
		<item>
		<title>Question Debugging</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/uH1zH1eLHgc/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/10/16/question-debugging-2/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 12:44:35 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[people stuff]]></category>
		<category><![CDATA[self improvement]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2009/10/16/question-debugging-2/</guid>
		<description><![CDATA[There isn’t much I dislike more than asking a question at a high level and getting an answer back that feels demeaning because the answerer explains everything to me from the ground up [without ever pausing to breathe or giving me an opportunity to say ‘Yeah, I know, move on’]. I typically already understand the [...]]]></description>
			<content:encoded><![CDATA[<p>There isn’t much I dislike more than asking a question at a high level and getting an answer back that feels demeaning because the answerer explains <em><strong>everything</strong></em> to me from the ground up [without ever pausing to breathe or giving me an opportunity to say ‘Yeah, I know, move on’]. I typically already understand the details, or don’t care at this point, which is why it's so frustrating (to me).</p>
<p>I hadn’t ever really thought [at least not too much] about how to solve this problem until I heard <a href="http://mattonrails.wordpress.com/">Matt</a> verbalize it like this a couple months ago:</p>
<blockquote><p>I first try to gauge where the person is, and try to respond at a similar level.&#160; I also adjust the response as I get visual feedback from the person as they are listening to my response.</p>
</blockquote>
<p>Whoa.</p>
<p>I have been acutely aware of a person’s inability to do this every time I ask a question ever since I heard Matt say this (Shoot!&#160; Now I’m ruined!).</p>
<p>So here is how I try to debug your question (and you) so I don’t irk you off when you come to me with a question:</p>
<ul>
<li>Think about the problem first. </li>
<li>Understand the problem/Be empathetic. </li>
<li>Assess where <em>you</em> are in the solution space of the problem, so I can give an answer in a neighborhood relevant to <em>you</em>. </li>
<li>Start <em>trying</em> to help solve the problem. </li>
<li>Be clear and specific. </li>
<li>Change my response based on any feedback I'm receiving from you (verbal or otherwise). </li>
<li>Respond with help that <strong>leads</strong> you into the pit of success. </li>
</ul>
<p>I’ve come up [involuntarily… sorry, just something I do] with a list of don’ts when I ask you a question as well:</p>
<ul>
<li>Don’t blow me away with your superior knowledge/expertise/arrogance/cockiness/awesomeness.&#160; I already know you’re awesome… that’s why I asked you! </li>
<li>Don’t drown me with inane details. </li>
<li>Don’t be condescending. </li>
<li>Don’t be vague. </li>
<li>Don’t pretend to know if you don’t.&#160; (Hint: I can tell when you don’t!) </li>
<li>Don’t yell at me, or yell about someone/something else, or go off the hook for some other reason. Not cool. </li>
</ul>
<p>Reflecting over those two lists, looks like the moral of the story: Be a good listener, be resepectful, don't be an a-hole. Sounds about right <img src='http://jonfuller.codingtomusic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Do you run into this (or think about it)? How do you try to solve it (from both sides of the question)?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=uH1zH1eLHgc:oRICr8OL4G8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=uH1zH1eLHgc:oRICr8OL4G8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=uH1zH1eLHgc:oRICr8OL4G8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=uH1zH1eLHgc:oRICr8OL4G8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=uH1zH1eLHgc:oRICr8OL4G8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/uH1zH1eLHgc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/10/16/question-debugging-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/10/16/question-debugging-2/</feedburner:origLink></item>
		<item>
		<title>Do You Own Your Tools?</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/S-DGUTgBIgY/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/10/07/do-you-own-your-tools/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 19:56:43 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/2009/10/07/do-you-own-your-tools/</guid>
		<description><![CDATA[I saw this tweet from @unclebobmartin the other day.

Why do we feel like our company ought to buy our tools for us?
This is an interesting concept to me, because, as of late, I’ve been considering pimping my work area to be mine… just as any other craftsman might.
My dad is a skilled tradesman.  He’s a [...]]]></description>
			<content:encoded><![CDATA[<p>I saw this tweet from <a href="http://twitter.com/unclebobmartin">@unclebobmartin</a> the other day.</p>
<p><a href="http://twitter.com/unclebobmartin/status/4171819210"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://jonfuller.codingtomusic.com/wp-content/uploads/2009/10/image.png" border="0" alt="image" width="244" height="137" /></a></p>
<p>Why do we feel like our company ought to buy our tools for us?</p>
<p>This is an interesting concept to me, because, as of late, I’ve been considering pimping my work area to be <em>mine</em>… just as any other craftsman might.</p>
<p>My dad is a skilled tradesman.  He’s a <a href="http://en.wikipedia.org/wiki/Moldmaker">Mould Maker</a> in a glass shop.  He’s been doing this for over 30 years… and he is what I’d call a master craftsman.  I asked about the idea of owning your own tools last weekend.  He nearly interrupted my question by saying:</p>
<blockquote><p>Yeah, I’ve got about $6000 of my own tools.</p></blockquote>
<p>I stood floored.  I had no idea.</p>
<p>Previously, I considered the idea to include things like my IDE (Visual Studio, since it is somewhat <em>expensive</em>), <a href="http://www.jetbrains.com/resharper/index.html">ReSharper</a>, <a href="http://www.jetbrains.com/profiler/index.html">Profilers</a>, Editors, <a href="http://www.ncover.com/">Static</a> <a href="http://www.ndepend.com/">Analysis</a> <a href="http://www.atlassian.com/software/clover/">Tools</a>, and more.  I also feel like this applies to books (you do read [tech] books… right?).  Someone asked me the other day:</p>
<blockquote><p>so how do you get <a href="http://www.sep.com/">SEP</a> to just buy all of your books?</p></blockquote>
<blockquote><p>… uhhh, I don’t.  I use my own money.</p></blockquote>
<p>I can only assume that all machinists have their <em>own </em>copy of the machinist handbook as well.</p>
<p>I actually do have my own copy of all the tools I [willingly] use every day.</p>
<p><strong>Do you?</strong></p>
<p>P.S.  I’ll leave you with one more thought.  I challenge you to add one more piece of equipment to your tool chest (or to at least think about it)…your dev machine.  Should your company provide you with a dev machine?  Why not?  Why so?  I had never considered this until I read this <a href="http://www.nytimes.com/2009/09/20/jobs/20pre.html?_r=3">article</a> talking about <a href="http://www.hashrocket.com/">Hashrocket</a>.  They all use their own machines!</p>
<p>Update:<br />
I think my lack of skill in writing prose has caused some confusion or misunderstanding [Thanks for the feedback!  For Reals.]  This was really meant to be more about responsibility and craftsmanship than about money (or anything else).  The main thought I wanted to invoke was who's responsibility is it to buy/make your tools?</p>
<p>I also did not try to infer that SEP doesn't buy me all the things I need (I'm sure they would, in fact... I just wonder who's responsibility it really is).</p>
<p>Sorry for any confusion.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=S-DGUTgBIgY:OQQQFICu_4s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=S-DGUTgBIgY:OQQQFICu_4s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=S-DGUTgBIgY:OQQQFICu_4s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=S-DGUTgBIgY:OQQQFICu_4s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=S-DGUTgBIgY:OQQQFICu_4s:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/S-DGUTgBIgY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/10/07/do-you-own-your-tools/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/10/07/do-you-own-your-tools/</feedburner:origLink></item>
		<item>
		<title>Autotest… in .NET</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/JHbn2pbXLS0/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/09/23/autotest-in-net/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 14:19:34 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/?p=156</guid>
		<description><![CDATA[The first time I saw autotest (presented by Anthony), the idea of Continuous Testing captured me.
I live in a .NET world most of the time, and I know of no similar solution for .NET.  It’s been awhile since that first time, and I’ve tinkered here and there trying to get something comparable, but usually come [...]]]></description>
			<content:encoded><![CDATA[<p>The first time I saw <a href="http://nubyonrails.com/articles/autotest-rails">autotest</a> (presented by <a href="http://22ideastreet.com/blog/">Anthony</a>), the idea of <a href="http://blog.objectmentor.com/articles/2007/09/20/continuous-testing-explained">Continuous Testing</a> captured me.</p>
<p>I live in a .NET world most of the time, and I know of no similar solution for .NET.  It’s been awhile since that first time, and I’ve tinkered here and there trying to get something comparable, but usually come up short.  That is until I found <a href="http://github.com/mynyml/watchr">watchr</a>.</p>
<p>Watchr gave me the file change detection capabilities I needed, and the extensibility to do whatever I want when a file has been detected as changed.  This made it incredibly easy to hook up some autotest goodness in my .NET world.</p>
<p>You'll have to have ruby installed, and gems.  Then, the very first thing you'll have to do is</p>
<p><code>gem install watchr --source=http://gemcutter.org</code></p>
<p>Here is my watchr script:</p>
<pre class="prettyprint">require 'autotest.rb'

watch( '^.*UnitTest.*.cs$' ) do |match|
  run_test(match.to_s)
end</pre>
<p>This is basically just a regex that says to watch any *.cs files that also contain the string “UnitTest”, and when it finds a change in a file matching that description, call run_test with the matched file name.</p>
<p>So all the magic is in autotest.rb… lets check it out:</p>
<pre class="prettyprint">require 'rexml/document'

def build(test_project)
  `msbuild /nologo #{test_project}`
end

def mstest(test_container, test_results_file, tests_to_run)
  tests_to_run = ([""] << tests_to_run).flatten

  File.delete(test_results_file) if File.exists?(test_results_file)
  `mstest /nologo /resultsfile:#{test_results_file} /testcontainer:#{test_container} #{tests_to_run.join(" /test:")}`
  test_results = process_mstest_results(test_results_file)
  File.delete(test_results_file) if File.exists?(test_results_file)

  return test_results
end

def process_mstest_results(results_file)
  results = {}
  File.open(results_file) do |file|
    xml = REXML::Document.new(file)

    results[:num_tests] = xml.get_elements("//UnitTestResult").length
    failures = []
    xml.elements.each("//UnitTestResult[@outcome='Failed']") do |e|
      failure = {}
      failure[:message] = e.elements["Output/ErrorInfo/Message"].get_text

      stack = e.elements["Output/ErrorInfo/StackTrace"].get_text.value
      stack_match = /^.*at (.*) in(.*):line (\d+)$/.match(stack)

      failure[:stack] = stack_match[1] if stack_match
      failure[:location] = stack_match[2] if stack_match
      failure[:line] = stack_match[3] if stack_match

      failure[:stack] = stack if !stack_match

      failures << failure
    end
    results[:failures] = failures
  end

  return results
end

def show_results(results)
  puts "#{results[:num_tests]} tests run (#{results[:failures].length} failures)"
  results[:failures].each do |failure|
      puts "---------------------------------------"
      puts "Message: #{failure[:message]}"
      puts "Location: #{failure[:location]}"
      puts "Line: #{failure[:line]}"
      puts "Stack Trace: #{failure[:stack]}"
  end
end

def run_test(file_name)
  test_container = ""
  test_results_file = "result.trx"
  test_project = ""

  system("cls")
  system("echo Detected change in:")
  system("echo   #{file_name}")
  system("echo Building and Testing")

  test_namespace = ''
  test_class = ''
  test_names = []

  File.open(file_name, "r") do |f|
    f.each do |line|
      ns_match = /^namespace (.*)$/.match(line)
      test_namespace = ns_match[1] if ns_match

      class_match = /^\s*public class (.\w*).*$/.match(line)
      test_class = class_match[1] if class_match

      test_name_match = /^\s*public void (\w*).*$/.match(line)
      test_names << test_name_match[1] if test_name_match
    end
  end

  test_names = test_names.map { |n| "#{test_namespace}.#{test_class}.#{n}" }

  build(test_project)
  results = mstest(test_container, test_results_file, test_names)
  show_results(results)
end</pre>
<p>The key parts (I think) are the fact that I’m using MSTest to run my tests (this can easily be modified to run your framework of choice… note MSTest is not my choice <img src='http://jonfuller.codingtomusic.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).  The result parsing is also specific to the MSTest output format, but should be simple enough for any framework that can output XML.  Also, I'm making some assumptions based on my project... we've got one unit test project, so I know I can run tests in a single DLL, and rebuilding only that project, I don't have to worry about choosing the correct project and output dll to build and run tests in.</p>
<p>To get the thing up and running, just run</p>
<p><code>watchr &lt;path to watchr script&gt;</code></p>
<p>Please, use/adapt/give feedback/whatever at will.</p>
<p>Go forth and autotest, .NET comrades!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=JHbn2pbXLS0:JH_aXwSgE7c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=JHbn2pbXLS0:JH_aXwSgE7c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=JHbn2pbXLS0:JH_aXwSgE7c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=JHbn2pbXLS0:JH_aXwSgE7c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=JHbn2pbXLS0:JH_aXwSgE7c:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/JHbn2pbXLS0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/09/23/autotest-in-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/09/23/autotest-in-net/</feedburner:origLink></item>
		<item>
		<title>Stable or Stagnant?</title>
		<link>http://feedproxy.google.com/~r/jonfuller/~3/Qnqib2KKn8E/</link>
		<comments>http://jonfuller.codingtomusic.com/2009/09/17/stable-or-stagnant/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 18:32:29 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jonfuller.codingtomusic.com/?p=148</guid>
		<description><![CDATA[In a recent discussion with a co-worker we made an observation on the topic of progress.  Things that look like they are working, appear to be stable.  However, from another viewpoint that very same subject is stagnant.
Which camp do you live in?
I’d say I [mostly] live in the viewing things as stagnant camp (it’s nice [...]]]></description>
			<content:encoded><![CDATA[<p>In a recent discussion with a <a href="http://myotherpants.com/">co-worker</a> we made an observation on the topic of progress.  Things that look like they are working, appear to be stable.  However, from another viewpoint that very same subject is stagnant.</p>
<p><strong>Which camp do you live in?</strong></p>
<p>I’d say I [<em>mostly</em>] live in the viewing things as <em>stagnant </em>camp (it’s nice and cozy in my camp, won’t you come join me?).  I’m <strong>not </strong>trying to say there is anything wrong about believing and adhering to things that we know already work (<em>stable</em>), but what I <strong>am</strong> trying to say is that we can use <em>stable </em>as a platform to continually achieve <em>better</em>.</p>
<p>If you live over in stable-ville, you’re probably asking questions like:</p>
<ul>
<li>Why change it if it already works?</li>
<li>We’ve done this before, let’s just do it that way, it’s safer (why would we possibly introduce risk!?).</li>
<li>We made money doing this the last time, if we do it the same way, we’ll make money doing it again.</li>
</ul>
<p>I admit, you ask great questions.  It’s hard to win an argument against [apparent] concrete profitability.</p>
<p>Here are my sentiments, however, in response to those questions.</p>
<p>First you must assume that things can <strong>always </strong>get and be <em>better</em>.  I’m not asking to make huge sweeping changes and walk away.  Rather, embrace the stable approach, incrementally make changes, measure, rinse and repeat.</p>
<p>Of course, if things seem to be broken, or you seem to have hit some ceiling (most likely artificial), you may need to take a step back, and take a completely alternative approach.</p>
<p>The key to making change to any subject for the sake of improvement is measuring.  Know what it is you’re trying to optimize, measure it, make the change, and measure it again.  That is the only way to know if you actually got better, worse, or had no impact at all.  (In a slightly related note, Steve McConnell, in Code Complete 2 drove this into my skull at least 50 times during his performance tuning chapters, and I agree whole-heartedly).</p>
<p>Oh, and on that profitability question?  You better always be changing (don’t forget to measure!) otherwise you’re gonna get leapfrogged into oblivion and your competitor that you didn’t even know existed is going to be raking in all your cash.  Likewise with risk.  If you’re not taking risks and just sitting in your comfort zone, you’re probably not growing as an organization or as an individual.</p>
<p>For me, it’s all about continuous improvement.  Don't let <em>stable </em>be the enemy of <em>change, </em>strive for <strong>improvement.</strong></p>
<p>If you’re not getting better, you’re getting worse… right?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jonfuller?a=Qnqib2KKn8E:i0L0qWPUQ6Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jonfuller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=Qnqib2KKn8E:i0L0qWPUQ6Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=Qnqib2KKn8E:i0L0qWPUQ6Q:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jonfuller?a=Qnqib2KKn8E:i0L0qWPUQ6Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jonfuller?i=Qnqib2KKn8E:i0L0qWPUQ6Q:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jonfuller/~4/Qnqib2KKn8E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonfuller.codingtomusic.com/2009/09/17/stable-or-stagnant/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jonfuller.codingtomusic.com/2009/09/17/stable-or-stagnant/</feedburner:origLink></item>
	</channel>
</rss>
