<?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>Caffeinated Coder</title>
	
	<link>http://www.caffeinatedcoder.com</link>
	<description>A Grande, Triple Shot, Non-Fat Core Dump by Russell Ball</description>
	<lastBuildDate>Wed, 08 Jul 2009 18:53:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</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" href="http://feeds.feedburner.com/caffeinatedcoder/ProY" type="application/rss+xml" /><feedburner:emailServiceId>caffeinatedcoder/ProY</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>return thoughts.Where(x =&gt; x.IsCaffeineInspired)</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/CRlL3lkID7s/</link>
		<comments>http://www.caffeinatedcoder.com/return-thoughtswherex-xiscaffeineinspired/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 03:54:26 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Continuous Improvement]]></category>
		<category><![CDATA[Musings, Rants]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=526</guid>
		<description><![CDATA[It’s too hard to pick just one topic to delve into after a five month blogging hiatus, so I thought I would reenter the blogosphere by just spewing forth some random thoughts that have been floating around in my head lately.

Lamda soup is yummy – As you probably guessed from the title of the post, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>It’s too hard to pick just one topic to delve into after a five month blogging hiatus, so I thought I would reenter the blogosphere by just spewing forth some random thoughts that have been floating around in my head lately.</p>
<ol>
<li><strong>Lamda soup is yummy – </strong>As you probably guessed from the title of the post, I’ve currently got C# 3.0 on the brain. I’ve been burning through John Skeet’s most excellent <a href="http://www.manning.com/skeet/">C# in Depth</a> book this last week and am finally beginning to grok some of the finder points of anonymous delegates, lamdas, and closures that have alluded me up until now. I especially like how the book explains the original problems that the new language features were attempting to address and also how it provides most of the examples in 1.1 first before showing how they can be rewritten more efficiently using the new 2.0 and 3.0 language improvements.</li>
<li><strong>Side projects kill blogs</strong> – I started a side project back in February that has allowed me to learn a whole slew of frameworks that I’ve been itching to try like the <a href="http://www.asp.net/mvc/">MVC</a>, <a href="https://www.hibernate.org/343.html">NHibernate</a>, <a href="http://fluentnhibernate.org/">Fluent NHibernate</a>, <a href="http://jquery.com/">JQuery</a>, <a href="http://www.castleproject.org/container/index.html">Windsor</a>, and <a href="http://code.google.com/p/sharp-architecture/">Sharp-Architecture</a>. Unfortunately the pressure of learning all of those fun things on top of actually getting some work done pretty much sucked up all of my free time that used to go to blogging. By the time I finished the project a few months ago I was so burned out that I went on a fiction binge with such books as <a href="http://www.amazon.com/World-War-Z-History-Zombie/dp/0307346609">World War Z: An Oral History of the Zombie Wars</a>, <a href="http://www.amazon.com/Road-Cormac-McCarthy/dp/0307265439">The Road</a>, and <a href="http://www.amazon.com/Cryptonomicon-Neal-Stephenson/dp/0060512806">Cryptomonicon</a>. I think I’ve finally regained my sense of equilibrium enough to where I can start slipping some blogging back into the mix again.</li>
<li><strong>Turning my back on Active Record </strong>– Last year I started down the path of using <a href="http://www.castleproject.org/activerecord/index.html">Castle’s ActiveRecord</a> as a way to use NHibernate without all the messy XML mapping files. After having a chance to work with <a href="http://fluentnhibernate.org/">Fluent NHibernate</a>, I’m ready to ditch the messy attributes and nasty inheritance dependencies of Active Record in favor of a more <a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object">POCO</a>esque approach. Clean entity objects AND no xml files? What’s not to love?</li>
<li><strong>Third party controls are obsolete – </strong>When I decided to use Microsoft’s MVC Framework, one of my biggest concerns was the lack of built-in or third party controls. That was before I started to explore JQuery’s vast <a href="http://plugins.jquery.com/">plugin community</a>. With just a few lines of code and include files I was able to produce really nice looking calendar controls, autocomplete text boxes, media players, complex validation controls, and tool tips. It’s hard to imagine shelling out money for third party web controls ever again.</li>
<li><strong>Bringing recruiting to the next level with the Rejectomizer 2000</strong> – We are hiring for not one but FIVE separate positions in our department and yours truly has the dubious honor of being neck deep in it. As a polite gesture, we decided to send out an actual rejection email to anyone who went to the trouble to at least include a personalized cover letter with their resume. With our candidate pipeline being constantly refilled by 3 recruiters, Career Builder, and a stumbling economy this task quickly became a tedious chore…that is until I brought the full power of PowerShell to bear on the problem with a script that has affectionately been dubbed the Rejectomizer 2000 (source code to be provided in a later post). My most recent enhancement included adding a sound effect to the script of a flushing toilet, which I admit is totally cold hearted but at the same time it does help relieve the bitterness that tends to build up after sifting through hundreds of poorly formatted and otherwise indecipherable resumes in lieu of doing cool coding stuff.</li>
<li><strong>Swimming against the Information Stream – </strong>While my 15 month old now twitters in her crib and my grandma reads her RSS feeds on the smart phone that is embedded in her walker, I have taken bold steps to swim against the current information tide by devoting myself more to good old fashioned tree killing modes of learning. I suck at multi-tasking and am sick of feeling like my knowledge is becoming more and more spread thin these days, so I’ve lined up 10 technology books that I’ve been meaning to read forever and decided to go on a strict RSS and twitter diet until I finish every last one of them.</li>
<li><strong>Six Shooters should be outlawed – </strong>On a final note, I recently tested the limits of caffeine consumption by agreeing to drink a latte with six shots of espresso that one of my co-workers bought for me and then goaded me into drinking. Besides making my tongue a little numb and causing me to break out in a cold sweat, this highly potent drink, which we dubbed “The Six Shooter”, apparently sped up my response time by several orders of magnitude. According to office lore I responded to the question “what are you drinking?” before the first syllable had been fully uttered with a response that appeared to have been run through several very advanced compression algorithms. Moral of the story…don’t try this at home.</li>
</ol>
<p>Cheers,</p>
<p>Caffeinated Coder</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/CRlL3lkID7s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/return-thoughtswherex-xiscaffeineinspired/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/return-thoughtswherex-xiscaffeineinspired/</feedburner:origLink></item>
		<item>
		<title>Why Hitler Really Lost World War II</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/MpUTUReQgB4/</link>
		<comments>http://www.caffeinatedcoder.com/why-hitler-really-lost-world-war-ii/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 13:43:31 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=513</guid>
		<description><![CDATA[I thought I would ease out of my two month blogging black-out by helping to promote a humorous YouTube gem that I found through Max&#8217;s blog.
A while ago I&#8217;ve blogged about my admiration for the emerging creative RWness that mediums like YouTube help foster, but adding subtitles to a foreign film as a form of [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I thought I would ease out of my two month blogging black-out by helping to promote a humorous YouTube gem that I found through <a href="http://www.codesqueeze.com/hitlers-nightly-build-breaks/">Max&#8217;s blog.</a></p>
<p>A while ago I&#8217;ve blogged about my admiration for the <a href="http://www.caffeinatedcoder.com/on-ted-avant-guarde-presentation-styles-and-my-emerging-rwness/">emerging creative RWness</a> that mediums like YouTube help foster, but adding subtitles to a foreign film as a form of remix humor is particularly brilliant.</p>
<p>I especially appreciated the build humor since I was banging my head against a nasty build failure involving version incompatibilities between MbUnit and NCover when I took a break to watch it.</p>
<p><object width="450" height="385" data="http://www.youtube.com/v/Azl4nqLn4-Y&amp;hl=en&amp;fs=1&amp;showinfo=0" type="application/x-shockwave-flash"><param name="src" value="http://www.youtube.com/v/Azl4nqLn4-Y&amp;hl=en&amp;fs=1&amp;showinfo=0" /><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /></object></p>
<p>Enjoy.</p>
<p>Here&#8217;s the <a href="http://www.youtube.com/v/Azl4nqLn4-Y&amp;hl=en&amp;fs=1&amp;showinfo=0">link</a> if you can&#8217;t see the embedded player.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/MpUTUReQgB4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/why-hitler-really-lost-world-war-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/why-hitler-really-lost-world-war-ii/</feedburner:origLink></item>
		<item>
		<title>Oh, so THAT’s why SSL is the default for SVN…</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/-lfYdxHuCiM/</link>
		<comments>http://www.caffeinatedcoder.com/oh-so-thatrsquos-why-ssl-is-the-default-for-svnhellip/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 17:24:39 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/oh-so-thatrsquos-why-ssl-is-the-default-for-svnhellip/</guid>
		<description><![CDATA[It appears as though I made a rather bone-headed mistake when configuring  Subversion at work a few weeks ago.
Since we were not exposing our SVN server externally and decided that sending  our code files in plain text across our internal network did not represent a  significant security risk, we opted to not use SSL [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/battling-password-chaos/' rel='bookmark' title='Permanent Link: Battling Password Chaos'>Battling Password Chaos</a> <small>Keeping track of my passwords has been a nagging problem...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>It appears as though I made a rather bone-headed mistake when configuring  Subversion at work a few weeks ago.</p>
<p>Since we were not exposing our SVN server externally and decided that sending  our code files in plain text across our internal network did not represent a  significant security risk, we opted to not use SSL as a way to optimize  performance.</p>
<p>I’m not sure why I assumed that the actual credentials would be encrypted  even though I knew the content would not be.</p>
<p>Perhaps it was because we were using  windows authentication security scheme in SVN. Maybe it was because I actually  opened up the svn.simple file in the Subversion app data cache on my local  machine and saw that my TortoiseSVN credentials were saved in an encrypted form  on disk when using the ‘save credentials’ checkbox.</p>
<p>Whatever the reason, it was a very bad assumption.</p>
<p>Here is a screen shot from <a href="http://www.wireshark.org/">WireShark</a>,  my favorite packet sniffer. The blurred out part under authentication was my  windows password in clear text. Oops…</p>
<p><img class="aligncenter size-full wp-image-504" title="packetsniffercredentials" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/02/packetsniffercredentials.png" alt="packetsniffercredentials" width="450" height="361" /></p>
<p>Luckily, it was an easy matter to correct.</p>
<p>On the server-side, I simply had to check a box on the property tab of Visual  SVN to turn SSL back on. On the client side, I had to have everyone run an svn  switch command with the –relocate option to change their working directories to  use the new url.</p>
<p>So what was the lesson learned?</p>
<p>Next time I make a mistake like this, I will  use WireShark to gather all of the passwords of my fellow developers before I  switch to the more secure option. Dumb…dumb…dumb…</p>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/battling-password-chaos/' rel='bookmark' title='Permanent Link: Battling Password Chaos'>Battling Password Chaos</a> <small>Keeping track of my passwords has been a nagging problem...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/-lfYdxHuCiM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/oh-so-thatrsquos-why-ssl-is-the-default-for-svnhellip/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/oh-so-thatrsquos-why-ssl-is-the-default-for-svnhellip/</feedburner:origLink></item>
		<item>
		<title>The 10 Second Visual Studio Makeover</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/Np6vEnq18Go/</link>
		<comments>http://www.caffeinatedcoder.com/the-10-second-visual-studio-makeover/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 18:20:30 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=494</guid>
		<description><![CDATA[I blame it on being forced to sit through one too many episodes of my wife’s  favorite TV show, What  Not To Wear, but I finally became inspired to retire my old, tired-looking  default Visual Studio color scheme in favor of one of the hipper ones with a  black background.
It turned [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/working-on-new-implementation-of-ihumbleprogrammer/' rel='bookmark' title='Permanent Link: Working on new implementation of IHumbleProgrammer'>Working on new implementation of IHumbleProgrammer</a> <small>I&#8217;ve noticed my geek ego being aggravated a few times...</small></li><li><a href='http://www.caffeinatedcoder.com/a-poetic-tribute-to-visual-source-safe/' rel='bookmark' title='Permanent Link: A Poetic Tribute to Visual Source Safe'>A Poetic Tribute to Visual Source Safe</a> <small>Recent source control woes have inspired me to write this...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I blame it on being forced to sit through one too many episodes of my wife’s  favorite TV show, <a href="http://tlc.discovery.com/fansites/whatnottowear/whatnottowear.html">What  Not To Wear</a>, but I finally became inspired to retire my old, tired-looking  default Visual Studio color scheme in favor of one of the hipper ones with a  black background.</p>
<p>It turned out to be much easier than I thought since several bloggers already  went to the trouble of <a href="http://www.hanselman.com/blog/VisualStudioProgrammerThemesGallery.aspx">exporting  and publishing their favorite Visual Studio settings files</a>, which you can  import by simply selecting the ‘Import and Export Settings’ menu option under  the Tools menu.</p>
<p>My favorites are the ones that try to mimic the Vibrant Ink theme from <a href="http://macromates.com/"> TextMate</a>, the popular Rails IDE for the Mac. Rob Connery posted a <a href="http://blog.wekeroad.com/2007/10/17/textmate-theme-for-visual-studio-take-2/">nice  version</a>, but I finally settled on the one published by John Lam <a href="http://www.iunknown.com/2007/06/vibrant_ink_vis.html">here</a>.</p>
<p>Here’s a screen shot of me perusing <a href="http://code.google.com/p/codecampserver/">CodeCampServer</a>, the most  excellent sample app for the upcoming <a href="http://www.manning.com/palermo/">ASP.NET MVC in Action</a> book from  Manning and that’s being written by <a href="http://codebetter.com/blogs/jeffrey.palermo/">Jeffrey Palermo</a>, <a href="http://flux88.com/">Ben Scheirman</a>, and <a href="http://www.lostechies.com/blogs/jimmy_bogard/">Jimmy Bogard</a>.</p>
<p><img class="aligncenter size-full wp-image-495" title="vs-theme-screenshot" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/vs-theme-screenshot.png" alt="vs-theme-screenshot" width="450" height="248" /></p>
<p>Mostly I’m happy I made the switch because I think the new color schema is  easier on my eye, but I also can’t help but notice that I feel slightly more  positive towards my otherwise homely and rather bloated IDE.</p>
<p>I guess the moral of the story is that you should never underestimate the power of lipstick when confronted with a pig.</p>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/working-on-new-implementation-of-ihumbleprogrammer/' rel='bookmark' title='Permanent Link: Working on new implementation of IHumbleProgrammer'>Working on new implementation of IHumbleProgrammer</a> <small>I&#8217;ve noticed my geek ego being aggravated a few times...</small></li><li><a href='http://www.caffeinatedcoder.com/a-poetic-tribute-to-visual-source-safe/' rel='bookmark' title='Permanent Link: A Poetic Tribute to Visual Source Safe'>A Poetic Tribute to Visual Source Safe</a> <small>Recent source control woes have inspired me to write this...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/Np6vEnq18Go" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/the-10-second-visual-studio-makeover/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/the-10-second-visual-studio-makeover/</feedburner:origLink></item>
		<item>
		<title>Triple Shot Links # 17</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/Sf3cInsesxQ/</link>
		<comments>http://www.caffeinatedcoder.com/triple-shot-links-17/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:26:33 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Triple Shot Links]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=486</guid>
		<description><![CDATA[Enjoying life after VSS. Next stop, Crucible… and then on to  a possible replacement for CruiseControl (TeamCity or Bamboo).

Saving  the World via… TDD? &#8211; Steve Harman posts the best TDD code sample ever. It  not only demonstrates the context/specification style specs but also clearly  proves that TDD is our only hope [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-16/' rel='bookmark' title='Permanent Link: Triple Shot Links # 16'>Triple Shot Links # 16</a> <small> I’m just relaxing after a long weekend of migrating...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-10/' rel='bookmark' title='Permanent Link: Triple Shot Links # 10'>Triple Shot Links # 10</a> <small> I recently deployed my first Rails app into production,...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-7/' rel='bookmark' title='Permanent Link: Triple Shot Links # 7'>Triple Shot Links # 7</a> <small>I&#8217;m taking a needed break from implementing PCI compliance security...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 10px; display: inline;" src="http://farm4.static.flickr.com/3018/2866403303_7f415158ec_m.jpg" alt="" align="right" />Enjoying life after VSS. Next stop, <a href="http://www.atlassian.com/software/crucible/">Crucible</a>… and then on to  a possible replacement for CruiseControl (<a href="http://www.jetbrains.com/teamcity/">TeamCity</a> or <a href="http://www.atlassian.com/software/bamboo/">Bamboo</a>).</p>
<ol>
<li><a href="http://stevenharman.net/blog/archive/2009/01/14/12807.aspx"><strong>Saving  the World via… TDD?</strong></a> &#8211; Steve Harman posts the best TDD code sample ever. It  not only demonstrates the context/specification style specs but also clearly  proves that TDD is our only hope of preventing the machines that look  suspiciously like the current California Governor from taking over the world.</li>
<li><a href="http://feeds.feedburner.com/%7Er/dylanbeattie/%7E3/441426753/rant-about-raid-with-bad-metaphor-about.html"><strong>A  Rant about RAID, with a Bad Metaphor about Eggs, and No Happy Ending</strong></a> – Dylan  Beattie shares his misadventures in using SATA RAID to try to protect his dev  machine from catastrophe and in the process comes up with the best analogy I’ve  seen in a while:
<div style="margin-top: 10px; margin-bottom: 10px; margin-left: 50px;">“SATA RAID  is like carefully dividing your eggs into two really good baskets, then tying  them together with six feet of wet spaghetti and hanging them off a ceiling  fan.”</div>
</li>
<li><a href="http://www.jameskovacs.com/blog/VisualStudio2010VisualStudio2008ReSharper.aspx"><strong>Visual  Studio 2010 == Visual Studio 2008 + ReSharper</strong> </a>- James Kovac catches an MS  marketing faux-pas that proves that even the Microsoft Devs don’t like using  Visual Studio without ReSharper installed.</li>
</ol>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-16/' rel='bookmark' title='Permanent Link: Triple Shot Links # 16'>Triple Shot Links # 16</a> <small> I’m just relaxing after a long weekend of migrating...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-10/' rel='bookmark' title='Permanent Link: Triple Shot Links # 10'>Triple Shot Links # 10</a> <small> I recently deployed my first Rails app into production,...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-7/' rel='bookmark' title='Permanent Link: Triple Shot Links # 7'>Triple Shot Links # 7</a> <small>I&#8217;m taking a needed break from implementing PCI compliance security...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/Sf3cInsesxQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/triple-shot-links-17/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/triple-shot-links-17/</feedburner:origLink></item>
		<item>
		<title>Tips on Upgrading from VSS to Subversion</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/zt69H5QAwfQ/</link>
		<comments>http://www.caffeinatedcoder.com/tips-on-upgrade-from-vss-to-subversion/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 19:00:13 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Technical How-To's]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=482</guid>
		<description><![CDATA[We’ve almost completed our first week on Subversion and all is well. Here are  a few pieces of advice to those of you about to embark on a VSS to SVN migration  of your own.

Spend Time Getting Buy-In from all Developers BEFORE the  Migration – Force feeding a new tool to your co-workers is a recipe for  disaster. [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/curing-cancer-preventing-global-warming-and-achieving-world-peace-by-migrating-from-vss-to-svn/' rel='bookmark' title='Permanent Link: Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN'>Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN</a> <small>I admit that the title is slightly misleading. There will...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>We’ve almost completed our first week on Subversion and all is well. Here are  a few pieces of advice to those of you about to embark on a VSS to SVN migration  of your own.</p>
<ol>
<li><strong>Spend Time Getting Buy-In from all Developers BEFORE the  Migration</strong> – Force feeding a new tool to your co-workers is a recipe for  disaster. Developers who aren’t given any input or choice in the matter may  be compliant at first but will likely turn passive-aggressive on you at the  first sign of trouble. We did some lunch-and-learns and focused specifically on  current source control related problems that would be solved by migrating to a  new tool well before we did the actual migration. This made life much easier  during the inevitable bumps that came up during the first few days after the  migration.</li>
<li><strong>Be Aware of Tool Limitations When Migrating History</strong> –  Unfortunately there don’t seem to be very many good options out there when it  comes to migrating VSS history. After some failed attempts at using <a href="http://www.pumacode.org/projects/vss2svn">VSS2SVN</a> and <a href="http://www.polarion.org/index.php?page=overview&amp;project=svnimporter">SVNImporter</a>,  I settled on using <a href="http://www.poweradmin.com/SOURCECODE/vssmigrate.tim2.zip">Eric Lane’s  version</a> of <a href="http://www.poweradmin.com/sourcecode/vssmigrate.aspx">VSSMigrate</a>. It  accurately converted all the files in a 5GB VSS database, preserved history from  the perspective of a single file, and stripped the VSS bindings from the project  and solution files. The utility is also written in C# and the source code is  provided so you can make tweaks as needed (I changed it to put the associated  version label in the comment of the revision). Unfortunately, it doesn’t  convert labels and more importantly it doesn’t preserve history from a holistic  perspective since it loops through and commits the version history of one file  at a time. If you really only care about doing diffs and not about  reconstructing your apps as of a certain point in time, then I would recommend  using this tool. Otherwise, keep looking.</li>
<li><strong>Do Several Practice Migrations</strong> – I set up a Virtual Machine  that mirrored our source control server and not only went through the migration  several times on a copy of the full VSS database, but also documented each step  to make life easier during the actual migration, which took place over the  weekend when I was less…focused.</li>
<li><strong>Don’t Forget About Dependencies</strong> – We had quite a few Nant,  CruiseControl, and VisualBuild scripts that needed to be modified, which added  quite a bit of time and effort to the migration process. A VM definitely came in  handy when testing these changes as well.</li>
<li><strong>Run VSSAnalyze Before Migration – </strong>Corrupted VSS chains are  common and will likely cause havoc with a migration tool unless you try to  fix them prior to the migration. Even after running Analyze, the VSS equivalent  of duct tape, there were still 2 files with corrupted version history that I had  to remove from the VSS database prior to the migration and manually add to SVN  after the migration.</li>
<li><strong>Use BeyondCompare to Verify Migration</strong> – Make sure that you  do a full comparison of working directories from the new SVN repository and old  VSS repository. Before performing the comparison, you’ll want to configure  exclusions for the svn and vss specific files as well as the project and  solution files if they have been stripped of bindings either by the migration  tool or manually.</li>
<li><strong>Open Up and Compile All Solutions After Migration</strong> – I  discovered a resource file that somehow got dropped during the migration because  one of the solutions would no longer compile.</li>
<li><strong>Use SharpSVN to Extend and Script For SVN</strong> – I was surprised  at how easy it was to create a pre-commit hook for SVN that would analyze  commits and prevent the ones that didn’t contain a valid issue for our issue  tracker (JIRA). This was partially because I used <a href="http://sharpsvn.open.collab.net/">SharpSVN</a>, an open source API,  and was thus able to interact with the repository without having to parse  command line return values from SvnLook.</li>
<li><strong>Practice Backups and Restores Before Migration</strong> – Resist the  temptation to put this off until after the migration and make sure you fully  test any scripts that you use, especially if you don’t use the recommended  Python scripts that can be found on the official SVN site . I couldn’t convince  the Powers-That-Be to let me install a Python interpreter on our server, so I  went surfing for PowerShell scripts and the first one I tried for incremental  backups only actually saved the latest revision instead of the latest range of  revisions. I didn’t discover until doing some testing on a practice restore that  I did.</li>
<li><strong>Plan the Migration over a Weekend – </strong>Most of the processes  are very long running. The one that migrated our VSS history took almost 10  hours for a 5 GB database and we ran into some problems with our build scripts  that took much of the day Sunday to debug.</li>
</ol>
<p>Happy Migration!</p>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/curing-cancer-preventing-global-warming-and-achieving-world-peace-by-migrating-from-vss-to-svn/' rel='bookmark' title='Permanent Link: Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN'>Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN</a> <small>I admit that the title is slightly misleading. There will...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/zt69H5QAwfQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/tips-on-upgrade-from-vss-to-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/tips-on-upgrade-from-vss-to-subversion/</feedburner:origLink></item>
		<item>
		<title>Don’t Be a Cotton-Headed-Ninny-Muggins When Copying Files</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/0e9aqt3B8Gc/</link>
		<comments>http://www.caffeinatedcoder.com/don%e2%80%99t-be-a-cotton-headed-ninny-muggins-when-copying-files/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 07:19:28 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Software Development Practices]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Triple Shot Links]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=470</guid>
		<description><![CDATA[I just submitted a feature request to Microsoft.
I thought that the perhaps the Windows Explorer file copy dialog could be a bit more truthful and instead of displaying something like this whenever a user is trying to copy something over 100 MB in size through Windows Explorer…


…it should instead show something like this&#8230;


Just to be [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/curing-cancer-preventing-global-warming-and-achieving-world-peace-by-migrating-from-vss-to-svn/' rel='bookmark' title='Permanent Link: Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN'>Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN</a> <small>I admit that the title is slightly misleading. There will...</small></li><li><a href='http://www.caffeinatedcoder.com/which-productivity-tricks-have-you-adopted-lately/' rel='bookmark' title='Permanent Link: Which Productivity Tricks Have You Adopted Lately?'>Which Productivity Tricks Have You Adopted Lately?</a> <small>Every since I learned that the most important characteristic of...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I just submitted a feature request to Microsoft.</p>
<p>I thought that the perhaps the Windows Explorer file copy dialog could be a bit more truthful and instead of displaying something like this whenever a user is trying to copy something over 100 MB in size through Windows Explorer…</p>
<p><a href="$WindowsCopyDialog[2].png"><img class="aligncenter size-full wp-image-471" title="windowscopydialog" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/windowscopydialog.png" alt="windowscopydialog" width="450" height="212" /><br />
</a></p>
<p>…it should instead show something like this&#8230;</p>
<p><a href="$WindowsCopyDialog_2[2].png"><img class="aligncenter size-full wp-image-472" title="windowscopydialog_2" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/windowscopydialog_2.png" alt="windowscopydialog_2" width="450" height="212" /><br />
</a></p>
<p>Just to be safe,  I sent the above mockup directly to Bill Gates. I know he doesn’t run things in Redmond anymore but I figured he probably still eats a half dozen alpha-geeks raw for breakfast every morning and could surely make this happen.</p>
<p>In the meantime, I highly recommend that you find some other utility to hold you over whenever you have to perform a large copy job.</p>
<p>I used <a href="http://en.wikipedia.org/wiki/Robocopy">RoboCopy</a> this weekend when I was forced to do an enormous one over a slow and unreliable VPN and was pleasantly surprised by how fast and robust it was.</p>
<p>Not only did it magically pick up where it left off every time I reconnected after a network failure, but it was even smart enough to only copy over missing files when I reran it this morning after discovering a few files were missing when I did a BeyondCompare sanity check (I didn’t know about the /R switch). I was prepared for several more hours of copying but I was greeted with this after only about 30 seconds.</p>
<p><a href="$robocopy[2].png"><img class="aligncenter size-full wp-image-473" title="robocopy" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/robocopy.png" alt="robocopy" width="450" height="270" /></a></p>
<p><a href="$robocopy[2].png"><br />
</a>Not too shabby.</p>
<p>Moreover, there are a ton of other switches that allow fine grained control over how file attributes and ACL’s are copied over.</p>
<p>Despite it being an unassuming command line utility that ships with the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;displaylang=en">Windows Server 2003 Resource Kit Tools</a>, RoboCopy would clearly make Windows Explorer its bitch if they ever had it out in a File Copy Death Match.</p>
<p>Of course this is but one of a million good file copy options. The <a href="http://www.hanselman.com/blog/">ToolMeister</a> himself wrote about his favorites <a href="http://www.hanselman.com/blog/XCopyConsideredHarmfulRobocopyOrXXCopyOrSyncBack.aspx">here</a> and his HanselFollowers provided dozens of other good options in the comment section.</p>
<p>Whatever you decide to use for your future large copy jobs, just don’t be a <a href="http://www.urbandictionary.com/define.php?term=cotton-headed-ninny-muggins">cotton-headed-ninny-muggins</a> and rely on Windows Explorer.</p>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/curing-cancer-preventing-global-warming-and-achieving-world-peace-by-migrating-from-vss-to-svn/' rel='bookmark' title='Permanent Link: Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN'>Curing Cancer, Preventing Global Warming, and Achieving World Peace by Migrating from VSS to SVN</a> <small>I admit that the title is slightly misleading. There will...</small></li><li><a href='http://www.caffeinatedcoder.com/which-productivity-tricks-have-you-adopted-lately/' rel='bookmark' title='Permanent Link: Which Productivity Tricks Have You Adopted Lately?'>Which Productivity Tricks Have You Adopted Lately?</a> <small>Every since I learned that the most important characteristic of...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/0e9aqt3B8Gc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/don%e2%80%99t-be-a-cotton-headed-ninny-muggins-when-copying-files/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/don%e2%80%99t-be-a-cotton-headed-ninny-muggins-when-copying-files/</feedburner:origLink></item>
		<item>
		<title>Triple Shot Links # 16</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/wYw7iUhmTXY/</link>
		<comments>http://www.caffeinatedcoder.com/triple-shot-links-16/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 03:12:20 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Triple Shot Links]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=467</guid>
		<description><![CDATA[ I’m just relaxing after a long weekend of migrating our source control from VSS to SVN and upgrading our build server. It turned out to be a fairly sizable project due to all of our automated build scripts, so I’m glad it’s done.
So long VSS. Don’t let the door hit you on the ass [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-2/' rel='bookmark' title='Permanent Link: Triple Shot Links # 2'>Triple Shot Links # 2</a> <small>Question: What&#8217;s worse than the stomach flu? Answer: Having your...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-5/' rel='bookmark' title='Permanent Link: Triple Shot Links # 5'>Triple Shot Links # 5</a> <small> A few good reads I discovered while recovering from...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-11/' rel='bookmark' title='Permanent Link: Triple Shot Links # 11'>Triple Shot Links # 11</a> <small>Only 6 more days until Christmas and 5 more days...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="display: inline; margin: 10px" src="http://farm4.static.flickr.com/3018/2866403303_7f415158ec_m.jpg" alt="" align="right" /> I’m just relaxing after a long weekend of migrating our source control from VSS to SVN and upgrading our build server. It turned out to be a fairly sizable project due to all of our automated build scripts, so I’m glad it’s done.</p>
<p>So long VSS. Don’t let the door hit you on the ass on the way out!</p>
<ol>
<li><a href="http://kensipe.blogspot.com/2009/01/windows-7-download-frustration.html"><strong>Windows 7 Download Frustration</strong></a> – Ken Sipe provides a timely rant about MSDN download sites only working on an IE browser. I downloaded several things from MSDN this last week as I prepped a brand-spanking new build\source control server and managed to string together an impressive string of obscenities every up every time I had to switch browsers just to get the download to work. <strong>Special Message to Microsoft: </strong>Ignoring the realities of cross-browser compatibility on your corporate sites is inane and does not help promote your browser in any way!  On the contrary, it simply undermines my confidence in your ability to write decent, reliable software. Fix it before IE starts dragging otherwise decent software down with it as it continues to sink into the pit of browser failure.</li>
<li><a href="http://blogs.msdn.com/jaredpar/archive/2009/01/12/dvorak-keyboard-is-it-really-faster-gasp.aspx"><strong>Dvorak Keyboard: Is it Really Faster?</strong></a> &#8211; Jaredpar discusses the pros and cons of switching from the traditional QWERTY to the Dvorak keyboard. For several years I’ve heard urban legends about the QWERTY originally being designed to slow typists down because of the limitations of the mechanical type writer and read about programmers who claim to be faster and more accurate typists after making the switch. I even considered making ‘switching to Dvorak’ one of my New Year’s resolutions for 2009. However, after reading this post I am now inclined to postpone this move indefinitely. I’m just not sure I am willing to spend three frustrating months of lower productivity while I fumble around on the keyboard as my fingers relearn the keys. Even more importantly, I really don’t want to deal with the hassles involved in interacting with other people’s computers afterwards (i.e. pairing).</li>
<li><a href="http://jeffreypalermo.com/blog/limiting-code-comments-increases-maintainability/"><strong>Limiting Code Comments Increases Productivity</strong></a> -  This is another post that I almost didn’t read because the topic has been done to death, however Jeffrey Palermo presents the argument beautifully and even includes before and after code samples to illustrate the point. I’m glad Jeff emphasized that nobody is suggesting that you will improve readability simply by ripping out existing comments. On the other hand, carefully naming and proper method composition always trumps comments. I can’t tell you how many stale comments have actually led me down an erroneous path because they no longer matched what the code actually did.</li>
</ol>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-2/' rel='bookmark' title='Permanent Link: Triple Shot Links # 2'>Triple Shot Links # 2</a> <small>Question: What&#8217;s worse than the stomach flu? Answer: Having your...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-5/' rel='bookmark' title='Permanent Link: Triple Shot Links # 5'>Triple Shot Links # 5</a> <small> A few good reads I discovered while recovering from...</small></li><li><a href='http://www.caffeinatedcoder.com/triple-shot-links-11/' rel='bookmark' title='Permanent Link: Triple Shot Links # 11'>Triple Shot Links # 11</a> <small>Only 6 more days until Christmas and 5 more days...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/wYw7iUhmTXY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/triple-shot-links-16/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/triple-shot-links-16/</feedburner:origLink></item>
		<item>
		<title>My 2009 Top 10 Technology Hit List</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/CLJNqIGo50w/</link>
		<comments>http://www.caffeinatedcoder.com/my-2009-top-10-technology-hit-list/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 06:38:46 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Continuous Improvement]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=459</guid>
		<description><![CDATA[Here is a list of what I would most like to learn in the coming year.

StructureMap – This is the one new technology that I will likely be able to implement at work  in the first quarter, so I made it first on my list. I’ve been using the  Dependency Injection pattern on [...]


Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/my-essential-tool-list/' rel='bookmark' title='Permanent Link: My Essential Tool List'>My Essential Tool List</a> <small>My heart skipped a few beats the other day due...</small></li><li><a href='http://www.caffeinatedcoder.com/seven-things-i-want-to-do-differently-in-2008-2/' rel='bookmark' title='Permanent Link: Seven Things I Want to Do Differently in 2008'>Seven Things I Want to Do Differently in 2008</a> <small>This is the sequel to my Seven Things I Did...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Here is a list of what I would most like to learn in the coming year.</p>
<ol>
<li><strong><a href="http://structuremap.sourceforge.net/Default.htm"><img title="target" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/target.gif" alt="target" width="200" height="207" align="right" /></a><a href="http://structuremap.sourceforge.net/Default.htm">StructureMap</a></strong> – This is the one new technology that I will likely be able to implement at work  in the first quarter, so I made it first on my list. I’ve been using the  Dependency Injection pattern on an almost daily basis over the last six  months as a way to make our codebase more testable, but I still haven’t taken  the time to learn and start incorporating an IoC Container. Up until recently I  had planned on using Windsor since I managed to make it through a few tutorials  on it last year, but <a href="http://codebetter.com/blogs/jeremy.miller/">Jeremy Miller</a> has given StructureMap so much attention  lately in terms of a enhancements and documentation that I decided to try it  instead.</li>
<li><strong><a href="http://jquery.com/">JQuery &amp; QUnit</a></strong>– I only  recently joined the rest of the world when it comes to using ajax and modern  javascript frameworks while I was working on <a href="../dospecescreations-some-initial-thoughts-on-building-my-first-rails-app/">my  recent Rails side project</a> (I do mostly middle-tier and back-end  development). I used <a href="http://www.prototypejs.org/">Prototype</a> simply  because it was the default for Rails, but now I’m ready to try the much hyped  JQuery framework along with QUnit, the unit testing framework that goes with it.  Since I tend to learn much better when I have a concrete task, I’m going to  start by re-implementing all of the Prototype functionality in my Rails app in  JQuery.</li>
<li><strong><a href="http://www.asp.net/mvc/">MVC Framework</a></strong> – I  doubt I’ll have the opportunity to use this at work anytime soon since switching  an existing project from WebForms to the MVC Framework would be a major rewrite.  However now that I have a pretty good grounding in an MVC framework (RoR), I’m  curious to see how the new Microsoft version compares.</li>
<li><strong><a href="http://www.ironruby.net/">IronRuby</a></strong> – I’m also  excited to see what the IronRuby experience is like compared with RoR. The RoR  stack has been criticized in the past for poor performance and limited API and  IDE support, so I’m anxious to see whether running Ruby on the DLR will be the  answer to these problems or whether it will just seem like a cheap knock-off of  the original.</li>
<li><strong><a href="http://git-scm.com/">Git</a> </strong>and\or<strong> <a href="http://www.selenic.com/mercurial/wiki/">Mercurial</a> – </strong>I finally  graduated to Subversion this last year, so now it is time to challenge myself  with a distributed source control system. There’s no way we would go through  another upgrade at work anytime soon, but it will be fun to experiment  with these tools on personal projects.</li>
<li><strong><a href="http://www.djangoproject.com/">Django</a></strong> – I  don’t have plans of doing any real development in Python or Django, but a friend  of mine swears that this is way better than Rails, so I’m curious enough to at  least go through some tutorials and sample projects so that I can decide for  myself.</li>
<li><strong><a href="http://erlang.org/">Erlang</a></strong> – I’m going to  finally try a functional language this year. I mean it this time. Really&#8230;</li>
<li><strong><a href="http://weblogs.asp.net/scottgu/archive/2007/04/08/new-orcas-language-feature-lambda-expressions.aspx">Lambda  Expressions</a> – </strong>I can fumble my way through samples, but I want to  ratchet up my understanding a few levels so that I can naturally incorporate  this C# 3.0 goodness into my daily development.</li>
<li><strong><a href="../powershell-from-50000-feet/">PowerShell  (again)</a> – </strong>I dug into this technology pretty deep about a year and a  half ago when I first started this blog and even gave a couple presentations to  user groups on the topic. Unfortunately, I fell victim to the ‘use it or loose  it’ phenomenon and struggled mightily to do even the simplest of tasks during a  recent automation project. Nevertheless, I was reminded about how cool this  product was and got inspired to relearn it and start trying to use it on a  regular basis this time around.</li>
<li><strong><a href="http://www.ubuntu.com/">Ubuntu</a></strong> – Finally, it’s been far  too long since I’ve played with a flavor of Linux. With VM’s I really have no  excuse anymore.</li>
</ol>
<p>I guess I&#8217;d better quit writing and get started&#8230;</p>


<p>Related posts:<ol><li><a href='http://www.caffeinatedcoder.com/my-essential-tool-list/' rel='bookmark' title='Permanent Link: My Essential Tool List'>My Essential Tool List</a> <small>My heart skipped a few beats the other day due...</small></li><li><a href='http://www.caffeinatedcoder.com/seven-things-i-want-to-do-differently-in-2008-2/' rel='bookmark' title='Permanent Link: Seven Things I Want to Do Differently in 2008'>Seven Things I Want to Do Differently in 2008</a> <small>This is the sequel to my Seven Things I Did...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/CLJNqIGo50w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/my-2009-top-10-technology-hit-list/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/my-2009-top-10-technology-hit-list/</feedburner:origLink></item>
		<item>
		<title>Using YSlow and HammerHead to Enhance Web App Performance</title>
		<link>http://feedproxy.google.com/~r/caffeinatedcoder/ProY/~3/b4pBosle90o/</link>
		<comments>http://www.caffeinatedcoder.com/getting-2x-performance-boost-with-yslow-and-hammerhead/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 18:25:48 +0000</pubDate>
		<dc:creator>Russell Ball</dc:creator>
				<category><![CDATA[Technical How-To's]]></category>
		<category><![CDATA[Technical Overviews]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.caffeinatedcoder.com/?p=433</guid>
		<description><![CDATA[I recently installed YSlow, a  Firefox add-on integrated with the popular Firebug web development tool that does  performance analysis based on the rules for high  performance web sites developed by Yahoo.
I tried it on DosPecesCreations.com,  the e-commerce site I recently built for my wife using Ruby on Rails, and was  [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I recently installed <a href="http://developer.yahoo.com/yslow/">YSlow</a>, a  Firefox add-on integrated with the popular <a href="http://www.getfirebug.com/">Firebug</a> web development tool that does  performance analysis based on the <a href="http://developer.yahoo.com/performance/index.html#rules">rules for high  performance web sites</a> developed by Yahoo.</p>
<p>I tried it on <a href="http://dospecescreations.com/">DosPecesCreations.com</a>,  the e-commerce site I recently built for my wife using Ruby on Rails, and was  surprised to learn that the site received a failing grade according to the YSlow  Report Card.</p>
<p><img class="aligncenter size-full wp-image-447" title="yslow_grade_before" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/yslow_grade_before.png" alt="yslow_grade_before" width="450" height="451" /></p>
<p>It took me just over an hour of clicking on the explanations for failed  failed categories and researching how to make some of the configuration changes  in Apache to bring that grade up to a high B.</p>
<p>Bringing it up to an A would  require me to use a Content Delivery Network like <a href="http://www.akamai.com/">Akamai Technologies</a>, which deploys content across multiple, geographically dispersed servers and dynamically  chooses the fastest option in a given scenario based on proximity and available  connections. However, since the customer base for the site is not international and we don’t  have thousands of dollars a month to spend at the moment, I’ll just have to  content myself with being a B student.</p>
<p>So what was the payoff for making these changes?</p>
<p>I wanted to have a somewhat objective way to measure the performance improvements,  so I also downloaded <a href="http://stevesouders.com/hammerhead/">HammerHead</a>, another firebug  add-on that provides average load times  for pages with and without the cache being used.</p>
<p>Here are my baseline metrics.</p>
<p><img class="aligncenter size-full wp-image-441" title="yslow_2" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/yslow_2.png" alt="yslow_2" width="450" height="399" /></p>
<p>Here are the results after I made the changes.</p>
<p><img class="aligncenter size-full wp-image-440" title="yslow_after_2" src="http://www.caffeinatedcoder.com/wp-content/uploads/2009/01/yslow_after_2.png" alt="yslow_after_2" width="450" height="410" /></p>
<p>As you can see, I more than doubled the speed of the site with little effort  and almost no coding changes. Here’s a quick summary of what I did:</p>
<ol>
<li><strong>Reduced the size of the HTTP response </strong>
<ul>
<li><strong>Enabled Gzip Compression</strong> -  This is done  in Apache with an output filter, which I enabled by adding one line to the  .htaccess in the root directory of the site.</li>
<li><strong>Minified Javascript Files</strong> – This involved removing all  the comments as well as unneeded white space characters (space, newline, and tab)  from javascript files. Luckily there are tools such as <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a> that will do  this for you. I ran the Ruby version of JSMin as a <a href="http://maintainable.com/articles/minifying_your_rails_javascript">Rake  task</a> and was able to reduce my <a href="http://www.prototypejs.org/">Prototype Javascript Library</a> files by about  25%.</li>
<li><strong>Removed Unused Javascript Reference</strong> – This sounds obvious,  but by using the default option with the <strong>javascript_include_tag</strong> Rails helper tag I was referencing 6 Prototype files even though I was only  using 2 of them. By removing the unused references, I was able to trim 65k from  my pages.</li>
</ul>
</li>
<li><strong>Reduced # of trips</strong>
<ul>
<li><strong>Merged javascript files</strong> – The Rake task I used above also  merged the remaining prototype files into one file so the client would have to make  one less round trip to retrieve the files.</li>
<li><strong>Enabled Caching – </strong>I configured Apache to use Far Future  Expire tags for my static content (images, js, &amp; css) and Cache-Control tags  for my dynamic content (2 hour expiration). I followed the recommendation of disabling  ETags as well even though this only appears to only interfere with caching on  web farms and I’m currently on a single server.</li>
</ul>
</li>
<li><strong>Maximized parallel download speed</strong> – I did this by moving  all my scripts from the html header to the bottom of the page. Apparently javascript files can block parallel  downloads so simply moving these from  the header to the bottom of the page will increase the overall load time.</li>
</ol>
<p>I used <a href="http://www.askapache.com/htaccess/apache-speed-cache-control.html">this  resource</a> while making all of the Apache configuration changes. If you’re  using IIS, then you might want to try <a href="http://turtle.net.nz/blog/post/YSlowUsingIIS/comments">this post</a>.</p>
<p>As someone who spends most of his time doing middle tier and database development, I was surprised to learn how much of a web application&#8217;s performance is affected by these front end concerns.</p>
<p>Luckily, all of these front-end recommendations were much easier to fix than almost any performance tuning efforts applied to the back end.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/caffeinatedcoder/ProY/~4/b4pBosle90o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.caffeinatedcoder.com/getting-2x-performance-boost-with-yslow-and-hammerhead/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.caffeinatedcoder.com/getting-2x-performance-boost-with-yslow-and-hammerhead/</feedburner:origLink></item>
	</channel>
</rss>
