<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

  <channel>
    <title>William Caputo (logosity)</title>
    <link>http://www.williamcaputo.com</link>
    <description>A programmer by trade, this site is used to talk about things that interest me including, tech, philosophy, finance, politics, etc.</description>
    <dc:language>en-us</dc:language>
    <dc:creator>William E. Caputo</dc:creator>
    <dc:date>2013-03-17T04:04:33.064Z</dc:date>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>

    
      <item>
            <title>Design goals and Complexity</title>
            <link>http://www.williamcaputo.com/posts/000340.html</link>
            <description>&lt;p&gt;Programmers solve problems. How they solve each problem is a function of their skill, talent, knowledge &amp;amp; time. The resultant solution will resolve the problem with greater or lesser complexity in the design. Thus, I find thinking about how (and more importantly where) complexity is handled, a useful way to evaluate a design. For this I use the time-honored technique of having &lt;a href=&quot;http://youtu.be/uprjmoSMJ-o&quot;&gt;three&lt;/a&gt; levels:

&lt;/p&gt;
&lt;h3&gt;Level Zero&lt;/h3&gt;
&lt;p&gt;(Below this level, the problem is not solved) 

&lt;/p&gt;
&lt;p&gt;The programmer has provided a solution. However, the interface is a mine-field; click things in the wrong order, the program crashes. Or it works great, but you need to reread the documentation &lt;a href=&quot;http://xkcd.com/1168/&quot;&gt;Every. Single. Time.&lt;/a&gt; Or the resultant surrounding workflow is a &lt;a href=&quot;http://youtu.be/GOMIBdM6N7Q&quot;&gt;Rube Goldberg device&lt;/a&gt;. However it surfaces, &lt;strong&gt;the programmer has placed the complexity on the user&lt;/strong&gt;.

&lt;/p&gt;
&lt;h3&gt;Level One&lt;/h3&gt;
&lt;p&gt;The interface is well thought out and reasonably intuitive. Controls work as expected and the solution is robust - even bulletproof. The solution not only fits the larger context, it improves it. The code itself however, is hard to change (or even understand). It is not well-organized; Or is, but full of tricky, interleaved logic. Or over-engineered, over-patterned etc. Here, &lt;strong&gt;the programmer has placed the complexity on the maintainer.&lt;/strong&gt;[1]

&lt;/p&gt;
&lt;h3&gt;Level Two&lt;/h3&gt;
&lt;p&gt;The burden of managing complexity is on the current programmer. The person writing the code takes the time and employs the talent and skill necessary to find an elegant solution that reduces the code to the minimum complexity needed to solve the problem and does so in such a way that is understandable (and changeable) later: The user gains the benefits of a level 1 design, while maintainers are left with clean code to change.[2]

&lt;/p&gt;
&lt;h3&gt;Implications&lt;/h3&gt;
&lt;p&gt;Level zero code is common; it&amp;#39;s the default for new programmers and an uncomfortable amount of commercial software. The thing of it is: Too often this sort of code is derided (including by me) when there is both a de facto and a cost-benefit rationale for managing complexity this way. Short-term projects are one example; &lt;a href=&quot;/posts/000121.html&quot;&gt;software written for one&amp;#39;s own use&lt;/a&gt; is another.

&lt;/p&gt;
&lt;p&gt;Level 1 software can be very valuable and enduring. I tend to equate this type of code with the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hacker_ethic&quot;&gt;Hacker ethic&lt;/a&gt; in all senses of that term. And I don&amp;#39;t mean that pejoratively - we all use hacked together solutions every day and much of the world&amp;#39;s technology infrastructure is built on it. It is a practical and stable design level. 

&lt;/p&gt;
&lt;p&gt;Having the skill (and the time) to write level 2 code is a rare and wonderful thing. Amidst the hyperbole, aspiring to be such a programmer is at the heart of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_craftsmanship&quot;&gt;&amp;quot;Software as Craft&amp;quot;&lt;/a&gt; movement and is a worthwhile goal for anyone who aspires to be a professional programmer.

&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t believe level 2 is inherently better than a level 1 (or level zero!) - it&amp;#39;s about context - however, I think that for regularly edited and changed code (i.e. much IT software), this level of skill is what&amp;#39;s implicitly expected (if not gotten) by the customer. Ironically, the time needed is often the first thing that goes as a non-technical customer can only assess code quality based on level 1 considerations and so pushes for faster results because everything &amp;quot;looks&amp;quot; OK. Only later - when their investment can&amp;#39;t be changed without major overhaul - do they realize there is something wrong. And so the cycle continues...

&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Summary&lt;/h3&gt;
This model is handy in several situations including: Judging the quality of an actual solution; choosing among different solutions to a given problem; estimating - and even when to stop refactoring. And while I don&amp;#39;t believe that all code should be worked until it exhibits level 2 quality, it is what I want others to think of the code I leave behind. And it is what I hope to encounter in theirs. That said, being a successful professional programmer requires (among many other things) the ability to write all three levels of code, and the judgment to know when each is appropriate to use.

&lt;/p&gt;
&lt;hr&gt;
&lt;p id=&quot;1&quot;&gt;[1] This may well be the same person who wrote the code. The essential characteristic of a level 1 design is that complexity is put off to future efforts, not the current one. Thus level 1 designs tend to be high in &lt;a href=&quot;http://en.wikipedia.org/wiki/Technical_debt&quot;&gt;technical debt&lt;/a&gt;.&lt;/p&gt;
&lt;p id=&quot;2&quot;&gt;[2]How the programmer achieves this is a matter of personal preference and technique. I do not subscribe to the notion that any particular set of programming practices provides this - or inhibit it by their absence. It has always been the people, not their practices that is the essential determinant of quality. Anyone who says different, is selling something.&lt;/p&gt;</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000340.html</guid>
            <dc:date>2013-03-14T05:00:00.000Z</dc:date>
      </item>
    
      <item>
            <title>Expoloring the French Defense (G30 practice game at DRW)</title>
            <link>http://www.williamcaputo.com/posts/000339.html</link>
            <description>&lt;p&gt;Played an interesting practice game last Friday (1/12) evening with one of my fellow DRW chess teammates, Oliver Gugenheim. After my &lt;a href=&quot;/posts/000338.html&quot;&gt;stupendous blunder&lt;/a&gt; last week, I&amp;#39;m interested in playing some practice games - both to drill my pre-move thinking process, and because there&amp;#39;s nothing like a bad loss to motivate one to start playing again...

&lt;/p&gt;
&lt;p&gt;Oliver and I wound up exploring a sharp line of the French defense - an opening I have historically not enjoyed playing as white, and so had started learning more about the past week. Oliver (without us discussing it) obliged me by playing a line I had looked at that day so we went a good way into the &amp;quot;book&amp;quot; before (very quickly thereafter) reaching crazy territory. 

&lt;/p&gt;
&lt;p&gt;The most interesting bit tho, is actually black&amp;#39;s move: 9. ... f6. The conclusion I got from this analysis, is that 9. ... f5 is better (see below for more) and so this was a useful game for this analysis alone...

&lt;/p&gt;
&lt;p&gt;All in all, it was interesting to play, and gave me the opportunity to practice the things above... and it gave Oliver a chance to fend off a ridiculous attack (which is always satisfying if a bit scary at times).  Here&amp;#39;s the game and my notes (Time Control is G30 with 5 second increment):

&lt;/p&gt;
&lt;p&gt;&lt;div class=wc-chessviewer&gt;
  &lt;table cellspacing=10&gt;
    &lt;tr valign=top&gt;
      &lt;td&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;div id=&quot;GameBoard&quot;&gt;&lt;/div&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;div id=&quot;GameButtons&quot;&gt;&lt;/div&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Event:&lt;/span&gt; &lt;span id=&quot;GameEvent&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Site:&lt;/span&gt; &lt;span id=&quot;GameSite&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Round:&lt;/span&gt; &lt;span id=&quot;GameRound&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Date:&lt;/span&gt; &lt;span id=&quot;GameDate&quot;&gt;&lt;/span&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;White:&lt;/span&gt; &lt;span id=&quot;GameWhite&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Black:&lt;/span&gt; &lt;span id=&quot;GameBlack&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Result:&lt;/span&gt; &lt;span id=&quot;GameResult&quot;&gt;&lt;/span&gt;
        &lt;p&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Side to move:&lt;/span&gt; &lt;span id=&quot;GameSideToMove&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Last move:&lt;/span&gt; &lt;span id=&quot;GameLastMove&quot;&gt;&lt;/span&gt;&amp;nbsp; &lt;span class=&quot;pgn-label&quot;&gt;variations:&lt;/span&gt; &lt;span id=&quot;GameLastVariations&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Next move:&lt;/span&gt; &lt;span id=&quot;GameNextMove&quot;&gt;&lt;/span&gt;&amp;nbsp; &lt;span class=&quot;pgn-label&quot;&gt;variations:&lt;/span&gt; &lt;span id=&quot;GameNextVariations&quot;&gt;&lt;/span&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Move comment:&lt;/span&gt;&lt;br&gt;&lt;span id=&quot;GameLastComment&quot;&gt;&lt;/span&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;hr&gt;
  &lt;div class=&quot;wc-gameviewer-text&quot; style=&quot;font-size: 85%; text-align: justify;&quot; id=&quot;GameText&quot;&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;/p&gt;
&lt;p&gt;And so, QED on this idea. My conclusion: better off building an attack here as White&amp;#39;s got the ball. Also, for a bishop sac to have any chance, white really needs another piece. Perhaps once the f-pawn were advanced and White has castled, the possibilty of lifting a rook with tempo might be enough to give the sac some teeth. It&amp;#39;d be interesting to see if I can find any Winawer games with a bishop sac on h7 (if I do, perhaps I&amp;#39;ll write a follow-up; regardless, looking at how White attacks here should be fun.)&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000339.html</guid>
            <dc:date>2013-01-19T06:00:00.000Z</dc:date>
      </item>
    
      <item>
            <title>CICL Chess Match: Board 6 vs Northwestern</title>
            <link>http://www.williamcaputo.com/posts/000338.html</link>
            <description>&lt;p&gt;I play in the &lt;a href=&quot;http://www.chicagochessleague.org/&quot;&gt;Chicago Industrial Chess League (CICL)&lt;/a&gt; for my employer &lt;a href=&quot;http://drw.com&quot;&gt;DRW&lt;/a&gt;. I generally play one of the lower boards, but I do pretty well. Two nights ago, I played possibly the best chess game of my life... and lost.

&lt;/p&gt;
&lt;p&gt;How? By touching the wrong piece. I had a choice of two recaptures - one that would win the game, and one that would lose. If I had simply moved quickly, that would&amp;#39;ve been bad enough, but I actually noted the problem with the first recapture, and then did some sanity checks for the other move. Content that all was good, I started my move by picking up the bishop to be captured, AND THEN PICKED UP THE WRONG CAPTURING PIECE. I realized it immediately, but by then it was too late. I resigned a few moves later.

&lt;/p&gt;
&lt;p&gt;The worst bit is I found a strong move on 18. (see below, I&amp;#39;m playing white) - and I saw that position 3 moves earlier. I don&amp;#39;t always play this well when I&amp;#39;m rested - let alone after a 12 hour work day... which of course just makes the blunder that much more painful.

&lt;/p&gt;
&lt;p&gt;Moral of the story? When you&amp;#39;re winning, when you&amp;#39;re tired (or both!). STOP! Check it again. Check each bit, write it down and check it a third time. Then if your sure,  make the move. 

&lt;/p&gt;
&lt;p&gt;This one burned. Hopefully it stung enough that I won&amp;#39;t do it again.

&lt;/p&gt;
&lt;p&gt;Anyway, for your viewing pleasure, here is my wonder-blunder:
&lt;div class=wc-chessviewer&gt;
  &lt;table cellspacing=10&gt;
    &lt;tr valign=top&gt;
      &lt;td&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;div id=&quot;GameBoard&quot;&gt;&lt;/div&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;div id=&quot;GameButtons&quot;&gt;&lt;/div&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Event:&lt;/span&gt; &lt;span id=&quot;GameEvent&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Site:&lt;/span&gt; &lt;span id=&quot;GameSite&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Round:&lt;/span&gt; &lt;span id=&quot;GameRound&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Date:&lt;/span&gt; &lt;span id=&quot;GameDate&quot;&gt;&lt;/span&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;White:&lt;/span&gt; &lt;span id=&quot;GameWhite&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Black:&lt;/span&gt; &lt;span id=&quot;GameBlack&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Result:&lt;/span&gt; &lt;span id=&quot;GameResult&quot;&gt;&lt;/span&gt;
        &lt;p&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Side to move:&lt;/span&gt; &lt;span id=&quot;GameSideToMove&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Last move:&lt;/span&gt; &lt;span id=&quot;GameLastMove&quot;&gt;&lt;/span&gt;&amp;nbsp; &lt;span class=&quot;pgn-label&quot;&gt;variations:&lt;/span&gt; &lt;span id=&quot;GameLastVariations&quot;&gt;&lt;/span&gt;
        &lt;br&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Next move:&lt;/span&gt; &lt;span id=&quot;GameNextMove&quot;&gt;&lt;/span&gt;&amp;nbsp; &lt;span class=&quot;pgn-label&quot;&gt;variations:&lt;/span&gt; &lt;span id=&quot;GameNextVariations&quot;&gt;&lt;/span&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;span class=&quot;pgn-label&quot;&gt;Move comment:&lt;/span&gt;&lt;br&gt;&lt;span id=&quot;GameLastComment&quot;&gt;&lt;/span&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;hr&gt;
  &lt;div class=&quot;wc-gameviewer-text&quot; style=&quot;font-size: 85%; text-align: justify;&quot; id=&quot;GameText&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000338.html</guid>
            <dc:date>2013-01-07T06:00:00.000Z</dc:date>
      </item>
    
      <item>
            <title>Site Redesign</title>
            <link>http://www.williamcaputo.com/posts/000334.html</link>
            <description>&lt;p&gt;After an amazing amount of procrastination, I&amp;#39;ve finally managed to redesign the site. All old links still work (if they don&amp;#39;t, please let me know by emailing me at &amp;#39;bill at this domain name&amp;#39;). 

&lt;/p&gt;
&lt;p&gt;Why? Two reasons: 1) I found my old layout limiting for what I want to do and, 2) Something in my toolchain got borked and I wasn&amp;#39;t able to update my main page. This last one was a godsend because I decided that - rather than troubleshooting the problem, I&amp;#39;d put that energy toward my redesign.

&lt;/p&gt;
&lt;p&gt;Notable changes: 

&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No more MovableType. I got a lot of mileage out of using MT, but in the end I hated having to use a database to store what is essentially static data. Furthermore, the templates and even writing of entries was a bit too much of a flow-mismatch. I wanted to write copy and edit layout in vim and just push the changes to the server. Now I&amp;#39;m using &lt;a href=&quot;https://github.com/bevry/docpad&quot;&gt;docpad&lt;/a&gt; and I have pretty much exactly that workflow&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My &amp;quot;Thoughts on...&amp;quot; blog is no longer the main page. Right now, the main page is pretty sparse, but as I add more projects (I have some in mind, it&amp;#39;ll start to fill up some more. For now, it&amp;#39;s an easy way to get at some of the more popular material on my site, and...&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My dabbling in Fiction. A few years back I started writing flash fiction under my middle name (&amp;quot;Edward&amp;quot;). I haven&amp;#39;t in a while, but I hope to start again. So, now that&amp;#39;s here too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Total style overhaul. Hope you like it, because I&amp;#39;m sticking with it for a while. My goal was minimalism. This site has always been about what I write. Therefore I want to make it easy to find the stuff here and read it with no distractions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No comments. This may change at some point (I had embedded &lt;a href=&quot;http://disqus.com/&quot;&gt;Disqus&lt;/a&gt; but removed it) as I&amp;#39;m going with &lt;a href=&quot;http://theoatmeal.com/comics/making_things&quot;&gt;the Oatmeal Philosophy&lt;/a&gt; - I&amp;#39;m struggling against several years of writers block. Feedback &lt;em&gt;can&lt;/em&gt; be great, but it can also demotivate. I need to avoid demotivators as I ramp this up.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#39;s it now that I have put everything I could see I needed in place, I&amp;#39;m outta excuses. Whether that means I&amp;#39;ll be writing more, we&amp;#39;ll have to see...&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000334.html</guid>
            <dc:date>2012-12-28T20:40:00.000Z</dc:date>
      </item>
    
      <item>
            <title>Programmer (blood) types</title>
            <link>http://www.williamcaputo.com/posts/000333.html</link>
            <description>&lt;p&gt;A lot gets said about evaluating &lt;a href=&quot;http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm&quot;&gt;technical skills&lt;/a&gt; when building teams, but I find that to be relatively straightforward - what&amp;#39;s trickier is understanding how a person prefers to work and so how much effort (i.e. change) will be needed for the team to gel once that person is added. Consequently, I spend a lot more time thinking about this than any specific skill a person might have.

&lt;/p&gt;
&lt;p&gt;It&amp;#39;s as if each of us has a personality blood-type. Just as transfusing blood among individuals without taking account of their body chemistry can result in serious health issues, so too mixing otherwise competent individuals without regard to group chemistry can greatly reduce everyone&amp;#39;s effectiveness. This is true, even if these same individuals would be very effective in different groups.

&lt;/p&gt;
&lt;p&gt;Like one&amp;#39;s actual blood type, there are multiple factors involved, but I find three especially important. So, to run with the metaphor let&amp;#39;s call them &amp;#39;A&amp;#39; factor, &amp;#39;B&amp;#39; factor and &lt;a href=&quot;http://en.wikipedia.org/wiki/Rh_blood_group_system&quot;&gt;&amp;#39;Rh&amp;#39; factor&lt;/a&gt;:

&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;A Factor&lt;/em&gt;: Knowledge Sensitivity: A person has this trait if I expect the effort needed for them to understand the &lt;a href=&quot;http://www.williamcaputo.com/archives/000308.html&quot;&gt;Situational Context&lt;/a&gt; of the team will be a significant factor in the gelling process. Considerations include: current knowledge, learning preferences (online research, training, books, etc), learning-speed, learning-skill, open-mindedness and how (and how easily) they&amp;#39;ll learn from their teammates.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;B Factor&lt;/em&gt;: Environmental Sensitivity &lt;a href=&quot;#1&quot;&gt;[1]&lt;/a&gt;. This stuff matters to most everyone, but some are more sensitive to it than others. If it looks like it&amp;#39;ll be a prominent part of the gelling process, they have this trait.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;AB&lt;/em&gt;: Person has both traits.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;O&lt;/em&gt;: Person has neither. I don&amp;#39;t expect the person will require radical shifts in team cohesion to gel with the group (though they still may cause such shifts over time).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Rh Factor (+ or -)&lt;/em&gt;: Tendency toward taking social initiative&lt;a href=&quot;#2&quot;&gt;[2]&lt;/a&gt;. This one&amp;#39;s hard to define. To get a sense of what I mean, the next time you&amp;#39;re in a casual group discussion (ideally of peers), note the people who tend to pick the topics of conversations, suggest lunch destinations and so on. These people have this trait. When work topics arise, they&amp;#39;re the ones proposing new ideas and things that need focusing on in the first place. Incidentally, if you believe &lt;em&gt;you&lt;/em&gt; have this trait, you might need to reign it in to get a sense of &lt;em&gt;who else&lt;/em&gt; has it (and a good habit for you to develop regardless). &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I see these factors as neither strengths nor weaknesses. Nor as (necessarily) fixed traits. A successful team may contain (or require) people exhibiting any combination of these traits. Adding people who learn quickly or who care a lot about how customers are acting toward the group or are passionate about their work environment &lt;a href=&quot;#3&quot;&gt;[3]&lt;/a&gt; is just as important as having deeply experienced people who are agnostic to the details of the work environment. Even when people&amp;#39;s quirks or lack of knowledge might seem to be burdensome, our work is a creative activity not a mechanical one. Taking the effort to incorporate people who have a particular genius or ability into my teams has paid off more often than it&amp;#39;s been a liability.

&lt;/p&gt;
&lt;p&gt;It is also important to understand this is my thinking process &lt;em&gt;after&lt;/em&gt; it becomes clear the person is a plausible fit for the team. That means they&amp;#39;ve already passed the &lt;a href=&quot;http://www.amazon.com/The-Asshole-Rule-Civilized-Workplace/dp/0446526568&quot;&gt;no assholes rule&lt;/a&gt;, otherwise appear to have the skills the group needs &lt;em&gt;and&lt;/em&gt; I believe will get along reasonably well with the rest of the team outside the context of the goal at hand.

&lt;/p&gt;
&lt;p&gt;Of course, I also consider many other non-skill traits to be important - e.g.: risk aversion; time flexibility; tolerance for ambiguity, tool/practice prejudices and social neediness are all relevant - but regardless of which ones dominate a particular gelling process, what I&amp;#39;m always after is a better understanding of how the person will complement the rest of the group. Most importantly, reflecting on &lt;em&gt;why&lt;/em&gt; people work well together helps me to do my job better. Hope you find it useful for that too.

&lt;/p&gt;
&lt;hr&gt;
&lt;p id=&quot;1&quot;&gt;[1] More precisely: How sensitive the individual is to forces acting within or upon the group; this important topic will get a separate blog entry hopefully soon&lt;/p&gt;
&lt;p id=&quot;2&quot;&gt;[2] Leadership in the narrow sense of desire to influence direction of a group of people.&lt;/p&gt;
&lt;p id=&quot;3&quot;&gt;[3] Tool and process preferences is an entire - large - subcategory that can even be considered an entire trait all it&amp;#39;s own. We do so love our tool and practice religions!&lt;/p&gt;</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000333.html</guid>
            <dc:date>2012-11-10T20:10:13.000Z</dc:date>
      </item>
    
      <item>
            <title>Aretê</title>
            <link>http://www.williamcaputo.com/posts/000327.html</link>
            <description>&lt;p&gt;&amp;quot;I am not a good manager.&amp;quot; 

&lt;/p&gt;
&lt;p&gt;I say this to people often, and most of them think I am joking because... well, because people don&amp;#39;t say things like that about themselves if they&amp;#39;re true and also, I have cultivated some skill in building strong teams that accomplish what they are asked to do.  [1].

&lt;/p&gt;
&lt;p&gt;But I am serious when I say that. for three reasons:




&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I really have to work hard to do the organizational parts of a manager&amp;#39;s job (the reports, the budgeting, the note taking, the meetings, the scheduling, the selling of initiatives, etc)... and I don&amp;#39;t enjoy any of it.&lt;/li&gt;
&lt;li&gt;I don&amp;#39;t do well at optimizing for efficiency.&lt;/li&gt;
&lt;li&gt;I don&amp;#39;t have much use for roles, particularly ones that tend to specialize activities and artificially segment the work needed to solve the problem (and the skill set of those seeking to do so).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Like most programmers, I suck at estimates, I am motivated first by a need to solve interesting problems, and only secondarily at reaping the benefits of doing so, and I have zero desire to &amp;quot;be in charge of others.&amp;quot; I also hate process for process sake and generally piss off any project managers foolish enough to work with me (though I am good friends with several).

&lt;/p&gt;
&lt;p&gt;So, how do I build teams and software? By treating efficiency - and even the primary goal of the team - as a secondary effect, and optimizing instead for... for what?

&lt;/p&gt;
&lt;p&gt;Well, until recently I had been (in my head, because I didn&amp;#39;t feel too comfortable saying this out loud) using the word: &amp;quot;happiness.&amp;quot; Of the members of the team, of my boss, my employer, our customers and (importantly, but until recently neglectedly) me. Make all of these folks happy, and everything just works.

&lt;/p&gt;
&lt;p&gt;Uncomfortable because this is a tough sell to accounting-type folks - and anyone who prepares budgets. &amp;quot;Naive&amp;quot;, &amp;quot;Crazy&amp;quot; and &amp;quot;Ridiculous&amp;quot; are what I expect to hear. And the reason I expect to hear it is because it seems really risky - even terrifying - to them when I say anything that implies I&amp;#39;m not thinking about cost and value and ROI, and all those other business terms.

&lt;/p&gt;
&lt;p&gt;But I am. I&amp;#39;m thinking about them all the time. I just don&amp;#39;t agree with them on how to optimize them.

&lt;/p&gt;
&lt;p&gt;Also, &amp;quot;happiness&amp;quot; is not quite right: some people are quite happy to do nothing, others are only happy when they are padding their egos at the expense of others, and a whole lot of other types of &amp;quot;happiness&amp;quot; that I don&amp;#39;t optimize for. No, it&amp;#39;s a specific kind of happiness - especially inside the team - that I am trying to maximize. Joy of doing one&amp;#39;s best, professionalism, craftsmanship, cultivating flow, the need for slack. All dancing around it. All not quite it...

&lt;/p&gt;
&lt;p&gt;I recently mentioned here (and on twitter and facebook) that I&amp;#39;m re-reading Zen &amp;amp; the Art of Motorcycle Maintenance by Robert Pirsig. And it&amp;#39;s blowing me away. Again. I read it a really long time ago - so long ago, that I had forgotten all of the details and only remembered: &amp;quot;That book really moved me and shaped my thinking.&amp;quot;

&lt;/p&gt;
&lt;p&gt;What&amp;#39;s been blowing me away is realizing how much it has done that. And so, I&amp;#39;ve been expecting for days now to find in it somewhere something that supported my view since Pirsig&amp;#39;s focus on Quality and Care (not to mention technology) are very similar to my feelings of &amp;quot;optimize for happiness.&amp;quot; But it still hadn&amp;#39;t felt quite right yet...

&lt;/p&gt;
&lt;p&gt;...until, today. And I found it: The Greek word: &lt;a href=&quot;http://en.wikipedia.org/wiki/Arete&quot;&gt;Aretê&lt;/a&gt; (translated as &amp;quot;virtue&amp;quot; or &amp;quot;excellence&amp;quot;) is a central part of any course on Greek philosophy and I had several classes in college where it was discussed. I was waiting for it to come up in the book (it doesn&amp;#39;t until chapter 29) and when it did, I realized I was getting closer. Then, this quote:

&lt;/p&gt;
&lt;p&gt;&amp;quot;Aretê implies a respect for the wholeness or oneness of life, and a consequent dislike of specialization. It implies a contempt for efficiency - or rather a much higher idea of efficiency, an efficiency which exists not in one department of life but in life itself.&amp;quot; ~ Pirsig, Robert M. (2009-04-10). Zen and the Art of Motorcycle Maintenance (p. 360). Harper Collins, Inc.. Kindle Edition. 

&lt;/p&gt;
&lt;p&gt;And like a key fitting a lock, there it was: I believe that teams (organizations!) should be optimized for Aretê; that teams should be staffed with those who - like Hector the tragic hero of ancient Troy - seek excellence (in their work and in achieving the team&amp;#39;s goals) for it&amp;#39;s own sake and are not happy unless they are free to pursue it; and finally that the team&amp;#39;s success (which will still be a function of external perception of value) will be a natural outgrowth of this process and any attempts to shortcut it (e.g. in the name of efficiency) will actually serve to reduce the team&amp;#39;s effectiveness.

&lt;/p&gt;
&lt;p&gt;With this compass in hand, I can see now that what at times appeared to be random objections to process changes and my novel (some would say crazy) alternatives and experiments over the years have really been about trying to keep everyone focused on maximizing the ability to pursue excellence. 

&lt;/p&gt;
&lt;p&gt;So, now I&amp;#39;m saying it: If you want to build great teams who reliably ship results: Don&amp;#39;t optimize for efficiency, optimize for the pursuit of Aretê. 

&lt;/p&gt;
&lt;p&gt;[1] Those who&amp;#39;ve worked with me on those teams can attest, I&amp;#39;ve done so by getting the team building part - and my role in it - wrong a lot, but learning from it.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000327.html</guid>
            <dc:date>2012-05-24T01:50:30.000Z</dc:date>
      </item>
    
      <item>
            <title>Logic Engineers</title>
            <link>http://www.williamcaputo.com/posts/000326.html</link>
            <description>&lt;p&gt;I don&amp;#39;t like any of the names for people who create technology solutions for use in the real world. In no particular order:

&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developer - Sorry, that&amp;#39;s for photographic film (and who uses that anymore?) not software - my second least-favorite on this list.&lt;/li&gt;
&lt;li&gt;Programmer - probably the one I use the most, but the mechanistic connotations: a glorified typist of code; and the implication is that someone else does the thinking, bothers many - leading to...&lt;/li&gt;
&lt;li&gt;Architect - Horrible. Borrowed from physical construction, it brings in notions of rigidity of thinking  and solution; my least favorite, often used by those who use &amp;#39;Developer&amp;#39; to describe &amp;quot;those who do the thinking around here.&amp;quot;&lt;/li&gt;
&lt;li&gt;Coder - Probably my favorite; however implies that software is the focus instead of the problem to be solved.&lt;/li&gt;
&lt;li&gt;Hacker - I don&amp;#39;t mind this one, but it feels forced sometimes and of course carries negative connotations due to it&amp;#39;s use in a security context; It &lt;em&gt;does&lt;/em&gt; however, put the problem solving front-and-center and I like that;&lt;/li&gt;
&lt;li&gt;Software Engineer - Part of my current title; pros: sounds professional and captures the applied science nature of the work; cons: again the implication is writing code, not general problem solving and often - though not in my case - is indicative of a very rigid, bureaucratic culture&lt;/li&gt;
&lt;li&gt;Software Craftsman - En Vogue with those who see (as I do) that there is more to this work than just slinging code, I have several problems with it: software focus again, the lack of gender neutrality, and a certain pretentiousness (that might just be because some people sound that way when they talk about &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_craftsmanship&quot;&gt;the movement&lt;/a&gt; - which I am positively disposed to, but not a part of)&lt;/li&gt;
&lt;li&gt;Technologist - This one is popular with the start-up crowd; This is one of the few on this list that recognizes the holistic integrated nature of the work from the solution side; on the other hand, lacks action, professionalism and anything related to the problem (not a coincidence that the startup world likes it, because those that use it are often seeing the project as separating problem and solution too)&lt;/li&gt;
&lt;li&gt;Sys Admin, DBA, network engineer, etc, etc - I.e. every other technology-related role that isn&amp;#39;t primarily about writing software. This is my biggest concern of all as I believe this distinction (writing software and everything else) is horribly misguided, artificial and needs to go (that&amp;#39;s another entry)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Am I just being pedantic? I&amp;#39;d say yes, except that I believe these terms all devolve from not seeing the holistic nature of solving problems with programmable machines and since I do see it that way, I want a term that encompasses all of it. 

&lt;/p&gt;
&lt;p&gt;Thus Logic Engineer. Physicists have Mechanical Engineers to apply their ideas, why don&amp;#39;t Logicians have Logic Engineers? Currently, we conflate this practical science with Computer Science which is also a pure science - or would be if we stopped doing that. I know that Engineer has professional accreditation connotations in many disciplines - and I&amp;#39;m mixed on what that would mean given the current state of technological practice today - but I believe this most closely maps to what we are doing: 

&lt;/p&gt;
&lt;p&gt;Logician: figure out the rules and limits of valid reasoning.

&lt;/p&gt;
&lt;p&gt;Logic Engineer: figure out the rules and limits of applying logic to real-world problems. We are Logic Engineers.

&lt;/p&gt;
&lt;p&gt;Further, if we stopped slicing the world up into hardware and software practitioners, and started seeing that software is just liquid hardware (and vice versa); maybe we&amp;#39;d have something worth accrediting (though I don&amp;#39;t think for a long while yet).

&lt;/p&gt;
&lt;p&gt;So, I&amp;#39;m gonna try it for a while... at least in my head.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000326.html</guid>
            <dc:date>2012-05-17T11:55:20.000Z</dc:date>
      </item>
    
      <item>
            <title>Dedication</title>
            <link>http://www.williamcaputo.com/posts/000324.html</link>
            <description>&lt;p&gt;I&amp;#39;ve been rereading Zen &amp;amp; the Art of Motorcycle Maintenance. This quote really struck me:

&lt;/p&gt;
&lt;p&gt;&amp;quot;You are never dedicated to something you have complete confidence in. No one is fanatically shouting that the sun is going to rise tomorrow. They know it&amp;#8217;s going to rise tomorrow. When people are fanatically dedicated to political or religious faiths or any other kinds of dogmas or goals, it&amp;#8217;s always because these dogmas or goals are in doubt.&amp;quot; ~ Pirsig, Robert M. (2009-04-10). Zen and the Art of Motorcycle Maintenance (p. 140). 

&lt;/p&gt;
&lt;p&gt;Made me think of all the zealotry accusations levied at Extreme Programming practitioners about 10 years back... still seen in reaction to some of the more ardent claims of the primacy of TDD even today.

&lt;/p&gt;
&lt;p&gt;No conclusions, just suspect I will see the next fanatic a little differently next time I encounter one.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000324.html</guid>
            <dc:date>2012-05-11T15:10:25.000Z</dc:date>
      </item>
    
      <item>
            <title>Why Teams</title>
            <link>http://www.williamcaputo.com/posts/000321.html</link>
            <description>&lt;p&gt;Jeremy Lightsmith recently &lt;a href=&quot;http://bit.ly/zn6ASj&quot;&gt;asked on twitter&lt;/a&gt;:

&lt;/p&gt;
&lt;p&gt;&amp;quot;Why are teams important? I&amp;#39;m looking for an inspired answer.&amp;quot;

&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t know about inspired, but here&amp;#39;s my thoughts on the topic:

&lt;/p&gt;
&lt;p&gt;First, I believe teams (true teams, mind you, not simply groups of individuals under single managers) are capable of delivering better results than individuals - this is the economic (and in a business sense the only) justification for teams. If they can&amp;#39;t outperform, they probably shouldn&amp;#39;t exist.

&lt;/p&gt;
&lt;p&gt;Much of my thinking on why they can outperform has been deeply influenced by the book:&lt;a href=&quot;http://www.amazon.com/Wisdom-Teams-High-Performance-Organization-Essentials/dp/0060522003/ref=sr_1_1?ie=UTF8&amp;qid=1328473939&amp;sr=8-1&quot;&gt; &amp;quot;The Wisdom of Teams&amp;quot;&lt;/a&gt; and I won&amp;#39;t rehash it here except to say that I believe the key is in the notion of &amp;quot;complimentary skills&amp;quot; - teams are more efficient because rather than having to staff a group of super-humans (you know the kind that typical HR review material seems to want to turn us all into) you can look for how one person&amp;#39;s personality and skills work to reinforce and amplify the others.

&lt;/p&gt;
&lt;p&gt;And that brings me to my most compelling belief of all: It&amp;#39;s in our nature. We are social creatures, we need to connect with others, to bond with them, to feel we are working together. Rather than spend our time lamenting our &amp;quot;shortcomings&amp;quot; and worrying about our individual performance (and rewards), forming solid teams means using all of our actual skills as they are to compliment our peers and deliver more than any of us can alone.

&lt;/p&gt;
&lt;p&gt;People simply work better with a group of people who complete them, whom they feel a deep connection to, whom they trust whom they admire and feel respected by. When you have that, people stop thinking about what&amp;#39;s wrong with them, and start thinking about how they can help each other to succeed. And when you have all of that, you have a force to be reckoned with.

&lt;/p&gt;
&lt;p&gt;Is this easy to accomplish? No - and you need to accomplish all of that (respect, complimentary skills, trust, common goals, acceptance of each other as we are, etc) to achieve a true team. But I am convinced that the payoff for everyone - from the employer to the individuals involved is so worth it, that I won&amp;#39;t willingly work any other way - and I reject any &amp;quot;best practices&amp;quot; or conventional wisdom that interferes with achieving that sense of team in the groups I work with.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000321.html</guid>
            <dc:date>2012-02-05T20:41:22.000Z</dc:date>
      </item>
    
      <item>
            <title>Python Challenge answers 0 thru 4... in clojure</title>
            <link>http://www.williamcaputo.com/posts/000319.html</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://www.pythonchallenge.com/index.php&quot;&gt;The Python Challenge&lt;/a&gt; is a nifty site that presents you with a series of puzzles that it asks you to solve using python; getting each answer allows you to move on to the next puzzle.

&lt;/p&gt;
&lt;p&gt;Python is a cool language and it&amp;#39;s a good tool for this job&lt;sup&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; However, I&amp;#39;m learning clojure right now, so I thought it would be fun to try and solve a few of them in clojure. Here&amp;#39;s my answers for challenges 0 thru 4 (warning: if you want to do these puzzles yourself, reading further now might ruin the fun)

&lt;/p&gt;
&lt;h4&gt;Challenge #0 (the &amp;quot;Warmup&amp;quot;)&lt;/h4&gt;
&lt;p&gt;Asks you to solve 2 to the 38th power:

&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(clojure.contrib.math/expt 2 38)&lt;/code&gt;

&lt;/p&gt;
&lt;p&gt;i.e. just use the exponent function in clojure contrib.

&lt;/p&gt;
&lt;h4&gt;Challenge #1&lt;/h4&gt;
&lt;p&gt;This one throws some scrambled text at you and a clue on what the key is (ROT 2):

&lt;/p&gt;
&lt;pre&gt;
(defn translate [text]
  (let [lookup (vec (map char (range 97 123)))]
    (letfn [(letter? [c] (and (&gt;= (int c) 97) (&lt;= (int c) 122)))
            (shift-2 [c] (mod (+ 2 (- (int c) 97)) 26))]
      (apply str (map #(if (letter? %) (get lookup (shift-2 %)) %) text)))))
&lt;/pre&gt;

&lt;p&gt;Create a lookup table of the chars, a predicate to test if a char is a letter. &amp;amp; a function to get the index of 2nd to next letter (the index loops, essentially making lookup as a ring buffer), then map across the given text, shifting by 2 if its a letter or just returning the char if its not.

&lt;/p&gt;
&lt;h4&gt;Challenge #2&lt;/h4&gt;
&lt;p&gt;This one throws a big hunk of random data at you and suggests you pick out the &amp;#39;rare&amp;#39; characters:

&lt;/p&gt;
&lt;pre&gt;
(defn filter-file [path]
  (let [fs (line-seq (clojure.contrib.io/reader path))
        lookup (set (map char (range 97 123)))]
    (apply str (mapcat #(filter lookup %) fs))))
&lt;/pre&gt;

&lt;p&gt;A quick visual scan of the text led me to a strong hunch the &amp;quot;rare&amp;quot;&lt;sup&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; characters were lowercase alpha, so:

&lt;/p&gt;
&lt;p&gt;Re-use our lookup table from the last challenge; this time make it a set, then use the set to filter each line of the file denoted by &amp;#39;path&amp;#39; (I first saved the text to a file to make it easier to work with); use mapcat to flatten the lines out (this has the effect of stripping empty lines altogether); apply str to the resulting sequence to get the answer.

&lt;/p&gt;
&lt;h4&gt;Challenge #3&lt;/h4&gt;
&lt;p&gt;This one&amp;#39;s a big hunk of text too, so a quick refactoring of our last solution results in a more abstract (and higher-order) function that takes a filter function as an additional parameter:

&lt;/p&gt;
&lt;pre&gt;
(defn filter-file [filter-fn path]
    (apply str (mapcat filter-fn (line-seq (io/reader path)))))
&lt;/pre&gt;

&lt;p&gt;the filter from challenge #2 thus becomes an argument; partial works nicely here:
&lt;/p&gt;
&lt;pre&gt;
(filter-file (partial filter (set (map char (range 97 123)))) &quot;path/to/file&quot;)
&lt;/pre&gt;

&lt;p&gt;Now we can make a new filter for challenge #3. This one will need to find character patterns that look like this: ABCxDEF. We&amp;#39;ll need grab x. This one just screamed regex at me, so here&amp;#39;s a filter that gives us the answer:
&lt;/p&gt;
&lt;pre&gt;
#(second (re-find #&quot;[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]&quot; %)))
&lt;/pre&gt;

&lt;p&gt;An anonymous function&lt;sup&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; that uses re-find to match: &amp;quot;not-cap followed by 3 CAPS followed by not-cap followed by 3 CAPS followed by not-cap&amp;quot;; the second element of the resulting vector (because we use parens to create a group) produces x; mapcat et al do the rest.

&lt;/p&gt;
&lt;p&gt;Two big assumptions/limitations here: assumes each target is on its own line, and that the target pattern wasn&amp;#39;t on the beginning or end of the line (which was good enough to get the answer).

&lt;/p&gt;
&lt;h4&gt;Challenge #4&lt;/h4&gt;
&lt;p&gt;This challenge requires one to follow a url call chain, passing a different number as the argument to a &amp;#39;nothing&amp;#39; parameter each time. The resulting page text provides the next number to follow (and/or some noise to keep you on your toes) until eventually we get the answer.

&lt;/p&gt;
&lt;p&gt;This one gets kinda ugly. 

&lt;/p&gt;
&lt;p&gt;This is the kind of problem scripting languages are made for (e.g. perl, python &amp;amp; ruby coders would all make short work of this problem). Still, it&amp;#39;s possible to write procedural code in clojure, and it&amp;#39;s still reasonably straightforward.

&lt;/p&gt;
&lt;p&gt;One decision I had to make is how to GET the url&amp;#39;s - my weapon of choice for this sort of thing is &lt;a href=&quot;https://github.com/dakrone/clj-http&quot;&gt;clj-http&lt;/a&gt;:
&lt;/p&gt;
&lt;pre&gt;
(require '[clj-http.client :as client])
(require '[clojure.contrib.string :as string]

(defn follow-chain [base-url number]
  (let [result (:body (client/get (str base-url number)))
        idx (.indexOf result &quot;and the next&quot;)]
    (cond
      (re-find #&quot;^Yes&quot; result) (do
                                 (println result)
                                 (follow-chain base-url (/ (Integer/parseInt number) 2)))
      (= -1 idx)               result
      :else                    (let [result-vec (string/split (subs result idx) #&quot; &quot;)
                                     next-number (last result-vec)]
                                 (println result)
                                 (recur base-url next-number)))))
&lt;/pre&gt;

&lt;p&gt;Take the url as a base &amp;amp; the first number to follow; use client-http/get to grab the page; extract the body of the page; get the index of the phrase &amp;quot;and the next&amp;quot; using the java &amp;quot;indexOf&amp;quot; method - we&amp;#39;ll use the index later to parse out the end of the text and get the next number...

&lt;/p&gt;
&lt;p&gt;...unless of course, we get text that tells us something else (like a message saying &amp;quot;Yes&amp;quot; and then instructing us to divide the last number by two and continue on as before) so...

&lt;/p&gt;
&lt;p&gt;...we set up a switch using the cond macro: If the result starts with &amp;quot;Yes&amp;quot; make a recursive call dividing the last number by two; if indexOf otherwise came up empty, that&amp;#39;s our answer, so return it; else pick the next number out of the result by splitting the end of the string into a vector (using clojure.contrib.string/split) and recur (tail recursively call the function again). 

&lt;/p&gt;
&lt;p&gt;The println&amp;#39;s could be removed, although they were essential when figuring out what the code needed to do. 

&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This was a fun exercise; clojure&amp;#39;s holding up pretty well so far, though clojure would not be my weapon of choice for that last one; if I choose to do the next five, I&amp;#39;ll post them in a future article.

&lt;/p&gt;
&lt;h5&gt;Footnotes&lt;/h5&gt;
&lt;p&gt;&lt;div id=&quot;1&quot;&gt;[1] It&amp;#39;s also the darling of the hipster crowd right now -- in many cases the same people who snubbed python when ruby was the hip language about a decade ago... python abides. 

&lt;/p&gt;
&lt;p&gt;&lt;div id=&quot;2&quot;&gt;[2] The official challenge answers also tackle ways to deduce &amp;quot;rare&amp;quot;; knock yourself out

&lt;/p&gt;
&lt;p&gt;&lt;div id=&quot;3&quot;&gt;[3] &lt;code&gt;#()&lt;/code&gt; defines a function where % %2 etc represent positional parameters; the &lt;code&gt;(fn [arg])&lt;/code&gt; syntax would work here too&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000319.html</guid>
            <dc:date>2011-10-20T01:48:12.000Z</dc:date>
      </item>
    
      <item>
            <title>My first clojure macro</title>
            <link>http://www.williamcaputo.com/posts/000318.html</link>
            <description>&lt;p&gt;I&amp;#39;m finally experimenting with writing macros in clojure. Learning macros is (for me at least) a 4 stage process:

&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Learn to use them (pretty straightforward)&lt;/li&gt;
&lt;li&gt;Learn to read their implementations (including the quoting)&lt;/li&gt;
&lt;li&gt;Learning to write them (in progress)&lt;/li&gt;
&lt;li&gt;Learning when to write them (in progress)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Those last two are iterative; #4 is especially tricky -- the web is full of general considerations (&amp;quot;when a function won&amp;#39;t do&amp;quot;, &amp;quot;when you want new syntax&amp;quot;, &amp;quot;when you need to make decisions at compile time&amp;quot;, etc) - but actually making that judgment in practice, takes... well practice.

&lt;/p&gt;
&lt;p&gt;Hence this exercise. Anyway to the code:

&lt;/p&gt;
&lt;p&gt;Clojure offers the &lt;a href=&quot;http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/if-let&quot;&gt;if-let&lt;/a&gt; and &lt;a href=&quot;http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/when-let&quot;&gt;when-let&lt;/a&gt; macros that allow you to combine a let block with testing the binding for nil:

&lt;/p&gt;
&lt;pre&gt;
(when-let [a (some-fn)]  
   (do-something-with a))

(if-let [a (some-fn)]  
   (do-something-with a)  
   (otherwise-fn)) 
&lt;/pre&gt;

&lt;p&gt;I found myself (on some real code) wanting to be able to do something similar with try:

&lt;/p&gt;
&lt;pre&gt;
(try-let [a (some-potentially-exceptional-fn)]
  (do-something-with a))

(try-let [a (some-potentially-exceptional-fn)]
  (do-something-with a)
  ArithmeticException ((println (.getMessage e)) 42)
  :else (do-something-by-default-fn)
  :finally (println &quot;always&quot;))
&lt;/pre&gt;

&lt;p&gt;etc.

&lt;/p&gt;
&lt;p&gt;So I wrote this (non-hygenic) macro that seems to do the job:

&lt;/p&gt;
&lt;pre&gt;
(defmacro try-let [let-expr good-expr &amp; {fin-expr :finally else-expr :else :as handlers}]
  (letfn [(wrap [arg] (if (seq? arg) arg (list arg)))]
  `(try (let ~let-expr ~good-expr)
    ~@(map #(apply list 'catch (key %) 'e (wrap (val %))) (dissoc handlers :finally :else))
    ~(if else-expr `(catch Exception ~'e ~else-expr))
    (finally ~(if fin-expr `~fin-expr ())))))
&lt;/pre&gt;

&lt;p&gt;Thing is... I don&amp;#39;t if it&amp;#39;s a good idea or not. For one thing its not &lt;a href=&quot;http://en.wikipedia.org/wiki/Hygienic_macro&quot;&gt;hygienic&lt;/a&gt; (it implicitly declares e that can be used in the handler clauses) though this seems the kind of case that sort of thing is for.

&lt;/p&gt;
&lt;p&gt;For another... I don&amp;#39;t know if its correct. It seems to be (I&amp;#39;ve tested all the scenarios I can think of), but this is kinda like security -- I suspect anyone can write a macro that they themselves can&amp;#39;t break, but that doesn&amp;#39;t mean its correct.

&lt;/p&gt;
&lt;p&gt;Some things to note:
-    e is available to handler expressions&lt;br&gt;-    the local function wrap allows for a complex expression or single value to be spliced in&lt;br&gt;-    any number of handlers can be included&lt;br&gt;-    &amp;#39;:else&amp;#39; (default) handler and &amp;#39;:finally&amp;#39; handlers are optional (as are any others!)  

&lt;/p&gt;
&lt;p&gt;In short: I&amp;#39;m interested in any opinions/feedback that aim at learning steps 3 &amp;amp; 4 (writing and when to write). Fire away!&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000318.html</guid>
            <dc:date>2011-10-13T01:23:06.000Z</dc:date>
      </item>
    
      <item>
            <title>Where Style Rules Come From</title>
            <link>http://www.williamcaputo.com/posts/000317.html</link>
            <description>&lt;p&gt;From a larger tutorial on &lt;a href=&quot;http://norvig.com/luv-slides.ps&quot;&gt;Common Lisp Programming Style&lt;/a&gt;, comes a nice list written by Peter Norvig &amp;amp; Kent Pitman surveying &amp;quot;where your &amp;#39;Style Rules&amp;#39; come from&amp;quot;:

&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Religion, Good vs. Evil&lt;/strong&gt; &amp;quot;This way is better.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Philosophy&lt;/strong&gt; &amp;quot;This is consistent with other things.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robustness, Liability, Safety, Ethics&lt;/strong&gt; &amp;quot;I&amp;#39;ll put in redundant checks to avoid something horrible.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legality&lt;/strong&gt; &amp;quot;Our lawyers say do it this way.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personality, Opinion&lt;/strong&gt; &amp;quot;&lt;strong&gt;I&lt;/strong&gt; like it this way.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibility&lt;/strong&gt; &amp;quot;Another tool expects this way.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portability&lt;/strong&gt; &amp;quot;Other compilers prefer this way.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cooperation, Convention&lt;/strong&gt; &amp;quot;It has to be done some uniform way, so we agreed on this one.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Habit, Tradition&lt;/strong&gt; &amp;quot;We&amp;#39;ve always done it this way.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ability&lt;/strong&gt; &amp;quot;My programmers aren&amp;#39;t sophisticated enough.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory&lt;/strong&gt; &amp;quot;Knowing how I &lt;em&gt;would&lt;/em&gt; do it means I don&amp;#39;t have to remember how I &lt;em&gt;did&lt;/em&gt; do it.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Superstition&lt;/strong&gt; &amp;quot;I&amp;#39;m scared to do it differently.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Practicality&lt;/strong&gt; &amp;quot;This makes other things easier.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;( via &lt;a href=&quot;http://lisptips.com/post/11176448674/stylish-common-lisp&quot;&gt;Common Lisp Tips&lt;/a&gt; )&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000317.html</guid>
            <dc:date>2011-10-08T13:59:48.000Z</dc:date>
      </item>
    
      <item>
            <title>Stand-ups</title>
            <link>http://www.williamcaputo.com/posts/000316.html</link>
            <description>&lt;p&gt;I&amp;#39;ve been saying this for a while, now I&amp;#39;m just gonna write it down:

&lt;/p&gt;
&lt;p&gt;Stand-ups suck. Treat them as a last-resort.

&lt;/p&gt;
&lt;p&gt;The classic stand-up:  each day a group of people stand huddled in a circle chanting: &amp;quot;His Name is Robert Paulson... His Name is Robert Paulson... His Name...&amp;quot; - no wait that&amp;#39;s not it...

&lt;/p&gt;
&lt;p&gt;They stand in a circle bored out of their skulls while each in turn says what they did yesterday and what they are going to do today. A couple of people sorta care what everyone says (usually project managers, or customer reps) everyone else is interested in what maybe one or two people say. No one can go into enough detail to really educate anyone. Everyone&amp;#39;s glad when its over. 

&lt;/p&gt;
&lt;p&gt;Sometimes people attend many of these per day (cross-team stand-ups anyone?). A few might even make it a significant chunk of their day &amp;amp; job descriptions; I think of these people as &amp;quot;Meeting Moths&amp;quot; - attracted to meetings like moths to the flame.

&lt;/p&gt;
&lt;p&gt;STOP. DOING. THIS.

&lt;/p&gt;
&lt;p&gt;Instead:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Figure out who needs status and how often; GO AND GIVE IT TO THEM. It&amp;#39;s a good bet they don&amp;#39;t need to hear the minutiae of what code was written anyway &amp;amp; you&amp;#39;re probably addressing that in existing stand-ups by making sure the programmers don&amp;#39;t get too detailed killing any value they might&amp;#39;ve gotten from talking about what they are doing - dysfunctions beget dysfunctions...&lt;/li&gt;
&lt;li&gt;Those who are doing actual tasks should be free to talk about them when they need to. In my experience this part of the stand-up gets short shrift when its scheduled and attended by those not doing the work. GET THEM OUT OF THERE. If you do, you might just see spontaneous, short discussions start happening daily among task completors (that&amp;#39;s a real stand-up btw, just don&amp;#39;t call it that or you&amp;#39;ll ruin it by attracting meeting moths)&lt;/li&gt;
&lt;li&gt;Move people next to each other who need to talk a lot. Conversely, if you already are around each other all day, you probably already know who did what and whose doing what (if not WORK ON COLLABORATING MORE)&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;If after you are doing all of these things, you still feel like you need a periodic daily meeting, then think for a while! Be creative! Don&amp;#39;t just do what some book or consultant said to do, use your brain and solve the problem to everyone&amp;#39;s benefit as best you can. Only then, if you &lt;em&gt;still&lt;/em&gt; feel you need a stand-up, then fine; go ahead and schedule one for the things you still didn&amp;#39;t address (but don&amp;#39;t cover things already addressed!). The result is much more likely to be useful for everyone involved.

&lt;/p&gt;
&lt;p&gt;All periodic meetings including stand-ups evolve into wasteful time-sucks; They develop an inertia that supersedes whatever utility they initially might have had. Aggressively question their very existence; make the burden of proof be on keeping them, not ending them. Simpler still, kill em all and see what&amp;#39;s not being done and then be creative on how to fix it.

&lt;/p&gt;
&lt;p&gt;Who knows you might just get away with one less meeting in your day.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000316.html</guid>
            <dc:date>2011-09-24T20:07:17.000Z</dc:date>
      </item>
    
      <item>
            <title>Software Patents are Amoral</title>
            <link>http://www.williamcaputo.com/posts/000313.html</link>
            <description>&lt;p&gt;&lt;b&gt;UPDATE: &lt;a href=&quot;http://www.pcmag.com/article2/0,2817,2390536,00.asp&quot;&gt;This article&lt;/a&gt; illustrates what I&amp;#39;m getting at very well: Google&amp;#39;s position is weak while Apple&amp;#39;s is strong - making patents a moral issue actually hurts Google&amp;#39;s chances at reforming them. Change the rules, then change your strategy)&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;&lt;p/&gt;
Martin Fowler just wrote a &lt;a href=&quot;http://martinfowler.com/bliki/SoftwarePatent.html&quot;&gt;great piece on why Software patents are absurd&lt;/a&gt; and should be abolished. As Martin is so gifted in doing, he pulls in just enough background and history to educate you on the merits of patents in general, then shows clearly and simply why software patents are harmful to innovation and a pointless tax on established businesses. 

&lt;/p&gt;
&lt;p&gt;In fact, I&amp;#39;d go so far as to say Martin&amp;#39;s article (as is so often the case) is almost a perfect short introduction to the rationale for abolishing software patents... until he gets to the end of his argument and ruins is it by admonishing &amp;quot;my fellow programmers&amp;quot; for being &amp;quot;complicit in this tragedy.&amp;quot; Martin rounds out this unfortunate paragraph with: &amp;quot;Any programmer who cooperates in getting a baseless patent should be ashamed of themselves.&amp;quot;

&lt;/p&gt;
&lt;p&gt;Now I respect that this is clearly a moral issue for Martin and I&amp;#39;m sure that many (including those reading this) share his belief that it is unprincipled for a programmer to be against patents and yet cooperate in the application process. I also respect that Martin is a man of principle. However, I think he is wrong to hold this one - and ruined an otherwise great argument by introducing it into his reasoning.

&lt;/p&gt;
&lt;p&gt;And while I think he did so as an attempt to influence those faced with the situation, I think it&amp;#39;s likely to have the opposite effect - pushing some to rationalize that patents are a good thing, so they can sleep at night when they choose not to quit their jobs to avoid the shame.

&lt;/p&gt;
&lt;p&gt;Fortunately, I didn&amp;#39;t have this moral hangup when faced with a similar situation, and so I can still sleep at night (I&amp;#39;ll just have to hope Martin still respects me after this). Because I don&amp;#39;t think patents are inherently immoral - any more (or less) than engaging in running a business is inherently moral.

&lt;/p&gt;
&lt;p&gt;Now I recognize (and you should too) that what follows could be nothing more than mere rationalizing on my part, that Martin&amp;#39;s dig hit a little too close to home and I am simply jumping on my (much smaller) soap box so I can continue to sleep at night. You can judge for yourself. My goal here is to share my experiences with software patents, and why I think they are amoral (while also a mistake that should be abolished forthwith).

&lt;/p&gt;
&lt;p&gt;Yes, I&amp;#39;ve signed patent applications. Yes, I&amp;#39;d consider doing it again. I believe (though I don&amp;#39;t hold them) that some of them were even awarded. Here&amp;#39;s how it went down:

&lt;/p&gt;
&lt;p&gt;At a critical time in my former employer&amp;#39;s growth (For those that don&amp;#39;t know my employment history: the business involved manufacturing of software-driven custom-built hardware devices) we were faced with a thorny - yet common - business situation: Namely, we were in competition with other companies to secure the same market.

&lt;/p&gt;
&lt;p&gt;Further, the nature of this business did not require patents to secure a &amp;quot;moat&amp;quot; around one&amp;#39;s market share, but that was certainly a strategy that could be employed - though in my then and current opinion not nearly as effectively as how my employer was going about doing so which was by providing better service, securing better partnerships and scaling up production faster.

&lt;/p&gt;
&lt;p&gt;However, one of our competitors was attempting to secure a software patent for their machine. This patent (as described by one of my fellow programmers at the time as &amp;quot;patenting client/server&amp;quot;)  had all the failings that Martin describes (and then some), but our attorneys - to my skepticism - felt our competitor had a good chance of getting it approved with a few tweaks and could then use it against us, so our best strategy was to get our own patents to fend them off.

&lt;/p&gt;
&lt;p&gt;Without giving away details, a combination of patent application, patent purchase and architectural change was the suggested strategy. We executed that strategy in various ways and thus positioned ourselves appropriately if the (as I believed farfetched) doomsday scenario occurred and our competitor got their patent of client-server.

&lt;/p&gt;
&lt;p&gt;As I said, I thought the whole thing absurd. No one would allow a patent for client/server, the lawyers were overreacting. Still, I&amp;#39;d seen enough absurd patents to agree we were at risk, and so even though I thought it a colossal distraction for our small team, and overly paranoid, I worked to identify our own &amp;quot;original&amp;quot; inventions and how we could change our architecture to tap dance our way past their absurd patent if it were granted.

&lt;/p&gt;
&lt;p&gt;Now, despite my skepticism, they did get (a slightly narrower version) of that damn patent awarded, they did rattle their saber, and the changes the suits suggested worked extremely well to make the whole thing a non-event in my employers growth.

&lt;/p&gt;
&lt;p&gt;So, now you know my &amp;quot;shame&amp;quot;; how I sold my soul to the patent demons. Right?  Keep in mind, I was instructed by the highest management of our company to do this and if I held the position that patents were inherently immoral the only principled decision was to resign. However, once I understood the situation, I accepted the charge because it was clear that it was best way to counter the absurd patent. By the way, I didn&amp;#39;t hide my opinion - I even shared it with the CEO - and while he recognized the merits of my argument (and even that the whole patent thing should be abolished) he also clearly saw the need (as did I) to defend ourselves based on the reality that we were doing business in.

&lt;/p&gt;
&lt;p&gt;And this is the key point I&amp;#39;m trying to make: It wasn&amp;#39;t an unprincipled decision for me because my employer wasn&amp;#39;t doing anything unprincipled. They were simply playing the game correctly based on the rules in front of us all. To ignore this threat to the business would&amp;#39;ve been wrong; wrong for our success, wrong for our shareholders and wrong for our customers (because we had the better product).

&lt;/p&gt;
&lt;p&gt;This is not to say one cannot act immorally while playing by the rules - the business world is replete with such things - but the mere existence of patents is just a rule of the game we call business. If there&amp;#39;s a moral element - it&amp;#39;s in how they are used. It is my belief, that neither of the companies in my example behaved immorally (though our competitor was playing a weaker hand), and if the rules were changed, the outcome would&amp;#39;ve been the same (just cheaper for all concerned). But since the rules are there, they were used &lt;em&gt;because that&amp;#39;s what business is&lt;/em&gt;: A competitive game where those who use the rules most effectively win. That the stakes are high, and that many cheat, doesn&amp;#39;t change that (though it obscures it for many) and it doesn&amp;#39;t change that patents are part of the rule book and should no more be avoided than forgoing castling in chess because one thinks that moving two pieces should never be allowed.

&lt;/p&gt;
&lt;p&gt;Anyway, I hope for those who are faced with signing a patent application, I&amp;#39;ve done a little bit to ground your decision on the purpose of that patent, and not its mere existence. The latter is a naive position that fails to recognize the business landscape we all (well most of us) work in as professional software developers.

&lt;/p&gt;
&lt;p&gt;What we need to do is to change the rule book. What I would love to see is a more active attempt to get patents banned by the software industry - and I see no inherent hypocrisy if they continue to use them while working toward their extinction (not that I really believe they will, unfortunately). 

&lt;/p&gt;
&lt;p&gt;In sum: Making patents inherently a moral question simply distracts and retrenches participants and plays right into the designs of those who have the advantage of the status quo. Martin&amp;#39;s shaming of his fellow programmers was respectuflly offbase in my opinion as it ignores the much more important consideration of how patents are used while they exist.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000313.html</guid>
            <dc:date>2011-08-06T14:30:17.000Z</dc:date>
      </item>
    
      <item>
            <title>Software is not an asset</title>
            <link>http://www.williamcaputo.com/posts/000310.html</link>
            <description>&lt;p&gt;Software is not an asset - I know everyone thinks it is, but its not; its a liability - its very existence generates cost. Every minute someone spends coping with it in order to adjust the behavior of hardware (which is an asset) is a net-credit on the balance sheet and a decrease in profitability. A necessary expense in many cases, but a cost nonetheless. Getting rid of it goes directly to the bottom line.

&lt;/p&gt;
&lt;p&gt;Software isn&amp;#39;t a thing - its a form of communication. Just as no one would list meeting minutes, or recordings of the CEO&amp;#39;s speech as company assets, software should be seen as stored communications (with hardware). Its value should be viewed in how it changes behavior; its very existence should be seen as creating risk, and its deletion as key to a healthy techno-ecosystem.

&lt;/p&gt;
&lt;p&gt;This is the essential argument behind why refactoring is worthwhile, and why its value isn&amp;#39;t really comparable to writing code. Its also why its hard for non-programmers to see that value - because they think of programmer time as a credit, when really its can also be a debit.

&lt;/p&gt;
&lt;p&gt;My advice to managers (and everyone else): Want a sure fire way to add value to your organization? Reward and encourage deleting of unused code; fight for and insist that programmers be given time to refactor and otherwise eliminate unused code, and don&amp;#39;t account for time spent doing so in the same way you do the creation of code.

&lt;/p&gt;
&lt;p&gt;My advice to programmers: Delete unused code at &lt;em&gt;every&lt;/em&gt; opportunity and scale (function, class, file, project, organization); don&amp;#39;t compare the effort to do so to writing code; work at all times to have your software feature-set reflect its actual, operational use.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000310.html</guid>
            <dc:date>2011-04-30T19:28:21.000Z</dc:date>
      </item>
    
      <item>
            <title>Oil 101</title>
            <link>http://www.williamcaputo.com/posts/000309.html</link>
            <description>&lt;p&gt;As I watched the Deepwater Horizon oil spill unfold last summer, I found there were many fundamental questions about the oil industry that I didn&amp;#39;t understand. So, I started reading. I read many websites. Of these, &lt;a href=&quot;http://www.theoildrum.com/&quot;&gt;The Oil Drum&lt;/a&gt; was probably the most useful, but I was still struggling with some basic questions like: &amp;quot;How does a country benefit economically from letting an independent company take oil from its shores?&amp;quot; - and the sheer volume of contradictory opinion, punditry and proposed solutions, led me to conclude: &amp;quot;I need to dig deeper.&amp;quot;

&lt;/p&gt;
&lt;p&gt;So, I bought a book, &lt;a href=&quot;http://www.amazon.com/Oil-101-Morgan-Downey/dp/0982039204&quot;&gt;Oil 101&lt;/a&gt; as it got excellent reviews, and seem to cover everything about oil from chemistry &amp;amp; history, to exploration, production &amp;amp; trading. I recently finished this book and while its not a quick read, it is very well-written, interestingly presented and comprehensive. Written from a neutral point of view in that it describes what is, not what ought to be, it gave me just what I wanted: a good grounding that I can now use for further education, and evaluation of where we&amp;#39;re headed.

&lt;/p&gt;
&lt;p&gt;Unfortunately, the book has created a new problem for me: Nearly everything I now see being presented on this topic (again the Oil Drum is a notable exception) seems, simplistic and uniformed, aimed at supporting one political agenda or another and/or just plain out to lunch.

&lt;/p&gt;
&lt;p&gt;To take just one example: I stumbled across &lt;a href=&quot;http://exiledonline.com/koch-industries-lackeys-admit-to-manipulating-oil-prices-and-gloat-about-it-too/&quot;&gt;this article&lt;/a&gt; about how the Koch Brothers are manipulating the oil market. 

&lt;/p&gt;
&lt;p&gt;Now, I&amp;#39;m no fan of the Koch brothers - particularly their support for the anti-union movements and the big sleight-of-hand trick that is the tea party - but this article presents &amp;#39;facts&amp;#39; and jargon, not to educate, but to scare. 

&lt;/p&gt;
&lt;p&gt;Take &amp;#39;contango.&amp;#39; Investopedia defines it as: &amp;quot;When the futures price is above the expected future spot price. Consequently, the [futures] price will decline to the spot price before the delivery date.&amp;quot; Got that? Simple, right? Riiight...

&lt;/p&gt;
&lt;p&gt;To make any sense of Contango, you need to understand the oil futures market (not to mention futures themselves), the spot market, global supply and demand (both now and at the time of the contract) how oil is delivered, etc, etc - all stuff covered in Oil 101, but curiously absent from this and every other article I&amp;#39;ve read that mentions the term - probably because its taken me months to build even a basic understanding of the topic, so an article can&amp;#39;t even come close - even if the article writer understands it. Instead its summarized neatly as: &amp;quot;demand is expected to outstrip supply.&amp;quot; Wow, so simple a child could understand it. Clearly those who use the term &amp;#39;contango&amp;#39;, just want to hide how simple it is in order to steal from the poor.

&lt;/p&gt;
&lt;p&gt;Oh, and the gist of the manipulation? The Koch&amp;#39;s are artificially reducing supply by leasing four  supertankers and storing oil in them (presumably because they are using Contango against us). Just how much supply have they deprived the world of by doing this? Let&amp;#39;s do some math (all figures from Oil 101, which is about 2 years old now, but it&amp;#39;ll get the point across): 

&lt;/p&gt;
&lt;p&gt;The largest supertankers (unlikely that&amp;#39;s what&amp;#39;s being used here, but we&amp;#39;ll go with it): are called ULCC&amp;#39;s (Ultra Large Crude Carriers) and they can hold up to 560,000 DWT (that&amp;#39;s Dead Weight Tonnage). Again, unlikely to be filled to the brim, but we&amp;#39;ll use the number as is.

&lt;/p&gt;
&lt;p&gt;4 ULCC x 560,000 DWT ≈ 2.25 million DWT
7.5 barrels per DWT  ≈ 16.8mm barrels

&lt;/p&gt;
&lt;p&gt;Wow, 16.8 million barrels of oil... that&amp;#39;s how many days supply?

&lt;/p&gt;
&lt;p&gt;Not even one. Not even one for the US! In 2008, the &lt;em&gt;daily&lt;/em&gt; consumption for the US was 20.9mm barrels per day (bpd). How much did the world consume in a day? 85.7mm bpd.

&lt;/p&gt;
&lt;p&gt;16.8 million barrels isn&amp;#39;t even enough to feed all of 2008&amp;#39;s US daily &lt;b&gt;reactor&lt;/b&gt; capacity (17.5mm bpd). In other words, the heinous manipulation being described in the article - at worst - is shifting supply by a day.

&lt;/p&gt;
&lt;p&gt;In truth, its not even close to that, because ULCC&amp;#39;s aren&amp;#39;t likely to be used for that, not all of the DWT is actually oil, the oil being stored may not service as much demand, etc, etc.

&lt;/p&gt;
&lt;p&gt;So why is Koch industries spending money to lease tankers to store this oil? One guess is that its a hedge. They run refineries, and certainly buy oil to feed those refineries using futures contracts. By storing this oil, they can hedge those contracts with physical oil (much like one can hedge a stock futures position by holding actual stock). Another, possibility is that they are hedging against a short-term supply shortage for input into their refineries (e.g. maybe a couple weeks worth). 

&lt;/p&gt;
&lt;p&gt;Not so evil sounding, once you put some numbers behind it. huh? Actually, it sounds to me just like the descriptions in the book of how global supply is stored and moved so we don&amp;#39;t see occasional spikes of $15.00 gallon gasoline in the summer. In short: The refineries are doing their job.

&lt;/p&gt;
&lt;p&gt;Now as I said, the Koch brothers seem to have a lot of blood on their hands - but articles like the one linked, make that hard to spot when they simply stir up the rabble with BS. The sheer size of the oil-based economy is incomprehensible, the numbers are enormous. An oil tanker-full sounds like a lot, but it isn&amp;#39;t even the proverbial drop in the bucket. 

&lt;/p&gt;
&lt;p&gt;Reading this book has made it impossible for me to see the oil problem in simple terms. Nor are any of the &amp;quot;simple&amp;quot; solutions to it... simple. I&amp;#39;m not even sure &amp;#39;problem&amp;#39; is even the right word anymore - it&amp;#39;s like saying &amp;#39;life&amp;#39; is a problem to be solved. True I suppose, but not very enlightening. No, oil is deeply entwined into the fabric of our lives, and as its details change, our lives - all of our lives - change with it. No-one - or everyone (take your pick) is to blame for that, it just is. Oil magnates and speculators make such great scapegoats - they&amp;#39;re rich, remote - and very likely using their power for their own gain, but hanging them in the square won&amp;#39;t fix things. Understanding the facts, so we can make our own decisions about how they are using their power (both right and wrong) will.

&lt;/p&gt;
&lt;p&gt;We all owe it to ourselves - and each other - to learn as much as we can about how our world works. I&amp;#39;ve joked that I&amp;#39;m one of only three people who&amp;#39;ve read this book that aren&amp;#39;t in the oil industry (me, the book&amp;#39;s editor, and proof reader), if you care about this topic - and want to make your own educated decisions about what&amp;#39;s really going on - without resorting to simple solutions like boogeymen. You should join the three of us in reading this book.&lt;/p&gt;
</description>
            <author>William E. Caputo</author>
            <guid isPermaLink="true">http://www.williamcaputo.com/posts/000309.html</guid>
            <dc:date>2011-04-17T16:24:48.000Z</dc:date>
      </item>
    
  </channel>
</rss>
