<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Tim Barcz</title><link>http://devlicio.us/blogs/tim_barcz/default.aspx</link><description>Why use nails when a screw is the more reversible choice?  Have Twitter, follow the conversation there at @&lt;a href="http://www.twitter.com/timbarcz"&gt;timbarcz&lt;/a&gt;</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TimBarcz" /><feedburner:info uri="timbarcz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Poor Design Is Not a Bug</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/wHf9uM_FdKg/poor-design-is-not-a-bug.aspx</link><pubDate>Fri, 26 Nov 2010 03:37:18 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:63610</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>189</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=63610</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2010/11/25/poor-design-is-not-a-bug.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.ayende.com/blog"&gt;Ayende&lt;/a&gt; recently posted a an article titled &lt;a title="Ayende&amp;#39;s post &amp;quot;Where is the Bug?" href="http://ayende.com/Blog/archive/2010/11/17/where-is-the-bug-yet-again.aspx"&gt;“Where is the bug”&lt;/a&gt;.&amp;#160; While reading the comments, I was disappointed by some of the answers to Ayende’s request to find the bug. Here are two of the comments that stood out to me:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“You could argue the biggest bug is the use of a switch statement as it violates OCP.“ &lt;/li&gt;    &lt;li&gt;“The use of a switch statement is a bug in itself.“ &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What bothers me so greatly is people’s inability to separate design discussion with bugs. A bug is defined on Wikipedia as:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A &lt;b&gt;software bug&lt;/b&gt; is the common term used to describe an error, flaw, mistake, &lt;a href="http://en.wikipedia.org/wiki/Failure"&gt;failure&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Fault_%28technology%29"&gt;fault&lt;/a&gt; in a computer program or &lt;a href="http://en.wikipedia.org/wiki/Software_system"&gt;system&lt;/a&gt; that produces an incorrect or unexpected result, or causes it to behave in unintended ways&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The two comments above don’t attempt to solve the bug and instead take an “ivory tower approach” to the problem (more befuddling is that removing the switch in favor of something else would leave the bug in place). This bugs me because we (as an industry) continue to care very little about the output and meeting of customer/business needs and more about code structure and semantics than actually working code.&lt;/p&gt;  &lt;p&gt;Let me state for the record, it is &lt;em&gt;perfectly acceptable&lt;/em&gt; to talk about code structure and design but please let’s not confuse a bug – an actual error or flaw in code – with poor design.&lt;/p&gt;  &lt;p&gt;(I think it’d be humorous for Ayende to post some perfectly fine code and ask “Where’s the bug” and watch people trip over themselves trying to find something wrong)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=63610" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/wHf9uM_FdKg" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Principles/default.aspx">Principles</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Common+Sense/default.aspx">Common Sense</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Musings/default.aspx">Musings</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Commentary/default.aspx">Commentary</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2010/11/25/poor-design-is-not-a-bug.aspx</feedburner:origLink></item><item><title>Task Parallel Library: Real-World Results</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/BnNp4J9KGao/task-parallel-library-real-world-results.aspx</link><pubDate>Fri, 19 Nov 2010 06:47:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:63486</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>19</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=63486</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2010/11/19/task-parallel-library-real-world-results.aspx#comments</comments><description>&lt;p&gt;I’m working on a project that requires chewing through a lot of data. While looking for ways to make the code run faster – I hate waiting – I decided to throw the new &lt;a title="Task Parallel Home Page" href="http://msdn.microsoft.com/en-us/library/dd460717.aspx"&gt;Task Parallel Library&lt;/a&gt; at the problem to see what sort of improvements I could gain.&amp;#160; Below is the concept and the results I saw (remember: your mileage may vary).&lt;/p&gt;  &lt;h2&gt;The Code&lt;/h2&gt;  &lt;p&gt;Here is the gist of the original code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var lines = File.ReadAllLines(path).ToList();      &lt;br /&gt;lines.ForEach(x =&amp;gt; parsedResults.Add(lineParser.ParseLine(x)));&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Quite simple for sure, but to run through 10,000 lines this was taking about 15,000 Milliseconds, or 15 seconds.&amp;#160; To me that felt slow, especially when you start talking about millions of rows (A million rows at 1.5 ms would still take just under 17 minutes).&lt;/p&gt;  &lt;h2&gt;Task Parallel Library Version (TPL)&lt;/h2&gt;  &lt;p&gt;There’s a very simple .ForEach method that’s quite handy and simple to use, however I have local variables and a master collection I need to combine into for later processing and therefore need to use a version of ForEach that supports &lt;a title="Thread-Local storage" href="http://en.wikipedia.org/wiki/Thread-local_storage"&gt;thread-local variables&lt;/a&gt;.&amp;#160; Here is that code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Parallel.ForEach(lines,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; () =&amp;gt; new List&amp;lt;LineResult&amp;gt;(),       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (current, loop, threadLocalList) =&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; threadLocalList.Add(lineParser.ParseLine(current));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return threadLocalList;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parsedResults.AddRange       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Results&lt;/h2&gt;  &lt;p&gt;Using the 10,000 line test version and taking an average of several runs here are the results:&lt;/p&gt;  &lt;p&gt;Before: 15,267 &lt;/p&gt;  &lt;p&gt;After: 7,546&lt;/p&gt;  &lt;p&gt;Speed improvement: 100%&lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;Overall this isn’t a very exciting example, however it does show the potential impacts that the Task Parallel Library (TPL) can have on your runtime performance.&amp;#160; I was pleased with the library in that I had a very simple cast (looping) and there was very little to do. I simply added the “using” directive and that’s about it, no configuration or dependencies.&amp;#160; If you’ve played with the Task Parallel Library what real-world uses have you found?&amp;#160; What benefits have you seen from the code?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=63486" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/BnNp4J9KGao" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/TPL/default.aspx">TPL</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2010/11/19/task-parallel-library-real-world-results.aspx</feedburner:origLink></item><item><title>What to Make of Intel Buying McAfee</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/zPg1BoZvTQM/what-to-make-of-intel-buying-mcafee.aspx</link><pubDate>Thu, 19 Aug 2010 20:39:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:61561</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>45</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=61561</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2010/08/19/what-to-make-of-intel-buying-mcafee.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.jamessenior.com/"&gt;James Senior&lt;/a&gt; posted on &lt;a href="http://twitter.com/jsenior"&gt;his Twitter account&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“oh dear lord no. why intel, why? &lt;a href="http://ow.ly/2s2dm"&gt;http://ow.ly/2s2dm&lt;/a&gt; reminds me of when Intel got into the hosting business. &lt;a href="http://ow.ly/2s2fT"&gt;http://ow.ly/2s2fT&lt;/a&gt;”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;James is referencing an article posted by the BBC on the recent news of Intel’s takeover of McAfee for 7.68 Billion. While I agree with James on Intel’s foray into hosting – of course hindsight is 20/20 – I disagree with his position on this particular deal and here’s why.&lt;/p&gt;  &lt;p&gt;Despite the rapid growth over the last 15 years of PC’s, viruses are still problematic. Despite continual efforts at training the masses, viruses still are far too prevalent. Additionally the methods for exploitation continue to spread and evolve faster than the education can keep up with.&amp;#160; For example, by now, the vast majority – save your grandmother – knows not to open executables sent via email (largely this practice is blocked at the email level anyway).&amp;#160; A smaller, but still growing population have learned to not open attachments from people you don’t know. And yet viruses at times runs rampant.&lt;/p&gt;  &lt;p&gt;The virus landscape has largely changed with a more sophisticated modern day virus writer.&amp;#160; He/she is no longer malicious in their intent to infect your computer but instead often plant malware to consume and distribute private information on your computer. Certainly dangerous viruses still exist, but there’s less money in that.&lt;/p&gt;  &lt;p&gt;Given that education can’t keep up (or thus far hasn’t proven to be able to keep up) with the changing exploits and security software saturation is still less than 100%, I see the move by Intel as a positive one. Imagine virus protection at the chip level. The virus uses the chip and it’s processing to do it’s damage. If the chip can refuse access to the virus, the virus is rendered ineffective.&lt;/p&gt;  &lt;p&gt;In an environment with increasing questions/concerns about security threats, a chip maker who can offer it’s customers virus protection has a significant advantage over it’s competitors.&amp;#160; Additionally, every computer has a CPU and saturation into the market would be swift as computers with this technology would be introduced into the market as people replaced their old PC’s.&lt;/p&gt;  &lt;p&gt;In an interesting twist to this story, I could see Microsoft having interest in this particular marriage. Largely portrayed by many as insecure, a chip with protection renders the discussion about OS security potentially moot. Whether Microsoft would admit to it or not, it has skin in this game.&lt;/p&gt;  &lt;p&gt;Overall, I think Intel’s choice is a strategic one and might prove be a great one. After over two decades of security software, software hasn’t been the answer. That doesn’t mean software couldn’t be the answer, however history has thus far shown software as a weak solution.&amp;#160; It’s time for a game-changer. This could be the road to that much needed change.&lt;/p&gt;  &lt;p&gt;Time will tell…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=61561" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/zPg1BoZvTQM" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Commentary/default.aspx">Commentary</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2010/08/19/what-to-make-of-intel-buying-mcafee.aspx</feedburner:origLink></item><item><title>St. Louis Day of .NET</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/K80ESuzqSsw/st-louis-day-of-net.aspx</link><pubDate>Mon, 02 Aug 2010 20:30:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:61359</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=61359</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2010/08/02/st-louis-day-of-net.aspx#comments</comments><description>&lt;p&gt;Now that we&amp;rsquo;ve entered August, we&amp;rsquo;re just three short weeks away from &lt;a href="http://www.stlouisdayofdotnet.com/"&gt;St. Louis Day of .NET&lt;/a&gt; (taking place August 20-21).&amp;nbsp; Last year I gave two talks (&lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx"&gt;Rhino Mocks&lt;/a&gt; and beginner&amp;rsquo;s guide to unit testing).&amp;nbsp; This year I&amp;rsquo;ve been lucky enough to selected to be speaking again on two topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.stlouisdayofdotnet.com/SessionDetail.aspx?SessionID=159"&gt;Building and Creating a High Performance Team&lt;/a&gt; - This session will give you strategies to turbo charge your team. It will deal with everything from how to build trust within a team to talking to management to process/methodology. This talk will use real-world examples from my recent experiences with my team at &lt;a href="http://www.jpcycles.com"&gt;J&amp;amp;P Cycles&lt;/a&gt; and will include perspectives from both the development side as well as the managerial side.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.stlouisdayofdotnet.com/SessionDetail.aspx?SessionID=160"&gt;Website Usability 101&lt;/a&gt; - Do you want to create a more intuitive website? Want to make your customers happier? Website Usability is a very hot topic right now. I&amp;#39;ll discuss several tools you can use to test your website and resources you can turn to if you&amp;#39;re getting started in usability. First we&amp;#39;ll define what it is and why you want it and then we&amp;#39;ll walk through a series of tools and resources you can use. Attendees will see real-world examples throughout and will leave understanding how easy and quick testing can be.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This conference is one of the best in the Midwest bringing in great speakers and content with a great venue (&lt;a href="http://www.ameristar.com/St_Charles.aspx"&gt;Ameristar&lt;/a&gt;).&amp;nbsp; This year there are already over 500 people registered for the event with numbers likely to go even higher as the date nears!!&amp;nbsp; It&amp;rsquo;s a great chance to learn some new technical content to improve your .NET mastery as well as network with several other .NET professionals in the area.&lt;/p&gt;
&lt;p&gt;(My dirty little conference secret: I like session content, St. Louis has some great content, but for me, it&amp;rsquo;s the discussion that take place outside of and between the sessions.&amp;nbsp; Breakfast with developers and geek out sessions over a pint of beer. St. Louis Day of .NET provided some of the best conversations of the year last year.)&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re planning on going let me know would love to connect in person&amp;hellip;also I have two discount codes that I can offer that will get $75 off registration.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=61359" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/K80ESuzqSsw" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Announcement/default.aspx">Announcement</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Conferences/default.aspx">Conferences</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2010/08/02/st-louis-day-of-net.aspx</feedburner:origLink></item><item><title>Open Source Whining</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/bve9iD-lWoM/open-source-whining.aspx</link><pubDate>Wed, 28 Jul 2010 14:04:28 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:61272</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>29</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=61272</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2010/07/28/open-source-whining.aspx#comments</comments><description>&lt;p&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" align="right" src="http://4.bp.blogspot.com/_N3mwtdW7vDY/SjkBr84l-tI/AAAAAAAAAGY/GIsPl56WOn4/s320/whiner1.jpg" width="159" height="212" alt="" /&gt;Was working on a blog post talking about a problem I’ve found in Git (1.7.0.2) and I thought I would check to see if it’s been fixed in the most recent version.&amp;#160; After downloading and installing I reviewed the release notes where I’m quite shocked to read the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“…All hopes to the contrary, Git for Windows is backed by only a handful of developers, in spite of being downloaded almost one hundred thousand times. You can expect developers to be enthusiastic to fix others&amp;#39; issues in such a situation only for so long. In short: &lt;b&gt;Do not expect other people to fix your issues for you.”&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Basically, what I get from this is that &lt;strong&gt;the msysgit committers are a bunch of whiners&lt;/strong&gt;. What they fail to see is that the people who would benefit from their VCS may not have the same skillset to work on the code.&amp;#160; This is something we’ve realized long ago with &lt;a href="http://www.ayende.com/wiki/Rhino+Mocks+Documentation.ashx"&gt;Rhino Mocks&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;Should more people help? Possibly. As someone active in open source technology I don’t know that I can be of much assistance to the Git team – I am someone who benefits greatly from their software (I am quite thankful for it) but don’t have the requisite knowledge in C/C++ to assist in any meaningful fashion.&lt;/p&gt;  &lt;p&gt;Just a bit disappointed to see this type of whining in their release notes – certainly there are far better ways to say what they’re trying to say.&amp;#160; Doesn’t represent msysgit or the broader open source community well.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=61272" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/bve9iD-lWoM" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Open+Source+Software/default.aspx">Open Source Software</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Git/default.aspx">Git</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2010/07/28/open-source-whining.aspx</feedburner:origLink></item><item><title>Are You Playing Checker or Chess? - YAGNI Revisited</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/kbVzf_O85Ec/are-you-playing-checker-or-chess-yagni-revisited.aspx</link><pubDate>Mon, 15 Mar 2010 05:08:37 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:55956</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>18</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=55956</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2010/03/15/are-you-playing-checker-or-chess-yagni-revisited.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_7E5F94FB.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_thumb_5F00_69954E8E.png" width="377" height="252" /&gt;&lt;/a&gt; This past Saturday I had an early morning coffee with a friend. He’s an entrepreneurial type – a big thinker who moves at a fast pace and is always thinking ahead.&amp;#160; One question he asked of me, “Are you playing checkers or chess?”.&lt;/p&gt;  &lt;p&gt;The question was asked around business and career but I could not help but think of the implications to software.&lt;/p&gt;  &lt;p&gt;In the agile software world we often use the mantra…”do the simplest thing that works”.&amp;#160; I have found that I cringe at the usage of that statement at certain points (when honest - even at my own usage at times upon later reflection).&amp;#160; Really, if we step back and honestly evaluate ourselves, how often do we really implement the simplest thing that works. My opinion is that it’s often used as an excuse to get get out of work - a “wild card” of sorts that’s pulled out when convenient.&lt;/p&gt;  &lt;p&gt;With “the simplest thing that works”, developers associate the term YAGNI – You Ain’t Gonna Need It.&amp;#160; While very often true – you really don’t need that feature (studies have demonstrated and confirmed) – I see times where people confuse YAGNI and the agile principle of “the simplest thing that works”. What’s the difference? &lt;/p&gt;  &lt;p&gt;Chess versus checkers my friend. Checkers is a pretty simple game with few rules and even fewer game pieces.&amp;#160; Chess however has several game pieces, each of which has their own movements and rules associated with them.&amp;#160; The types of discussions and strategies that exist around chess do not exist around checkers.&amp;#160; Put simply, chess is much more complex than checkers.&amp;#160; Checkers is really treated on a move-by-move basis whereas chess is far more strategic, where moves are setup far in advance of their execution.&lt;/p&gt;  &lt;p&gt;When talking about “the simplest thing that works” we have to be careful to not be playing checkers.&amp;#160; Play chess instead.&amp;#160; Make a small, single move that moves you closer to some strategic end.&amp;#160; Like it or not, many waterfall processes are playing chess – trying to anticipate every outcome or piece of functionality and adjust/account for it. What the waterfall practitioner fails to see is the inevitable change.&amp;#160; Many agile adopters start playing checkers, making small move after small move, assuaging fears of downstream problems with the comfort that their doing the simplest thing that works.&lt;/p&gt;  &lt;p&gt;Therefore, have a strategy, a end in mind, and then do the simplest thing that works that moves you closer to that end.&amp;#160; Note however that this may not always be the absolute simplest thing that works.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=55956" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/kbVzf_O85Ec" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Musings/default.aspx">Musings</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Methodology/default.aspx">Methodology</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2010/03/15/are-you-playing-checker-or-chess-yagni-revisited.aspx</feedburner:origLink></item><item><title>Where Do You Want to Be In a Year?</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/aBY0FNbO3uo/where-do-you-want-to-be-in-a-year.aspx</link><pubDate>Thu, 31 Dec 2009 17:31:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54848</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>14</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=54848</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/12/31/where-do-you-want-to-be-in-a-year.aspx#comments</comments><description>&lt;p&gt;This time of year is a time of resolutions and there certainly have been blog posts sprouting up about 2010 and what people are going to change about themselves.&amp;nbsp; I&amp;rsquo;m however going to approach it differently&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.stephencovey.com/7habits/7habits-habit2.php"&gt;Habit #2&lt;/a&gt; of the &lt;a href="http://www.amazon.com/Habits-Highly-Effective-People/dp/0671708635"&gt;The 7 Habits of Highly Effective People&lt;/a&gt; is &amp;ldquo;&lt;b&gt;Begin with the end in mind&amp;rdquo;. &lt;/b&gt;Which has a key part I like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;&amp;hellip;If you don&amp;#39;t make a conscious effort to visualize who you are and what you want in life, then you empower other people and circumstances to shape you and your life by default&amp;hellip;.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 align="center"&gt;Where do you want to be in a year?&lt;/h2&gt;
&lt;h2&gt;My Answer:&lt;/h2&gt;
&lt;p&gt;By the end of 2010 I want&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to have learned more about the business. &lt;/li&gt;
&lt;li&gt;to understand lean manufacturing/processes and it&amp;rsquo;s adaptation to the software development world. &lt;/li&gt;
&lt;li&gt;to continue to read and learn more about marketing and the intersection of technology and marketing so that I can make more effective/informed decisions in my role at work. &lt;/li&gt;
&lt;li&gt;to continue exploring enterprise architecture both in book form but also in the often messy real-world. At work I&amp;rsquo;d like to use my knowledge of technology and architecture to continue to work to bring disparate systems together to reduce human involvement. &lt;/li&gt;
&lt;li&gt;to explore Ruby or F#, whichever seems to have real-world impact value to what I do.&lt;/li&gt;
&lt;li&gt;move to Git for source control at the enterprise level&lt;/li&gt;
&lt;li&gt;to be renewed as an Microsoft MVP&lt;/li&gt;
&lt;li&gt;to speak fewer times but with more authority/knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s me, how about you? Where do you want to be in a year?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54848" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/aBY0FNbO3uo" height="1" width="1"/&gt;</description><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/12/31/where-do-you-want-to-be-in-a-year.aspx</feedburner:origLink></item><item><title>Unit Testing Strategy: Hiding Out In the Open</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/3xkze6ngbgE/unit-testing-strategy-hiding-out-in-the-open.aspx</link><pubDate>Wed, 16 Dec 2009 15:38:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54558</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>33</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=54558</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/12/16/unit-testing-strategy-hiding-out-in-the-open.aspx#comments</comments><description>&lt;p&gt;Sometimes there are pieces of code that you want to test but you just don&amp;rsquo;t quite see how you can unit test it easily.&amp;nbsp; I have illustrated one such example below where I am interacting with the file system.&lt;/p&gt;
&lt;p&gt;Take the following snippet for example:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; FileRenamer : IFileRenamer&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RenameFile(IList&amp;lt;DomainFile&amp;gt; files)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (files == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var file &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; files)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;             var newName = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Concat(file.FullFileName, file.Client, file.Site, file.DesagilationCount, &lt;span style="color:#006080;"&gt;&amp;quot;.file&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;             File.Copy(file.FullFileName, newName);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I want to &amp;ldquo;unit test&amp;rdquo; that the correct file is created, but I really can&amp;rsquo;t.&amp;nbsp; The &amp;ldquo;File.Copy()&amp;rdquo; is going to hang me up a bit because in order to verify the method worked I am going to have to go visually verify that a file was copied to a certain location.&amp;nbsp; I could of course automate this but in either case I&amp;rsquo;m touching the file system, &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/07/20/129552.aspx"&gt;which is not a quality of a good unit test&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In reality, the only thing I really care about here is that the new file is named properly.&amp;nbsp; However, as it sits, the new name is really coupled to the copy process and the hard disk. Let&amp;rsquo;s change that&amp;hellip;&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; FileRenamer : IFileRenamer&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RenameFile(IList&amp;lt;DomainFile&amp;gt; files)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (files == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var file &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; files)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;             File.Copy(file.FullFileName, BuildNewFilename(file));&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; BuildNewFilename(DomainFile file)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Concat(file.FullFileName,file.Client,file.Site,file.DesagilationCount,&lt;span style="color:#006080;"&gt;&amp;quot;.file&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;What I&amp;rsquo;ve done here is move the logic of the new name creation to a new method.&amp;nbsp; By extracting that single line to its own method, we&amp;rsquo;ve made the &amp;ldquo;untestable&amp;rdquo;, testable.&lt;/p&gt;
&lt;p&gt;So at this point you may be asking yourself why this strategy is called &amp;ldquo;Hiding Out In the Open&amp;rdquo;? I call it that (is there another more formal name? possibly an xUnit test pattern name?) because we haven&amp;rsquo;t added the method to the interface (the &amp;ldquo;hiding&amp;rdquo; part) but we have made the method public so it&amp;rsquo;s visible to consumers (the &amp;ldquo;out in the open&amp;rdquo;).&lt;/p&gt;
&lt;h3&gt;Hiding&lt;/h3&gt;
&lt;p&gt;When I added the public method to the FileRenamer class, I *did not* add it to the interface IFileRenamer.&amp;nbsp; That means anywhere where this particular class is referenced as an IFileRenamer that the new method (BuildNewFilename) won&amp;rsquo;t be visible (see below). Hence the usage of the term &amp;ldquo;hiding&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_4E8173E1.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_thumb_5F00_74E3572C.png" width="597" border="0" height="190" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Out In the Open&lt;/h3&gt;
&lt;p&gt;The whole point of this exercise was to gain some testability aspects for this particular class.&amp;nbsp; Since the method is public, in our test method when we create an instance of our FileRenamer class, we now have the ability to test (see below):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_149230F5.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_thumb_5F00_3E0902E6.png" width="396" border="0" height="292" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Some Caveats&lt;/h3&gt;
&lt;p&gt;Some will argue that the renaming of the file is a separate concern from the copy.&amp;nbsp; The separate concern would then be a separate class that is possibly used by the FileRenamer, in which case the new class would be testable.&amp;nbsp; This is a fair argument and at times it&amp;rsquo;s a good strategy.&amp;nbsp; I think it&amp;rsquo;s good to know the strategy so there are more tools in the bag when a curious situation arises.&lt;/p&gt;
&lt;p&gt;Some will argue that you&amp;rsquo;re increasing the surface area of your API when you make the method public.&amp;nbsp; Again, a fair argument however, in most cases when dealing with the abstraction (the interface) this doesn&amp;rsquo;t rear it&amp;rsquo;s head.&amp;nbsp; It&amp;rsquo;s a small insignificant side-effect.&amp;nbsp; If you don&amp;rsquo;t like it don&amp;rsquo;t use it.&amp;nbsp; Disclaimer: I strongly discourage this course of action if you&amp;rsquo;re building a public API that others will consume.&amp;nbsp; In my case, 99% of software I write is used in house. If making something &amp;ldquo;public&amp;rdquo; really bothers you, then make it internal and use the &amp;ldquo;InternalsVisibleTo&amp;rdquo; assembly attribute to give your test assembly visibility.&lt;/p&gt;
&lt;h3&gt;Conclusion:&lt;/h3&gt;
&lt;p&gt;The original snippet of code above had some pieces that were hard to properly unit test.&amp;nbsp; What we&amp;rsquo;ve done here employed a strategy I call &amp;ldquo;hiding out in the open&amp;rdquo; to the class under test to achieve a bit more testability. I think this is just another testing strategy to have in your back pocket.&amp;nbsp; There should be few times when you need this particular strategy, but when you need it it does come in handy.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54558" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/3xkze6ngbgE" height="1" width="1"/&gt;</description><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/12/16/unit-testing-strategy-hiding-out-in-the-open.aspx</feedburner:origLink></item><item><title>Ralph Waldo Emerson Would’ve Been a Great Developer</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/Oab2QBtpuGA/ralph-waldo-emerson-would-ve-been-a-great-developer.aspx</link><pubDate>Mon, 14 Dec 2009 18:06:36 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54505</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>17</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=54505</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/12/14/ralph-waldo-emerson-would-ve-been-a-great-developer.aspx#comments</comments><description>&lt;p&gt;A very short quote I came across to start your week off and get you thinking about technology with the correct frame of reference:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;“As to the methods there may be a million and then some, but principles are few. The man who grasps principles can successfully select his own methods. The man who tries methods, ignoring principles, is sure to have trouble.”&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;- Ralph Waldo Emerson (1803-1882)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Mr. Emerson would surely have made a great developer. We need to heed his advice.&lt;/p&gt;  &lt;p&gt;As an exercise: think of how many different “methods” you can think of and then think of how many “principles” you can come up with.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Principles&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Single Responsibility Principle&lt;/li&gt;    &lt;li&gt;Don’t Repeat Yourself&lt;/li&gt;    &lt;li&gt;Dependency Inversion Principle&lt;/li&gt;    &lt;li&gt;Liskov Substitution Principle&lt;/li&gt;    &lt;li&gt;Open Closed Principle&lt;/li&gt;    &lt;li&gt;Interface Segregation Principle&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Methods&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ASP.NET&lt;/li&gt;    &lt;li&gt;C# 2.0&lt;/li&gt;    &lt;li&gt;C# 3.0&lt;/li&gt;    &lt;li&gt;LINQ&lt;/li&gt;    &lt;li&gt;LINQ to SQL&lt;/li&gt;    &lt;li&gt;Entity Framework&lt;/li&gt;    &lt;li&gt;NHibernate&lt;/li&gt;    &lt;li&gt;SOA&lt;/li&gt;    &lt;li&gt;StructureMap&lt;/li&gt;    &lt;li&gt;Windsor/MicroKernel&lt;/li&gt;    &lt;li&gt;Ninject&lt;/li&gt;    &lt;li&gt;ASP.NET MVC&lt;/li&gt;    &lt;li&gt;Ruby&lt;/li&gt;    &lt;li&gt;IronRuby&lt;/li&gt;    &lt;li&gt;W*F&lt;/li&gt;    &lt;li&gt;Silverlight&lt;/li&gt;    &lt;li&gt;And on and on and on…&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;“As to the methods there may be a million, but principles are few.”&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54505" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/Oab2QBtpuGA" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Principles/default.aspx">Principles</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Quotes/default.aspx">Quotes</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/12/14/ralph-waldo-emerson-would-ve-been-a-great-developer.aspx</feedburner:origLink></item><item><title>Confessions of a First Time Manager</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/jsFoiPYZV1k/confessions-of-a-first-time-manager.aspx</link><pubDate>Sun, 13 Dec 2009 04:10:39 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54463</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>24</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=54463</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/12/12/confessions-of-a-first-time-manager.aspx#comments</comments><description>&lt;p&gt;Many months ago I wrote &lt;a href="http://devlicio.us/blogs/tim_barcz/archive/2009/03/05/improving-software-process-a-letter-to-upper-management.aspx"&gt;a letter to upper management&lt;/a&gt; about principles of software development and the ways in which should build software.&amp;#160; Since that time my role has changed within the company and for the first time in my career I’m managing a significant number of people (at a previous company I was an R&amp;amp;D Manager but the team was much smaller).&lt;/p&gt;  &lt;p&gt;Below are a few observances/realizations I’ve had in the months since I’ve made the transition that I want to share with you:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Just cause you’re the manager doesn’t mean you know everything&lt;/strong&gt; – Just because someone has tapped you to lead the team doesn’t mean “you’ve arrived”.&amp;#160; You don’t automatically go from individual contributor to all-knowing edict maker.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Don’t Relax/Stay involved&lt;/strong&gt; – Too many managers think because they’ve “arrived” they no longer need to keep pushing themselves. They think they are afforded some special privileges or don’t have to abide by the same rules others are held to. Not wise. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Rely on your team&lt;/strong&gt; – This one is often hard.&amp;#160; It was likely your contributions as in individual contributor that got you noticed for the management position and it’s often hard for an individual contributor accept the role change and not want to tackle challenges individually or continue to contribute.&amp;#160; As a manager you’ll have to rely on your team to see the same level of success as a manager as you presumably did as an individual contributor.&amp;#160; You’re no longer measured on what you do but rather how your entire team performs. This one is admittedly hard for me and I’m growing into this more and more every day. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Build your team &lt;/strong&gt;– As an individual contributor you were primarily responsible for just one person, yourself. As project lead or a team lead you’ll have more responsibility but likely you won’t have people reporting directly to you. As a manager you’re now responsible for everyone on your team and giving them the opportunity to be the best they can. Give people the freedom they need to do great things. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Be honest&lt;/strong&gt; - Don’t lie, shade the truth, or embellish. When you mess up, fess up, I believe the team will respect you more for it. ‘nuff said. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Never ask your team to do something you wouldn’t do yourself&lt;/strong&gt; – Managers who require/ask team members to do something they wouldn’t do themselves are being unfair.&amp;#160; Asking your team to work late while you get to leave every day at 5:00 is an amateur move. Asking the team to give up the weekend might be a necessity at times.&amp;#160; Just make sure if you ask, you’re right there alongside of them. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Don’t be a bottleneck to change&lt;/strong&gt; – The team shouldn’t always move at the speed of the manager. In general just because you don’t understand something doesn’t mean it shouldn’t be adopted. If you cut your teeth on VSS and were a ninja in VB.NET but now your team wants to move all projects to C# and this new thing called Git, don’t blindly say no. Technology moves fast, if you have a trustworthy team, you’re going to have to let go a bit and rely on the team (#3).&amp;#160; Remember, you don’t know everything (#1) and you need build your team (#4), sometimes that may mean doing or trying something you don’t quite understand. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Don’t be afraid to push for change&lt;/strong&gt; – While you shouldn’t be a bottleneck to change you shouldn’t be afraid to push for it either. As a manager you typically have a greater visibility to the team or the process and if you see something that could be improved you shouldn’t necessarily wait for someone on your team to bring it forward. You’re still part of the team &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Hiring/Firing Sucks&lt;/strong&gt; – Movies make firing seem like an easy thing to do and an ego-boosting power-trip. It couldn’t be further from the truth. The days I’ve had to let people go I’ve rarely slept the night before. There’s nothing enjoyable about the process of taking away someone’s livelihood. Hiring can be fun, but most often it’s time consuming and all the time you spend interviewing is wasted except on the one person you hire. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;You’ll notice that many are intertwined and I think at the heart of many of these is pride.&amp;#160; Pride is a dangerous beast, avoid it at all costs. Whether it means you have a trusted friend or colleague keep you in-check or you do frequent self-assessments, don’t let pride seep it.&lt;/p&gt;  &lt;p&gt;Please note that these are my personal observances that I’ve taken mental note of while on this journey. Your mileage may vary.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54463" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/jsFoiPYZV1k" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Improvement/default.aspx">Improvement</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Musings/default.aspx">Musings</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/12/12/confessions-of-a-first-time-manager.aspx</feedburner:origLink></item><item><title>I Just Cloned, Why Did Git Change My Files?</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/skU3G0DX7LA/i-just-cloned-why-did-git-change-my-files.aspx</link><pubDate>Mon, 30 Nov 2009 04:35:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54252</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=54252</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/11/29/i-just-cloned-why-did-git-change-my-files.aspx#comments</comments><description>&lt;p&gt;Being new to Git I got thrown off a few weeks ago when cloning a remote repository and immediately seeing changes after the clone completed.&amp;nbsp; Scratching my head a bit, I reached out on &lt;a href="http://www.twitter.com/timbarcz"&gt;Twitter&lt;/a&gt; and &lt;a href="http://www.lostechies.com/blogs/jagregory/"&gt;James Gregory&lt;/a&gt; came to the rescue.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How is it that right after a git clone &amp;lt;url&amp;gt;, git status shows modified files? (&lt;a title="http://twitter.com/TimBarcz/status/5920294511" href="http://twitter.com/TimBarcz/status/5920294511"&gt;http://twitter.com/TimBarcz/status/5920294511&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What James showed me was that there is a setting &lt;b&gt;core.autocrlf &lt;/b&gt;on your system which needs to match the remote repository.&amp;nbsp; If it does not match, when you clone the directory files will be changed.&lt;/p&gt;
&lt;p&gt;After experiencing this myself and coming across it again the other day, I thought I&amp;rsquo;d put a quick video together showing the problem and the fix, since I suspect others will have it at some point as well.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e4bb851d-5e2d-4d67-befc-f1fa30be9ea8" class="wlWriterEditableSmartContent"&gt;
&lt;div&gt;
&lt;object width="400" height="300"&gt;
&lt;param name="allowfullscreen" value="true" /&gt;
&lt;param name="allowscriptaccess" value="always" /&gt;
&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7889569&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7889569&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/7889569"&gt;Git - Core.AutoCrlf Setting&lt;/a&gt; from &lt;a href="http://vimeo.com/user2178893"&gt;Tim Barcz&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To recap: when cloning a new repository, always perform a &amp;ldquo;git status&amp;rdquo; command right after the clone.&amp;nbsp; If you see modified files, a core.autocrlf mismatch is likely the culprit.&amp;nbsp; Change your setting, clone again, and you should be good to go.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54252" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/skU3G0DX7LA" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Tips+And+Tricks/default.aspx">Tips And Tricks</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Git/default.aspx">Git</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/11/29/i-just-cloned-why-did-git-change-my-files.aspx</feedburner:origLink></item><item><title>Devlicio.us Lands Another - Rob Reynolds</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/yleyRCD6oRM/devlicio-us-lands-another-rob-reynolds.aspx</link><pubDate>Mon, 23 Nov 2009 04:05:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54026</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=54026</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/11/22/devlicio-us-lands-another-rob-reynolds.aspx#comments</comments><description>&lt;p&gt;One of the goals of the devlicio.us community is to bring you some of the best developers and content in the developer community. Over the past few months Devlicious has added a few new people to it&amp;#39;s growing blogging community.&amp;nbsp; If you haven&amp;#39;t noticed already, we&amp;#39;ve added another, Rob Reynolds.&lt;br /&gt;&lt;br /&gt;Rob is from the Kansas City area where he works at a bank where he says, &amp;quot;The doors are always locked and there is no money inside.&amp;quot; I met Rob about a year ago at the Alt.NET Open Spaces conference in Seattle. Rob and I hit it off immediately as we share a lot of same passions for IOC, SOLID, DI, and other neat acronyms.&lt;br /&gt;&lt;br /&gt;Rob is an automation expert and is continually looking for ways to use automation so he can focus on more interesting things. &amp;quot;Automate your life&amp;quot; is his mantra. He automates everything from his bills and retirement to computer backups, database restores and everything code.&lt;br /&gt;&lt;br /&gt;Rob is also heavily involved with the open source projects and manages a number of projects including UppercuT, RoundhousE and Bombali.&amp;nbsp; He&amp;#39;s contributed to other OSS projects (MSBuild Community Tasks, Tarantino) and is also a committer for AutoTest.NET.&lt;br /&gt;&lt;br /&gt;When it comes to continuous integration and automation Rob is your guy. I&amp;#39;m thrilled to be blogging alongside him and have the opportunity to learn with and from him. Please join me in welcoming Rob to the Devlicio.us community.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=54026" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/yleyRCD6oRM" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Announcement/default.aspx">Announcement</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/11/22/devlicio-us-lands-another-rob-reynolds.aspx</feedburner:origLink></item><item><title>Resharper 5.0 - Bookmarks</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/uTcFDFK8xLU/reshaper-5-0-bookmarks.aspx</link><pubDate>Fri, 09 Oct 2009 18:35:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:52509</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>82</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=52509</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/10/09/reshaper-5-0-bookmarks.aspx#comments</comments><description>&lt;p&gt;Today it was announced that &lt;a href="http://blogs.jetbrains.com/dotnet/2009/10/resharper-50-intro/"&gt;Resharper 5.0 will soon be introduced as part of the public EAP (Early Access Program)&lt;/a&gt;.&amp;nbsp; As one on &lt;a href="http://www.jetbrains.com/devnet/academy/experts/index.html"&gt;JetBrains .NET Academy Experts&lt;/a&gt; I&amp;rsquo;ve had access to Resharper 5.0 for a few weeks. While in the coming weeks and months you&amp;rsquo;ll hear quite a bit from developers who are trying out Resharper 5.0 I wanted to alert you to one of my favorite features at this point.&lt;/p&gt;
&lt;h3&gt;Bookmarks&lt;/h3&gt;
&lt;p&gt;I read a lot more code than I write. When exploring new projects, doing code reviews, tracking down a bug, I like to mark different paths the flow of execution may take.&amp;nbsp; Most often to keep track of call stacks and what goes where, I usually end up using a piece of paper with a pencil drawing lines to various methods and interfaces. I could use Visual Studio which has had the concept of bookmarks for some time.&amp;nbsp; You can put a bookmark in code which creates a bit of a mark in your file that you can come back to later.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/oldbookmarks_5F00_5B657C78.png"&gt;&lt;img title="oldbookmarks" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="oldbookmarks" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/oldbookmarks_5F00_thumb_5F00_6D44A0F6.png" width="600" border="0" height="122" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The problem with these bookmarks is that they&amp;rsquo;re flat and don&amp;rsquo;t and you get options of previous or next, but never the opportunity to define what &amp;ldquo;next&amp;rdquo; means? Hopping from bookmark to bookmark may not actually follow any intended path you meant to take when you placed the bookmark.&lt;/p&gt;
&lt;p&gt;Resharper 5.0 introduces the concept of bookmarks where you can set order.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/bookmarks_5F00_61AEE3B7.png"&gt;&lt;img title="bookmarks" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="bookmarks" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/bookmarks_5F00_thumb_5F00_0F30037B.png" width="600" border="0" height="135" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now I can happily bounce around code and easily inspect different control flows in a much more controlled fashion.&lt;/p&gt;
&lt;p&gt;ReSharper has been part of my toolset now for several years and I think what they&amp;rsquo;re doing is great.&amp;nbsp; While ReSharper 5.0 is a bit buggy at times I like it and the improvements it brings. I am looking forward to further EAP releases of ReSharper and encourage you to check them out as well. Should be coming by the end of this month.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=52509" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/uTcFDFK8xLU" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Announcement/default.aspx">Announcement</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/ReSharper/default.aspx">ReSharper</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/10/09/reshaper-5-0-bookmarks.aspx</feedburner:origLink></item><item><title>Git…Command-line or GUI?</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/RYNFs-LkfYM/git-command-line-or-gui.aspx</link><pubDate>Wed, 07 Oct 2009 19:15:02 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:52378</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>32</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=52378</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/10/07/git-command-line-or-gui.aspx#comments</comments><description>&lt;p&gt;A short quick post to get some feedback from you, the reader.&lt;/p&gt;  &lt;p&gt;I’m working to learn and transition to Git (using &lt;a href="http://www.lostechies.com/blogs/jason_meridth/archive/2009/06/01/git-for-windows-developers-git-series-part-1.aspx"&gt;Jason Meridth’s great series on Git&lt;/a&gt;).&amp;#160; Up to this point I’ve been using the command-line only, working to learn Git on the command-line before I rely on a tool or GUI abstraction. Recently I’ve been going through some refactoring on a project where I’m using Git. Right now I’m slow, really slow. Renaming files/classes for example is cumbersome to say the least.&lt;/p&gt;  &lt;p&gt;I got to wondering if knowing the command-line is even useful anymore or it just a geek badge of honor that a few developers like to point to proudly when talking about skill sets? Some part of me feels like using a tool like GitGUI or TortoiseGit is “cheating”.&amp;#160; Ironically I admire Git because it seems to let me work the way I want to work; branch often, local commits, easier merging and yet right now the command-line use of Git is my primary roadblock. It is at this point that I start thinking I should give up on the command-line since an SCM tool shouldn’t be intrusive and move to a GUI tool and give up my chances at fifth degree black belt geek.&lt;/p&gt;  &lt;p&gt;So what do you think?&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Use command-line go slow now but know the tool very well.&lt;/li&gt;    &lt;li&gt;Use GUI and go faster, however always be reliant on the GUI abstraction&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Is using a GUI “cheating”?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=52378" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/RYNFs-LkfYM" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Git/default.aspx">Git</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/10/07/git-command-line-or-gui.aspx</feedburner:origLink></item><item><title>Ship Software With Value</title><link>http://feedproxy.google.com/~r/TimBarcz/~3/zPvs_sJSwGM/ship-software-with-value.aspx</link><pubDate>Tue, 29 Sep 2009 18:49:24 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:51874</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>28</slash:comments><wfw:commentRss>http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=51874</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/09/29/ship-software-with-value.aspx#comments</comments><description>&lt;p&gt;The blogosphere has gone a bit crazy the last few days with posts responding to &lt;a title="The Duct Tape Programmer By Joel Spolsky" href="http://www.joelonsoftware.com/items/2009/09/23.html"&gt;Joel Spolsky’s latest article about &amp;quot;The Duct Tape Programmer&amp;quot;&lt;/a&gt;. Bloggers everywhere are tossing their two cents in and saying what parts of Joel&amp;#39;s post was good and what wasn&amp;#39;t good. Once noticeable trend is that many have jumped on the &amp;quot;just ship it&amp;quot; bandwagon.&lt;/p&gt;  &lt;p&gt;There’s a quote mentioned by Jamie Zawinski in the article:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Yeah,” he says, “At the end of the day, ship the f---ing thing! It’s great to rewrite your code and make it cleaner and by the third time it’ll actually be pretty. But that’s not the point—you’re not here to write code; you’re here to ship products.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I don&amp;#39;t know Jamie and I imagine the context that the comment was made in was based around some pre-existing level of candor with the person he was speaking. We really don’t know what “…ship the f---ing thing” means in the context of that conversation and what level of quality is expected in that scenario. I would agree with Joel/Jamie that shipping products is important and that often developers (myself included) run the risk of becoming too entrenched in a design or beauty and all too easily miss the point of developing software...which is to ship a product that adds value.&amp;#160; However...”shipping” is only part of the picture. As someone responsible for the value of the product my team ships, I’m keenly aware of what affects shipping early can do (both the positive and negative).&lt;/p&gt;  &lt;p&gt;I&amp;#39;m reading a lot where people say &amp;quot;just ship it&amp;quot; but I&amp;#39;ve been part of teams where shipping too soon costs more money in the long run (and sometimes not even “the long run” but a few days/weeks down the road). These pro “ship it” bloggers surely must be talking about non-critical business systems when we say &amp;quot;just ship it&amp;quot;; would you want to ride on a plane where the flight control systems were sent out with bugs? Even a measly 1% failure rate of airplane system is unacceptable and is enormously expensive both in dollars and reputation for an airline.&lt;/p&gt;  &lt;p&gt;The point is that shipping is the point but not the whole point, it&amp;#39;s only one aspect of a well delivered software product. &lt;strong&gt;Shipping software with value is the point.&lt;/strong&gt;&amp;#160; Ship too soon with bugs and the value gained by shipping is potentially lost.&amp;#160; Conversely shipping late provides no value at all.&amp;#160; Neither lobbing a piece of crap over the wall at your customers early, nor refactoring your code till it shines is the point, neither should be considered a success. There’s a sweet spot that you need to find.&amp;#160; Keep in close contact with your customer, if you pay attention they’ll let you know when you’ve crossed into either extreme.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=51874" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/TimBarcz/~4/zPvs_sJSwGM" height="1" width="1"/&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Rant/default.aspx">Rant</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Testing/default.aspx">Testing</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Opinion/default.aspx">Opinion</category><feedburner:origLink>http://devlicio.us/blogs/tim_barcz/archive/2009/09/29/ship-software-with-value.aspx</feedburner:origLink></item></channel></rss>
