<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-692830459782489335</id><updated>2011-07-08T05:53:44.333-07:00</updated><category term='ruby'/><category term='graphics'/><category term='cucumber'/><category term='requirements'/><category term='testing'/><category term='python'/><category term='open-source'/><category term='behavior'/><category term='anti-patterns'/><title type='text'>Power Metal Geek Force</title><subtitle type='html'>It doesn't get happy. It doesn't get sad. It just runs programs.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://powermetalgeekforce.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://powermetalgeekforce.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Justin Walgran</name><uri>http://www.blogger.com/profile/16827288475996379447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-692830459782489335.post-8318461606942565947</id><published>2009-11-06T06:27:00.001-08:00</published><updated>2009-11-06T06:42:52.933-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anti-patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Ensuring your own destruction</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_CiXTDhMty5w/SvQydglyT2I/AAAAAAAAABM/3pMxZIqwcdE/s1600-h/king_of_the_road.jpg"&gt;&lt;img style="MARGIN: 0px 0px 10px 10px; WIDTH: 126px; FLOAT: right; HEIGHT: 137px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5400997335670083426" border="0" alt="" src="http://3.bp.blogspot.com/_CiXTDhMty5w/SvQydglyT2I/AAAAAAAAABM/3pMxZIqwcdE/s200/king_of_the_road.jpg" /&gt;&lt;/a&gt;When practicing Test Driven Development (TDD) that middle ‘D’ is way more important than the ‘T.’ Even if you don’t write test cases before implementation code, or don’t write formal test code at all, driving the design of your application with the goal of having your code be easily testable forces components to be decoupled, dependancies to be explicit, and functions to be small and focused.&lt;br /&gt;&lt;br /&gt;It hurt me to read the post linked below. I could put a shameful checkmark next to most of the anti-patterns listed. I take comfort in the fact that you can’t really learn to avoid these problems until you have experienced, first hand, the extrordinary pain they can cause.&lt;br /&gt;&lt;br /&gt;How To Write Untestable Code&lt;br /&gt;&lt;a href="http://googletesting.blogspot.com/2008/07/how-to-write-3v1l-untestable-code.html"&gt;http://googletesting.blogspot.com/2008/07/how-to-write-3v1l-untestable-code.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/692830459782489335-8318461606942565947?l=powermetalgeekforce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://powermetalgeekforce.blogspot.com/feeds/8318461606942565947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=692830459782489335&amp;postID=8318461606942565947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default/8318461606942565947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default/8318461606942565947'/><link rel='alternate' type='text/html' href='http://powermetalgeekforce.blogspot.com/2009/11/ensuring-your-own-destruction.html' title='Ensuring your own destruction'/><author><name>Justin Walgran</name><uri>http://www.blogger.com/profile/16827288475996379447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_CiXTDhMty5w/SvQydglyT2I/AAAAAAAAABM/3pMxZIqwcdE/s72-c/king_of_the_road.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-692830459782489335.post-4297222901853537497</id><published>2009-01-01T06:36:00.000-08:00</published><updated>2009-01-01T08:11:27.727-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='requirements'/><category scheme='http://www.blogger.com/atom/ns#' term='behavior'/><category scheme='http://www.blogger.com/atom/ns#' term='cucumber'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Whacking the gopher</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CiXTDhMty5w/SVzgSj7WVrI/AAAAAAAAABE/TryEj2MRzM8/s1600-h/communicationbreakdown.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 135px; height: 112px;" src="http://3.bp.blogspot.com/_CiXTDhMty5w/SVzgSj7WVrI/AAAAAAAAABE/TryEj2MRzM8/s200/communicationbreakdown.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5286346672112555698" /&gt;&lt;/a&gt;I was reading up on &lt;a href="http://github.com/aslakhellesoy/cucumber/wikis"&gt;Cucumber&lt;/a&gt;, and came across a link to this &lt;a href="http://www.theregister.co.uk/2007/06/25/thoughtworks_req_manage/"&gt;article&lt;/a&gt; on requirements management. I can say, with confidence, that in the 8 years I have been writing code for money, not once has a project gotten into trouble because of a piece of technology. &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;One hundred percent of the time it was some form of communication failure &lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;that threw a monkey in the wrench&lt;/span&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before the holidays I dropped &lt;a href="http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html"&gt;this bit of science&lt;/a&gt; on my coworkers which was met with a resounding "whatever, dude." Regardless, I think (T|B|D)DD amounts to a developer focused solution to the well known problem of dysfunctional communication in software development. Specs, in the &lt;a href="http://rspec.info/"&gt;rspec&lt;/a&gt; sense of the word, are communication. Pound for pound, a spec that is written in plain language, but is also executable, is the best form of software project communication possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fully spec-ing the project is good not just for the internal team or the bosses or the customers. It is often forgotten that one of the most import people that a developer &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;must&lt;/span&gt; establish clear communication with is &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;him or herself in the future&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now go write a spec.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/692830459782489335-4297222901853537497?l=powermetalgeekforce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://powermetalgeekforce.blogspot.com/feeds/4297222901853537497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=692830459782489335&amp;postID=4297222901853537497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default/4297222901853537497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default/4297222901853537497'/><link rel='alternate' type='text/html' href='http://powermetalgeekforce.blogspot.com/2009/01/whacking-gopher.html' title='Whacking the gopher'/><author><name>Justin Walgran</name><uri>http://www.blogger.com/profile/16827288475996379447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_CiXTDhMty5w/SVzgSj7WVrI/AAAAAAAAABE/TryEj2MRzM8/s72-c/communicationbreakdown.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-692830459782489335.post-5404392410767779879</id><published>2008-12-02T23:56:00.000-08:00</published><updated>2008-12-03T00:43:02.670-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>It's Magick, baby!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CiXTDhMty5w/STZFwbJm8HI/AAAAAAAAAAM/hCcjrGmGdLo/s1600-h/remotewiz.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 162px; height: 173px;" src="http://4.bp.blogspot.com/_CiXTDhMty5w/STZFwbJm8HI/AAAAAAAAAAM/hCcjrGmGdLo/s320/remotewiz.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5275480711735210098" /&gt;&lt;/a&gt;&lt;br /&gt;Dave Weiner &lt;a href="http://www.scripting.com/stories/2008/11/30/fractionalHorsepowerImagem.html"&gt;put out a call&lt;/a&gt; for an XML-RPC web service that would create image thumbnails. My response is RemoteMagick, now available at &lt;a href="http://code.google.com/p/remotemagick/"&gt;Google Code&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is a humble page of Python at the moment, but it does crank out thumbnails like a champ with no dependancies other than the standard Python libraries and an installation of the ImageMagick command line tools. Use it and abuse it as you will.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/692830459782489335-5404392410767779879?l=powermetalgeekforce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://powermetalgeekforce.blogspot.com/feeds/5404392410767779879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=692830459782489335&amp;postID=5404392410767779879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default/5404392410767779879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/692830459782489335/posts/default/5404392410767779879'/><link rel='alternate' type='text/html' href='http://powermetalgeekforce.blogspot.com/2008/12/its-magick-baby.html' title='It&apos;s Magick, baby!'/><author><name>Justin Walgran</name><uri>http://www.blogger.com/profile/16827288475996379447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_CiXTDhMty5w/STZFwbJm8HI/AAAAAAAAAAM/hCcjrGmGdLo/s72-c/remotewiz.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
