<?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"?><!-- generator="wordpress/2.0.9" --><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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>pseudofish</title>
	<link>http://pseudofish.com/blog</link>
	<description>Beauty through design</description>
	<pubDate>Wed, 02 May 2012 16:54:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.9</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Pseudofish" /><feedburner:info uri="pseudofish" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>-37.8626789658184</geo:lat><geo:long>144.972390718543</geo:long><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FPseudofish" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FPseudofish" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FPseudofish" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Pseudofish" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FPseudofish" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FPseudofish" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FPseudofish" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Debugging Python with PDB</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/i6o2p158FRY/</link>
		<comments>http://pseudofish.com/blog/2012/05/03/debugging-python-with-pdb/#comments</comments>
		<pubDate>Wed, 02 May 2012 16:51:59 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Python</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2012/05/03/debugging-python-with-pdb/</guid>
		<description>I suck at using debuggers, largely because I don&amp;#8217;t launch them often enough.
Fortunately, this year&amp;#8217;s PyCon had a great talk from Chris McDonough on how to get started with Python&amp;#8217;s debugger, PDB. The friendly people at Stockholm&amp;#8217;s Python meet-up suggested it.

I made notes while watching, to remove excuses from future me on launching pdb.
Where you [...]</description>
			<content:encoded><![CDATA[<p>I suck at using debuggers, largely because I don&#8217;t launch them often enough.</p>
<p>Fortunately, this year&#8217;s PyCon had a <a href="http://pyvideo.org/video/644/introduction-to-pdb">great talk</a> from Chris McDonough on how to get started with Python&#8217;s debugger, <a href="http://docs.python.org/library/pdb.html">PDB</a>. The friendly people at Stockholm&#8217;s <a href="http://www.meetup.com/pysthlm/">Python meet-up</a> suggested it.</p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/vfPtGsSJldg" frameborder="0" allowfullscreen></iframe></p>
<p>I made notes while watching, to remove excuses from future me on launching pdb.</p>
<p>Where you want to have the debugger start, add the following code:</p>
<pre><code>import pdb; pdb.set_trace()</code></pre>
<p>This drops you into a PDB prompt. This is more helpful than putting in yet more<br />
print statements.</p>
<p>Some helpful commands once you&#8217;re in:</p>
<ul>
<li>l - list code</li>
<li>args - arguments to current function</li>
<li>p &lt;var&gt; - print a var</li>
<li>pp &lt;var&gt; - pretty print a var</li>
<li>n - next</li>
<li>s - step</li>
<li>w - where (stack trace for current position)</li>
<li>h - help</li>
</ul>
<p>While in PDB, you can evaluate python code. The evaluated code won&#8217;t impact the running program.</p>
<p>For a bonus trick if you&#8217;re using Emacs, try out <a href="http://wiki.zope.org/klm/PDBTrack">pdb track mode</a>. Launch your python process to be debugged in an emacs shell (M-x shell). Stepping through the code in pdb will track with a source code buffer.</p>
<p>This worked out of the box with my emacs config. Your milage may vary.</p>
<p>I may actually start to enjoy debugging now!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=i6o2p158FRY:rMTJgJrXiSs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=i6o2p158FRY:rMTJgJrXiSs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=i6o2p158FRY:rMTJgJrXiSs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=i6o2p158FRY:rMTJgJrXiSs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/i6o2p158FRY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2012/05/03/debugging-python-with-pdb/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2012/05/03/debugging-python-with-pdb/</feedburner:origLink></item>
		<item>
		<title>Unit testing in Python with folder watching</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/pqU4omNrdWg/</link>
		<comments>http://pseudofish.com/blog/2012/03/14/unit-testing-in-python-with-folder-watching/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 19:09:50 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Python</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2012/03/14/unit-testing-in-python-with-folder-watching/</guid>
		<description>Unit testing is good. Running unit tests manually is annoying.
Rspec has a great addition in autospec, which automatically re-runs specs that are changed or have the associated code changed. This model of working has a long history in the ruby community, with autotest.
I wanted a similar thing for python/nose, but hadn&amp;#8217;t had much luck.
The solution [...]</description>
			<content:encoded><![CDATA[<p>Unit testing is good. Running unit tests manually is annoying.</p>
<p>Rspec has a great addition in <a href="http://lostechies.com/derickbailey/2010/05/03/zentest-autospec-is-an-rspec-tdder-s-best-friend/">autospec</a>, which automatically re-runs specs that are changed or have the associated code changed. This model of working has a long history in the ruby community, with <a href="http://nubyonrails.com/articles/autotest-rails">autotest</a>.</p>
<p>I wanted a similar thing for python/<a href="http://readthedocs.org/docs/nose/en/latest/">nose</a>, but hadn&#8217;t had much luck.</p>
<p>The solution is <a href="http://pytest.org/latest/">py.test</a>, with some plugins added.</p>
<p>This was suggested to me at the <a href="http://www.meetup.com/pysthlm/">Stockholm Python user group</a>, and I am very grateful. My testing life is now much simpler.</p>
<p>To get started, try something like:</p>
<pre><code>$ sudo pip install pytest pytest-xdist pytest-cov</code></pre>
<p>The simple way to get started is to watch your tests folder:</p>
<pre><code>py.test -f test/</code></pre>
<p>Now as you change files, the relevant tests will automatically be re-run. Perfect to display on that second monitor.</p>
<p>As I was working on some legacy code, I was looking to improve the test coverage, so wanted to see how that was going with <a href="http://pypi.python.org/pypi/pytest-cov">pytest-cov</a>:</p>
<pre><code>py.test -f --cov package.name test/</code></pre>
<p>Adding the <em>package.name</em> for your main package means you won&#8217;t generate coverage for libraries you are using. Makes the output simpler.</p>
<p>Still not quite happy, it wasn&#8217;t showing me which lines I needed coverage on. No problem:</p>
<pre><code>py.test -f --cov package.name --cov-report term-missing test/</code></pre>
<p>For comparison, here is how to get similar results from nose, but without watch support:</p>
<pre><code>nosetests test/
nosetests --with-coverage --cover-erase --cover-package=package.name test/
</code></pre>
<p>One hurdle I had with py.test was working with <a href="http://twistedmatrix.com/trac/">Twisted</a> based test-cases. You need to ensure that you use a version of py.test later than 2.0. Debian squeeze does not package this by default, so use pip to install.</p>
<p>The annoyance is if you change the code so it doesn&#8217;t terminate. This still needs a context switch to kill off the tests and re-run. Keeps me focused on getting it right the first time.</p>
<p><a href="http://pypi.python.org/pypi/pytest-xdist">pytest-xdist</a> includes lots of really cool options, such as distribution of tests across multiple cores, versions, hosts and platforms.</p>
<p>I&#8217;ve since discovered this <a href="http://wiki.python.org/moin/PythonTestingToolsTaxonomy">comprehensive summary</a> of the options available. I&#8217;m happy I found this after selecting <a href="http://pytest.org/latest/">py.test</a>, or I&#8217;d still be stuck in evaluation mode rather than writing code.</p>
<p><em>Update</em>: check out <a href="http://pypi.python.org/pypi/sniffer">sniffer</a> if you want a more generic watcher framework.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=pqU4omNrdWg:5UrsHK89gNc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=pqU4omNrdWg:5UrsHK89gNc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=pqU4omNrdWg:5UrsHK89gNc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=pqU4omNrdWg:5UrsHK89gNc:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/pqU4omNrdWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2012/03/14/unit-testing-in-python-with-folder-watching/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2012/03/14/unit-testing-in-python-with-folder-watching/</feedburner:origLink></item>
		<item>
		<title>Sharpen the Saw: Typing</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/fr_zrtxeaTU/</link>
		<comments>http://pseudofish.com/blog/2012/03/07/sharpen-the-saw-typing/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 14:14:28 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Musings</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2012/03/07/sharpen-the-saw-typing/</guid>
		<description>I once explained my job as an overpaid typist.
There is some truth in that, as much of my day is spent typing. Writing code, taking notes for meetings, email, documentation, writing blogs posts.
It would make sense to become very good at typing.
The basics are often overlooked. You can get a lot of benefit from paying [...]</description>
			<content:encoded><![CDATA[<p>I once explained my job as an overpaid typist.</p>
<p>There is some truth in that, as much of my day is spent typing. Writing code, taking notes for meetings, email, documentation, writing blogs posts.</p>
<p>It would make sense to become very good at typing.</p>
<p>The basics are often overlooked. You can get a lot of benefit from paying attention to them.</p>
<p>For typing, it comes down to three main areas:</p>
<ol>
<li>Accuracy</li>
<li>Speed</li>
<li>Touch typing</li>
</ol>
<p>Touch typing is perhaps the most important aspect of this. You need to be able to type without looking at the keyboard. If you get really good, you shouldn&#8217;t need to even look at the screen to confirm what you&#8217;re typing.</p>
<p>Accuracy and speed can be built together. Focus on accuracy to start with, and then stretch for speed. There is no point going faster if you can&#8217;t maintain a high accuracy.</p>
<p>I found two websites to be helpful in my quest for improved typing skills:</p>
<ul>
<li><a href="http://wwwtyro.github.com/keyzen/">Keyzen</a> &mdash; a site focused on improving typing for programmers.</li>
<li><a href="http://speedtest.10fastfingers.com/">10 fast fingers</a> &mdash; general typing improvement with natural language exercises.</li>
</ul>
<p>Of course, the other thing to do to improve typing is to do lots of typing. If you are writing lots of code, email or documents, then focus on your typing while you are doing it.</p>
<p>It helps to have a good environment for typing, such as a comfortable keyboard, good posture, but you know this already. Add it to the list of things to focus on.</p>
<p>Also, make sure that you are using a program that can keep up with you as you type. I find MS Word to lag when in full WYSIWG mode, whereas emacs and vi always manage to keep up!</p>
<p>Update: You may also want to check out <a href="http://typespeed.sourceforge.net/">Typespeed</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=fr_zrtxeaTU:2qJz9Utr720:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=fr_zrtxeaTU:2qJz9Utr720:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=fr_zrtxeaTU:2qJz9Utr720:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=fr_zrtxeaTU:2qJz9Utr720:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/fr_zrtxeaTU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2012/03/07/sharpen-the-saw-typing/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2012/03/07/sharpen-the-saw-typing/</feedburner:origLink></item>
		<item>
		<title>About Face, Edition 3</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/d55d1wmMjnQ/</link>
		<comments>http://pseudofish.com/blog/2012/02/29/about-face-edition-3/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 07:21:44 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Design</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2012/02/29/about-face-edition-3/</guid>
		<description>In any field, if you expand your view to know all the ecosystem around you it&amp;#8217;s beneficial.
&amp;#8212;Davide Casali

If you are a developer, a product owner, or manage a development team, much of the input is going to be about product design. It is very useful to understand a bit about a good design process, so [...]</description>
			<content:encoded><![CDATA[<blockquote>
<p>In any field, if you expand your view to know all the ecosystem around you it&rsquo;s beneficial.</p>
<p>&mdash;<a href="http://intenseminimalism.com/2011/designers-shouldnt-code-the-digital-duo/">Davide Casali</a></p>
</blockquote>
<p>If you are a developer, a product owner, or manage a development team, much of the input is going to be about product design. It is very useful to understand a bit about a good design process, so you can better ask questions and help refine the design based on technical constraints.</p>
<p><a href="http://www.amazon.com/gp/product/B001C323BI/ref=as_li_ss_tl?ie=UTF8&#038;tag=pseudofish-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399373&#038;creativeASIN=B001C323BI">About Face</a>, by Alan Cooper, is a great book to start with.</p>
<p>I highlighted much of it on my Kindle!</p>
<p>Here are some quotes:</p>
<blockquote><p>Good design makes users more effective.</p>
</blockquote>
<blockquote><p>Customers, although they might be able to articulate the problems with an interaction, are not often capable of visualizing the solutions to those problems.</p>
</blockquote>
<blockquote><p>One of the most powerful tools designers bring to the table is empathy</p>
<p>One of the most dangerous practices in product development is isolating designers from the users because doing so eliminates empathic knowledge.</p>
</blockquote>
<blockquote><p>narrative is also one of our most powerful creative methods.</p>
</blockquote>
<blockquote><p>What would a helpful human do? What would a thoughtful, considerate interaction feel like?</p>
</blockquote>
<p>All ideas are broken down into discrete sections, with lots of detail and examples on how to implement this with your customers.</p>
<blockquote>
<p>Goal-Directed Design combines techniques of ethnography, stakeholder interviews, market research, detailed user models, scenario-based design, and a core set of interaction principles and patterns. </p>
<p>This process can be roughly divided into six phases: Research, Modeling, Requirements Definition, Framework Definition, Refinement, and Support</p>
</blockquote>
<p>The book discusses the mindset required to be a good designer:</p>
<blockquote>
<p>in anything at all, perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away</p>
<p>Next time you find yourself crowing about what cool interaction you&#8217;ve designed, just remember that the ultimate user interface for most purposes is no interface at all.</p>
</blockquote>
<p>The first part of the book focuses on processes to elicit a good design. The latter part of the book covers specific examples found in user interface design and attempts to encode common patterns.</p>
<p>I found the first section much more valuable to how I think about designing a new product. The latter parts I felt were obvious, although that is perhaps their importance.</p>
<p>Well worth a read.</p>
<p><em>Note</em>: Bret&#8217;s <a href="http://worrydream.com/#!/MagicInk">Magic Ink</a> is a useful counterpoint to About Face.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=d55d1wmMjnQ:_B-Ry3SJWgE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=d55d1wmMjnQ:_B-Ry3SJWgE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=d55d1wmMjnQ:_B-Ry3SJWgE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=d55d1wmMjnQ:_B-Ry3SJWgE:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/d55d1wmMjnQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2012/02/29/about-face-edition-3/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2012/02/29/about-face-edition-3/</feedburner:origLink></item>
		<item>
		<title>Positioning</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/Vs3aXDkjb44/</link>
		<comments>http://pseudofish.com/blog/2011/11/28/positioning/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 10:37:53 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Business</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2011/11/28/positioning/</guid>
		<description>Positioning, by Al Ries and Jack Trout, has long been on my to read list, and I wish I had read it sooner.
The core message of how to position a product is becoming more relevant as the marketplace continues to crowd.
In our overcommunicated society, the name of the game today is positioning. And only the [...]</description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/B000SEGIW2/ref=as_li_ss_tl?ie=UTF8&#038;tag=pseudofish-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399373&#038;creativeASIN=B000SEGIW2">Positioning</a>, by Al Ries and Jack Trout, has long been on my <em>to read</em> list, and I wish I had read it sooner.</p>
<p>The core message of how to position a product is becoming more relevant as the marketplace continues to crowd.</p>
<blockquote><p>In our overcommunicated society, the name of the game today is positioning. And only the better players are going to survive.</p>
</blockquote>
<p>The book draws on a wide range of examples of different products, where a <em>product</em> could be a type of beer, the Catholic Church or your own career.</p>
<p>The key message is that your products position is determined by how it fits into the consumer&#8217;s mind. All the things that matter to you, to your company, are irrelevant if you can&#8217;t create a distinct position to separate you from everything else.</p>
<blockquote><p>Experience has shown that a positioning exercise is a search for the obvious. Those are the easiest concepts to communicate because they make the most sense to the recipient of a message.</p>
</blockquote>
<p>The authors are quite scathing about &#8220;me too&#8221; products that attempt to beat out a competitor by going head-to-head. Many examples are provided within the book.</p>
<blockquote><p>The suicidal bent of companies that go head-on against established competition is hard to understand.</p>
</blockquote>
<blockquote>
<p>To repeat, the first rule of positioning is: To win the battle for the mind, you can&rsquo;t compete head-on against a company that has a strong, established position. You can go around, under or over, but never head to head.</p>
<p>The leader owns the high ground. The No. 1 position in the prospect&rsquo;s mind. The top rung of the product ladder.</p>
</blockquote>
<p>The book covers a range of detail levels, and dips into more detail on key areas such as product naming:</p>
<blockquote><p>As a guide, the five most common initial letters are S, C, P, A, and T. The five least common are X, Z, Y, Q, and K. One out of eight English words starts with an S. One out of 3000 starts with an X.</p>
</blockquote>
<p>The authors are often quite blunt as to how they see things. This is a refreshing change from most business books:</p>
<blockquote><p>Creative people often resist positioning thinking because they believe it restricts their creativity. And you know what? It does. Positioning thinking does restrict creativity.</p>
</blockquote>
<p>I gained a lot of insight into how products have succeeded, or not, by reading this book. The examples are clear and will easily map to situations you are experiencing.</p>
<p>I recommend <a href="http://www.amazon.com/gp/product/B000SEGIW2/ref=as_li_ss_tl?ie=UTF8&#038;tag=pseudofish-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399373&#038;creativeASIN=B000SEGIW2">Positioning</a> for anyone involved in creating something new. This is a book that I will re-read.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=Vs3aXDkjb44:fttILXJMqE4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=Vs3aXDkjb44:fttILXJMqE4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=Vs3aXDkjb44:fttILXJMqE4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=Vs3aXDkjb44:fttILXJMqE4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/Vs3aXDkjb44" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2011/11/28/positioning/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2011/11/28/positioning/</feedburner:origLink></item>
		<item>
		<title>Emacs or Vim</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/KR_z9wGQKf4/</link>
		<comments>http://pseudofish.com/blog/2011/11/25/emacs-or-vim/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 15:33:42 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Technology</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2011/11/25/emacs-or-vim/</guid>
		<description>After over 12 years of using Vi(m), and a brief fling with TextMate, I started using Emacs as my primary editor.
Emacs
The switch has been very positive. The learning curve has been relatively steep, as my expectations from a text editor are quite high.
Emacs strength (and weakness) is that it is incredibly extensible. Where I&amp;#8217;m finding [...]</description>
			<content:encoded><![CDATA[<p>After over 12 years of using Vi(m), and a brief fling with TextMate, I <a href="http://pseudofish.com/blog/2010/09/18/learning-clojure-with-google-app-engine-and-emacs/">started</a> <a href="http://pseudofish.com/blog/2011/04/14/emacs-update/">using</a> Emacs as my primary editor.</p>
<h3>Emacs</h3>
<p>The switch has been very positive. The learning curve has been relatively steep, as my expectations from a text editor are quite high.</p>
<p>Emacs strength (and weakness) is that it is incredibly extensible. Where I&#8217;m finding Emacs a win over Vim is that I don&#8217;t have to leave Emacs to get things done. With Vim, I tend to use more of a mix of terminal windows and the editor.</p>
<p>I began by using the <a href="https://github.com/technomancy/emacs-starter-kit">starter kit</a> to get going with Emacs configuration. This made it quicker to get moving, but added a lot of things I ended up not needing. After getting more comfortable with elisp, I started from scratch and rebuilt my <a href="https://github.com/gmwils/dotfiles/tree/master/emacs.d">emacs.d folder</a>.</p>
<p>To jump in quickly, I also purchased the tutorial video from <a href="https://peepcode.com/products/meet-emacs">Peepcode</a>. This certainly helped as emacs is a mental shift coming from Vim.</p>
<p>The big benefit I have found with Emacs is the extension packages. These can be installed from the ELPA <a href="http://www.emacswiki.org/emacs/ELPA">repository</a>, and include a range of different <em>modes</em>.</p>
<p>Some of my favourite modes include:</p>
<ul>
<li><a href="http://www.emacswiki.org/emacs/ParEdit">paredit</a> - essential for any lisp, it ensures your brackets match.</li>
<li><a href="http://jblevins.org/projects/deft/">deft</a> - simplified note taking. (I it sync via <a href="http://emacs-fu.blogspot.com/2011/09/quick-note-taking-with-deft-and-org.html">Dropbox</a>)</li>
<li><a href="http://www.emacswiki.org/emacs/Magit">magit</a> - comprehensive Git workflow within Emacs</li>
<li><a href="http://jblevins.org/projects/markdown-mode/">markdown-mode</a> - my current default for writing notes, although I&#8217;m leaning towards org-mode now.</li>
<li><a href="http://orgmode.org/">org-mode</a> - highly capable note taking mode, with export options to everything. You can use it to write a book, create slides, or manage your todo list.</li>
</ul>
<p>On the Mac, I&#8217;ve been using <a href="http://aquamacs.org/">Aquamacs</a> for most of my text editing, and used <a href="http://www.macports.org/">macports</a> to install the command line client.</p>
<p>I have yet to try Emacs on Windows, as I haven&#8217;t been using Windows much at all. There is a release available <a href="http://www.gnu.org/software/emacs/windows/Getting-Emacs.html#Getting-Emacs">here</a>.</p>
<p>After cleaning up my .emacs.d configuration, I&#8217;ve now started using Emacs on Linux servers I use regularly. For temporary servers, I&#8217;ll fallback to Vim as Emacs is often not installed.</p>
<p>If you want to improve your emacs skills follow @<a href="https://twitter.com/#!/emacs_knight">emacs_knight</a>.</p>
<h3>Vim</h3>
<p>To get started with Vim, it is worth reading <a href="http://robots.thoughtbot.com/post/13164810557/the-vim-learning-curve-is-a-myth">The Vim Learning Curve is a Myth</a>.</p>
<blockquote>
<p>Over the years, the popular mythology around vim has become that it&rsquo;s insanely difficult to learn; a task to be attempted by only those with the thickest of neck-beards. I&rsquo;ve heard dozens of times from folks who are convinced it will take them months to reach proficiency.</p>
<p>These beliefs are <em>false</em>.</p>
</blockquote>
<p>My feeling is that Vim is unrivalled for the simple task of text editing. Even after a day or two of learning, you will be faster.</p>
<p>Where things get a bit more complicated is when you start to realise that text editing isn&#8217;t the whole story for a text editor.</p>
<p>Platform support is superb. The first thing I do to a Windows machine is install <a href="http://www.vim.org/download.php">Vim</a>. It is rare for an application with a Unix heritage to be so comfortable on Windows.</p>
<p>Historically, I hadn&#8217;t been a fan of the graphical version of <a href="http://code.google.com/p/macvim/">MacVim</a>. This is something that is much better in recent releases. Load times are much improved.</p>
<p>Integration into external tools is where I feel Vim is lacking a bit. With the number of developers migrating from TextMate to Vim, this gap is being rapidly addressed. However, Vim isn&#8217;t as extensible as some other editors.</p>
<p>I really noticed this when trying out Clojure programming. If you are dealing with a REPL based environment, Vim has a way to go.</p>
<h3>Closing Thoughts</h3>
<p>If you aren&#8217;t using either of them, it&#8217;s not too late to start. You can&#8217;t make a bad choice.</p>
<p>If you are already using either Emacs or Vim, enjoy!</p>
<p>Both are great editors that allow you to be incredibly productive at working with text. Try learning a new feature each week. You use your text editor so often that a small improvement is a major payoff.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=KR_z9wGQKf4:fTchrVeJu34:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=KR_z9wGQKf4:fTchrVeJu34:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=KR_z9wGQKf4:fTchrVeJu34:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=KR_z9wGQKf4:fTchrVeJu34:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/KR_z9wGQKf4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2011/11/25/emacs-or-vim/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2011/11/25/emacs-or-vim/</feedburner:origLink></item>
		<item>
		<title>Calculating earlier dates using a shell script</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/Aa4pLvzwQFE/</link>
		<comments>http://pseudofish.com/blog/2011/10/07/calculating-earlier-dates-using-a-shell-script/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 15:40:47 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Technology</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2011/10/07/calculating-earlier-dates-using-a-shell-script/</guid>
		<description>Mongo has a database size limit in 32 bit mode, so I want to purge out items that are less than a certain date in the past. I decided that it would be easy to write a simple shell script to run the query.
The tricky part was calculating dates in shell. This is what I [...]</description>
			<content:encoded><![CDATA[<p>Mongo has a database size limit in 32 bit mode, so I want to purge out items that are less than a certain date in the past. I decided that it would be easy to write a simple shell script to run the query.</p>
<p>The tricky part was calculating dates in shell. This is what I ended up with:</p>
<pre><code><span class="comment-delimiter">#</span><span class="comment">!/bin/</span><span class="keyword">sh</span><span class="comment">
</span>
<span class="variable-name">MONTHS_AGO</span>=3
<span class="variable-name">DATE_AGO_EPOCH</span>=$((<span class="sh-quoted-exec">`date +%s`</span> - $<span class="variable-name">MONTHS_AGO</span> * 31 * 24 * 3600))
<span class="variable-name">OSTYPE</span>=<span class="sh-quoted-exec">`uname`</span>
<span class="variable-name">FORMAT</span>=<span class="string">'+%Y-%m-%d'</span>

<span class="keyword">if</span> [ <span class="string">"Linux"</span> = $<span class="variable-name">OSTYPE</span> ] ; <span class="keyword">then</span>
  <span class="variable-name">DATE_AGO_ISO</span>=<span class="sh-quoted-exec">`date -d "1970-01-01 00:00 UTC + $DATE_AGO_EPOCH seconds" $FORMAT`</span>
<span class="keyword">else</span>
  <span class="variable-name">DATE_AGO_ISO</span>=<span class="sh-quoted-exec">`date -r $DATE_AGO_EPOCH $FORMAT`</span>
<span class="keyword">fi</span>

<span class="variable-name">DB_CMD</span>=<span class="string">"db.items.find( { publish_date : { $lt : \"$DATE_AGO_ISO\" } } ).count()"</span>
<span class="comment-delimiter"># </span><span class="comment">DB_CMD="db.items.remove( { publish_date : { $lt : \"$DATE_AGO_ISO\" } } )"
</span>
<span class="builtin">echo</span> $<span class="variable-name">DB_CMD</span> | mongo pz
</code></pre>
<p>This now provides a simple way of purging out old items that can be called from cron.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=Aa4pLvzwQFE:RTJioTAHx9A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=Aa4pLvzwQFE:RTJioTAHx9A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=Aa4pLvzwQFE:RTJioTAHx9A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=Aa4pLvzwQFE:RTJioTAHx9A:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/Aa4pLvzwQFE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2011/10/07/calculating-earlier-dates-using-a-shell-script/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2011/10/07/calculating-earlier-dates-using-a-shell-script/</feedburner:origLink></item>
		<item>
		<title>Storm - a real time Hadoop like system in Clojure</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/UBI_B8hhaow/</link>
		<comments>http://pseudofish.com/blog/2011/09/26/storm-a-real-time-hadoop-like-system-in-clojure/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 16:33:14 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Clojure</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2011/09/26/storm-a-real-time-hadoop-like-system-in-clojure/</guid>
		<description>I am very excited about the potential unleashed by Storm.
Previously at BackType, Nathan Marz has now built Storm into Twitter and then open sourced the platform.
Storm opens up a lot of possibilities, by bringing real-time distributed processing together in an elegant way. And it is built in Clojure!
Some useful links:

Rationale
Slides - detailed presentation on Storm [...]</description>
			<content:encoded><![CDATA[<p>I am very excited about the potential unleashed by <a href="https://github.com/nathanmarz/storm">Storm</a>.</p>
<p>Previously at BackType, <a href="https://twitter.com/nathanmarz">Nathan Marz</a> has now built Storm into Twitter and then open sourced the platform.</p>
<p>Storm opens up a lot of possibilities, by bringing real-time distributed processing together in an elegant way. And it is built in Clojure!</p>
<p>Some useful links:</p>
<ul>
<li><a href="https://github.com/nathanmarz/storm/wiki/Rationale">Rationale</a></li>
<li><a href="http://www.slideshare.net/nathanmarz/storm-distributed-and-faulttolerant-realtime-computation">Slides</a> - detailed presentation on Storm by Nathan</li>
<li><a href="https://github.com/nathanmarz/storm-starter">Starter project</a> - a few basic demo use cases</li>
<li><a href="http://groups.google.com/group/storm-user">Mailing List</a></li>
<li><a href="http://storm.twitsprout.com/">Taking the Emmys by Storm</a> - an hour long video of how to use Storm to aggregate data from Twitter in realtime to spot trends.</li>
</ul>
<p>While playing around I wanted to try from Clojure (most examples are in Java). There is a great DSL for Clojure that makes using Storm super easy. I forked the <a href="https://github.com/gmwils/storm-starter/">storm-starter</a> project to add <a href="https://github.com/gmwils/storm-starter/blob/master/src/clj/storm/starter/wordcount.clj">examples</a> based on a <a href="https://gist.github.com/1228302">Gist</a> from Nathan.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=UBI_B8hhaow:4OUglY1Xa0g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=UBI_B8hhaow:4OUglY1Xa0g:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=UBI_B8hhaow:4OUglY1Xa0g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=UBI_B8hhaow:4OUglY1Xa0g:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/UBI_B8hhaow" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2011/09/26/storm-a-real-time-hadoop-like-system-in-clojure/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2011/09/26/storm-a-real-time-hadoop-like-system-in-clojure/</feedburner:origLink></item>
		<item>
		<title>Java interop with Clojure and Mahout</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/rw_OHRZhvr4/</link>
		<comments>http://pseudofish.com/blog/2011/08/24/java-interop-with-clojure-and-mahout/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 16:13:28 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Clojure</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2011/08/24/java-interop-with-clojure-and-mahout/</guid>
		<description>While porting a simple example of generating a Hadoop file for Mahout, I came across a number of edge cases of the Clojure Java interop.
Nested Classes
Java allows for classes to be nested. However, Clojure doesn&amp;#8217;t provide an obvious way of referencing them.
For example, Hadoop&amp;#8217;s SequenceFile includes SequenceFile.Writer and SequenceFile.Reader.
To access these in Clojure, the period [...]</description>
			<content:encoded><![CDATA[<p>While porting a simple example of generating a Hadoop file for Mahout, I came across a number of edge cases of the Clojure <a href="http://clojure.org/java_interop">Java interop</a>.</p>
<h3>Nested Classes</h3>
<p>Java allows for classes to be nested. However, Clojure doesn&#8217;t provide an obvious way of referencing them.</p>
<p>For example, Hadoop&#8217;s <a href="http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/SequenceFile.html">SequenceFile</a> includes SequenceFile.Writer and SequenceFile.Reader.</p>
<p>To access these in Clojure, the period is replaced by a dollar sign.</p>
<p>For <a href="https://github.com/gmwils/mahoutinaction/blob/master/src/mahoutinaction/ch08.clj">example</a>:</p>
<pre><code>(ns example
  (:import [org.apache.hadoop.io SequenceFile$Writer]))

...
  writer (SequenceFile$Writer. fs conf path
                               (class Text)
                               (class VectorWritable))
...
</code></pre>
<p><a href="http://groups.google.com/group/clojure/browse_thread/thread/3f86ac8939ef970c">This thread</a> on the mailing list has some more details.</p>
<h3>Generics</h3>
<p>From the Java code, generics add annotations about the type. However, at the JVM level, generics are nowhere to be seen. It turns out that generics are a compiler level feature only.</p>
<p>What this means for Clojure is that you can safely ignore them, provided that you honour the types that are included in the generic.</p>
<p>Thus the following Java:</p>
<pre><code>List&lt;NamedVector&gt; apples = new ArrayList&lt;NamedVector&gt;();</code></pre>
<p>Can be written in Clojure:</p>
<pre><code>(def apples (ArrayList.))</code></pre>
<p>The responsibility is then on the programmer to ensure the types put into the collection.</p>
<p><a href="http://groups.google.com/group/clojure/browse_thread/thread/39ee5e1c8e9dab44?pli=1">This thread</a> on the mailing list has some background.</p>
<h3>Primitive Arrays</h3>
<p>I started out looking at how to construct a <code>double[]</code> to pass to <a href="http://search-lucene.com/jd/mahout/math/org/apache/mahout/math/DenseVector.html#DenseVector(double[])">DenseVector</a>.</p>
<p>Turns out that there are a number of things to be wary of when constructing primitive arrays. <a href="http://measuringmeasures.com/bradfordcross/">Bradford Cross</a> has written this up with examples in <a href="http://measuringmeasures.com/blog/2010/3/27/fast-clojure-vectors-and-multidimensional-arrays.html">a blog post</a>.</p>
<p>The considerations I took away were:</p>
<ol>
<li><code>double-array</code> function to migrate a Clojure data structure</li>
<li><code>make-array</code> with <code>Double/TYPE</code> to pre-allocate the array</li>
<li>Type hints should be considered</li>
<li>Odd things are likely to be happening with type coercion, so check run time performance.</li>
</ol>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=rw_OHRZhvr4:RnvNXtQnERM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=rw_OHRZhvr4:RnvNXtQnERM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=rw_OHRZhvr4:RnvNXtQnERM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=rw_OHRZhvr4:RnvNXtQnERM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/rw_OHRZhvr4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2011/08/24/java-interop-with-clojure-and-mahout/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2011/08/24/java-interop-with-clojure-and-mahout/</feedburner:origLink></item>
		<item>
		<title>McKinsey on testing your strategy</title>
		<link>http://feedproxy.google.com/~r/Pseudofish/~3/GN-n6naC4Xs/</link>
		<comments>http://pseudofish.com/blog/2011/08/22/mckinsey-on-testing-your-strategy/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 08:09:28 +0000</pubDate>
		<dc:creator>Geoff Wilson</dc:creator>
		
		<category>Management</category>

		<guid isPermaLink="false">http://pseudofish.com/blog/2011/08/22/mckinsey-on-testing-your-strategy/</guid>
		<description>In an article from January 2011, McKinsey outlines a series of ten tests to validate your current strategy:
Summary of the tests:

Will your strategy beat the market?
Does your strategy tap a true source of advantage?
Is your strategy granular about where to compete?
Does your strategy put you ahead of trends?
Does your strategy rest on privileged insights?
Does your [...]</description>
			<content:encoded><![CDATA[<p>In <a href="https://www.mckinseyquarterly.com/Strategy/Strategic_Thinking/Have_you_tested_your_strategy_lately_2711">an article</a> from January 2011, McKinsey outlines a series of ten tests to validate your current strategy:</p>
<p>Summary of the tests:</p>
<ol>
<li>Will your strategy beat the market?</li>
<li>Does your strategy tap a true source of advantage?</li>
<li>Is your strategy granular about where to compete?</li>
<li>Does your strategy put you ahead of trends?</li>
<li>Does your strategy rest on privileged insights?</li>
<li>Does your strategy embrace uncertainty?</li>
<li>Does your strategy balance commitment and flexibility?</li>
<li>Is your strategy contaminated by bias?</li>
<li>Is there conviction to act on your strategy?</li>
<li>Have you translated your strategy into an action plan?</li>
</ol>
<p>Each test includes a more detailed description, and an example of a company or industry where it is particularly relevant. There are also links through to relevant articles or books.</p>
<p>Although aimed at corporate strategy, this is an interesting list of points to consider at a personal or project level as well.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Pseudofish?a=GN-n6naC4Xs:J0s4WBM4d80:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=GN-n6naC4Xs:J0s4WBM4d80:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Pseudofish?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Pseudofish?a=GN-n6naC4Xs:J0s4WBM4d80:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Pseudofish?i=GN-n6naC4Xs:J0s4WBM4d80:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Pseudofish/~4/GN-n6naC4Xs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pseudofish.com/blog/2011/08/22/mckinsey-on-testing-your-strategy/feed/</wfw:commentRss>
		<feedburner:origLink>http://pseudofish.com/blog/2011/08/22/mckinsey-on-testing-your-strategy/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.141 seconds --><!-- Cached page served by WP-Cache -->

