<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  <title>Planet TW - Alumni</title>
  <updated>2010-09-02T16:08:27Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>Test</name>
    <email>test@example.com</email>
  </author>
  <id>http://blogs.thoughtworks.com/alumni/atom.xml</id>
  <link href="http://blogs.thoughtworks.com/alumni/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://blogs.thoughtworks.com/alumni/" rel="alternate"/>

  <entry>
    <id>tag:blogger.com,1999:blog-73691023729061008.post-8924985806676048883</id>
    <link href="http://agilechilli.blogspot.com/feeds/8924985806676048883/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=73691023729061008&amp;postID=8924985806676048883" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/73691023729061008/posts/default/8924985806676048883" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/73691023729061008/posts/default/8924985806676048883" rel="self" type="application/atom+xml"/>
    <link href="http://agilechilli.blogspot.com/2010/09/groovy-development-with-maven-and.html" rel="alternate" type="text/html"/>
    <title>Groovy development with Maven and Eclipse</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I recently started using Groovy for a project which is part of a larger Java project and I needed to integrate the Groovy work into my development environment (Maven 2.2, Eclipse 3.6).<br/><br/>My objective was to build the Groovy project as part of the overall Maven build, and to have rich-editing support when working with Groovy in Eclipse.<br/><br/>So it was quickly clear that I needed the <a href="http://docs.codehaus.org/display/GMAVEN/Home">GMaven</a> plugin for Maven, and the <a href="http://groovy.codehaus.org/Eclipse+Plugin">Groovy-Eclipse plugin</a>.<br/><br/>Unfortunately, at the time of writing (2 Sept 2010) the available information about these plugins is mostly out-of-date/incorrect/incomplete. So it took me a while to figure out how to configure the GMaven plugin correctly, and how to tweak the Maven pom files so that the generated Eclipse projects satisfied the Groovy-Eclipse plugin needs.<br/><br/>So without further ado, here is my pom. It might save you some time.<br/><br/>(The XML looks a bit ugly here in Blogger, but if you copy and paste it into an editor it will look just fine)<br/><br/><!-- code formatted by http://manoli.net/csharpformat/ --><br/>.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }<br/><pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">project</span> <span class="attr">xmlns</span><span class="kwrd">="http://maven.apache.org/POM/4.0.0"</span> <span class="attr">xmlns:xsi</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema-instance"</span><br/>    <span class="attr">xsi:schemaLocation</span><span class="kwrd">="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"</span><span class="kwrd">&gt;</span><br/>    <span class="kwrd">&lt;</span><span class="html">modelVersion</span><span class="kwrd">&gt;</span>4.0.0<span class="kwrd">&lt;/</span><span class="html">modelVersion</span><span class="kwrd">&gt;</span><br/><br/>    <span class="kwrd">&lt;</span><span class="html">parent</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>com.company.product<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>parent-artifact<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">version</span><span class="kwrd">&gt;</span>1.0-SNAPSHOT<span class="kwrd">&lt;/</span><span class="html">version</span><span class="kwrd">&gt;</span><br/>    <span class="kwrd">&lt;/</span><span class="html">parent</span><span class="kwrd">&gt;</span><br/><br/>    <span class="kwrd">&lt;</span><span class="html">properties</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">gmaven.version</span><span class="kwrd">&gt;</span>1.3<span class="kwrd">&lt;/</span><span class="html">gmaven.version</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">groovy.major.version</span><span class="kwrd">&gt;</span>1.7<span class="kwrd">&lt;/</span><span class="html">groovy.major.version</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">groovy.minor.version</span><span class="kwrd">&gt;</span>4<span class="kwrd">&lt;/</span><span class="html">groovy.minor.version</span><span class="kwrd">&gt;</span><br/>    <span class="kwrd">&lt;/</span><span class="html">properties</span><span class="kwrd">&gt;</span><br/><br/>    <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>child-artifact<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>    <span class="kwrd">&lt;</span><span class="html">packaging</span><span class="kwrd">&gt;</span>jar<span class="kwrd">&lt;/</span><span class="html">packaging</span><span class="kwrd">&gt;</span><br/><br/>    <span class="kwrd">&lt;</span><span class="html">name</span><span class="kwrd">&gt;</span>My artifact name<span class="kwrd">&lt;/</span><span class="html">name</span><span class="kwrd">&gt;</span><br/><br/>    <span class="kwrd">&lt;</span><span class="html">dependencies</span><span class="kwrd">&gt;</span><br/>        <span class="rem">&lt;!--</span><br/><span class="rem">          Groovy runtime is needed when running unit tests written in Groovy using the Maven Surefire Plugin. </span><br/><span class="rem">        --&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">dependency</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.codehaus.gmaven.runtime<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>gmaven-runtime-${groovy.major.version}<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;</span><span class="html">version</span><span class="kwrd">&gt;</span>${gmaven.version}<span class="kwrd">&lt;/</span><span class="html">version</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;</span><span class="html">scope</span><span class="kwrd">&gt;</span>test<span class="kwrd">&lt;/</span><span class="html">scope</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;/</span><span class="html">dependency</span><span class="kwrd">&gt;</span><br/>    <span class="kwrd">&lt;/</span><span class="html">dependencies</span><span class="kwrd">&gt;</span><br/><br/>    <span class="kwrd">&lt;</span><span class="html">build</span><span class="kwrd">&gt;</span><br/>        <span class="rem">&lt;!-- </span><br/><span class="rem">          Remap the source directories for this project. </span><br/><span class="rem">          This is not strictly needed for Maven builds as the gmaven plugin correctly recognizes the groovy directories.</span><br/><span class="rem">          But unless we do this the maven-eclipse-plugin won't generate the correct src classpathentries in the .classpath file,</span><br/><span class="rem">          and the Groovy-Eclipse plugin won't correctly recognize Groovy source files, and syntax-highlighting, autocompletion</span><br/><span class="rem">          etc. won't work.</span><br/><span class="rem">        --&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">sourceDirectory</span><span class="kwrd">&gt;</span>src/main/groovy<span class="kwrd">&lt;/</span><span class="html">sourceDirectory</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">testSourceDirectory</span><span class="kwrd">&gt;</span>src/test/groovy<span class="kwrd">&lt;/</span><span class="html">testSourceDirectory</span><span class="kwrd">&gt;</span><br/>        <br/>        <span class="rem">&lt;!-- Plugin configuration --&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">pluginManagement</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;</span><span class="html">plugins</span><span class="kwrd">&gt;</span><br/><br/>                <span class="rem">&lt;!-- Tweak the generated Eclipse project to please the Groovy-Eclipse plugin --&gt;</span><br/>                <span class="kwrd">&lt;</span><span class="html">plugin</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.apache.maven.plugins<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>maven-eclipse-plugin<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;</span><span class="html">configuration</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;</span><span class="html">projectnatures</span><span class="kwrd">&gt;</span><br/>                            <span class="rem">&lt;!-- Ensure that the Groovy nature is the first one so that the project is recognized as a Groovy project --&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">projectnature</span><span class="kwrd">&gt;</span>org.eclipse.jdt.groovy.core.groovyNature<span class="kwrd">&lt;/</span><span class="html">projectnature</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">projectnature</span><span class="kwrd">&gt;</span>org.eclipse.jdt.core.javanature<span class="kwrd">&lt;/</span><span class="html">projectnature</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;/</span><span class="html">projectnatures</span><span class="kwrd">&gt;</span>    <br/>                                            <br/>                        <span class="kwrd">&lt;</span><span class="html">classpathContainers</span><span class="kwrd">&gt;</span><br/>                           <span class="rem">&lt;!-- Add Groovy libs (from plugin) to Eclipse classpath --&gt;</span><br/>                           <span class="kwrd">&lt;</span><span class="html">classpathContainer</span><span class="kwrd">&gt;</span>GROOVY_SUPPORT<span class="kwrd">&lt;/</span><span class="html">classpathContainer</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;/</span><span class="html">classpathContainers</span><span class="kwrd">&gt;</span><br/><br/>                        <span class="kwrd">&lt;</span><span class="html">sourceIncludes</span><span class="kwrd">&gt;</span><br/>                            <span class="rem">&lt;!-- Force the inclusion of Groovy sources in the generated src classpathentries in .classpath --&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">sourceInclude</span><span class="kwrd">&gt;</span>**/*.groovy<span class="kwrd">&lt;/</span><span class="html">sourceInclude</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;/</span><span class="html">sourceIncludes</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;/</span><span class="html">configuration</span><span class="kwrd">&gt;</span><br/>                <span class="kwrd">&lt;/</span><span class="html">plugin</span><span class="kwrd">&gt;</span><br/><br/>                <span class="rem">&lt;!-- Configure the gmaven plugin --&gt;</span><br/>                <span class="kwrd">&lt;</span><span class="html">plugin</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.codehaus.gmaven<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>gmaven-plugin<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;</span><span class="html">version</span><span class="kwrd">&gt;</span>${gmaven.version}<span class="kwrd">&lt;/</span><span class="html">version</span><span class="kwrd">&gt;</span><br/>                    <br/>                    <span class="kwrd">&lt;</span><span class="html">executions</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;</span><span class="html">execution</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">goals</span><span class="kwrd">&gt;</span><br/>                                <span class="rem">&lt;!-- Add this if Java sources are needed for joint compilation.</span><br/><span class="rem">                                &lt;goal&gt;generateStubs&lt;/goal&gt;</span><br/><span class="rem">                                --&gt;</span><br/>                                <br/>                                <span class="rem">&lt;!-- </span><br/><span class="rem">                                  Don't necessarily need this since Groovy is compiled to Java classes on the fly</span><br/><span class="rem">                                  at run time, but it helps to catch syntax errors in the scripts at build time</span><br/><span class="rem">                                --&gt;</span><br/>                                <span class="kwrd">&lt;</span><span class="html">goal</span><span class="kwrd">&gt;</span>compile<span class="kwrd">&lt;/</span><span class="html">goal</span><span class="kwrd">&gt;</span><br/>                                <br/>                                <span class="rem">&lt;!-- Add this if Java sources are needed for joint compilation.</span><br/><span class="rem">                                &lt;goal&gt;generateTestStubs&lt;/goal&gt;</span><br/><span class="rem">                                --&gt;</span><br/>                                <br/>                                <span class="rem">&lt;!-- </span><br/><span class="rem">                                  Don't necessarily need this since Groovy is compiled to Java classes on the fly</span><br/><span class="rem">                                  at run time, but it helps to catch syntax errors in the scripts at build time</span><br/><span class="rem">                                --&gt;</span><br/>                                <span class="kwrd">&lt;</span><span class="html">goal</span><span class="kwrd">&gt;</span>testCompile<span class="kwrd">&lt;/</span><span class="html">goal</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;/</span><span class="html">goals</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;/</span><span class="html">execution</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;/</span><span class="html">executions</span><span class="kwrd">&gt;</span><br/>                    <br/>                    <span class="kwrd">&lt;</span><span class="html">dependencies</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;</span><span class="html">dependency</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.codehaus.gmaven.runtime<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>gmaven-runtime-${groovy.major.version}<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">version</span><span class="kwrd">&gt;</span>${gmaven.version}<span class="kwrd">&lt;/</span><span class="html">version</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">exclusions</span><span class="kwrd">&gt;</span><br/>                                <span class="rem">&lt;!-- </span><br/><span class="rem">                                   Ensure we always use the latest groovy version, </span><br/><span class="rem">                                   rather than the one that happens to come with gmaven</span><br/><span class="rem">                                 --&gt;</span><br/>                                <span class="kwrd">&lt;</span><span class="html">exclusion</span><span class="kwrd">&gt;</span><br/>                                    <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.codehaus.groovy<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>                                    <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>groovy-all<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>                                <span class="kwrd">&lt;/</span><span class="html">exclusion</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;/</span><span class="html">exclusions</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;/</span><span class="html">dependency</span><span class="kwrd">&gt;</span><br/>                        <br/>                        <span class="kwrd">&lt;</span><span class="html">dependency</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.codehaus.groovy<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>groovy-all<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>                            <span class="kwrd">&lt;</span><span class="html">version</span><span class="kwrd">&gt;</span>${groovy.major.version}.${groovy.minor.version}<span class="kwrd">&lt;/</span><span class="html">version</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;/</span><span class="html">dependency</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;/</span><span class="html">dependencies</span><span class="kwrd">&gt;</span><br/><br/>                    <span class="kwrd">&lt;</span><span class="html">configuration</span><span class="kwrd">&gt;</span><br/>                        <span class="kwrd">&lt;</span><span class="html">providerSelection</span><span class="kwrd">&gt;</span>${groovy.major.version}<span class="kwrd">&lt;/</span><span class="html">providerSelection</span><span class="kwrd">&gt;</span><br/>                    <span class="kwrd">&lt;/</span><span class="html">configuration</span><span class="kwrd">&gt;</span><br/>                <span class="kwrd">&lt;/</span><span class="html">plugin</span><span class="kwrd">&gt;</span><br/><br/>            <span class="kwrd">&lt;/</span><span class="html">plugins</span><span class="kwrd">&gt;</span><br/>        <span class="kwrd">&lt;/</span><span class="html">pluginManagement</span><span class="kwrd">&gt;</span><br/> <br/>        <span class="rem">&lt;!-- Activate the gmaven plugin --&gt;</span><br/>        <span class="kwrd">&lt;</span><span class="html">plugins</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;</span><span class="html">plugin</span><span class="kwrd">&gt;</span><br/>                <span class="kwrd">&lt;</span><span class="html">groupId</span><span class="kwrd">&gt;</span>org.codehaus.gmaven<span class="kwrd">&lt;/</span><span class="html">groupId</span><span class="kwrd">&gt;</span><br/>                <span class="kwrd">&lt;</span><span class="html">artifactId</span><span class="kwrd">&gt;</span>gmaven-plugin<span class="kwrd">&lt;/</span><span class="html">artifactId</span><span class="kwrd">&gt;</span><br/>            <span class="kwrd">&lt;/</span><span class="html">plugin</span><span class="kwrd">&gt;</span><br/>         <span class="kwrd">&lt;/</span><span class="html">plugins</span><span class="kwrd">&gt;</span><br/>    <span class="kwrd">&lt;/</span><span class="html">build</span><span class="kwrd">&gt;</span><br/><span class="kwrd">&lt;/</span><span class="html">project</span><span class="kwrd">&gt;</span></pre><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/73691023729061008-8924985806676048883?l=agilechilli.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-09-02T14:24:44Z</updated>
    <published>2010-09-02T08:34:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="groovy maven eclipse"/>
    <author>
      <name>Fabio Gavilondo</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/07916122601829490340</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-73691023729061008</id>
      <author>
        <name>Fabio Gavilondo</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/07916122601829490340</uri>
      </author>
      <link href="http://agilechilli.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/73691023729061008/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://agilechilli.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Fabio Gavilondo's blog</subtitle>
      <title>Kaleidosblog</title>
      <updated>2010-09-02T14:34:16Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://agilewarrior.wordpress.com/?p=891</id>
    <link href="http://feedproxy.google.com/~r/AgileWarriorBlog/~3/IhvGWBfbfnw/" rel="alternate" type="text/html"/>
    <title>JR</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I love training. I love getting in a room, with smart passionate people who are looking for an edge, and collectively finding better ways to serve our customers. That’s why I am so excited to offer a brand new course this year called the Art of the Kickstart. Focused 100% on agile project chartering and <a class="excerpt-more-link" href="http://agilewarrior.wordpress.com/2010/09/02/the-agile-kickstart-fall-2010-training-schedule/">[…]</a><img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=891&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I love training. I love getting in a room, with smart passionate people who are looking for an edge, and collectively finding better ways to serve our customers.</p>
<p>That’s why I am so excited to offer a brand new course this year called the <a href="http://agilewarrior.wordpress.com/training/">Art of the Kickstart</a>.</p>
<p>Focused 100% on agile project chartering and inception (something most agile methods are silent on) the <a href="http://agilewarrior.wordpress.com/training/">Art of the Kickstart</a> is a quick, no-nonsense way to build your first agile project plan.</p>
<p>Attendees will be ask to bring an idea for a project they’d like to deliver, and over the course of the day they will create their very own agile project plan based on the material covered in the course. How cool is that?</p>
<p>If you start projects, or or just looking for a better way to set expectations going in, check out the <a href="http://agilewarrior.wordpress.com/training/">Art of the Kickstart</a>.</p>
<br/>Filed under: <a href="http://agilewarrior.wordpress.com/category/agile/">agile</a>  <a href="http://feeds.wordpress.com/1.0/gocomments/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/agilewarrior.wordpress.com/891/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/agilewarrior.wordpress.com/891/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/agilewarrior.wordpress.com/891/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/agilewarrior.wordpress.com/891/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/agilewarrior.wordpress.com/891/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/agilewarrior.wordpress.com/891/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/agilewarrior.wordpress.com/891/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/agilewarrior.wordpress.com/891/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=891&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/><img height="1" src="http://feeds.feedburner.com/~r/AgileWarriorBlog/~4/IhvGWBfbfnw" width="1"/></div>
    </content>
    <updated>2010-09-02T12:42:02Z</updated>
    <category term="agile"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://agilewarrior.wordpress.com/2010/09/02/the-agile-kickstart-fall-2010-training-schedule/</feedburner:origlink>
    <author>
      <name>JR</name>
    </author>
    <source>
      <id>http://agilewarrior.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/f5507dfac8bd5cc9a12c654ee97e46fe?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://agilewarrior.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://feeds.feedburner.com/AgileWarriorBlog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>A blog about creating valuable software</subtitle>
      <title>The Agile Warrior</title>
      <updated>2010-09-02T13:06:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://marco.hubdirector.com/?p=394</id>
    <link href="http://marco.hubdirector.com/osway-10-years-later/" rel="alternate" type="text/html"/>
    <title>OSWay 10 years later</title>
    <summary>As I briefly mentioned in this post I founded a company called OSWay – The Open Source Way – back in 2000 with a friend of mine, exactly 10 years ago! A bit of history: in 1997 I went live with my first ever website on Geocities, it was called C++Warriors and it was all [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As I briefly mentioned <a href="http://marco.hubdirector.com/open-source-agile-technology-business-and-me/">in this post</a> I founded a company called OSWay – The Open Source Way – back in 2000 with a friend of mine, exactly 10 years ago!</p>
<p>A bit of history: in 1997 I went live with my first ever website on Geocities, it was called C++Warriors and it was all about…C++ <img alt=":-)" class="wp-smiley" src="http://marco.hubdirector.com/wp-includes/images/smilies/icon_smile.gif"/>  News, articles and tutorials were in Italian and that was a scarse resource at the time so much so that it got featured on a few magazine (the physical ones!) and got quite some traction. That’s when I <em>met </em>all kinds of interesting people like <a href="http://en.wikipedia.org/wiki/Alex_Martelli" target="_blank">Alex Martelli </a>of Python and Google fame (at the time he was able to spit out a 30-part tutorial on Win32 programming in a matter of days) and <a href="http://www.ugolandini.com/pages/about.html" target="_blank">Ugo Landini</a> to name a few.</p>
<p>In 1998 I started thinking about the <em>success</em> of C++Warriors and decided that if a little amateurish website about C++ was so successful it was due to the sheer lack of programming resources in Italian and I started planning what would then become <a href="http://www.programmazione.it">Programmazione.it</a> in 1999 (although I have nothing to do with it since 2003 it still exists and it’s 11 years old now!): the first Italian website about programming with news, articles, tutorials and soft dev product reviews all in Italian.</p>
<p>To do that I needed to find people willing to write and publish material in Italian about as many programming languages as possible and that’s when I <em>met</em> Filippo on the #programmazione IRCNet channel in 1998 who will then become my business partner in both Programmazione.it and OSWay (I now regret <strong>a lot</strong> letting osway.com, .net, .org and .it expire a few years ago <img alt=":-(" class="wp-smiley" src="http://marco.hubdirector.com/wp-includes/images/smilies/icon_sad.gif"/> )</p>
<p>At the end of 1999 Filippo and I also started working together for a few customers and came up with a product idea around “making information free”, sharing and collaborating on-line, etc, etc (all pretty common stuff nowadays), founded OSWay S.r.l., sold part of it to a public company to get some capital and invest it into the product development. We eventually froze the product and kept working as a software house specialised in the use of Open Source. We did all sorts of things from partnering with <a href="http://www.opensuse.org/">SuSe Italy</a>, to developing the world first <a href="http://en.wikipedia.org/wiki/Kylix_programming_tool">Kylix</a> enterprise-grade <a href="http://en.wikipedia.org/wiki/Point_of_sale">POS application</a> (there used to be our case history on <a href="http://www.borland.com/">Borland</a>‘s website before the <a href="http://www.codegear.com/">CodeGear</a> split), community websites in Java and PHP (<a href="http://www.freestation.it/" target="_blank">Freestation.it</a>), Linux-based embedded software for touch-screen, industrial-rugged appliances and more.</p>
<p>We started working on the product a few months before incorporating but we eventually incorporated in September 2000, exactly 10 years ago!!</p>
<p>There are many noteworthy things about that venture, including the fact that Open Source was at the center of everything we did, starting from the company very own name 3 years before the <a href="http://www.opensource.org/history" target="_blank">Open Source Initiative</a> adopted bylaws and applied for recognition as 501(c)3 nonprofit in 2003 but I just wanted to celebrate the 10th aniversary with a post and this is it <img alt=":-)" class="wp-smiley" src="http://marco.hubdirector.com/wp-includes/images/smilies/icon_smile.gif"/> </p>
<p><strong>UPDATE: </strong>Filippo dug out the flash teaser that we prepared in 2000 for OSWay and the product. Yes, it’s flash and yes it’s heavy but it’s still beautiful! <img alt=":-D" class="wp-smiley" src="http://marco.hubdirector.com/wp-includes/images/smilies/icon_biggrin.gif"/> </p>
<p><span id="more-394"/></p>
<p>Warning: there is sound and at the end it tries to redirect you to a page that clearly doesn’t exist anymore….</p>
<p/></div>
    </content>
    <updated>2010-09-02T10:48:07Z</updated>
    <category term="Business"/>
    <category term="OpenSource"/>
    <author>
      <name>Marco</name>
    </author>
    <source>
      <id>http://marco.hubdirector.com</id>
      <link href="http://marco.hubdirector.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/hubdirector/KEBs" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Just another blog</subtitle>
      <title>ABS blog</title>
      <updated>2010-09-02T12:06:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>https://sivajag.wordpress.com/?p=173</id>
    <link href="http://techbehindtech.com/2010/09/02/compojure-demystified-with-an-example-part-5/" rel="alternate" type="text/html"/>
    <title>sivajag</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In this part lets write our own middleware. From part4 you will remember, “Middleware are functions that could be chained together to process a request. Middleware functions can take any number of arguments, but the spec stats that first argument should be a handler and function should return a handler. An example for middleware is [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=173&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In this part lets write our own middleware.</p>
<p>From <a href="http://techbehindtech.com/2010/08/24/compojure-demystified-with-an-example-part-4/">part4</a> you will remember,</p>
<p>“Middleware are functions that could be chained together to process a request. Middleware functions can take any number of arguments, but the spec stats that first argument should be a handler and function should return a handler. An example for middleware is logging all requests that comes to your webserver.”</p>
<p><em>1) Create a namespace for middleware </em></p>
<p>Create src/address_book/middleware.clj</p>
<pre class="brush: plain;">(ns address-book.middleware)

(defn- log [msg &amp; vals]
  (let [line (apply format msg vals)]
    (locking System/out (println line))))

(defn wrap-request-logging [handler]
  (fn [{:keys [request-method uri] :as req}]
    (let [resp (handler req)]
      (log "Processing %s %s" request-method uri)
      resp)))
</pre>
<p>Our wrap-request-logging is a middleware which takes a handler and returns an handler.</p>
<p><em>2) Add our middleware to our chain of handlers </em></p>
<p>Edit routes.clj</p>
<pre class="brush: plain; highlight: [4,22,23];">(ns address_book.routes
  (:use [compojure.core])
  (:require [address-book.address :as address]
            [address-book.middleware :as mdw]
            [compojure.route :as route]
            [clj-json.core :as json]))

(defn json-response [data &amp; [status]]
  {:status (or status 200)
   :headers {"Content-Type" "application/json"}
   :body (json/generate-string data)})

(defroutes handler
  (GET "/addresses" [] (json-response (address/find-all)))
  (GET "/addresses/:id" [id] (json-response (address/find id)))
  (POST "/addresses" {params :params}  (json-response (address/create params)))

  (route/files "/" {:root "public"})
  (route/not-found "Page not found"))

(def address-book
     (-&gt; handler
         mdw/wrap-request-logging))
</pre>
<p><em>3) Test our middleware </em></p>
<p>Now start your server and you can see all requests are getting logged. This is very powerful feature. We can do security etc using middleware. Ring and Compojure comes with some useful middleware. Check them out.</p>
<p>In next part we will implement edit  and delete functionalities.</p>
<p><strong><em>Source code is now available at </em></strong><a href="http://github.com/sivajag/Address-Book"><strong><em>github</em></strong></a><strong><em>. </em></strong> <strong><em>Created branches for each part.</em></strong></p>
<br/>Filed under: <a href="http://techbehindtech.com/category/clojure/">Clojure</a> Tagged: <a href="http://techbehindtech.com/tag/clojure-2/">clojure</a>, <a href="http://techbehindtech.com/tag/code/">code</a>, <a href="http://techbehindtech.com/tag/compojure/">compojure</a>, <a href="http://techbehindtech.com/tag/jquery/">jquery</a>, <a href="http://techbehindtech.com/tag/rest/">REST</a>, <a href="http://techbehindtech.com/tag/web/">web</a> <a href="http://feeds.wordpress.com/1.0/gocomments/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sivajag.wordpress.com/173/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sivajag.wordpress.com/173/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sivajag.wordpress.com/173/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sivajag.wordpress.com/173/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sivajag.wordpress.com/173/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sivajag.wordpress.com/173/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/sivajag.wordpress.com/173/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sivajag.wordpress.com/173/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=173&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2010-09-02T07:19:37Z</updated>
    <category term="Clojure"/>
    <category term="clojure"/>
    <category term="code"/>
    <category term="compojure"/>
    <category term="jquery"/>
    <category term="REST"/>
    <category term="web"/>
    <author>
      <name>Siva Jagadeesan</name>
    </author>
    <source>
      <id>http://techbehindtech.com</id>
      <logo>http://0.gravatar.com/blavatar/ea259bd3a901b0e5c68149ed7392c564?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://techbehindtech.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://techbehindtech.com" rel="alternate" type="text/html"/>
      <link href="http://techbehindtech.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://techbehindtech.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Raw information. No finesse :)</subtitle>
      <title>Tech behind Tech</title>
      <updated>2010-09-02T16:05:47Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-09-01</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/0pLddzuxmPI/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-09-01 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://piwik.org/">Piwik - Web analytics - Open source</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/0pLddzuxmPI" width="1"/></div>
    </summary>
    <updated>2010-09-02T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-09-01</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-12467669.post-2486214703634967640</id>
    <link href="http://feedproxy.google.com/~r/jayfields/mjKQ/~3/fx_31ADnK90/clojure-mocking.html" rel="alternate" type="text/html"/>
    <title>Clojure: Mocking</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">An <a href="http://blog.jayfields.com/2010/08/clojuretest-introduction.html">introduction to clojure.test</a> is easy, but it doesn't take long before you feel like you need a mocking framework. As far as I know, you have 3 options.<ol><li>Take a look at <a href="http://github.com/marick/Midje">Midje</a>. I haven't gone down this path, but it looks like the most mature option if you're looking for a sophisticated solution.<br/></li><br/><li>Go simple. Let's take an example where you want to call a function that computes a value and sends a response to a gateway. Your first implementation looks like the code below. (<a href="http://blog.jayfields.com/2010/07/clojure-destructuring.html">destructuring explained</a>)<pre>(defn withdraw [&amp; {:keys [balance withdrawal account-number]}]<br/> (gateway/process {:balance (- balance withdrawal)<br/>                   :withdrawal withdrawal<br/>                   :account-number account-number}))</pre>No, it's not pure. That's not the point. Let's pretend that this impure function is the right design and focus on how we would test it.<br/><br/>You can change the code a bit and pass in the gateway/process function as an argument. Once you've changed how the code works you can test it by passing identity as the function argument in your tests. The full example is below.<pre>(ns gateway)<br/><br/>(defn process [m] (println m))<br/><br/>(ns controller<br/> (:use clojure.test))<br/><br/>(defn withdraw [f &amp; {:keys [balance withdrawal account-number]}]<br/> (f {:balance (- balance withdrawal)<br/>     :withdrawal withdrawal<br/>     :account-number account-number}))<br/><br/>(withdraw gateway/process :balance 100 :withdrawal 22 :account-number 4)<br/>;; =&gt; {:balance 78, :withdrawal 22, :account-number 4}<br/><br/>(deftest withdraw-test<br/> (is (= {:balance 78, :withdrawal 22, :account-number 4}<br/>  (withdraw identity :balance 100 :withdrawal 22 :account-number 4))))<br/><br/>(run-all-tests #"controller")</pre>If you run the previous example you will see the println output and the clojure.test output, verifying that our code is working as we expected. This simple solution of passing in your side effect function and using identity in your tests can often obviate any need for a mock.<br/></li><br/><li>Solution 2 works well, but has the limitations that only one side-effecty function can be passed in and it's result must be used as the return value.<br/><br/>Let's extend our example and say that we want to log a message if the withdrawal would cause insufficient funds. (Our gateway/process and log/write functions will simply println since this is only an example, but in production code their behavior would differ and both would be required)<pre>(ns gateway)<br/><br/>(defn process [m] (println "gateway: " m))<br/><br/>(ns log)<br/><br/>(defn write [m] (println "log: " m))<br/><br/>(ns controller<br/>  (:use clojure.test))<br/><br/>(defn withdraw [&amp; {:keys [balance withdrawal account-number]}]<br/>  (let [new-balance (- balance withdrawal)]<br/>    (if (&gt; 0 new-balance)<br/>      (log/write "insufficient funds")<br/>      (gateway/process {:balance new-balance<br/>                        :withdrawal withdrawal<br/>                        :account-number account-number}))))<br/><br/>(withdraw :balance 100 :withdrawal 22 :account-number 4)<br/>;; =&gt; gateway:  {:balance 78, :withdrawal 22, :account-number 4}<br/><br/>(withdraw :balance 100 :withdrawal 220 :account-number 4)<br/>;; =&gt; log:  insufficient funds</pre>Our new withdraw implementation calls two functions that have side effects. We could pass in both functions, but that solution doesn't seem to scale very well as the number of passed functions grows. Also, passing in multiple functions tends to clutter the signature and make it hard to remember what is the valid order for the arguments. Finally, if we need withdraw to always return a map showing the balance and withdrawal amount, there would be no easy solution for verifying the string sent to log/write.<br/><br/>Given our implementation of withdraw, writing a test that verifies that gateway/process and log/write are called correctly looks like a job for a mock. However, thanks to Clojure's binding function, it's very easy to redefine both of those functions to capture values that can later be tested.<br/><br/>The following code rebinds both gateway/process and log/write to partial functions that capture whatever is passed to them in an atom that can easily be verified directly in the test.<pre>(ns gateway)<br/><br/>(defn process [m] (println "gateway: " m))<br/><br/>(ns log)<br/><br/>(defn write [m] (println "log: " m))<br/><br/>(ns controller<br/>  (:use clojure.test))<br/><br/>(defn withdraw [&amp; {:keys [balance withdrawal account-number]}]<br/>  (let [new-balance (- balance withdrawal)]<br/>    (if (&gt; 0 new-balance)<br/>      (log/write "insufficient funds")<br/>      (gateway/process {:balance new-balance<br/>                        :withdrawal withdrawal<br/>                        :account-number account-number}))))<br/><br/>(deftest withdraw-test1<br/>  (let [result (atom nil)]<br/>    (binding [gateway/process (partial reset! result)]<br/>      (withdraw :balance 100 :withdrawal 22 :account-number 4)<br/>      (is (= {:balance 78, :withdrawal 22, :account-number 4} @result)))))<br/><br/>(deftest withdraw-test2<br/>  (let [result (atom nil)]<br/>    (binding [log/write (partial reset! result)]<br/>      (withdraw :balance 100 :withdrawal 220 :account-number 4)<br/>      (is (= "insufficient funds" @result)))))<br/><br/>(run-all-tests #"controller")</pre></li></ol>In general I use option 2 when I can get away with it, and option 3 where necessary. Option 3 adds enough additional code that I'd probably look into Midje quickly if I found myself writing a more than a few tests that way. However, I generally go out of my way to design pure functions, and I don't find myself needing either of these techniques very often.<div class="blogger-post-footer"><br/><a href="http://www.jayfields.com">© Jay Fields - www.jayfields.com</a><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/12467669-2486214703634967640?l=blog.jayfields.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/jayfields/mjKQ/~4/fx_31ADnK90" width="1"/></div>
    </summary>
    <updated>2010-09-02T00:11:00Z</updated>
    <category scheme="http://www.blogger.com/atom/ns#" term="mock"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="clojure"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="TDD"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jayfields.com/2010/09/clojure-mocking.html</feedburner:origlink>
    <author>
      <name>Jay Fields</name>
      <email>blogger@jayfields.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-12467669</id>
      <author>
        <name>Jay Fields</name>
        <email>blogger@jayfields.com</email>
      </author>
      <link href="http://blog.jayfields.com/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jayfields/mjKQ" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>experiences in software development</subtitle>
      <title>Jay Fields' Thoughts</title>
      <updated>2010-09-02T11:06:50Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://del.icio.us/obie#2010-08-31</id>
    <link href="http://feedproxy.google.com/~r/obie/~3/MSuSkxH4q-4/obie" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-31 [del.icio.us]</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://news.ycombinator.com/item?id=1649065">Hacker News | Ask HN: Are there any good online communities for UX design?</a><br/>
Links to good UX communities</li>
</ul></div>
    </content>
    <updated>2010-09-01T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/obie#2010-08-31</feedburner:origlink>
    <source>
      <id>tag:typepad.com,2003:weblog-1546920</id>
      <author>
        <name>Obie Fernandez</name>
      </author>
      <link href="http://blog.obiefernandez.com/content/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/obie" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>blog.obiefernandez.com</subtitle>
      <title>Obie Fernandez</title>
      <updated>2010-09-01T07:00:00Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5638372.post-1633885350149370499</id>
    <link href="http://binkley.blogspot.com/feeds/1633885350149370499/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=5638372&amp;postID=1633885350149370499" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/1633885350149370499" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/1633885350149370499" rel="self" type="application/atom+xml"/>
    <link href="http://binkley.blogspot.com/2010/08/manifesto-for-half-arsed-agile-software.html" rel="alternate" type="text/html"/>
    <title>Manifesto for Half-Arsed Agile Software Development</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Courtesy of Brian Winquist, the <a href="http://halfarsedagilemanifesto.org/" title="Manifesto for Half-Arsed Agile Software Development"><cite>Manifesto for Half-Arsed Agile Software Development</cite></a>.</p><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5638372-1633885350149370499?l=binkley.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-31T16:47:33Z</updated>
    <published>2010-08-31T16:47:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="agile"/>
    <author>
      <name>binkley</name>
      <email>binkley@alumni.rice.edu</email>
      <uri>http://www.blogger.com/profile/06617364377560752378</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5638372</id>
      <author>
        <name>binkley</name>
        <email>binkley@alumni.rice.edu</email>
        <uri>http://www.blogger.com/profile/06617364377560752378</uri>
      </author>
      <link href="http://binkley.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://binkley.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Just myself.</subtitle>
      <title>binkley's BLOG</title>
      <updated>2010-08-31T16:47:33Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-20165167.post-980068485752135862</id>
    <link href="http://chrismcmahonsblog.blogspot.com/feeds/980068485752135862/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=20165167&amp;postID=980068485752135862" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/20165167/posts/default/980068485752135862" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/20165167/posts/default/980068485752135862" rel="self" type="application/atom+xml"/>
    <link href="http://chrismcmahonsblog.blogspot.com/2010/08/not-about-testing-bit-of-writing.html" rel="alternate" type="text/html"/>
    <title>not about testing: a bit of writing</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I've been neglecting my blog, mostly because I have been doing a whole lot of professional freelance writing on the subject of software dev and test, and really enjoying it a lot.<br/><br/>A few months ago I also submitted a piece to the <a href="http://mountaingazette.com/">Mountain Gazette</a>, one of my favorite magazines, available for free around the West.  They always publish really good writing.<br/><br/>Mountain Gazette was soliciting pieces on the subject "My Favorite Mountain".  To their surprise, they got more than 200 submissions, of which they could only publish 11.  I submitted a piece, it was rejected, but I don't mind, I've been reading the issue, and there are some really great essays.<br/><br/>So since it isn't going to appear anywhere else, I figured I would publish it here:<br/><br/>----<br/><br/>I don't have very far to go to get to my favorite mountain. I go out<br/>my front door and take a right, and I walk about a mile through my<br/>neighborhood of mostly middle-class houses, some Victorian, some like<br/>mine vintage 1930s-40s, a few more modern. I say "hello" to my<br/>neighbors as I work my way a little uphill to the trailhead near the<br/>electrical transformer station.<br/><br/>The way up the west side of the loop trail is kind of a slog, moving<br/>from about 6500 feet of altitude to about 8200 feet through pine<br/>forest and the occasional meadow, but every once in a while a mountain<br/>biker comes barreling down from the top and catches some air on a nice<br/>jump. That's fun to watch. I used to be pretty good on a mountain<br/>bike, but the lure of adrenalin doesn't call so strong now. Now I get<br/>a thrill holding one of the horned toads that seem so common on this<br/>mountain but that I never find anywhere else.<br/><br/>Nearing the top I get peekaboo glimpses of the La Plata range to the<br/>northwest, so I know I'm getting close. The forest opens up, and a<br/>final climb takes me to the overlook where I can see the La Platas to<br/>the northwest, the 14ers of the Weminuche Wilderness off in the<br/>distance to the northeast, and all of the river valley laid out below.<br/>There are always birds moving across the sheer cliff below my feet,<br/>often crows, sometimes buzzards, once or twice eagles. Sometimes a<br/>man-made glider works the thermals over my head.<br/><br/>My mountain isn't one of those tall craggy ones like on the Coors beer<br/>label, it's an uplifted slab of shale and sandstone, and coming down<br/>the broken edge of the slab is the best part of the walk. The view<br/>gradually shifts from the north to the east, hiding the tall peaks but<br/>revealing broken sandstone ridges marching off into the distance. The<br/>college sits below one ridge, and my town is laid out along the banks<br/>of the river moving downstream to the south, where the sandstone<br/>canyons start.<br/><br/>When I finish the loop around my mountain, if I don't feel like going<br/>straight home, just a couple blocks out of my way is the tap room for<br/>one of the local breweries, a fine place to finish off a four-hour<br/>walk on a nice afternoon on my favorite mountain.<br/><br/><a href="http://1.bp.blogspot.com/_ZmTWLw9SJ0A/TH0edlAHlOI/AAAAAAAAAoI/StwY3nwVKWk/s1600/my_favorite_mountain18.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5511595012469003490" src="http://1.bp.blogspot.com/_ZmTWLw9SJ0A/TH0edlAHlOI/AAAAAAAAAoI/StwY3nwVKWk/s320/my_favorite_mountain18.jpg" style="cursor: pointer; width: 320px; height: 240px;"/></a><br/><br/><a href="http://2.bp.blogspot.com/_ZmTWLw9SJ0A/TH0eczy7NkI/AAAAAAAAAoA/9Q3dAkxLTL0/s1600/my_favorite_mountain14.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5511594999260329538" src="http://2.bp.blogspot.com/_ZmTWLw9SJ0A/TH0eczy7NkI/AAAAAAAAAoA/9Q3dAkxLTL0/s320/my_favorite_mountain14.jpg" style="cursor: pointer; width: 320px; height: 240px;"/></a><br/><br/><a href="http://1.bp.blogspot.com/_ZmTWLw9SJ0A/TH0ecfqMzMI/AAAAAAAAAn4/5UNxdcesOsE/s1600/my_favorite_mountain12.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5511594993855024322" src="http://1.bp.blogspot.com/_ZmTWLw9SJ0A/TH0ecfqMzMI/AAAAAAAAAn4/5UNxdcesOsE/s320/my_favorite_mountain12.jpg" style="cursor: pointer; width: 320px; height: 240px;"/></a><br/><br/><a href="http://1.bp.blogspot.com/_ZmTWLw9SJ0A/TH0eb7mqfPI/AAAAAAAAAnw/lf0rlkUmkeE/s1600/my_favorite_mountain09.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5511594984176516338" src="http://1.bp.blogspot.com/_ZmTWLw9SJ0A/TH0eb7mqfPI/AAAAAAAAAnw/lf0rlkUmkeE/s320/my_favorite_mountain09.jpg" style="cursor: pointer; width: 320px; height: 240px;"/></a><br/><br/><a href="http://3.bp.blogspot.com/_ZmTWLw9SJ0A/TH0ebfmeVnI/AAAAAAAAAno/3oujcpCLmcY/s1600/my_favorite_mountain03.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5511594976659527282" src="http://3.bp.blogspot.com/_ZmTWLw9SJ0A/TH0ebfmeVnI/AAAAAAAAAno/3oujcpCLmcY/s320/my_favorite_mountain03.jpg" style="cursor: pointer; width: 320px; height: 240px;"/></a><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/20165167-980068485752135862?l=chrismcmahonsblog.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-31T15:31:19Z</updated>
    <published>2010-08-31T15:12:00Z</published>
    <author>
      <name>Chris McMahon</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/16339861008904941703</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-20165167</id>
      <author>
        <name>Chris McMahon</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/16339861008904941703</uri>
      </author>
      <link href="http://chrismcmahonsblog.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/20165167/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://chrismcmahonsblog.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/20165167/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Software testing, scripting, agile development, things in general...</subtitle>
      <title>Chris McMahon's Blog</title>
      <updated>2010-08-31T15:31:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-30</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/_ko7izJAzu0/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-30 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://github.com/cloudant/bigcouch">cloudant's bigcouch at master - GitHub</a><br/>
cluster / distributed CouchDB</li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/_ko7izJAzu0" width="1"/></div>
    </summary>
    <updated>2010-08-31T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-30</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-12467669.post-7460886934653799963</id>
    <link href="http://feedproxy.google.com/~r/jayfields/mjKQ/~3/pDnVYk7HYFY/clojure-using-sets-and-maps-as.html" rel="alternate" type="text/html"/>
    <title>Clojure: Using Sets and Maps as Functions</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Clojure sets and maps are functions.<br/><br/>Since they are functions, you don't need functions to get values out of them. You can use the map or set as the example below shows.<pre>(#{1 2} 1)<br/>&gt; 1<br/><br/>({:a 2 :b 3} :a)<br/>&gt; 2<br/></pre>That's nice, but it's not exactly game changing. However, when you use sets or maps with high order functions you can get a lot of power with a little code.<br/><br/>For example, the following code removes all of the elements of a vector if the element is also in the set.<pre>(def banned #{"Steve" "Michael"})<br/>(def guest-list ["Brian" "Josh" "Steve"])<br/><br/>(remove banned guest-list)<br/>&gt; ("Brian" "Josh")</pre>I'm a big fan of using sets in the way described above, but I don't often find myself using maps in the same way. The following code works, but I rarely use maps as predicates.<pre>(def banned {"Steve" [] "Michael" []})<br/>(def guest-list ["Brian" "Josh" "Steve"])<br/><br/>(remove banned guest-list)<br/>&gt; ("Brian" "Josh")</pre>However, yesterday I needed to compare two maps and get the list of ids in the second map where the quantities didn't match the quantities in the first map. I started by using filter and defining a function that checks if the quantities are not equal. The following code shows solving the problem with that approach.<pre>; key/value pairs representing order-id and order-quantity<br/>(def map1 {1 44 2 33})<br/>(def map2 {1 55 2 33})<br/><br/>(defn not=quantities [[id qty]] (not= (map1 id) qty))<br/>(keys (filter not=quantities map2))<br/>&gt; (1)<br/></pre>However, since you can use maps as filter functions you can also solve the problem by merging the maps with <code>not=</code> and filtering by the result. The following code shows an example of merging and using the result as the predicate.<pre>; key/value pairs representing order-id and order-quantity<br/>(def map1 {1 44 2 33})<br/>(def map2 {1 55 2 33})<br/><br/>(filter (merge-with not= map1 map2) (keys map2))<br/>&gt; (1)</pre>I don't often find myself using maps as predicates, but in certain cases it's exactly what I need.<div class="blogger-post-footer"><br/><a href="http://www.jayfields.com">© Jay Fields - www.jayfields.com</a><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/12467669-7460886934653799963?l=blog.jayfields.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/jayfields/mjKQ/~4/pDnVYk7HYFY" width="1"/></div>
    </summary>
    <updated>2010-08-31T02:52:00Z</updated>
    <category scheme="http://www.blogger.com/atom/ns#" term="maps"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="clojure"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="sets"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="functions"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jayfields.com/2010/08/clojure-using-sets-and-maps-as.html</feedburner:origlink>
    <author>
      <name>Jay Fields</name>
      <email>blogger@jayfields.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-12467669</id>
      <author>
        <name>Jay Fields</name>
        <email>blogger@jayfields.com</email>
      </author>
      <link href="http://blog.jayfields.com/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jayfields/mjKQ" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>experiences in software development</subtitle>
      <title>Jay Fields' Thoughts</title>
      <updated>2010-09-02T11:06:50Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.dannorth.net/?p=431</id>
    <link href="http://blog.dannorth.net/2010/08/30/introducing-deliberate-discovery/" rel="alternate" type="text/html"/>
    <title>tastapod</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Last year I wrote about how we are doing planning all wrong, or rather, how we seem to focus on the wrong things when we do planning. We obsess about stories and story points and estimation, because that’s what we’ve been taught to do. It reminds me of the story about a man who comes [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=blog.dannorth.net&amp;blog=11322506&amp;post=431&amp;subd=dannorthnet&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Last year I wrote about <a href="http://blog.dannorth.net/2009/07/01/the-perils-of-estimation/">how we are doing planning all wrong</a>, or rather, how we seem to focus on the wrong things when we do planning. We obsess about stories and story points and estimation, because that’s what we’ve been taught to do. It reminds me of the story about a man who comes across a drunk standing under a street lamp at night time, staring at the floor. The drunk says he’s looking for his lost keys, and the man says: well they are obviously not here under the lamp or we would see them. No, replies the drunk, I dropped them over there, but it’s dark over there so I decided to search over here instead.</p>
<p>Our street lamp is the Planning Game, which involves writing Stories and Estimating, using Planning Poker or other Estimation Techniques (everything in caps appears in the Agile Literature, and so has been deemed Official).</p>
<p>I suggested we are failing to use the planning time effectively, and that we should be devoting the time to finding out as much useful stuff as we can while everyone was in the same room, and I called this <em>Deliberate Discovery</em>. <a href="http://www.dancingmango.com/blog">Marc McNeill</a> commented: <em>“Deliberate discovery. As opposed to accidental discovery? Or any other sort of discovery? Why add the extra word ‘deliberate’?”</em></p>
<h3>Accidental discovery</h3>
<p>If you do something a bunch of times, you will learn more and more about it. Probably. Potentially. Maybe. Ok, if you do something a bunch of times and <em>unexpected things happen</em> you will learn. If you just do the same thing over and over again, you will probably get better at performing that sequence, but you won’t learn anything new. The pragmatic programmers describe this as the difference between ten years’ experience vs. one year’s experience ten times.</p>
<p>Learning comes from experiencing the unexpected. As the saying goes: “Good judgement comes from experience. Experience comes from bad judgement.” When you receive an unfamiliar outcome you have to alter your model of the world to accommodate it (or dismiss the encounter as a fluke and only seek out reinforcing data – this is known as <em>confirmation bias</em> and is a great way to not learn). In Zen teaching this moment of enlightenment – of evolving your model of the world – is known as <em>satori</em>, and Zen students strive to induce these moments of satori by the use of <em>koans</em>. Similarly, the Dreyfus model of skills acquisition describes an Advanced Beginner as someone who is starting to put rote-learned rules into context – understanding where they do and don’t apply. This again can only happen when the learner experiences situations outside what they already know (which is why artificially constraining Best Practices can stifle learning).</p>
<p>This implies the student can accelerate their learning by actively seeking out encounters where they are likely to learn. This is the difference between accidental and deliberate discovery.</p>
<h3>“Learning is the constraint”</h3>
<p><a href="http://lizkeogh.com">Liz Keogh</a> told me about a thought experiment she came across recently. Think of a recent significant project or piece of work your team completed (ideally over a period of months). How long did it take, end to end, inception to delivery? Now imagine you were to do the same project over again, with the same team, the same organisational constraints, the same everything, except your team would already know everything they learned during the project. How long would it take you the second time, all the way through? Stop now and try it.</p>
<p>It turned out answers in the order of 1/2 to 1/4 the time to repeat the project were not uncommon. This led to the conclusion that “Learning is the constraint”.</p>
<p><em>Edit: Liz tells me the thought experiment and quote originated with Amr Elssamadisy and she heard about it via César Idrovo.</em></p>
<p>If we assume the only difference is that the second time round you have learned about the problem, this would suggest that the biggest impediment to your throughput was <em>what you didn’t know</em>. That’s not to say you spent all the extra time busily learning stuff. Heck that’s <em>fun</em> and what’s more it’s even useful! More typically you probably spent it thrashing around trying to find a way forwards, or mired in meetings where you were trying to figure out the other guy’s agenda so you could get past another roadblock, or going down a path that was always destined to be a dead end had you only known it. Or trying to work out for the umpteenth time how stupid Java NIO sockets work. So it’s not really learning that’s the constraint – it’s ignorance. More accurately, it’s ignorance about specific aspects of the problem at hand. In other words:</p>
<blockquote><p><em> Ignorance is the single greatest impediment to throughput.</em></p></blockquote>
<h3>Ignorance is multivariate</h3>
<p>Ignorance applies along multiple axes. You can be ignorant of the particular technologies you are using, ignorant of the breadth of technology options available to you, ignorant of the domain, ignorant of the ways in which you could address the problem or opportunity, ignorant of a better way of articulating the problem – a better model – that would make the solution obvious, ignorant of the people in the team – their aspirations or fears, their motivation, their relationships with one another and out into to the wider organisation, ignorant of organisational constraints, ignorant of third party integration risks, ignorant of who are the people you should be building relationships with, ignorant of the delivery methodology, ignorant of the culture of the organisation. I’m just scratching the surface here – I’m sure you can imagine many other factors that could affect our ability to deliver and about which we will be more or less ignorant.</p>
<p>More insidiously, you are usually ignorant of how ignorant you are, and rather than making you more wary, this <em>second-order ignorance</em> actually makes you more likely to rush in like the proverbial fool. This is beautifully summed up in <a href="http://bash.org/?364782">this quote</a> from IRC snippets site, bash.org:</p>
<blockquote>
<pre>&lt;Pahalial&gt; "ignorance more frequently begets confidence than does knowledge" - Charles Darwin
&lt;kionix&gt; wtf? begets isn't a word. quit trying to make up words [...expletive...]</pre>
</blockquote>
<h3>Discovery is non-linear and disjoint</h3>
<p>Now, think back to that project you just completed. Did your ignorance decrease consistently and linearly along all these axes? It’s fairly unlikely. What probably happened was that at various points – some more memorable than others – you had sudden insights or realisations, that either came to you or were thrust upon you by circumstance. Chances are that a lot of this unplanned learning happened fairly late in the day, accompanied by much disbelief, anger, and probably all the other <a href="http://en.wikipedia.org/wiki/K%C3%BCbler-Ross_model">stages of grieving</a> too, as you come to terms with the death of your strongly-held model of How Things Ought To Be.</p>
<p>So for any single factor, you start the project with a particular level of ignorance, and it decreases in “bumps” – in a disjoint fashion – with each learning episode, until at the end of the project it is at another, lower level. Of course many of these factors are interrelated, so in a single episode you will typically learn about several different things – your ignorance of various factors will decrease by different amounts simultaneously. In reality much of this learning is at the whim of the Project Gods, and largely out of your control. How could you have possibly guessed that the third party API would be <em>that</em> different from the spec? Who knew Dave’s wife would choose <em>that</em> weekend to have the baby?</p>
<p>Well actually you could have. Ok, you couldn’t have known that <em>those</em> things would happen, but you would be insane – or rather “normal” – not to think <em>something</em> would happen, and this is the crux of Deliberate Discovery.</p>
<h3>What if you assume something bad <em>will</em> happen?</h3>
<p>We have a built-in mechanism for mindless optimism. It’s called <em>attribution bias</em>, and we use it to protect our fragile egos from the big bad reality out there. You can read more in Cordelia Fine’s fascinating book <em><a href="http://www.cordeliafine.com/a_mind_of_its_own.html">A Mind of Its Own</a></em>, but in short, it means we assume when bad things happen to other people, they probably deserve it. They screwed up, or they didn’t plan ahead, or, well, any number of reasons. But when bad things happen to <em>us</em>, well that’s different. We couldn’t possibly have seen <em>that</em> coming! That could have happened to <em>anyone</em>. Poor us.</p>
<p>We are susceptible to attribution bias when we estimate (as <a href="http://lindarising.org">Linda Rising</a> has pointed out), and when we assess risk, and we are therefore constantly amazed – and let’s face it, a little disappointed – when bad things happen on our projects. Here’s another thought experiment: What if instead of hoping nothing bad will happen this time, you assumed the following as fact:</p>
<ul>
<li>Several (pick a number) Unpredictable Bad Things will happen during your project.</li>
<li>You <em>cannot</em> know in advance what those Bad Things will be. That’s what Unpredictable means.</li>
<li>The Bad Things will materially impact delivery. That’s what Bad means.</li>
</ul>
<p>How would this affect your approach to the project?</p>
<h3>Finally, deliberate discovery</h3>
<p>So, I think we’ve been looking in the wrong place. Methodologies, practises and patterns for delivery are all well and good, but they don’t take into account the single biggest limiting factor to successful delivery. Let’s assume that during the life of the project our ignorance will reduce across a number of axes that are relevant to our project. Let’s also assume that ignorance of certain factors <em>right now</em> are the things currently limiting us the most. Let us further assume that we probably don’t know which ones those magic enabling factors are: we are second-order ignorant of which factors are currently the most constraining. Once we realise what these are, we can apply methodology to consistently move forwards, but until we do, we’re shooting in the dark.</p>
<p>Surely it makes sense to invest effort in firstly discovering which aspects of delivery we are most critically ignorant of (i.e. both where we are ignorant and where that ignorance is hampering throughput), and further to invest in reducing that ignorance – deliberately discovering enough to relieve the constraint and allow us to proceed. And all the way through the project, day by day, we should be trying to identify where and how ignorance is hampering us. Ideally we want to create as steep a descent as possible for each axis on the curve of ignorance, so we deliberately reduce the degree to which we are constrained by that ignorance, rather than being a victim of circumstance.</p>
<p>This is a skill, and as such is subject to the Dreyfus model. Which means that initially we’ll be rubbish at it. Then we’ll start to figure out <em>how</em> we are rubbish at it, and work on that. Then we’ll figure out some Best Pracises (I’m sorry – it’s inevitable. That’s what Competent people do to “protect” Advanced Beginners), and, hopefully shortly after, figure out ways to subvert those Best Practises to continue getting work done. The hardest part is going to be the damage to our egos as we realise just how systemically poor we are at delivering projects, and how we’ve been staring <em>straight past</em> the problem, because our methodology is always under the street lamp, and we feel safe under the street lamp.</p>
<h3>What next?</h3>
<p>This then comes back to my original premise last year, which is that during an inception, when we are most ignorant about most aspects of the project, the best use we can possibly make of the time available is to attempt to identify and reduce our ignorance across all the axes we can think of. (Arguably one of the first exercises should be to take a first stab at identifying these axes, and trying to figure out just how ignorant we are. How’s that for an exercise in humility!) Sure, if we stick to the traditional Agile planning model, we will do <em>some</em> discovery as we break down epics into features into stories into scenarios, but how much more could we accomplish if we put that to one side and instead focused on the real deal?</p>
<p><a href="http://www.domainlanguage.com/">Domain-driven design</a> inventor Eric Evans describes up-front analysis as “locking in our ignorance.” He’s got a point, and it doesn’t just apply to old-school requirements analysis. The death-by-stories planning exercises I’ve seen on many Agile projects bear testament to the same problem.</p>
<p>I hope this has given you an idea of where my head has been at. There is much more to say about deliberate discovery. Think about applying the principle to learning a new language, or picking up a new technology, or a new domain. What could you do to identify and reduce your ignorance most rapidly? Why are rapid-feedback teams so much more successful than long cycle teams? How can we measure ignorance? I’ll be writing more on this topic over the coming weeks and months, and I’ll be talking about Deliberate Discovery at <a href="http://qconsf.com">QCon, San Francisco</a> in November.</p>
<p><em>Thanks to Liz Keogh, Lindsay North, Joe Walnes, Chris Matts, Steve Hayes, Kevlin Henney and numerous others for helping to grow the ideas in this article. And special thanks to Glenn Vanderburg and Mike Nygard for the conversation at JAOO Australia about a unit of ignorance. (That will have to wait for a future article.)</em></p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dannorthnet.wordpress.com/431/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dannorthnet.wordpress.com/431/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dannorthnet.wordpress.com/431/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dannorthnet.wordpress.com/431/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dannorthnet.wordpress.com/431/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dannorthnet.wordpress.com/431/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/dannorthnet.wordpress.com/431/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dannorthnet.wordpress.com/431/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=blog.dannorth.net&amp;blog=11322506&amp;post=431&amp;subd=dannorthnet&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2010-08-30T18:31:52Z</updated>
    <category term="Uncategorized"/>
    <category term="learning"/>
    <author>
      <name>Dan North</name>
    </author>
    <source>
      <id>http://blog.dannorth.net</id>
      <logo>http://0.gravatar.com/blavatar/ad45a8cc49d496b40ec481454b492108?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://blog.dannorth.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://blog.dannorth.net" rel="alternate" type="text/html"/>
      <link href="http://blog.dannorth.net/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://blog.dannorth.net/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>It's all behaviour</subtitle>
      <title>DanNorth.net</title>
      <updated>2010-09-02T16:07:06Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://allaland.wordpress.com/?p=274</id>
    <link href="http://allaland.wordpress.com/2010/08/29/usability-yeah-we-got-that/" rel="alternate" type="text/html"/>
    <title>product triangle</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The sentiment in the UX community is pretty clear, that usability thing, yeah we got that. For example, Dana Chisnell recently wrote an article for UX Magazine called Beyond Frustration: Three Levels of Happy Design, while Chris Fahey talked about The Human Interface at the IA Summit, and let’s not forget Kathy Sierra’s thoughts on [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=allaland.wordpress.com&amp;blog=2767370&amp;post=274&amp;subd=allaland&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The sentiment in the UX community is pretty clear, that usability thing, yeah we got that. For example, Dana Chisnell recently wrote an article for UX Magazine called <a href="http://uxmag.com/design/beyond-frustration-three-levels-of-happy-design" target="_blank">Beyond Frustration: Three Levels of Happy Design</a>, while Chris Fahey talked about <a href="http://www.ixda.org/resources/christopher-fahey-human-interface-orwhy-products-are-people-too" target="_blank">The Human Interface</a> at the IA Summit, and let’s not forget Kathy Sierra’s thoughts on <a href="http://headrush.typepad.com/creating_passionate_users/2007/01/what_comes_afte.html" target="_blank">What comes after usability?</a></p>
<p>So what does come after usability? This is my initial stab at the answer. I thought that perhaps I should approach it from the psychological point of view by using <a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs" target="_blank">Maslow’s hierarchy of needs</a>, we are designing for people after all. Here is the (draft) diagram that I came up with:</p>
<p style="text-align: center;"><a href="http://allaland.files.wordpress.com/2010/08/triangle.png"><img alt="" class="size-medium wp-image-256 aligncenter" height="264" src="http://allaland.files.wordpress.com/2010/08/triangle.png?w=300&amp;h=264" title="product triangle" width="300"/></a></p>
<p style="text-align: left;">At the base is <strong>functionality</strong> – the product must be able to perform a function, otherwise everything else is meaningless.</p>
<p style="text-align: left;">Then, <strong>usability</strong> – people should be able to learn/understand how to perform the function</p>
<p style="text-align: left;"><strong>Sociality</strong> – here is where things get murky, according Maslow, the third level in the hierarchy is love/belonging. Perhaps a product should provide a sense of belonging. This does not necessarily mean embedding facebook into every system, it could just be aligning with a brand (such as Apple), or surfacing interesting aggregate behaviors.</p>
<p style="text-align: left;"><strong>Self-Fulfillment</strong> – I am not sure if perhaps self-fulfillment comes before or after sociality, in some ways they are a bit linked to each other, so the categories aren’t so clear cut. Here I am talking about truly helping the end-user kick ass (channeling Kathy Sierra here), by enabling flow, happiness, personal growth, self-awareness, or behavioral change. In some respects, this is what it truly means to create a place where a user can have an <em>experience</em>.</p>
<p style="text-align: left;"><strong>Generativity</strong> – At this point the user feels a sense of ownership and has internalized the value of the product. Its important to provide a feedback channel that helps generate new ideas and excitement, and enables the product an the user to continue to evolve together. This is what it truly means to be viral.</p>
<p style="text-align: left;">I don’t have all of this worked out in my head yet, so I know that I will be revisiting this concept again in the future. Thoughts?</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/allaland.wordpress.com/274/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/allaland.wordpress.com/274/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/allaland.wordpress.com/274/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/allaland.wordpress.com/274/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/allaland.wordpress.com/274/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/allaland.wordpress.com/274/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/allaland.wordpress.com/274/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/allaland.wordpress.com/274/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=allaland.wordpress.com&amp;blog=2767370&amp;post=274&amp;subd=allaland&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2010-08-30T02:58:08Z</updated>
    <category term="ux"/>
    <author>
      <name>Alla</name>
    </author>
    <source>
      <id>http://allaland.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/d8b632e3d5e3545edd44c209bef1efc8?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://allaland.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://allaland.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://allaland.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://allaland.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>A thoughtful journey to the center of design</subtitle>
      <title>Allaland</title>
      <updated>2010-09-02T16:05:28Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-1042801964488488185.post-9058791524994487093</id>
    <link href="http://jakescruggs.blogspot.com/feeds/9058791524994487093/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=9058791524994487093" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default/9058791524994487093?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default/9058791524994487093?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://jakescruggs.blogspot.com/2010/08/ruby-kaigi-2010-day-3.html" rel="alternate" type="text/html"/>
    <title>Ruby Kaigi 2010 Day 3</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div>Last day of Ruby Kaigi! Sad to see it go, it's been a great conference. As per usual Tweets are in bulleted italics and the rest is after the fact commentary.</div><div><br/></div><div>First I've got to show you the commemorative fans they were handing out:</div><br/><br/><a href="http://www.flickr.com/photos/jakescruggs/4934685088/" title="It's the creators of Ruby and PHP by jake_scruggs, on Flickr"><img alt="It's the creators of Ruby and PHP" height="500" src="http://farm5.static.flickr.com/4095/4934685088_0308fb60c3.jpg" width="375"/></a><br/><br/><div><br/></div><div>It's Matz and... Someone else (sorry if it's obvious - I don't know).  And of course they are programing in the bath.</div><div><ul><li><i>BigDecimal: You can handle numbers as large as can fit into memory as opposed to the IEEE double #rubykaigi</i></li><li><i>BigMath is the Math module for BigDecimal #rubykaigi</i></li><li><i>Lots of different rounding modes in BigDecimal #rubykaigi</i></li><li><i>BigDecimal.mode is global per process - not thread safe #rubykaigi</i></li><li><i>So BigDecimal is Fiber unsafe #rubykaigi</i></li></ul></div><div>Bummer.</div><div><ul><li><i>.@mrkn implemented a solution storing mode in thread local #rubykaigi</i></li></ul></div><div>Oh good.  Wait, is that in 1.9.2 or trunk. I'd have to be in 1.9.2 right? To the Google! ... Yep, seems like it made it in: <a href="http://redmine.ruby-lang.org/issues/show/3285">http://redmine.ruby-lang.org/issues/show/3285</a></div><div><ul><li><i>You can now change modes in a block (added to trunk yesterday) #rubykaigi</i></li><li><i>Effective digits/ Significant digits determines which digits to keep and which to round off #rubykaigi</i></li><li><i>BigDecimals don't know their own effective digits #rubykaigi</i></li></ul></div><div>But I think the point of talking about sig figs was that it's coming soonish in Ruby. 1.9.3?</div><div><ul><li><i>It is dangerous to mix floats and BigDecimals #rubykaigi</i></li><li><i>BigDecimals can't convert from rational, integer, or float. just strings #rubykaigi</i></li><li><i>And you can't do BigDecimal(BigDecimal) !! #rubykaigi</i></li></ul></div><div>That is one crappy interface. Taking in only strings is frustrating and weird. How did this happen?</div><div><ul><li><i>Now a preview of the future of BigDecimal #rubykaigi</i></li><li><i>No library for irrational numbers in Ruby #rubykaigi</i></li><li><i>Perhaps we can represent irrational numbers as algorithms and on convert when needed. #rubykaigi</i></li><li><i>BigDecimals don't have real significant digits implemented right now. #rubykaigi</i></li><li><i>The issue of BigDecimal not being able to handle anything other than a string as input will be fixed as it is a bug #rubykaigi</i></li></ul></div><div>The irrational numbers thing sounds pretty cool.  Since I mostly sling around strings for my day job I don't know that I'll ever use it.  But purely for Ruby pride I like to see ruby challenge Python's rising dominance in the sciences and maths.</div><div><ul><li><i>I really don't like the lack of travel time between session. You should have at least 5 minutes to change sessions. #rubykaigi</i></li></ul></div><div>Look, this has been a great conference and any slights I've tended to overlook because they've really done a heroic job of keeping the admission price down but that lack of a passing period is just...  Well I don't see why they did it.  Just having the time as a buffer in case talks run over is reason alone.  Moreover, no passing period traps people in sessions that they'd rather not be in and restricts choice.</div><div><ul><li><i>Apparently there is a lot of chatter in IRC by ruby commiters that NArray should be added to strd lib. #rubykaigi</i></li><li><i>NArray is 28x faster and uses 8x less characters in 1.9.2 #rubykaigi</i></li><li><i>NArray is faster than what? Array, I assume, but I may not be following the translation correctly. #rubykaigi</i></li></ul></div><div>Translation is volunteer and best-effort so it adds some challenge to attending sessions in a foreign language. So if I make any mistakes in this here blog, that's what I'm blaming it on.</div><div><ul><li><i>Pwrake is parallel distributed Rake - being developed here in Tsukuba. #rubykaigi</i></li></ul></div><div>Just a little tidbit dropped at the end of the NArray presentation -- sounds pretty cool.  Masahiro Tanaka is using it drive his workflow in his scientific research.</div><div><ul><li><i>yarv2llvm tries to speed up Ruby by implementing type inference (yarv is the vm for 1.9x) #rubykaigi</i></li><li><i>There are times in Ruby when type can not be inferred and in those cases yarv2llvm is often slower than Ruby 1.9x #rubykaigi</i></li><li><i>Fixnum overflow to BigNum is one of the hardest problems to solve #rubykaigi</i></li><li><i>Btw, I think the title of this talk: "How Did Yarv2llvm Fail" is wonderful. Way to keep everything above board. #rubykaigi</i></li></ul><div>Great talk and very honest. The type inference thing looks promising but there are a couple of tough hurdles to clear.  Maybe some day.  Until then there's always <a href="http://github.com/headius/mirah">Mirah</a>.</div><ul><li><i>Ruby AOT complier is "mostly compatible" with Ruby 1.9 #rubykaigi</i></li><li><i>AOT == "Ahead of time"</i></li><li><i>Ruby AOT compiler is passing 7847 of 7850 Ruby Spec tests as of now. #rubykaigi</i></li><li><i>On average Ruby AOT compiler is 3.5x faster than 1.9 for common benchmarks #rubykaigi</i></li></ul></div><div>Cool, let's all move to Ruby AOT!</div><div><ul><li><i>It doesn't fair quite so well in the real world Ex: Rails. Slightly slower than 1.9 #rubykaigi</i></li><li><i>Something about cache misses makes it slower #rubykaigi</i></li><li><i>The Ruby AOT compiler team wants to reduce the generated code size to increase speed. #rubykaigi</i></li><li><i>Rails can be compiled in 77 min and size of compiled code is 92MB with Ruby AOT #rubykaigi</i></li></ul></div><div>Oh.  Never mind. Plus, compiling.  Boo. Hiss.</div><div><ul><li><i>This memory profiler's gui looks amazing! #rubykaigi</i></li><li><i>Seriously, this is the sexiest profiler ever #rubykaigi</i></li><li><i>Can attach to running Ruby programs from another machine #rubykaigi</i></li><li><i>Designed to have as small as possible impact and be easy to use #rubykaigi</i></li></ul></div><div>I gotta tell ya the audience was chomping at the bit to get a hold of this profiler.  You can run it in production for christ's sake!  And the GUI is to die for.</div><div><ul><li><i>Not available yet!?! #rubykaigi</i></li><li><i>Needs to get patch accepted into ruby core - maybe in 1.9.3. RATS! #rubykaigi</i></li></ul></div><div>Very cruel of Tetsu Soh not to mention this up front.  I'm sure it was an oversight but everyone was crazy disappointed.  Still this was one of the best talks of the conf.  Tetsu Soh is one to watch.</div><div><ul><li><i>Dear Ruby Core please, please, please, please, please, please, please, please accept Tetsu Soh memory profiler patch #rubykaigi</i></li></ul></div><div>Indeed. I'm famous (on the internet (in one corner)) so you should listen to me.</div><div><ul><li><i>Lots of requests to publish Tetsu Soh's memory profiler on Github. I agree! #rubykaigi</i></li><li><i>Automatic sliding doors in Japan trigger much latter than Americans would expect leading to a lot of stopping and hand waving</i></li></ul></div><div>I'm not the only one who noticed this so I'm not crazy.</div><div><div><ul><li><i>More awesome techno in the #rubykaigi main hall. I want, nay, need the playlist.</i></li></ul></div><div>Please post it on the 'Goodies' section of the Ruby Kaigi site.  Or tweet about it.  Something.</div><div><ul><li><i>Shay Friedman has spent the first five minutes of his talk apologizing for being associated with Microsoft. Stop. #rubykaigi</i>  </li></ul></div><div>There was this weird hostile vibe coming from Shay.  I felt like he hated us for liking Apple products.  The weird thing is that there are a lot fewer Apple computers here than at a normal Ruby Conf.  Maybe he thought we were all Microsoft haters and so he might as well fire first.  Seemed like a mistake.</div><div><ul><li><i>Just saw a nice hello world creating windows and dialog boxes in IronRuby #rubykaigi</i></li><li><i>IronRuby currently passes 85% of Ruby Spec. #rubykaigi</i></li><li><i>IronRuby 1.0 is 1.8.6 compatible. 1.1 (coming soon) will be 1.9.2 compatible. #rubykaigi</i></li><li><i>Windows Presentation Foundation's view templates are written in xaml which is like html. #rubykaigi</i></li></ul></div><div>Another markup language because we needed more. I feel like the IronRuby team really needs a win. They've been the slowest progressing Ruby VM for a long time now.</div><div><ul><li><i>&lt;script language="ruby"&gt; Whaa? Gestalt hides a hidden bit of Silverlight in the page so you can replace Javascript with Ruby. #rubykaigi</i></li></ul><div>Pretty neat trick that. Of course it means making your site dependent on silverlight. No worse than depending on Flash I guess.</div></div></div><div><div><ul><li><i>IronRuby.Rack is Rack implementation on ASP. Currently in beta. #rubykaigi</i></li></ul></div><div>It's all coming along, I'd just like to see something working at this point in its life.</div><div><ul><li><i>If key is symbol then only one instance - less object creation. Which is why everyone uses symbols. Or because everyone else does #rubykaigi</i></li></ul></div><div>So did you know why everyone uses symbols?  Or did you just do it because that's the convention. Yeah, me too but then I learned. I'm not going to say how long ago that was.</div><div><ul><li><i>Presenter's computer went down and it's taking forever to reboot. Stupid Mac. #rubykaigi</i></li></ul></div><div>That's one of those rough moments where you really feel bad for the presentor. But he handled it like a champ -- continuing the presentation while he waited for his machine to boot back up. Well done. I wish I got more out of the talk but it was one of those inspirational talks that are hard to translate.  The Japanese speaking audience seemed to love it.</div><div><ul><li><i>Please use the overburdened network to download the english version of the slides. Umm... What? #rubykaigi</i></li></ul></div></div><div>Huh.  Why did that seem like a good idea. Since when does asking a room full of people to download something all at once ever work. And yet, it seems it happens once a conference. Repeat after me: Never ever depend on the network at a conference.</div><div><br/></div><div>Funny story time.  All through the conference I spent a lot of time staring at the IRC screens on either side of the stage where the translations happen.  But since it's just IRC, anyone can join the room.  There was this one guy who posted A LOT and everyone of the posts seemed to be either:</div><div>888888888888</div><div>or</div><div>wwwwwwwwww</div><div><br/></div><div>I later found out that 888888 means clapping and wwwww means laughter. OK but stop cluttering  up the screen that I'm trying to read translations off of.  Then I found out who sora_h was: He's 14 and his name is Shota Fukumori.  He got up and gave an entertaining lightning talk.  Turns out he's a Ruby commiter so he's got that on me.</div><br/><br/><a href="http://www.flickr.com/photos/jakescruggs/4934686542/" title="Young programmer by jake_scruggs, on Flickr"><img alt="Young programmer" height="375" src="http://farm5.static.flickr.com/4080/4934686542_10cf9b178b.jpg" width="500"/></a><br/><br/><div><br/></div><div>And, all of a sudden, it was time for the final keynote by Chad Fowler.  He gave a talk about how to live a remarkable life and it was good stuff.</div><div><div><ul><li><i>The two things that are necessary to live a remarkable life are: To have intention and a system of realizing that intention #rubykaigi</i></li><li><i>Living intentionally means being mindful of your actions. It's easy to coast through life. #rubykaigi</i></li><li><i>"My co-workers laughed at me when I learned Ruby" - Chad Fowler #rubykaigi</i></li><li><i>"You don't want to be in a situation where you are competing on price" - Chad Fowler #rubykaigi</i></li><li><i>Programming Cobol is like working in a hospice. There's a market for that. - Chad Fowler #rubykaigi</i></li><li><i>"Always be the worst musician in whatever band you're in" Pat Matheney #rubykaigi</i></li><li><i>"If you're playing things that sound good then you're not practicing" lesson from music that applies to programming #rubykaigi</i></li><li><i>"I needed a project that was useless" - Chad Fowler #rubykaigi</i></li><li><i>"Was today better than yesterday?" All you have to do is get a little better every day #rubykaigi</i></li><li><i>"Passion is a resource that you have to conserve" - Chad Fowler #rubykaigi</i></li></ul></div><div>Lots of gems in there.</div><div><ul><li><i>RubyKaigi 2011 will be in July and in Tokyo. #rubykaigi</i></li></ul></div></div><div>There was something about the theme being "The Last Ruby Kaigi" but I think it was sort of a joke making fun of some guy who posted a rant about how the Ruby Kaigis need to end.  I didn't have enough background to get it.</div><div><br/></div><div>Oh, I forgot to talk about the guy hawking "The Last Google Wave Book Ever Published."  It seems he had been working on a Google Wave book and it was printed on the same day Google announced the end of wave.  His response?  To shamelessly promote the book at Ruby Kaigi in a lightning talk, at some sort of hallway session (with 30 people gathered around), and pretty much everywhere else.  And I actually saw some people carrying the book around.  Did they buy it?  Who knows -- his positive personality was so powerful I wouldn't be surprised if they did.</div><div><br/></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4937081377/" title="The Last Google Wave book ever published by jake_scruggs, on Flickr"><img alt="The Last Google Wave book ever published" height="375" src="http://farm5.static.flickr.com/4116/4937081377_5fc3029114.jpg" width="500"/></a><br/><br/><div><br/></div><div>Ruby Kaigi was an excellent time.  I thought it might be crazy intimidating but everyone was super nice and there were enough english speakers so that I could always get my ideas across.  Go if you have the chance.</div><div><br/></div><div>Also, check out my every growing set of Ruby Kaigi photos at Flickr:</div><div><a href="http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/">http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/</a></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/1042801964488488185-9058791524994487093?l=jakescruggs.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-29T11:59:22Z</updated>
    <published>2010-08-29T04:09:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="RubyKaigi2010"/>
    <author>
      <name>Jake Scruggs</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/16274380203959781950</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-1042801964488488185</id>
      <author>
        <name>Jake Scruggs</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/16274380203959781950</uri>
      </author>
      <link href="http://jakescruggs.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://jakescruggs.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/JakeScruggs" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>writes ruby/wears crazy shirts</subtitle>
      <title>Jake Scruggs</title>
      <updated>2010-08-30T21:48:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://grahamis.com/blog/?p=285</id>
    <link href="http://feedproxy.google.com/~r/VirtualSurreality/~3/Xeo0vXd5wxE/" rel="alternate" type="text/html"/>
    <title>Ruby5 podcast</title>
    <summary>You can hear my dulcet tones at Ruby5 eposide 106 hosted with Jon “Lark” Larkowski. It was great fun – he made me do the accent at the beginning and we had a lot of laughs over the “it’s gonna rain” part. Hope you find it of use and if you have some Ruby news, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrahamis.com%2Fblog%2F2010%2F08%2F28%2Fruby5-podcast%2F"><br/>
				<img height="61" src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrahamis.com%2Fblog%2F2010%2F08%2F28%2Fruby5-podcast%2F&amp;source=delitescere&amp;style=normal&amp;service=bit.ly" width="50"/><br/>
			</a>
		</div>
<p>You can hear my dulcet tones at <a href="http://ruby5.envylabs.com/episodes/108-episode-106-august-27-2010">Ruby5 eposide 106</a> hosted with Jon “<a href="http://l4rk.com/">Lark</a>” Larkowski.</p>
<p>It was great fun – he <em>made</em> me do the accent at the beginning and we had a lot of laughs over the “it’s gonna rain” part.</p>
<p>Hope you find it of use and if you have some Ruby news, please do <a href="mailto:lark@hashrocket.com?Subject=Ruby5+story">submit stories to Lark</a>.</p>
<img height="1" src="http://feeds.feedburner.com/~r/VirtualSurreality/~4/Xeo0vXd5wxE" width="1"/></div>
    </content>
    <updated>2010-08-28T23:19:39Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://grahamis.com/blog/2010/08/28/ruby5-podcast/</feedburner:origlink>
    <author>
      <name>Josh Graham</name>
    </author>
    <source>
      <id>http://grahamis.com/blog</id>
      <link href="http://grahamis.com/blog" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/VirtualSurreality" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>It's too real to be true</subtitle>
      <title>Virtual Surreality</title>
      <updated>2010-08-29T00:06:14Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-1042801964488488185.post-4706721565901105774</id>
    <link href="http://jakescruggs.blogspot.com/feeds/4706721565901105774/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4706721565901105774" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4706721565901105774?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4706721565901105774?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://jakescruggs.blogspot.com/2010/08/ruby-kaigi-2010-day-2.html" rel="alternate" type="text/html"/>
    <title>Ruby Kaigi 2010 Day 2</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Holy crap am I tired.  It's been a long awesome day. It started out with some excitement:<div><div><ul><li><i>Just found out I have an hour time slot when all I prepared was 30 minutes. Ok, time to write some more. #rubykaigi</i></li><li><i>Panic! Maybe I'll talk about metric_fu a bit. #rubykaigi</i></li></ul></div><div>I must have looked at that schedule 20 times and never realized that I had an hour slot.  Everyone else had 30 minutes so I thought I did too.</div><div><ul><li><i>Attendees of "The Importance and Implementation of Speedy Tests" will also get "Metrics Based Refactoring" at no additional cost! #rubykaigi</i></li></ul></div><div>I did something I almost never do:  Look at crisis as an opportunity (crisi-tunity).  I had to write "Metrics Based Refactoring" anyway for Windy City Rails so why not write it now.  In less than 4 hours.  While watching my friends present at a conference.  Looking over those sentences now I can't believe I didn't freak out.</div><div><ul><li><i>Ted Han used publicly available data to settle reviewing bais accusations against "The Edge" of hating the PS3 #rubykaigi</i></li><li><i>Turns out there was no bais. Math to the rescue! #rubykaigi</i></li><li><i>bais? bias? baise? no idea.</i></li></ul></div><div>You are probably not surprised to find out that I can't spell.  Even Eito Katagiri, who did a wonderful job translating my slides, found a bunch of spelling errors and English is not his first language.</div><div><ul><li><i>I just pulled out a table in the main hall and the table police where all over me. My mistake. Sorry. #rubykaigi</i></li></ul></div><div>There were announcements everywhere about not doing this and yet I did.  In my defense: I'm an idiot.</div><div><ul><li><i>They're giving out an award to the person who committed most to Ruby 1.9.2: Yusuke Endoh #rubykaigi</i></li></ul></div><div>A very nice gesture.  Lots of class here at Ruby Kaigi.</div><div><br/></div><div>Time for Matz's keynote!</div><div><br/></div><div><ul><li><i>Matz is talking about Ruby 2.0... again. #rubykaigi</i></li></ul></div><div>This topic is a staple of Matz's speaking career.  I think the first time I saw him talk, years ago, he was talking about Ruby 2.0. Someday...</div><div><br/></div><div><ul><li><i>"Right now ruby is just good enough" - Matz #rubykaigi</i></li><li><i>Matz hates local variable propagation (the lack thereof) but no one else seems to care so he's abandoning it. #rubykaigi</i></li><li><i>Ruby's private is not private: it can be accessed from subclasses and overridden by accident #rubykaigi</i></li><li><i>Monkey patching modifies the class globally. #rubykaigi</i></li><li><i>Classbox is the solution to global monkey patching #rubykaigi</i></li></ul></div><div>Lots of talk about the mysterious 'classbox.'  What is it?  Well here's a paper on the subject:</div><div><a href="http://www.iam.unibe.ch/~scg/Archive/Papers/Berg05aclassboxes.pdf">http://www.iam.unibe.ch/~scg/Archive/Papers/Berg05aclassboxes.pdf</a></div><div><br/></div><div>And some pertinent lines from the abstract:</div><div><blockquote>...Unfortunately existing approaches suffer from various limitations. Either class extensions have a global impact, with possibly negative effects for unexpected clients, or they have a purely local impact, with neg- ative results for collaborating clients. Furthermore, conflicting class extensions are either disallowed, or resolved by linearization, with consequent negative effects. To solve these problems we present classboxes, a module system for object-oriented lan- guages that provides for method addition and replacement. Moreover, the changes made by a classbox are only visible to that classbox (or classboxes that import it), a feature we call local rebinding. To validate the model we have implemented it in the Squeak Smalltalk environment, and performed benchmarks.</blockquote></div><div>Now for more Ruby 2.0 preview:</div><div><ul><li><i>5/2 =&gt; 2 should be 2.5 or 5/2 (rational) #rubykaigi</i></li><li><i>Inheritance in ruby is more for connivence than for other merits #rubykaigi</i></li><li><i>Matz is thinking about moving mix-ins to a traits like solution which would have conflict detection (unintentional overrides) #rubykaigi</i></li><li><i>You could declare the 'mix' and specify how to deal with conflicting methods. #rubykaigi</i></li><li><i>mix Foo, [:*] would copy all constants from the mix, or you can specify which ones you want and rename them #rubykaigi</i></li><li><i>mix raises error on method/constant name conflict or removing #rubykaigi</i></li><li><i>From Matz's slides "Ruby 2.0, just started, small step from 1.9, should be done soon" #rubykaigi</i></li><li><i>Ruby 2.0: Traits, Classbox, Keyword arguments, a few other nifty features #rubykaigi</i></li><li><i>There some fierce discussion going on in IRC about the proposed changes in Ruby 2.0 #rubykaigi</i></li></ul></div><div>The debate on 'mixes' got pretty hot and heavy.  Keep in mind that all this IRC chatter is displayed behind Matz while he was giving his keynote because the translations are done in IRC.  So you'd be reading a translation of what he said right along with people discussing it.</div><div> </div><div><ul><li><i>My presentation on "Speedy Tests" and "Metrics Based Refactoring" starts at 13:30 (10 min) in room 200 #rubykaigi</i></li><li><i>The 'slides' from my presentation on "Speedy Tests" http://is.gd/eHNTN #rubykaigi</i></li></ul></div><div>I think the talk went very well.  Especially considering that I wrote the second half fairly fast.</div><div><ul><li><i>I just disparaged integration tests in favor of unit tests. Next up is @p_elliott talking about how he only does integration #rubykaigi</i></li><li><i>.@p_elliott does a lot of things to make his integration test fly. I would like to see one of their suites. I could learn a lot. #rubykaigi</i></li></ul></div><div>So I asked Paul how long their suites take and he said that they develop on 8 core machines and use Specjour to utilize 4 more cores so they tend to run between 5-8 minutes.  Pretty damn fast for full stack integration testing.</div><div><ul><li><i>Hey, someone else made the 30 minutes vs. 60 minutes mistake. I feel better now. #rubykaigi</i></li></ul></div><div>Except he found out at the end of his presentation when he asked: "How much time do I have left?" and go the response: "25 minutes."  Yipes.  Luckily there were a lot of questions.</div><div><ul><li><i>.@nusco did a really good job explaining the basics of Ruby metaprograming</i></li><li><i>RT @sudhindraRao Whatever works in #java does not work in #ruby. Even huge classes are maintainable. @rubykaigi</i></li><li><i>.@nusco's favorite metaprogramming trick is method_missing. I thought he was kidding but he was not. #rubykaigi</i></li></ul></div><div>When he said method_missing I grabbed the microphone back and responded: "Really?"  I couldn't help myself.  I tend to avoid method_missing.  There's usually a way to do what you want with other programming tricks.</div><div><ul><li><i>Modules are extremely decoupled and can be tested in isolation so they are very flexible @nusco #rubykaigi</i></li></ul></div><div>Good point.</div><div><br/></div><div><ul><li><i>Lightning Talks! I'm excited! #rubykaigi</i></li></ul></div></div><div>Talking very fast does not lend itself to translation.  But still they were very cool.  Even better there was a lady in a kimono who would 'gong' you if you ran out of time.</div><div><br/></div><br/><br/><a href="http://www.flickr.com/photos/jakescruggs/4934093277/" title="The gong lady stikes by jake_scruggs, on Flickr"><img alt="The gong lady stikes" height="375" src="http://farm5.static.flickr.com/4081/4934093277_b0442a1fed.jpg" width="500"/></a><br/><br/><div>That is awesome.</div><div><br/></div><div>After the lightning talks a few of us went back to the hotel to drop our things of before the party and we ran smack into this huge festival that happens once a year in Tsukuba. Here are some pics:</div><div><br/></div><br/><br/><div><br/><a href="http://www.flickr.com/photos/jakescruggs/4934688370/" title="Festival 11 by jake_scruggs, on Flickr"><img alt="Festival 11" height="375" src="http://farm5.static.flickr.com/4074/4934688370_68bc9aa127.jpg" width="500"/></a><br/></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4934691494/" title="Festival 4 by jake_scruggs, on Flickr"><img alt="Festival 4" height="375" src="http://farm5.static.flickr.com/4120/4934691494_1e17f48008.jpg" width="500"/></a><br/><div><br/></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4934097053/" title="Festival 6 by jake_scruggs, on Flickr"><img alt="Festival 6" height="375" src="http://farm5.static.flickr.com/4098/4934097053_78ae5d8471.jpg" width="500"/></a><div><br/></div><div>The party was super nice.  And they had a fantastic spread of wonderful foods and drinks.  </div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/1042801964488488185-4706721565901105774?l=jakescruggs.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-28T13:38:17Z</updated>
    <published>2010-08-28T12:27:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="RubyKaigi2010"/>
    <author>
      <name>Jake Scruggs</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/16274380203959781950</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-1042801964488488185</id>
      <author>
        <name>Jake Scruggs</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/16274380203959781950</uri>
      </author>
      <link href="http://jakescruggs.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://jakescruggs.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/JakeScruggs" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>writes ruby/wears crazy shirts</subtitle>
      <title>Jake Scruggs</title>
      <updated>2010-08-30T21:48:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-27</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/hzrqTE77GG0/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-27 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://www.smashingmagazine.com/2010/08/27/free-wireframing-kits-ui-design-kits-pdfs-and-resources/">Free Wireframing Kits, UI Design Kits, PDFs and Resources</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/hzrqTE77GG0" width="1"/></div>
    </summary>
    <updated>2010-08-28T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-27</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-1042801964488488185.post-7493601368196407080</id>
    <link href="http://jakescruggs.blogspot.com/feeds/7493601368196407080/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=7493601368196407080" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default/7493601368196407080?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default/7493601368196407080?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://jakescruggs.blogspot.com/2010/08/ruby-kaigi-2010-day-1.html" rel="alternate" type="text/html"/>
    <title>Ruby Kaigi 2010 Day 1</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div>Here I am in Japan at RubyKaigi 2010.   Wow.  Generally I tweet a lot about the conf live and then publish those tweets here (in italics) and provide slightly more commentary.  So lets get it on.</div><div><ul><li><i>So my flight leaves at noon for #rubykaigi, takes 13 hours, and arrives at 3pm tomorrow... Wait -- that can't be right. #looksitupagain</i></li><li><i>Before today's trip to Japan the furthest from the U.S.A. I've ever been is: Canada. #howisthatpossible</i></li><li><i>In cab. It has begun.</i></li><li><i>Someone once said "If you've never missed a flight you're spending too much time in airports" #atgate2hoursearly</i></li></ul></div><div>Yep - can you feel the panic in those first couple of tweets? I was totally freaked out.  The actual trip turned out to be easy.  I met up with Chad Fowler, Yehuda, and Woody at the airport and we took a bus straight to Tsukuba.  I went to an exotic foreign land and the first thing I did was take a bus through 100 minutes of strip malls.  But I was in Japan.  And Yehuda held forth on 'snowmen' and encodings for most of the way so that was interesting.</div><div><br/></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4930480551/" title="Yehuda Katz Holds Forth on the Bus by jake_scruggs, on Flickr"><img alt="Yehuda Katz Holds Forth on the Bus" height="375" src="http://farm5.static.flickr.com/4123/4930480551_514009ca51.jpg" width="500"/></a><br/><div><br/></div><div><br/></div><div><ul><li><i>So it's 7:15 am in Chicago, meaning I've been up for over 24 hours. So that's like 36 old man hours.</i></li><li><i>My first meal in Japan was near 60 bucks. And I'm not even in Tokyo yet. I'm gonna need a bigger wallet.</i></li><li><i>Also, I almost got run over by not one, but two bicyclists using cell phones to text.</i></li><li><i>And 7-11's are everywhere.</i></li></ul></div><div>So I survived the first day and even had an excellent dinner.  It was a bit pricey but worth it.  Many thanks to Makoto Inoue for helping organize this get together - it was exactly what I needed.</div><div><br/></div><div><ul><li><i>Donuts are cute in Japan: http://is.gd/eFXCR</i></li></ul></div><br/><br/><a href="http://www.flickr.com/photos/jakescruggs/4931073850/" title="Donuts are cute at Mr. Donut by jake_scruggs, on Flickr"><img alt="Donuts are cute at Mr. Donut" height="375" src="http://farm5.static.flickr.com/4122/4931073850_1d642418e1.jpg" width="500"/></a><br/><br/><div>Ate second breakfast/lunch at "Mr. Donut" which is really nice here in Japan.  Of course you can get noodles.</div><div><br/></div><div><ul><li><i>Good news: #rubykaigi has a non-freezing temperature. I was worried it would be 91 outside and 50 inside. Which tends to make me sick</i></li><li><i>Some nice low-key techno playing in the #rubykaigi main convention hall.</i></li><li><i>RT @headius Ruby 1.8.8 will release this year and be the last 1.8 release. Some debate still about whether to backport 1.9.2 features. #rubykaigi</i></li></ul></div><div>Ah, Charles got to got to the secret Ruby Core meeting so he's in the know.  Actually I could have probably gone too but I wasn't sure if just anyone was allowed.</div><div><br/></div><div><ul><li><i>Btw, the advice I received to stay up as long as possible after my flight to Japan was good. Feeling no jet-lag.</i></li><li><i>I adjusted my Japanese rent-a-phone to display am/pm and now it reads "0:32pm" I guess they really like military time here</i></li></ul></div><div>It's the little things that are the most endearing. </div><div><br/></div><div><ul><li><i>Getting an introduction to #rubykaigi in japanese with translations coming in IRC which is displayed on side screens. #lag</i></li></ul></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4932819961/" title="We get a lecture on proper use of wifi by jake_scruggs, on Flickr"><img alt="We get a lecture on proper use of wifi" height="375" src="http://farm5.static.flickr.com/4114/4932819961_d550f03286.jpg" width="500"/></a><br/><br/><div><br/></div><div><ul><li><i>Next up at #rubykaigi is a panel on Rails 3/ Ruby 1.9.2 (replacing canceled keynote)</i></li></ul></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4933414302/" title="First panel by jake_scruggs, on Flickr"><img alt="First panel" height="375" src="http://farm5.static.flickr.com/4093/4933414302_1f84cf753d.jpg" width="500"/></a><br/><br/><div><br/></div><div><ul><li><i>Ah, the translations are back. Mostly. #rubykaigi</i></li><li><i>RT @headius I can't decide if it will be more or less exhausting to attend three days of conference sessions I can't understand :) #RubyKaigi</i></li><li><i>.@wycats is fearless - he's critiquing Ruby 1.9.2 while sitting 5 feet from matz on stage</i></li></ul></div><div>So Leonard was doing the translation from Japanese to English and Matz was doing the translation from English to Japanese which lead the a moment where Matz had to translate Yehuda's (nice) criticism of Ruby 1.9.</div><div><br/></div><div><ul><li><i>One of things @tenderlove really likes about 1.9 is using encodings is painless. You have to think about it but it's easy. #rubykaigi</i></li><li><i>Secret to getting commit rights on Ruby or Rails? Submit patches with tests over a consistent period. #rubykaigi</i></li><li><i>.@tenderlove doesn't think that ActiveRecord got the same amount of love that ActiveSupport did in Rails 3. #rubykaigi</i></li><li><i>Specifically @tenderlove doesn't like ActiveRelation's integration in ActiveRecord in Rails 3. "It needs help" #rubykaigi</i></li><li><i>.@wycats' response: "There's always 3.1" #rubykaigi</i></li><li><i>.@tenderlove feels less able to bounce around the whole project when developing on Ruby as compared to Rails. #rubykaigi</i></li><li><i>.@wycats brought up something for Ruby core, saw a lot of discussion referencing his name but he could not participate. #rubykaigi</i></li></ul></div><div>Ah the perils of trying to develop across (real) languages. </div><div><br/></div><div><ul><li><i>Wait, Sarah's talk is going to be in Japanese? #rubykaigi</i></li><li><i>Oh, just the first part -- well done. #rubykaigi</i></li></ul></div><div>She learned a lot of Japanese just for this presentation.  Good for her. </div><div><br/></div><div><ul><li><i>Rails wrapping of Javascript is kind of a disaster - mostly because javascript is changing fast. #rubykaigi</i></li></ul></div><div>Good point - I hadn't really thought about why wrapping SQL works so well while wrapping Javascript works out so poorly.</div><div> </div><div><ul><li><i>Step one to writing testable Javascript: Get it out of the view. #rubykaigi</i></li><li><i>Pivotal uses Jasmine to test their Javascript: Bdd/RSpec like syntax and no dom is required. Can run in browser or headless. #rubykaigi</i></li><li><i>There's no time between sessions to escape one and go to another. Good thing I don't mind appearing rude. #rubykaigi</i></li></ul></div><div>Picture a lot of me saying "Excuse me" to people who don't understand english.</div><div><br/></div><div><ul><li><i>OH "Social games are just CMS with bad UI's" #rubykaigi</i></li></ul></div><div>That's really funny.</div><div><br/></div><div><ul><li><i>MySql 5 only supports 3 bytes for UTF8. huh. #rubykaigi</i></li><li><i>A 'u' with an umlaut is two code points that represent one character. #rubykaigi</i></li><li><i>UTF8 and UTF16 are both encodings of unicode. #rubykaigi</i></li><li><i>In Ruby 1.8 and C a string is just an array of bytes. #rubykaigi</i></li><li><i>"Corruption is normal" - @wycats #rubykaigi</i></li><li><i>force_encoding is not the way. If you have to use it you probably have a deeper problem. #rubykaigi</i></li><li><i>Dear internet: Take all sweeping statements with a grain of salt.</i></li></ul></div><div>Two sessions in a row on encodings.  We all feel like we need to know more about encodings.  And then we ignore that feeling until it bites us in the ass.</div><div><br/></div><div><ul><li><i>jugyo has a lot of Growl-themed ideas. #rubykaigi</i></li><li><i>Had an outbreak of super-sleepiness. Purchased a strange energy drink from an even stranger vending machine and I'm good. #rubykaigi</i></li><li><i>TermColor can do blink! Now that's progress. #rubykaigi</i></li><li><i>Cinatra is Sinatra for command line apps. #rubykaigi</i></li><li><i>"write code like writing blog entries" - jugyo #rubykaigi</i></li></ul></div><div>Watching Jugyo talk is always entertaining - I loved his lightning talk at last years Ruby Conf.</div><div><br/></div><div><ul><li><i>.@tenderlove has changed into a crappy suit -- It's business time! #rubykaigi</i></li><li><i>And headgear? #rubykaigi</i></li></ul></div><br/><a href="http://www.flickr.com/photos/jakescruggs/4932823869/" title="@tenderlove 1 by jake_scruggs, on Flickr"><img alt="@tenderlove 1" height="375" src="http://farm5.static.flickr.com/4123/4932823869_cd2d2ed3c0.jpg" width="500"/></a><br/><br/><div>That, my friends, is awesome.  I can't compete in shear crazy and acknowledge my superior.<br/><div><br/></div><div><ul><li><i>The number of languages (code) vs. the number of languages (speak) is completely off. #rubykaigi</i></li><li><i>"People are interpreters with forgiving parsers." - @tenderlove #rubykaigi</i></li><li><i>.@tenderlove enjoys programming the most at hack nights. Challenging and fun. #rubykaigi</i></li><li><i>PHP and Ruby living together: Webrick serving up WordPress. You are one weird dude @tenderlove #rubykaigi</i></li></ul></div><div>Webrick serving up PHP WordPress.  Think about that for a moment.</div><div><br/></div><div><ul><li><i>Making some last minute changes to my #rubykaigi presentation: "Speedy Tests" Come see it tomorrow at 13:30 in room 200</i></li></ul></div></div><div>Hey, I just found out I have an hour time slot when I had thought I was going to present for 30 minutes.  I guess the crowd is going to get some bonus metric_fu coverage.  As I'm going to present in 4 hours I better go write some more content.  Panic!</div><div><br/></div><div>Oh yeah, go check out my Ruby Kaigi photo set on Flickr: <a href="http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/">http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/</a></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/1042801964488488185-7493601368196407080?l=jakescruggs.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-28T00:39:48Z</updated>
    <published>2010-08-27T23:19:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="RubyKaigi2010"/>
    <author>
      <name>Jake Scruggs</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/16274380203959781950</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-1042801964488488185</id>
      <author>
        <name>Jake Scruggs</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/16274380203959781950</uri>
      </author>
      <link href="http://jakescruggs.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://jakescruggs.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/1042801964488488185/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/JakeScruggs" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>writes ruby/wears crazy shirts</subtitle>
      <title>Jake Scruggs</title>
      <updated>2010-08-30T21:48:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.gigoo.org/2010/08/26/handovers-hangovers/</id>
    <link href="http://blog.gigoo.org/2010/08/26/handovers-hangovers/" rel="alternate" type="text/html"/>
    <title>Handovers, hangovers</title>
    <summary>Handover like a pro
 
Recently I started to read a book, the one that Christian was praising so many times. I’m just through the first few chapters but already one of the sentences sounds in my head all the time. John Seddon, in “Freedom from Command and Control” writes how there was an improvement made to [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h2>Handover like a pro</h2>
<p> </p>
<p><img align="left" height="145" src="http://t3.gstatic.com/images?q=tbn:mgVHIS5Li8x5oM:http://www.absolutepleasuregifts.com/images/j0341324.jpg&amp;t=1" style="display: inline; float: left; margin-left: 0px; margin-right: 5px;" width="203"/>Recently I started to read a book, the one that <a href="http://christianralph.blogspot.com/" target="_blank">Christian</a> was praising so many times. I’m just through the first few chapters but already one of the sentences sounds in my head all the time. <a href="http://www.systemsthinking.co.uk/home.asp" target="_blank">John Seddon</a>, in “<a href="http://www.amazon.co.uk/Freedom-Command-Control-Better-Make/dp/0954618300/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1282861379&amp;sr=1-2" target="_blank">Freedom from Command and Control</a>” writes how there was an improvement made to a process in one of the call centres. He said that “all the information was filed in the form so it was never coming back from the downstream person with the request for missing information”. This one off step was making improvement as it was never coming back. </p>
<p>John explained that it was possible to realise the impact once someone took a step back a took a look at the system and the flow through it as a whole.</p>
<p> </p>
<p>This made me think about something that my other colleague, <a href="http://www.thekua.com/atwork/" target="_blank">Pat</a> did at work. When he was rolling off the project, he WIKIed all the information about it and left the Spike (proof of concept) code in the repository. He also made some comments in a code, whenever it was not entirely clear of its intention. It was one of the best handovers with no direct contact I was ever involved in.</p>
<p>I realised that the <strong>handovers</strong> should be looked at from a <strong>different perspective.</strong></p>
<p>Typical approach is to … <strong><em>drop whatever at someone and let him finish the work</em></strong>. Whenever more information is necessary, it could be chased.</p>
<p><strong>Instead</strong>, I should prepare handover in a way that would make it possible for a person who will pick up the work after, to have a brief look (at the code in my case), realise where the info is (wiki, tests, some comments) and move on with the flow.</p>
<p>Funny enough it encourages some good coding and work practices, like:</p>
<ul>
<li>simplicity </li>
<li>clean and understandable code </li>
<li><a href="http://blog.gigoo.org/2010/08/18/agile-multitasking-context-switching/" target="_blank">less time context switching and interruptions (own and others)</a> </li>
<li>tests that ensures functionality and quality </li>
<li>lack of outdated and non-maintainable documents </li>
</ul>
<p>Handovers are a problem and should be avoided when possible. When programming is involved, <a href="http://en.wikipedia.org/wiki/Pair_programming" target="_blank">Pairing</a> reduces the danger of the need for them. If not, all the members should concentrate on the most important thing, <strong>make sure the work keeps flowing through the system and what could I do to make it happen.</strong></p>
<p>Cheers, Greg</p></div>
    </content>
    <updated>2010-08-26T22:42:41Z</updated>
    <category term="development"/>
    <category term="stuff"/>
    <category term="flow"/>
    <category term="lean"/>
    <category term="practices"/>
    <category term="software development"/>
    <author>
      <name>Greg Gigon</name>
    </author>
    <source>
      <id>http://blog.gigoo.org</id>
      <link href="http://blog.gigoo.org/feed/?category_name=development" rel="self" type="application/atom+xml"/>
      <link href="http://blog.gigoo.org" rel="alternate" type="text/html"/>
      <subtitle>wEBbLOG</subtitle>
      <title>Gigu's blog » development</title>
      <updated>2010-08-26T23:04:11Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://agilewarrior.wordpress.com/?p=817</id>
    <link href="http://feedproxy.google.com/~r/AgileWarriorBlog/~3/obWrAXR0Y1o/" rel="alternate" type="text/html"/>
    <title>JR</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Reading Steven Pressfield’s blog this week I came across a few great quotes and ideas from Erik Proulx on personal motivation. Steven: Once you find the idea, how do you move forward? In what form does your personal kick in the butt arrive? Erik: My friend Adam Kuhr told me about a JFK quote, and <a class="excerpt-more-link" href="http://agilewarrior.wordpress.com/2010/08/26/throw-your-cap-over-the-wall/">[…]</a><img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=817&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Reading Steven Pressfield’s <a href="http://www.stevenpressfield.com/2010/08/erik-proulx/">blog </a>this week I came across a few great quotes and ideas from <a href="http://www.erikproulx.com/Erik_Proulx__Filmmaker,_Copywriter,_Author,_Employment_Activist.html">Erik Proulx</a> on personal motivation.</p>
<blockquote><p>
Steven: Once you find the idea, how do you move forward? In what form does your personal kick in the butt arrive?</p>
<p>Erik: My friend Adam Kuhr told me about a JFK quote, and it pretty much sums up how I confront the Resistance:</p>
<p>    “The Irish writer Frank O’Connor wrote how, as a boy, he and his friends would make their way across the countryside. When they came to an orchard wall that seemed too high and too doubtful to try and too difficult to permit their voyage to continue, they took off their hats and tossed them over the wall—and then they had no choice but to follow them.”</p>
<p>Kennedy concluded,</p>
<p>    “This nation has tossed its cap over the wall of space, and we have no choice but to follow it.”</p>
</blockquote>
<p>Here’s another about what got Erik motivated enough to make a movie after having been laid off:</p>
<blockquote>
<p>Steven: When you decided to make “Lemonade,” you had just been laid off, and said “not doing it wasn’t an option.”<br/>
What drove you to knock down Resistance, leave your safety zone, and go after something that wasn’t a sure thing?</p>
<p>Erik: Catholic guilt. Let me explain.</p>
<p>I’m not a very devout churchman these days. As an adult, I’ve either come to question most of what I learned in Catholic school or simply dismissed it outright. But there was one lesson that always stuck with me, and it was when Sister Claire told our 4th grade class that we were all endowed with unique talents, and that wasting them was a sin in the eyes of God.
</p></blockquote>
<p>These are just two of many good quotes from Steven’s interview with Eric (full transcript <a href="http://www.stevenpressfield.com/2010/08/erik-proulx/">here</a>)</p>
<p>So the next time you find yourself looking for that little extra nudge, you can always<a href="http://www.scribd.com/doc/6329121/Burn-Your-Boat"> burn the boats</a>, or you try <a href="http://www.urbandictionary.com/define.php?term=Throw%20your%20hat%20over%20the%20wall">throwing your cap over the wall</a>.</p>
<br/>Filed under: <a href="http://agilewarrior.wordpress.com/category/life/">life</a> Tagged: <a href="http://agilewarrior.wordpress.com/tag/eric-proulx/">eric proulx</a>, <a href="http://agilewarrior.wordpress.com/tag/inspiration/">inspiration</a>, <a href="http://agilewarrior.wordpress.com/tag/motivation/">motivation</a>, <a href="http://agilewarrior.wordpress.com/tag/steven-pressfield/">steven pressfield</a> <a href="http://feeds.wordpress.com/1.0/gocomments/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/agilewarrior.wordpress.com/817/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/agilewarrior.wordpress.com/817/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/agilewarrior.wordpress.com/817/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/agilewarrior.wordpress.com/817/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/agilewarrior.wordpress.com/817/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/agilewarrior.wordpress.com/817/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/agilewarrior.wordpress.com/817/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/agilewarrior.wordpress.com/817/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=817&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/><img height="1" src="http://feeds.feedburner.com/~r/AgileWarriorBlog/~4/obWrAXR0Y1o" width="1"/></div>
    </content>
    <updated>2010-08-26T21:54:05Z</updated>
    <category term="life"/>
    <category term="eric proulx"/>
    <category term="inspiration"/>
    <category term="motivation"/>
    <category term="steven pressfield"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://agilewarrior.wordpress.com/2010/08/26/throw-your-cap-over-the-wall/</feedburner:origlink>
    <author>
      <name>JR</name>
    </author>
    <source>
      <id>http://agilewarrior.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/f5507dfac8bd5cc9a12c654ee97e46fe?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://agilewarrior.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://feeds.feedburner.com/AgileWarriorBlog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>A blog about creating valuable software</subtitle>
      <title>The Agile Warrior</title>
      <updated>2010-09-02T13:06:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://monkeyisland.pl/2010/07/26/expected-exception-in-tests/</id>
    <link href="http://monkeyisland.pl/2010/07/26/expected-exception-in-tests/" rel="alternate" type="text/html"/>
    <title>expected exception in tests</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have a feeling too many people get it wrong so let me stress: @Test(expected = SomeException.class) // IS BAD FOR YOU I do enjoy jUnit a lot, thanks guys for sharing! Yet, I don’t like @Test(expected) feature of jUnit. In my TDD classes I simply teach to avoid using it. I admit the feature [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=monkeyisland.pl&amp;blog=857943&amp;post=401&amp;subd=szczepiq&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <updated>2010-08-26T21:09:31Z</updated>
    <source>
      <id>http://monkeyisland.pl</id>
      <author>
        <name>Szczepan Faber</name>
      </author>
      <link href="http://monkeyisland.pl" rel="alternate" type="text/html"/>
      <link href="http://monkeyisland.pl/category/planet-tw?feed=rss" rel="self" type="application/rss+xml"/>
      <subtitle>about software</subtitle>
      <title>monkey island » Planet TW</title>
      <updated>2010-08-26T21:09:31Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://monkeyisland.pl/2010/02/22/sweetest/</id>
    <link href="http://monkeyisland.pl/2010/02/22/sweetest/" rel="alternate" type="text/html"/>
    <title>Sweetest</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In a constant battle for sweet tests (readable &amp; maintainable) I developed another weapon. Have a look at this tool for acceptance testing: Sweetest. What do you think?<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=monkeyisland.pl&amp;blog=857943&amp;post=371&amp;subd=szczepiq&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <updated>2010-08-26T21:09:31Z</updated>
    <source>
      <id>http://monkeyisland.pl</id>
      <author>
        <name>Szczepan Faber</name>
      </author>
      <link href="http://monkeyisland.pl" rel="alternate" type="text/html"/>
      <link href="http://monkeyisland.pl/category/planet-tw?feed=rss" rel="self" type="application/rss+xml"/>
      <subtitle>about software</subtitle>
      <title>monkey island » Planet TW</title>
      <updated>2010-08-26T21:09:31Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://monkeyisland.pl/2010/01/19/hudson-is-a-cunning-beast/</id>
    <link href="http://monkeyisland.pl/2010/01/19/hudson-is-a-cunning-beast/" rel="alternate" type="text/html"/>
    <title>Hudson is a cunning beast</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Build failed today: ERROR: Failed to update http://svn.dev.sabre.com/svn/apd_centiva2/trunk org.tmatesoft.svn.core.SVNException: svn: blah blah blah ‘Bummer, I need to log in to the ci box and figure out what’s wrong with svn.’ – I thought. Being in the middle of something I didn’t get to it immediately. Then I got another notification from Hudson: Updated failed due [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=monkeyisland.pl&amp;blog=857943&amp;post=362&amp;subd=szczepiq&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <updated>2010-08-26T21:09:31Z</updated>
    <source>
      <id>http://monkeyisland.pl</id>
      <author>
        <name>Szczepan Faber</name>
      </author>
      <link href="http://monkeyisland.pl" rel="alternate" type="text/html"/>
      <link href="http://monkeyisland.pl/category/planet-tw?feed=rss" rel="self" type="application/rss+xml"/>
      <subtitle>about software</subtitle>
      <title>monkey island » Planet TW</title>
      <updated>2010-08-26T21:09:31Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://monkeyisland.pl/2009/12/21/guerrilla-developers/</id>
    <link href="http://monkeyisland.pl/2009/12/21/guerrilla-developers/" rel="alternate" type="text/html"/>
    <title>Guerrilla Developers</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Not sure I like the punchline but the story is real. Once upon a time there was a project, pretty bad one actually. The were big performance and stability issues. The were no docs about functionality whatsoever. The code base quality was disastrous. There was even a local framework implemented that dealt with mapping java [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=monkeyisland.pl&amp;blog=857943&amp;post=357&amp;subd=szczepiq&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <updated>2010-08-26T21:09:31Z</updated>
    <source>
      <id>http://monkeyisland.pl</id>
      <author>
        <name>Szczepan Faber</name>
      </author>
      <link href="http://monkeyisland.pl" rel="alternate" type="text/html"/>
      <link href="http://monkeyisland.pl/category/planet-tw?feed=rss" rel="self" type="application/rss+xml"/>
      <subtitle>about software</subtitle>
      <title>monkey island » Planet TW</title>
      <updated>2010-08-26T21:09:31Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://monkeyisland.pl/2009/02/08/be-careful-with-fundamentalism/</id>
    <link href="http://monkeyisland.pl/2009/02/08/be-careful-with-fundamentalism/" rel="alternate" type="text/html"/>
    <title>be careful with fundamentalism</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">One of my colleagues told me the other day: “Szczepan, last year, when I started working in the X team someone warned me not to speak too loud about unit testing” Apparently, there were feisty TDDers in the X team and they witch-hunted devs who not necessarily had written test-first. I guess it’s easy to [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=monkeyisland.pl&amp;blog=857943&amp;post=226&amp;subd=szczepiq&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <updated>2010-08-26T21:09:31Z</updated>
    <source>
      <id>http://monkeyisland.pl</id>
      <author>
        <name>Szczepan Faber</name>
      </author>
      <link href="http://monkeyisland.pl" rel="alternate" type="text/html"/>
      <link href="http://monkeyisland.pl/category/planet-tw?feed=rss" rel="self" type="application/rss+xml"/>
      <subtitle>about software</subtitle>
      <title>monkey island » Planet TW</title>
      <updated>2010-08-26T21:09:31Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5638372.post-7152798089868759966</id>
    <link href="http://binkley.blogspot.com/feeds/7152798089868759966/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=5638372&amp;postID=7152798089868759966" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/7152798089868759966" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/7152798089868759966" rel="self" type="application/atom+xml"/>
    <link href="http://binkley.blogspot.com/2010/08/more-uses-for-iterables.html" rel="alternate" type="text/html"/>
    <title>More uses for Iterables</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><code>Iterable</code> is one of my favorite interfaces in Java.  I love the for-each construct:</p> <pre class="code">for (final Type item : iterableOfItems)
    doSomethingWith(item);</pre> <p>Notice what cannot go wrong:</p> <ol> <li>I cannot run off the end, or forget to go far enough (no off-by-one bugs)</li> <li>I cannot forget to call <code>hasNext()</code> before calling <code>next()</code> (iterator misuse)</li> <li>I cannot make the wrong cast or pick the wrong container type</li> </ol> <p>I could go on.  It is also concise and conveys programmer intention clearly, both wonderful virtues.</p> <p>How can I make more use of <code>Iterable</code>?</p> <p>Here is an example of transforming input into <code>Iterable</code>.  First the base class:</p> <pre class="code">public abstract class ResourceIterable&lt;T, R extends Closeable&gt;
        implements Closeable, Iterable&lt;T&gt; {
    private final R resource;

    private volatile boolean closed;

    protected ResourceIterable(final R resource) {
        this.resource = resource;
    }

    protected final R resource() {
        return resource;
    }

    protected abstract T getNext()
            throws IOException;

    @Override
    public final void close()
            throws IOException {
        closed = true;
        resource.close();
    }

    @Override
    public final Iterator&lt;T&gt; iterator() {
        return new Iterator&lt;T&gt;() {
            private T next;

            @Override
            public boolean hasNext() {
                try {
                    next = getNext();
                    return null != next;
                } catch (final EOFException ignored) {
                    next = null;
                    return false;
                } catch (final IOException e) {
                    next = null;
                    if (closed)
                        return false;
                    throw new UndeclaredThrowableException(e);
                }
            }

            @Override
            public T next() {
                if (null == next)
                    throw new NoSuchElementException();
                return next;
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }
}</pre> <p>And a sample using class:</p> <pre class="code">public class LineIterable
        extends ResourceIterable {
    public AmpsResponseIterable(final BufferedReader reader) {
        super(reader);
    }

    @Override
    protected String getNext()
            throws IOException {
        return resource().readLine();
    }
}</pre> <p>The example is trivial (my actual uses are hiding sophisticated readers of data structures from network connections) but clear:</p> <pre class="code">for (final String line : new LineIterable(someBufferedReader))
    process(line);</pre> <p>However, all use of <code>Iterable</code> is similarly trivial: that's the point if it.  The complexity is in extracting objects from the input (though not in this example).</p> <p>I prefer hard-to-write-easy-to-use code when I make libraries; easy-to-write-hard-to-use just feels lazy (the wrong kind of <a href="http://c2.com/cgi/wiki?LazinessImpatienceHubris" title="Laziness Impatience Hubris">lazy</a>).</p><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5638372-7152798089868759966?l=binkley.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-26T20:42:57Z</updated>
    <published>2010-08-26T20:42:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="java"/>
    <author>
      <name>binkley</name>
      <email>binkley@alumni.rice.edu</email>
      <uri>http://www.blogger.com/profile/06617364377560752378</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5638372</id>
      <author>
        <name>binkley</name>
        <email>binkley@alumni.rice.edu</email>
        <uri>http://www.blogger.com/profile/06617364377560752378</uri>
      </author>
      <link href="http://binkley.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://binkley.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Just myself.</subtitle>
      <title>binkley's BLOG</title>
      <updated>2010-08-31T16:47:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1098</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/rRF_CHoxt9o/i-can-turn-a-4-million-profit-into-a-2-million-loss-and-get-every-national-accounting-firm-to-agree-with-me.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>“I can turn a $4 million profit into a $2 million loss and get every national accounting firm to agree with me.”</title>
    <summary>Professor Berri ( of The Wages of Wins fame ) breaks down the previously linked to story about the Pittsburgh Pirates &amp; their incentive to improve. Meanwhile, over at Slate, Phil Birnbaum ( of Sabermetric Research fame ) really nails the crux of the issue with his take. Especially telling is this quote: As a [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Professor Berri ( of <a href="http://dberri.wordpress.com/">The Wages of Wins</a> fame ) <a href="http://dberri.wordpress.com/2010/08/25/the-problem-with-baseball%e2%80%99s-participation-trophy/">breaks down</a> the <a href="http://blog.1530technologies.com/2010/08/wait-you-mean-200-million-for-100-losses-a-year-is-bad.html">previously linked</a> to story about the Pittsburgh Pirates &amp; their incentive to improve.</p>
<p>Meanwhile, over at Slate, Phil Birnbaum ( of <a href="http://sabermetricresearch.blogspot.com/">Sabermetric Research</a> fame ) really nails the crux of the issue with <a href="http://www.slate.com/id/2265068/">his take</a>.  Especially telling is this quote:</p>
<blockquote><p>
As a result, Tampa Bay’s regular-season operating income declined from $22 million in 2007 to less than $1 million in 2008—which means it cost the team $21 million to transition from cellar dwellers to World Series participants. As amazing as it seems, even after adding in $11 million in postseason earnings, the Rays were more profitable when they went 66-96 than when they went 97-65.
</p></blockquote>
<p>Sobering.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/rRF_CHoxt9o" width="1"/></div>
    </content>
    <updated>2010-08-26T15:08:41Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/i-can-turn-a-4-million-profit-into-a-2-million-loss-and-get-every-national-accounting-firm-to-agree-with-me.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5638372.post-1999609549273543343</id>
    <link href="http://binkley.blogspot.com/feeds/1999609549273543343/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=5638372&amp;postID=1999609549273543343" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/1999609549273543343" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/1999609549273543343" rel="self" type="application/atom+xml"/>
    <link href="http://binkley.blogspot.com/2010/08/guice-moving-to-maven.html" rel="alternate" type="text/html"/>
    <title>Guice moving to Maven</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>It's not new news, but it was new to me: Maven is switching to Guice to wire itself and plugins.  From Sonatype:</p> <ol> <li><a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/"><cite>From Plexus to Guice (#1): Why Guice?</cite></a></li> <li><a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-2-the-guiceplexus-bridge-and-custom-bean-injection/"><cite>From Plexus to Guice (#2): The Guice/Plexus Bridge and Custom Bean Injection</cite></a></li> <li><a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-3-creating-a-guice-bean-extension-layer/"><cite>From Plexus to Guice (#3): Creating a Guice Bean Extension Layer</cite></a></li> </ol> <p>The plugin framework is named <a href="http://svn.sonatype.org/spice/trunk/spice-inject/">spice inject</a> and glancing through it's straight-forward glue between Guice and OSGi within a Maven object domain.</p> <p>It looks very clean.  Nice.</p><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5638372-1999609549273543343?l=binkley.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-26T10:22:36Z</updated>
    <published>2010-08-26T10:22:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="guice"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="maven"/>
    <author>
      <name>binkley</name>
      <email>binkley@alumni.rice.edu</email>
      <uri>http://www.blogger.com/profile/06617364377560752378</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5638372</id>
      <author>
        <name>binkley</name>
        <email>binkley@alumni.rice.edu</email>
        <uri>http://www.blogger.com/profile/06617364377560752378</uri>
      </author>
      <link href="http://binkley.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://binkley.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Just myself.</subtitle>
      <title>binkley's BLOG</title>
      <updated>2010-08-31T16:47:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-25</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/el-Bkm_yLX4/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-25 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://cs.gmu.edu/~jessica/sax.htm">SAX</a><br/>
SAX (Symbolic Aggregate approXimation):<br/>
SAX is the first symbolic representation for time series that allows for dimensionality reduction and indexing with a lower-bounding distance measure.  In classic data mining tasks such as clustering, classification, index, etc., SAX is as good as well-known representations such as Discrete Wavelet Transform (DWT) and Discrete Fourier Transform (DFT), while requiring less storage space.  In addition, the representation allows researchers to avail of the wealth of data structures and algorithms in bioinformatics or text mining, and also provides solutions to many challenges associated with current data mining tasks.  One example is motif discovery, a problem which we recently defined for time series data.  There is great potential for extending and applying the discrete representation on a wide class of data mining tasks.<br/>
Download SAX.ppt: This presentation may be useful to gain some intuition into the utility of SAX.<br/>
<br/>
Example<br/>
<br/>
   The following</li>
<li><a href="http://ringce.com/hyde">Hyde - A Python Static Website Generator</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/el-Bkm_yLX4" width="1"/></div>
    </summary>
    <updated>2010-08-26T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-25</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://blogs.tedneward.com/PermaLink,guid,18bb3331-dec4-4cc3-8a2f-1d80f302f478.aspx</id>
    <link href="http://blogs.tedneward.com/2010/08/26/Ever+Thought+Of+Being+A+Writer.aspx" rel="alternate" type="text/html"/>
    <title>Ever thought of being a writer?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
CoDe Magazine (for whom I do a back-cover editorial every other month) has been running
a different kind of column recently, one which has not only been generating some good
buzz, but also offers a unique opportunity for those who are interested in maybe dipping
their toes into the technical writing game. This message was posted by Markus Eggers,
the publisher of CoDe, on several different mailing lists, and he asked me to spread
the word out:
</p>
<blockquote> 
<p>
As you may know, each issue of CODE Magazine has a PostMortem column, where the author
discusses a .NET related project and points out 5 things that went well, and 5 things
that didn’t (we call them “challenges” ;-) ). This column has been pretty popular
and provides some great visibility for the author and the companies involved in the
project.
</p>
<p>
We are looking for more authors for upcoming issues. If you are interested, please
don’t hesitate to contact me.
</p>
<p>
For more info on PostMortems, check out this writer’s guide: 
</p>
<p>
<a href="http://codemag.com/Write/PostMortem">http://codemag.com/Write/PostMortem</a>
</p>
<p>
For an example PostMortem, check out this recent article:
</p>
<p>
<a href="http://www.epsdownloadsite.com/downloads/d1392e8a-ddcc-4507-95e7-5d933574d997/PostMortemExample.pdf">http://www.epsdownloadsite.com/downloads/d1392e8a-ddcc-4507-95e7-5d933574d997/PostMortemExample.pdf</a>
</p>
</blockquote> 
<p>
As an added incentive, if you think you have an interesting project that would work
well for a PostMortem, but don’t feel like your writing is quite “up to snuff”, feel
free to loop me in on the conversation, and at the very least I’ll offer a “pre-editorial
review” of the article and offer up some suggestions on how to make it stronger. (But
Rod Paddock, CoDe’s editor, is also a pretty good editor, and so you might just submit
it to him first to get his take on it.)
</p>
<p>
In any event, take the shot and see if you’ve got some writing chops in you. :-)
</p>
<img height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=18bb3331-dec4-4cc3-8a2f-1d80f302f478" width="0"/>
<br/>
<hr/>
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.</div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
CoDe Magazine (for whom I do a back-cover editorial every other month) has been running
a different kind of column recently, one which has not only been generating some good
buzz, but also offers a unique opportunity for those who are interested in maybe dipping
their toes into the technical writing game. This message was posted by Markus Eggers,
the publisher of CoDe, on several different mailing lists, and he asked me to spread
the word out:
</p>
        <blockquote>
          <p>
As you may know, each issue of CODE Magazine has a PostMortem column, where the author
discusses a .NET related project and points out 5 things that went well, and 5 things
that didn’t (we call them “challenges” ;-) ). This column has been pretty popular
and provides some great visibility for the author and the companies involved in the
project.
</p>
          <p>
We are looking for more authors for upcoming issues. If you are interested, please
don’t hesitate to contact me.
</p>
          <p>
For more info on PostMortems, check out this writer’s guide: 
</p>
          <p>
            <a href="http://codemag.com/Write/PostMortem">http://codemag.com/Write/PostMortem</a>
          </p>
          <p>
For an example PostMortem, check out this recent article:
</p>
          <p>
            <a href="http://www.epsdownloadsite.com/downloads/d1392e8a-ddcc-4507-95e7-5d933574d997/PostMortemExample.pdf">http://www.epsdownloadsite.com/downloads/d1392e8a-ddcc-4507-95e7-5d933574d997/PostMortemExample.pdf</a>
          </p>
        </blockquote>
        <p>
As an added incentive, if you think you have an interesting project that would work
well for a PostMortem, but don’t feel like your writing is quite “up to snuff”, feel
free to loop me in on the conversation, and at the very least I’ll offer a “pre-editorial
review” of the article and offer up some suggestions on how to make it stronger. (But
Rod Paddock, CoDe’s editor, is also a pretty good editor, and so you might just submit
it to him first to get his take on it.)
</p>
        <p>
In any event, take the shot and see if you’ve got some writing chops in you. :-)
</p>
        <img height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=18bb3331-dec4-4cc3-8a2f-1d80f302f478" width="0"/>
        <br/>
        <hr/>
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.</div>
    </content>
    <updated>2010-08-26T05:21:40Z</updated>
    <category term=".NET"/>
    <category term="C#"/>
    <category term="F#"/>
    <category term="Industry"/>
    <category term="Python"/>
    <category term="Visual Basic"/>
    <category term="WCF"/>
    <category term="Windows"/>
    <category term="XML Services"/>
    <category term="XNA"/>
    <author>
      <name>Ted Neward</name>
    </author>
    <source>
      <id>http://blogs.tedneward.com/</id>
      <author>
        <email>tneward@tedneward.com</email>
      </author>
      <link href="http://blogs.tedneward.com/" rel="alternate" type="text/html"/>
      <link href="http://blogs.tedneward.com/SyndicationService.asmx/GetRss" rel="self" type="application/rss+xml"/>
      <rights>Ted Neward</rights>
      <subtitle>Ted's takes on the enterprise Java, .NET and Web services communities and technologies</subtitle>
      <title>Interoperability Happens</title>
      <updated>2010-09-02T16:07:44Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://agilewarrior.wordpress.com/?p=810</id>
    <link href="http://feedproxy.google.com/~r/AgileWarriorBlog/~3/ufBeUcaUYVM/" rel="alternate" type="text/html"/>
    <title>JR</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">One of my favorite techniques for building trust and demonstrating intent when starting out with a new client is to build them the first version of their application in two weeks. No it doesn’t have every bell and whistle, and it definitely wouldn’t when any design awards, but putting that first version of working software <a class="excerpt-more-link" href="http://agilewarrior.wordpress.com/2010/08/25/fierce-delivery-first-working-version-in-two-weeks/">[…]</a><img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=810&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of my favorite techniques for building trust and demonstrating intent when starting out with a new client is to build them the first version of their application in two weeks.</p>
<p>No it doesn’t have every bell and whistle, and it definitely wouldn’t when any design awards, but putting that first version of working software in their hands after a single iteration can do wonders for you project.</p>
<p><strong>What this does for your team</strong></p>
<p>For your team it sends a message. We are going to move fast.</p>
<p>No time to sit around and naval gaze. The first version of our shippable product needs to be ready two weeks from now.</p>
<ul>
<li>That means coding.</li>
<li>Testing.</li>
<li>Analysis.</li>
<li>Design.</li>
<li>Feedback.</li>
</ul>
<p>It’s all got to be there for this one thin slice of functionality (usually their most important user story).</p>
<p>That means we are going to have to travel light and drop anything that doesn’t add value.</p>
<p>And if we are going to be adding new features confidently as we go (without paying an exorbitant amount) we are going to need to some practices and discipline around how we change our software.</p>
<ul>
<li>Continuously integration.</li>
<li>Automated builds.</li>
<li>Automated unit testing.</li>
<li>Regular feedback.</li>
<li>Aggressive refactoring.</li>
<li>Rhythm and ritual.</li>
</ul>
<p>It’s all got to be there.</p>
<p>This is good because you want your team used to the idea of regularly making changes to a production ready system.</p>
<p>That’s how agile (XP in particular) likes to view systems under development. They are meant to be kept in a state of continuous production readiness. We are simply adding new features every week (starting with the first version after two week).</p>
<p><strong>What this does for your customer</strong></p>
<p>Most customers are blown away when you tell them you are going to delivery the first working version in two weeks. </p>
<p>It gets their attention.</p>
<p>It shows an intent, and fierceness around delivery sorely lacking in our industry.</p>
<p>Regularly producing shippable software changes the game and relationship with your customer. It shows them the importance of their role and highlights the fact they are first class citizens and needed for a successful project.</p>
<p><strong>What this does for you</strong></p>
<p>While I can’t promise you’ll lose weight or it will improve your sex life, I can tell you delivering fiercely will raise your profile and get you noticed where ever you choose to work.</p>
<p>People are going to want to know how you got business to the table.</p>
<p>They are going to want to know how you built a system for them which is exactly what they wanted.</p>
<p>They are going to want to know how you made going live a non-event.</p>
<p>And they are going to want to you do it again, and again, and again.</p>
<p>Look, I get that there may be thousand reasons why may not be practical to deliver your first working version in two weeks.</p>
<p>If this is the case, then think of it more as an attitude.</p>
<p>But you’ll never know unless you take that first step.</p>
<p>Like Henry Ford said: ““Whether you think that you can, or that you can’t, you are usually right.”</p>
<br/>Filed under: <a href="http://agilewarrior.wordpress.com/category/agile/">agile</a> Tagged: <a href="http://agilewarrior.wordpress.com/tag/agile/">agile</a>, <a href="http://agilewarrior.wordpress.com/tag/inspiration/">inspiration</a>, <a href="http://agilewarrior.wordpress.com/tag/kicking-butt/">kicking-butt</a>, <a href="http://agilewarrior.wordpress.com/tag/software-delivery/">software delivery</a> <a href="http://feeds.wordpress.com/1.0/gocomments/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/agilewarrior.wordpress.com/810/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/agilewarrior.wordpress.com/810/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/agilewarrior.wordpress.com/810/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/agilewarrior.wordpress.com/810/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/agilewarrior.wordpress.com/810/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/agilewarrior.wordpress.com/810/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/agilewarrior.wordpress.com/810/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/agilewarrior.wordpress.com/810/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=810&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/><img height="1" src="http://feeds.feedburner.com/~r/AgileWarriorBlog/~4/ufBeUcaUYVM" width="1"/></div>
    </content>
    <updated>2010-08-25T12:28:19Z</updated>
    <category term="agile"/>
    <category term="inspiration"/>
    <category term="kicking-butt"/>
    <category term="software delivery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://agilewarrior.wordpress.com/2010/08/25/fierce-delivery-first-working-version-in-two-weeks/</feedburner:origlink>
    <author>
      <name>JR</name>
    </author>
    <source>
      <id>http://agilewarrior.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/f5507dfac8bd5cc9a12c654ee97e46fe?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://agilewarrior.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://feeds.feedburner.com/AgileWarriorBlog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>A blog about creating valuable software</subtitle>
      <title>The Agile Warrior</title>
      <updated>2010-09-02T13:06:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.benstopford.com/?p=979</id>
    <link href="http://feedproxy.google.com/~r/benstopford/~3/a4kQC4MPdJA/" rel="alternate" type="text/html"/>
    <title>Mapping Personal Practices</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I thought this  post from Ade was pretty  interesting. It refers back to an exercise Joe Walnes ran at Extreme  Tuesday. The concept is simple but pretty  cool and a few of us here at RBS had a crack at  it. You can see the results below.
Robin  Morris
Tiest  Ville
Pat  Kua
Chris  Brown
Me
We [...]<img height="1" src="http://feeds.feedburner.com/~r/benstopford/~4/a4kQC4MPdJA" width="1"/></div>
    </summary>
    <updated>2010-08-25T10:36:31Z</updated>
    <category term="Software Development"/>
    <category term="Team Development"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.benstopford.com/2010/08/25/mapping-personal-practices/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origlink>
    <author>
      <name>ben</name>
    </author>
    <source>
      <id>http://www.benstopford.com</id>
      <link href="http://www.benstopford.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/benstopford" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Gently flexing the grid</subtitle>
      <title>www.BenStopford.com</title>
      <updated>2010-08-26T21:10:22Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-24</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/LkemSv-gIqk/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-24 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://code.google.com/p/django-cheetahtemplate/">django-cheetahtemplate - Project Hosting on Google Code</a></li>
<li><a href="http://lightheadsw.com/caffeine/">Lighthead - Caffeine</a></li>
<li><a href="http://smoothiecharts.org/">Smoothie Charts</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/LkemSv-gIqk" width="1"/></div>
    </summary>
    <updated>2010-08-25T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-24</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1097</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/mYcXucvd4ic/brazils-lean-startup-emerging-entrepreneurial-economy.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Brazils Lean Startup &amp; Emerging Entrepreneurial Economy</title>
    <summary>Time magazine has a great article about Brazil as the new VC hotspot. The tech sector in Brazil is absolutely scorching hot. In fact, ThoughtWorks just opened a Brazilian office in my girlfriends hometown of Porto Alegre. The IMF projects that Brazil’s economy — now the eighth largest in the world — will grow by [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Time magazine has a <a href="http://www.time.com/time/printout/0,8816,2010076,00.html">great article</a> about Brazil as the new VC hotspot.  The tech sector in Brazil is absolutely scorching hot.  In fact, <a href="http://www.thoughtworks.com/">ThoughtWorks</a> just opened a <a href="http://www.thoughtworks.com/other-offices">Brazilian office</a> in my girlfriends hometown of <a href="http://en.wikipedia.org/wiki/Porto_Alegre">Porto Alegre</a>.</p>
<blockquote><p>
The IMF projects that Brazil’s economy — now the eighth largest in the world — will grow by 7.1% this year and soar throughout the decade. A confluence of factors will contribute to growth: abundant natural resources, stable government policies, a sophisticated banking sector, a rapidly growing middle class that now comprises about half the population of 190 million and a surge in real estate and infrastructure development to prepare for Brazil’s hosting the 2014 FIFA World Cup and the 2016 Summer Olympics.
</p></blockquote>
<p>Last year I was able to visit the country for the first time and see just how incredible the growth has been.  It’s really amazing to see how the entrepreneurial spirit has grabbed a hold of people down there and is pushing them to make advances in all sorts of industries.  It’s really amazing to see them follow in the footsteps of the US.  </p>
<p>Of course, they are leaving the US in the dust in some areas:</p>
<blockquote><p>
In Brazil you need to have a strong payback model right at the beginning. VCs won’t wait to see if one day there is an exit for your company since they don’t want the risk. In the U.S., a start-up is cut some slack. It can operate for two years without any revenue. We don’t have that luxury.
</p></blockquote>
<p>It seems as though many are starting off with the idea that profitable &amp; sustainable is the way to go.  If this mentality takes hold and spreads, one could easily see Brazil becoming a real profit center and a power in the global marketplace.  It should frighten the US to think about what a country the size of Brazil could do with a zero-debt, profit driven focus compared to our concept of debt and bailouts.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/mYcXucvd4ic" width="1"/></div>
    </content>
    <updated>2010-08-25T04:10:54Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/brazils-lean-startup-emerging-entrepreneurial-economy.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:16Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>https://sivajag.wordpress.com/?p=146</id>
    <link href="http://techbehindtech.com/2010/08/24/compojure-demystified-with-an-example-part-4/" rel="alternate" type="text/html"/>
    <title>My Address book Part 4</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In this part we will start implementing Add,  View and View all functionalities. The services we are going to build are View All Addresses – GET – http://localhost:8080/addresses View single address – GET – http://localhost:8080/addresses/:id Add Address – POST – http://localhost:8080/addresses Interactive Development using slime I mentioned in last part that after every change to [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=146&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p style="text-align: left;">In this part we will start implementing Add,  View and View all functionalities.</p>
<p>The services we are going to build are</p>
<p><em>View All Addresses – GET – http://localhost:8080/addresses<br/>
View single address – GET – http://localhost:8080/addresses/:id<br/>
Add Address – POST – http://localhost:8080/addresses</em></p>
<p><strong>Interactive Development using slime </strong></p>
<p>I mentioned in last part that after every change to our code we need to restart our server for our changes to be reflected. This is a pain and against clojure (lisp) philosophy . It would be great if we could eval our modified buffers in emacs and those changes reflected immediately in our jetty server. Thankfully there is very easy way to do this.</p>
<p>In core.clj we are starting jetty adapter. We can start this jetty server in background using future and reload the namespace that we changed. This way we can do interactive development without restarting our server.</p>
<p>PS: Make sure you have emacs setup with slime. I feel emacs is the best IDE for clojure. Again this is my opinion. There are lot of information on how to do this.</p>
<p>I talked about jetty adapter. It is time for us to look at some what little deeper in Compojure.</p>
<p><strong>Compojure</strong></p>
<p>Compojure is based on a library  called <strong><a href="http://github.com/mmcgrana/ring">Ring</a></strong>. In fact most of clojure web frameworks are based on Ring. So to understand Compojure, it is important to understand Ring.</p>
<p>Ring has three components.</p>
<p><em>1) Handlers:</em></p>
<p>Handlers are main functions that  process a request. We define handlers using defroutes macro.</p>
<p><em>2) Middleware:</em></p>
<p>Middleware are functions that could be chained together to process a request. Middleware functions can take any number of arguments, but the spec stats that first argument should be an handler and function should return an handler. An example for middleware is logging all requests that comes to your webserver.  Ring and compojure comes with some standard middleware. We will see in next part how to create our own middleware.</p>
<p><em>3) Adapters:</em></p>
<p>Adapters are functions could adapt our handler to a web server. We are using jetty adapter to tie our handler to jetty server.</p>
<p><strong>Refactor code to make it easy for interactive development</strong></p>
<p>Edit core.clj</p>
<pre class="brush: plain; highlight: [11];">(ns address_book.core
  (:use [compojure.core]
        [ring.adapter.jetty])
  (:require [compojure.route :as route]))

(defroutes example
  (GET "/" [] "&lt;h1&gt;My Address Book!&lt;/h1&gt;")
  (route/files "/" {:root "public"})
  (route/not-found "Page not found"))

(future (run-jetty (var address-book) {:port 8080}))
</pre>
<p><em><strong>1) Add swank-clojure to our project</strong></em></p>
<p>swank-clojure comes with lein plugin which will allow us to start a swank server and from emacs you can connect using slime. There are lot of documentation about swank-clojure and slime. Let me know if you need more information. If I see enough interest, I could blog about it or at least point to some good resources.</p>
<p>Edit project.clj</p>
<pre class="brush: plain; highlight: [3,4,7];">(defproject address_book "1.0.0-SNAPSHOT"
  :description "Address Book"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [compojure "0.4.1"]
                 [ring/ring-jetty-adapter "0.2.3"]]
  :dev-dependencies [[swank-clojure "1.2.1"]])
</pre>
<p>and run</p>
<pre class="brush: plain;">lein deps</pre>
<p>Now you should be able to start swank server using</p>
<pre class="brush: plain;">lein swank</pre>
<p><strong><em>2) Break core.clj into different namespaces</em></strong></p>
<p>Current core.clj is doing two things. Setting up routes and starting jetty server. Lets break it into web_server.clj and routes.clj</p>
<pre class="brush: plain;">rm src/address_book/core.clj</pre>
<p>create src/address_book/routes.clj</p>
<pre class="brush: plain;">(ns address_book.routes
  (:use [compojure.core])
  (:require [compojure.route :as route]))

(defroutes address-book
  (GET "/" [] "&lt;h1&gt;My Address Book!&lt;/h1&gt;")
  (route/files "/" {:root "public"})
  (route/not-found "Page not found"))
</pre>
<p>create src/address_book/webserver.clj</p>
<pre class="brush: plain;">(ns address_book.webserver
  (:use [compojure.core]
        [ring.adapter.jetty]
        [address_book.routes :as routes]))

(future (run-jetty (var address-book) {:port 8080}))
</pre>
<p><strong><em>3) At last lets create our Address namespace</em></strong></p>
<p>In this code, I am going to use atoms for persistence. In future I will probably show how we can persist in mysql db using clj-records.</p>
<p>create src/address_book/address.clj</p>
<pre class="brush: plain;">(ns address-book.address
  (:use [address-book.utils number])
  (:refer-clojure :exclude (find create)))

(def STORE (atom {:1 {:id :1 :name "Siva Jagadeesan" :street1 "88 7th" :street2 "#203" :city "Cupertino" :country "USA" :zipcode 98802}}))

(defn create [attrs]
  (let [id (random-number)
        new-attrs (merge {:id id} attrs)]
    (swap! STORE merge {id new-attrs})
    new-attrs))

(defn find-all []
  (vals @STORE))

(defn find [id]
  ((to-keyword id) @STORE))

(defn update [id attrs]
  (let [updated-attrs (merge (find id) attrs)]
    (swap! STORE assoc id updated-attrs)
    updated-attrs))

(defn delete [id]
  (let [old-attrs (find id)]
    (swap! STORE dissoc id)
    old-attrs))
</pre>
<p>Create utils/number.clj</p>
<pre class="brush: plain;">(ns address-book.utils.number)

(defn to-keyword [num]
  (if-not (keyword? num)
    (keyword (str num))
    num))
</pre>
<p>PS: I am not writing tests to keep this blog short. But I would advice everyone to write tests.</p>
<p><strong><em>4)   Lets update routes for add, view and view all functionalities</em></strong></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"> </span></p>
<pre class="brush: plain;">&lt;/span&gt;
&lt;pre&gt;(ns address_book.routes
  (:use [compojure.core])
  (:require [address-book.address :as address]
            [compojure.route :as route]
            [clj-json.core :as json]))

(defn json-response [data &amp; [status]]
  {:status (or status 200)
   :headers {"Content-Type" "application/json"}
   :body (json/generate-string data)})

(defroutes handler
  (GET "/addresses" [] (json-response (address/find-all)))
  (GET "/addresses/:id" [id] (json-response (address/find id)))
  (POST "/addresses" {params :params}  (json-response (address/create params)))

  (route/files "/" {:root "public"})
  (route/not-found "Page not found"))

(def address-book
     handler)
</pre>
<p>Compojure comes with GET, POST, PUT, DELETE, HEAD and ANY macro to define routes. These macros are self explanatory. Currently we have used GET and POST to define our routes.</p>
<p><em>Parsing Parameters </em></p>
<p>Compojure binds request parameters to params.</p>
<p>To get all parameters from request you can destructure map like we did in</p>
<pre class="brush: plain;">POST "/addresses" {params :params}  (json-response (address/create params)))</pre>
<p>To get particular parameters from request you can use Compojure sugar syntax like we did in<br/>
[sourceode](GET “/addresses/:id” [id] (json-response (address/find id)))[/sourcecode]</p>
<p><em><strong>5)  Lets build our front end</strong></em><br/>
<em>PS: front end code is a hack. Please don’t follow these codes as a good practice.</em></p>
<p><strong><em><span style="font-style: normal; font-weight: normal;">Edit public/index.html</span></em></strong></p>
<p><strong><em><span style="font-style: normal; font-weight: normal;"> </span></em></strong></p>
<p><strong><em> </em></strong></p>
<p><strong><em> </em></strong></p>
<p><strong><em> </em></strong></p>
<pre class="brush: xml;">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;
	&lt;title&gt;My Address Book&lt;/title&gt;
        &lt;link href="/css/address.css" media="screen" rel="stylesheet" type="text/css" /&gt;
        &lt;script src="/js/jquery-1.4.2.min.js" type="text/javascript"&gt;&lt;/script&gt;
        &lt;script src="/js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"&gt;&lt;/script&gt;
        &lt;script src="/js/jquery.form.js" type="text/javascript"&gt;&lt;/script&gt;
        &lt;script src="/js/address_book.js" type="text/javascript"&gt;&lt;/script&gt;
        &lt;script src="/js/address_list.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="wrap"&gt;
	&lt;div id="header"&gt;&lt;h1&gt;My Address Book&lt;/h1&gt;&lt;/div&gt;

	&lt;div id="main"&gt;
          &lt;table id="address"&gt;
            &lt;tr&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td id="name"/&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Street1&lt;/td&gt;&lt;td id="street1"/&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Street2&lt;/td&gt;&lt;td id="street2"/&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;City&lt;/td&gt;&lt;td id="city"/&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Country&lt;/td&gt;&lt;td id="country"/&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;ZipCode&lt;/td&gt;&lt;td id="zipcode"/&gt;&lt;/tr&gt;
          &lt;/table&gt;
	  &lt;table id="address-list" border="1" width="100%" rules="rows" align="center"&gt;
            &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Action&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td &gt;row 1, cell 1&lt;/td&gt;
              &lt;td align="center"&gt;row 1, cell 2&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/table&gt;
	&lt;/div&gt;
	&lt;div id="sidebar"&gt;
          &lt;form id="address-form" class="formular" method="post" action="/addresses"&gt;
	    &lt;fieldset class="login"&gt;
	      &lt;legend&gt;New Address&lt;/legend&gt;
	      &lt;div&gt;
		&lt;label for="name"&gt;Name&lt;/label&gt; &lt;input type="text" id="name" name="name"&gt;
	      &lt;/div&gt;
              &lt;div&gt;
		&lt;label for="street1"&gt;Street1&lt;/label&gt; &lt;input type="text" id="street1" name="street1"&gt;
	      &lt;/div&gt;
               &lt;div&gt;
		&lt;label for="street2"&gt;Street2&lt;/label&gt; &lt;input type="text" id="street2" name="street2"&gt;
	      &lt;/div&gt;
              &lt;div&gt;
		&lt;label for="city"&gt;City&lt;/label&gt; &lt;input type="text" id="city" name="city"&gt;
	      &lt;/div&gt;
              &lt;div&gt;
		&lt;label for="country"&gt;Country&lt;/label&gt; &lt;input type="text" id="country" name="country"&gt;
	      &lt;/div&gt;
               &lt;div&gt;
		&lt;label for="zipcode"&gt;ZipCode&lt;/label&gt; &lt;input type="text" id="zipcode" name="zipcode"&gt;
	      &lt;/div&gt;

              &lt;input class="submit" type="submit" value="Create"/&gt;
	    &lt;/fieldset&gt;
          &lt;/form&gt;
	&lt;/div&gt;
	&lt;div id="footer"&gt;
	  &lt;p&gt;&lt;a href="TechbehindTech.com"&gt;TechBehindTech&lt;/a&gt; -- Siva Jagadeesan&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Create public/css/address.css</p>
<pre class="brush: css;">body,html {
    margin:0;
    padding:0;
    color:#000;
    background:#a7a09a;
}
#wrap {
    width:970px;
    margin:0 auto;
    background: #fffeff;
}
#header {
    padding:5px 10px;
    background: #054477;
	text-align: right;
	color: #fffeff;
}
h1 {
    margin:0;
}
#main {
    float:left;
    width:580px;
    padding:10px;
	background-color: #fffeff;
}
h2 {
    margin:0 0 1em;
	background-color: #fffeff;
}
#sidebar {
    float:right;
    width:350px;
    padding:10px;
    background-color: #fffeff;
}
#footer {
    clear:both;
    padding:5px 10px;
    background: #fed47f;
}
#footer p {
    margin:0;
}
* html #footer {
    height:1px;
}

form * {margin:0;padding:0;} /* Standard margin and padding reset, normally done on the body */

legend {
	color:#000; /* IE styles legends with blue text by default */
	*margin-left:-7px;
	font-weight: bold;
	font-size: 20px;
}
fieldset {
	border:1px solid #dedede; /* Default fieldset borders vary cross browser, so make them the same */
}
fieldset div {
	overflow:hidden; /* Contain the floating elements */
	display:inline-block;
	padding: 10px;
}
fieldset div {display:block;} /* Reset element back to block leaving layout in ie */
label {
	float:left; /* Take out of flow so the input starts at the same height */
	width:8em; /* Set a width so the inputs line up */
}
</pre>
<p>Create public/js/address_book.js</p>
<pre class="brush: jscript;">
$(document).ready(function() {
    $("#address").hide();
    $("#address-list").showAddressList();

    $(".address-link").live("click",function(e){
        $.getJSON($(this).attr("href"), function(json) {
            $("#address").showAddress(json);
        });
        e.preventDefault();
    });

    $('#address-form').submit(function(event){
        event.preventDefault();
        var $this = $(this);
        var url = $this.attr('action');
        var dataToSend = $this.serialize();
        var callback = function(data){
            $("#address-list").addAddress(data);
        };
        var options = {
            success:   callback,
            url: url,
            type:     "POST",
            dataType: "json",
            clearForm: true
        };
        $(this).ajaxSubmit(options);
    });

});
</pre>
<p>Create public/js/address_list.js</p>
<pre class="brush: jscript;">function action_links(data){
    var link = "&lt;a href=\"\"&gt;edit&lt;/a&gt; ";
    link += " | &lt;a href=\"\"&gt;delete&lt;/a&gt;";
    return "edit | delete";
}

$.fn.showAddressList = function(){
    return this.each(function(){
        var that = this;
        $.getJSON("addresses", function(json) {
            $(that).html(" &lt;tr&gt; &lt;th&gt;Name&lt;/th&gt; &lt;th&gt;Action&lt;/th&gt; &lt;/tr&gt;");
            $.each(json,function(i,data) {
                $(that).append("&lt;tr id=\"address-"+ data.id +" \"&gt;&lt;td&gt;&lt;a class=\"address-link\" href=\"addresses/" + data.id +"\"&gt;" + data.name + "&lt;/a&gt;&lt;/td&gt;&lt;td align='center'&gt;" + action_links(data) + "&lt;/td&gt;&lt;/tr&gt;");
            });
        });
    });
};

$.fn.addAddress = function(json){
    var data = json;
    var that = this;
    return this.each(function(){
        var that = this;
        $(that).append("&lt;tr id=\"address-"+ data.id +" \"&gt;&lt;td&gt;&lt;a class=\"address-link\" href=\"addresses/" + data.id +"\"&gt;" + data.name + "&lt;/a&gt;&lt;/td&gt;&lt;td align='center'&gt;" + action_links(data) + "&lt;/td&gt;&lt;/tr&gt;");
    });
};

$.fn.showAddress = function(json){
    var data = json;
    var that = this;
    return this.each(function(){
        $(that).slideDown('slow');
        $(that).find("#name").html(data.name);
        $(that).find("#street1").html(data.street1);
        $(that).find("#street2").html(data.street2);
        $(that).find("#city").html(data.city);
        $(that).find("#country").html(data.country);
        $(that).find("#zipcode").html(data.zipcode);
    });
};
</pre>
<p>Download jquery-1.4.2.min.js, jquery-ui-1.8.1.custom.min.js and jquery.form.js to public/js folder.<br/>
<strong><em> </em></strong></p>
<p><strong><em>6)  Start the web server</em></strong></p>
<p>[/sourcecode]<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">lein repl src/address_book/webserver.clj [/sourceode]</span></p>
<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;"><a href="http://sivajag.files.wordpress.com/2010/08/screen-shot-2010-08-24-at-10-38-18-pm.png"><img alt="" class="alignnone size-full wp-image-164" height="274" src="http://sivajag.files.wordpress.com/2010/08/screen-shot-2010-08-24-at-10-38-18-pm.png?w=700&amp;h=274" title="My Address book Part 4" width="700"/></a></span></p>
<p>Wow that was lot of stuff.  We will look more into writing our own middlewares in next <a href="http://techbehindtech.com/2010/09/02/compojure-demystified-with-an-example-part-5/">part</a>.</p>
<p><strong><em>Source code is now available at </em></strong><a href="http://github.com/sivajag/Address-Book"><strong><em>github</em></strong></a><strong><em>. Created branches for each part.</em></strong></p>
<p><strong><em><span style="font-style: normal; font-weight: normal;"><a href="http://techbehindtech.com/2010/09/02/compojure-demystified-with-an-example-part-5/">Part 5</a> is posted.</span></em></strong></p>
<br/>Filed under: <a href="http://techbehindtech.com/category/clojure/">Clojure</a> Tagged: <a href="http://techbehindtech.com/tag/clojure-2/">clojure</a>, <a href="http://techbehindtech.com/tag/code/">code</a>, <a href="http://techbehindtech.com/tag/compojure/">compojure</a>, <a href="http://techbehindtech.com/tag/jquery/">jquery</a>, <a href="http://techbehindtech.com/tag/rest/">REST</a>, <a href="http://techbehindtech.com/tag/web/">web</a> <a href="http://feeds.wordpress.com/1.0/gocomments/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sivajag.wordpress.com/146/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sivajag.wordpress.com/146/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sivajag.wordpress.com/146/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sivajag.wordpress.com/146/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sivajag.wordpress.com/146/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sivajag.wordpress.com/146/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/sivajag.wordpress.com/146/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sivajag.wordpress.com/146/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=146&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2010-08-24T23:25:25Z</updated>
    <category term="Clojure"/>
    <category term="clojure"/>
    <category term="code"/>
    <category term="compojure"/>
    <category term="jquery"/>
    <category term="REST"/>
    <category term="web"/>
    <author>
      <name>Siva Jagadeesan</name>
    </author>
    <source>
      <id>http://techbehindtech.com</id>
      <logo>http://0.gravatar.com/blavatar/ea259bd3a901b0e5c68149ed7392c564?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://techbehindtech.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://techbehindtech.com" rel="alternate" type="text/html"/>
      <link href="http://techbehindtech.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://techbehindtech.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Raw information. No finesse :)</subtitle>
      <title>Tech behind Tech</title>
      <updated>2010-09-02T16:05:48Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5638372.post-3798532845083345185</id>
    <link href="http://binkley.blogspot.com/feeds/3798532845083345185/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=5638372&amp;postID=3798532845083345185" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/3798532845083345185" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/3798532845083345185" rel="self" type="application/atom+xml"/>
    <link href="http://binkley.blogspot.com/2010/08/large-scale-refactoring.html" rel="alternate" type="text/html"/>
    <title>Large-scale refactoring</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Vikas Hazrati has <a href="http://www.infoq.com/news/2010/08/large-scale-refactoring" title="How To Do Large Scale Refactoring">a nice post on large-scale refactoring</a> on InfoQ.  I'm a strangler.  You?</p><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5638372-3798532845083345185?l=binkley.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-24T19:33:26Z</updated>
    <published>2010-08-24T19:33:00Z</published>
    <author>
      <name>binkley</name>
      <email>binkley@alumni.rice.edu</email>
      <uri>http://www.blogger.com/profile/06617364377560752378</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5638372</id>
      <author>
        <name>binkley</name>
        <email>binkley@alumni.rice.edu</email>
        <uri>http://www.blogger.com/profile/06617364377560752378</uri>
      </author>
      <link href="http://binkley.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://binkley.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Just myself.</subtitle>
      <title>binkley's BLOG</title>
      <updated>2010-08-31T16:47:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://onemanswalk.com/work/?p=225</id>
    <link href="http://onemanswalk.com/work/2010/08/24/where-are-your-keys-comes-to-seattle/" rel="alternate" type="text/html"/>
    <title>“Where Are Your Keys?” Comes to Seattle…</title>
    <summary>Do you like learning languages?  Maybe you’ve always wanted to learn a language?  Maybe you’d like to get better at teaching languages?  Maybe you don’t care about languages but you’re a trainer or teacher or a student?

	If any of these are true for you and could be in Seattle on Sep 4th [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Do you like learning languages?  Maybe you’ve always wanted to learn a language?  Maybe you’d like to get better at teaching languages?  Maybe you don’t care about languages but you’re a trainer or teacher or a student?</p>

	<p>If any of these are true for you and could be in Seattle on Sep 4th &amp; 5th, then read on…</p>

	<p/><hr/>

	<h2>Where Are Your Keys, Seattle?</h2>

	<p><a href="http://whereareyourkeys.org/" title="">Where Are Your Keys?</a> (WAYK) is an <em>amazing</em> community language learning game which is great not only for learning and teaching language, but also for learning techniques that are good for learning / teaching, period.</p>

	<p>Karissa and I went to a weekend workshop in Portland early this year and we were both blown away by it.  We’ve gotten the creators to come up to Seattle to do a workshop here, at our house, on Sep 4th &amp; 5th, and I want to invite you.</p>

	<p/>

	<p>It’s $125 for 2 intense days with a light breakfast &amp; lunch provided on each day.  But trust me, at the end of 2 days, you will be a badass <img alt=":)" class="wp-smiley" src="http://onemanswalk.com/work/wp-includes/images/smilies/icon_smile.gif"/> .  And you’ll have the skills to learn the basics of any language.  From anyone.</p>

	<p>We have till the end of the weekend to get enough interest to make the workshop happen, so if you’re interested, <span class="caps">PLEASE</span></p>

	<p><a href="http://whereareyourkeys.org/2010/08/21/seattle-wayk-workshop-september-4th-and-5th/"><button>Sign Up Here</button></a></p>

	<p/><hr/>

	<h2>Applying <span class="caps">WAYK</span>…</h2>

	<p>Karissa &amp; I have applied techniques from “Where Are Your Keys?” to both our dance teaching and my consulting, and would love to have a larger community to help us discover other ways to apply it to teaching &amp; learning.  We’re planning on starting a local monthly game, and we’re hoping to use this workshop to kickstart the Seattle <span class="caps">WAYK</span> community.</p>

	<p>For my part, <span class="caps">WAYK</span> has changed the way I organize classes.  Techniques like “Start Over”, “Setup”, “Full”, “Limit”, “We all get there together”, are just some of the techniques that are now part of virtually all my classes.</p>

	<p>If you teach people anything, I recommend you check it out.</p>

	<p/><hr/>

	<p>Like I said, we still need to get a few more people registered so that this workshop happens, so please forward this to anyone you think might be interested!</p></div>
    </content>
    <updated>2010-08-24T16:24:13Z</updated>
    <category term="Uncategorized"/>
    <author>
      <name>jeremy</name>
    </author>
    <source>
      <id>http://onemanswalk.com/work</id>
      <link href="http://onemanswalk.com/work/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://onemanswalk.com/work" rel="alternate" type="text/html"/>
      <subtitle>jeremy lightsmith on agile, ruby, and consulting</subtitle>
      <title>One Man's Walk in work</title>
      <updated>2010-08-26T22:04:43Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1096</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/OiZU3VheKFc/rates-as-a-function-of-capacity.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Rates as a function of capacity</title>
    <summary>I recently had the pleasure of attending the June meeting of Dublin chapter of the Bootstrappers Breakfast. After the meeting there was a Q &amp; A session with the remaining attendees. I remarked to Sean Murphy that I’ve recently moved to a new pricing model for consulting. I’ve started to adjust my pricing based on [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I recently had the pleasure of attending the June meeting of Dublin chapter of the <a href="http://www.bootstrappersbreakfast.com/">Bootstrappers Breakfast</a>.  After the meeting there was a Q &amp; A session with the remaining attendees. I remarked to Sean Murphy that I’ve recently moved to a new pricing model for consulting.  I’ve started to adjust my pricing based on my current capacity.  That is, as my schedule becomes fuller and I become busier, my hourly rates increase.  That way clients can decide for themselves how important their project is.  If it can wait, we push the project back a bit, my price goes down and the clients get a price break.  If there is an immediate need, they will need to pay a premium and it will be a rush job.</p>
<p>I do this because the last few hours of my week act as a buffer for anything unexpected that should come up.  If I pack my schedule to the brim, I run the risk of all sorts of chaos if/when anything unexpected comes up.</p>
<p>In lean terms, I’m increasing costs as my capacity decreases.</p>
<p>Why? A few reasons:</p>
<p>First, it provides an incentive to prevent me from becoming overtaxed and taking on too much work.  This regulates the flow of work into my 1530 schedule and provides a sort of cadence for new work.  This allows me to plan more efficiently.</p>
<p>Secondly, by stabilizing the work in and out, I stabilize my flow.  This helps me churn out better work quicker.  If you take on everything that comes your way for the same price, there’s no doubt that that you would begin to resent those last few pieces of work that you’re cranking away on any given Sunday night.  With the rate increase, at least there is ability to look back and see that there is increased compensation for working later at night and into the weekend.</p>
<p>I should note that this obviously this can alienate clients and cause you to lose work.  However, part of managing a successful service based business is to know when and how to control clients.  If you simply say ‘Yes’ all of the time to everyone, you’ll quickly find yourself taking on much more work than you’re capable of.  That will lead to you not being able to deliver consistently excellent work and you’ll lose clients anyway.  I would rather have a healthy relationship with a client and be able to say ‘No’ as often as I say ‘Yes’.  Those are the kinds of clients you’ll be able to build a sustainable business from.</p>
<p>BTW, this isn’t a new concept.  The concept of <a href="http://en.wikipedia.org/wiki/Cadence">cadence</a> and queue management is applied in a lot of different places.  For example, Chicago is <a href="http://www.chicagotribune.com/news/local/northnorthwest/ct-met-hot-lanes-0713-20100713,0,1676195.story">entertaining the idea</a> of rolling out congestion based pricing for its tollways that’s similar to several other tollways across the US.  Comed and other electric companies employ <a href="http://www.thewattspot.com/">Real-Time Pricing</a>.  These are just two other examples and there are many more.</p>
<p>Take a look at your own life and see if you can figure out ways to employ a form of cadence to help stabilize things.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/OiZU3VheKFc" width="1"/></div>
    </content>
    <updated>2010-08-24T15:26:20Z</updated>
    <category term="Business"/>
    <category term="Small Team Lean"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/rates-as-a-function-of-capacity.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>urn:uuid:865a65c7-638c-4751-aea6-f2b2e5e9d554</id>
    <link href="http://feeds.floehopper.org/~r/floehopper-blog/~3/fVKQiY3sy34/ruby-acceptance-testing" rel="alternate" type="text/html"/>
    <title xml:lang="en-US">Ruby Acceptance Testing</title>
    <summary type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>In his recent article <a href="http://elabs.se/blog/15-you-re-cuking-it-wrong">You’re Cuking It Wrong</a>, Jonas Nicklas compares the following scenario which was submitted in a <a href="http://cukes.info/">Cucumber</a> issue :-</p>


<div class="typocode"><pre><code class="typocode_default ">Scenario: Adding a subpage
  Given I am logged in
  Given a microsite with a Home page
  When I click the Add Subpage button
  And I fill in "Gallery" for "Title" within "#document_form_container"
  And I press "Ok" within ".ui-dialog-buttonpane"
  Then I should see /Gallery/ within "#documents"</code></pre></div>

	<p>With an improved version which he has written :-</p>


<div class="typocode"><pre><code class="typocode_default ">Scenario: Adding a subpage
  Given I am logged in
  Given a microsite with a home page
  When I press "Add subpage"
  And I fill in "Title" with "Gallery"
  And I press "Ok"
  Then I should see a document called "Gallery"</code></pre></div>

	<h3>Levels of Abstraction</h3>


	<p>Jonas says :-</p>


	<blockquote>
		<p>there’s one crucial difference: the first feature is code, the second isn’t</p>
	</blockquote>


	<p>Although I see what Jonas is getting at, neither of them are actually Ruby code – both are written in Cucumber’s <a href="http://wiki.github.com/aslakhellesoy/cucumber/gherkin">Gherkin</a> DSL. The key difference is really the level of abstraction – the first version has a test that is less abstracted from the implementation than the second version. As Jonas correctly points out, the test in the second version is consequently more readable and is less coupled to the underlying implementation.</p>


	<h3>Readability</h3>


	<p>Jonas also says :-</p>


	<blockquote>
		<p>The argument against cucumber that’s often presented is that as a programmer, plain text is unnecessary, because we can all read code.</p>
	</blockquote>


	<p>However, it’s a mistake to think that making a test readable <em>necessarily</em> means that it has to be written in a <a href="http://en.wikipedia.org/wiki/Natural_language">natural language</a>. We could equally well write something like this :-</p>


<div class="typocode"><pre><code class="typocode_ruby "><span class="ident">scenario</span> <span class="punct">"</span><span class="string">adding a subpage</span><span class="punct">"</span> <span class="punct">{</span>
  <span class="ident">given</span> <span class="punct">{</span>
    <span class="ident">i_am_logged_in</span>
    <span class="ident">a_microsite_with_a_home_page</span>
  <span class="punct">}</span>
  <span class="keyword">when</span> <span class="punct">{</span>
    <span class="ident">i_press</span> <span class="punct">"</span><span class="string">Add subpage</span><span class="punct">"</span>
    <span class="ident">i_fill_in</span> <span class="punct">"</span><span class="string">Title</span><span class="punct">",</span><span class="symbol">:with=</span><span class="punct">&gt;"</span><span class="string">Gallery</span><span class="punct">"</span>
    <span class="ident">i_press</span> <span class="punct">"</span><span class="string">Ok</span><span class="punct">"</span>
  <span class="punct">}</span>
  <span class="keyword">then</span> <span class="punct">{</span>
    <span class="ident">i_should_see_a_document_called</span> <span class="punct">"</span><span class="string">Gallery</span><span class="punct">"</span>
  <span class="punct">}</span>
<span class="punct">}</span></code></pre></div>

	<p>While I would agree that my version isn’t as pretty as Jonas’ version, I’d suggest it’s almost as <em>readable</em>. The difference being this is all valid Ruby code. I once saw someone (<a href="http://www.natpryce.com/">Nat Pryce</a> or <a href="http://www.m3p.co.uk/">Steve Freeman</a>, I think) do a neat trick where they changed the syntax highlighting in an editor to make some characters invisible and as a result made the code more readable. We could probably do something similar to make braces, underscores, etc invisible, and end up with something as good as Jonas’ version :-</p>


<div class="typocode"><pre><code class="typocode_default ">scenario "adding a subpage"
  given
    i am logged in
    a microsite with a home page

  when 
    i press "Add subpage"
    i fill in "Title"  with  "Gallery"
    i press "Ok"

  then 
    i should see a document called "Gallery"
  </code></pre></div>

	<h3>Overhead</h3>


	<p>It seems obvious to me that Cucumber adds an overhead in writing tests. It requires me to use regular expressions to convert natural language into code. While I recognise that the overhead is often small, it does still exist and I’ve definitely spent time debugging this aspect of tests. Given that I think it’s possible to write nicely abstracted readable tests in Ruby, it’s not obvious to me that the overhead of using Cucumber is worthwhile.</p>


	<p>I’m going to try and find the time to look at frameworks like <a href="http://github.com/elight/coulda">Coulda</a> and <a href="http://github.com/cavalle/steak">Steak</a> which seem to be more in line with my favoured approach.</p>


	<h4>Update</h4>


	<p>I thought it might be useful to include a quote from and a link to James Shore’s article on <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html">The Problems of Acceptance Testing</a></p>


	<blockquote>
		<p>My experience with Fit and other agile acceptance testing tools is that they cost more than they’re worth. There’s a lot of value in getting concrete examples from real customers and business experts; not so much value in using “natural language” tools like Fit and similar.</p>
	</blockquote></div>
    </summary>
    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>In his recent article <a href="http://elabs.se/blog/15-you-re-cuking-it-wrong">You’re Cuking It Wrong</a>, Jonas Nicklas compares the following scenario which was submitted in a <a href="http://cukes.info/">Cucumber</a> issue :-</p>


<div class="typocode"><pre><code class="typocode_default ">Scenario: Adding a subpage
  Given I am logged in
  Given a microsite with a Home page
  When I click the Add Subpage button
  And I fill in "Gallery" for "Title" within "#document_form_container"
  And I press "Ok" within ".ui-dialog-buttonpane"
  Then I should see /Gallery/ within "#documents"</code></pre></div>

	<p>With an improved version which he has written :-</p>


<div class="typocode"><pre><code class="typocode_default ">Scenario: Adding a subpage
  Given I am logged in
  Given a microsite with a home page
  When I press "Add subpage"
  And I fill in "Title" with "Gallery"
  And I press "Ok"
  Then I should see a document called "Gallery"</code></pre></div>

	<h3>Levels of Abstraction</h3>


	<p>Jonas says :-</p>


	<blockquote>
		<p>there’s one crucial difference: the first feature is code, the second isn’t</p>
	</blockquote>


	<p>Although I see what Jonas is getting at, neither of them are actually Ruby code – both are written in Cucumber’s <a href="http://wiki.github.com/aslakhellesoy/cucumber/gherkin">Gherkin</a> DSL. The key difference is really the level of abstraction – the first version has a test that is less abstracted from the implementation than the second version. As Jonas correctly points out, the test in the second version is consequently more readable and is less coupled to the underlying implementation.</p>


	<h3>Readability</h3>


	<p>Jonas also says :-</p>


	<blockquote>
		<p>The argument against cucumber that’s often presented is that as a programmer, plain text is unnecessary, because we can all read code.</p>
	</blockquote>


	<p>However, it’s a mistake to think that making a test readable <em>necessarily</em> means that it has to be written in a <a href="http://en.wikipedia.org/wiki/Natural_language">natural language</a>. We could equally well write something like this :-</p>


<div class="typocode"><pre><code class="typocode_ruby "><span class="ident">scenario</span> <span class="punct">"</span><span class="string">adding a subpage</span><span class="punct">"</span> <span class="punct">{</span>
  <span class="ident">given</span> <span class="punct">{</span>
    <span class="ident">i_am_logged_in</span>
    <span class="ident">a_microsite_with_a_home_page</span>
  <span class="punct">}</span>
  <span class="keyword">when</span> <span class="punct">{</span>
    <span class="ident">i_press</span> <span class="punct">"</span><span class="string">Add subpage</span><span class="punct">"</span>
    <span class="ident">i_fill_in</span> <span class="punct">"</span><span class="string">Title</span><span class="punct">",</span><span class="symbol">:with=</span><span class="punct">&gt;"</span><span class="string">Gallery</span><span class="punct">"</span>
    <span class="ident">i_press</span> <span class="punct">"</span><span class="string">Ok</span><span class="punct">"</span>
  <span class="punct">}</span>
  <span class="keyword">then</span> <span class="punct">{</span>
    <span class="ident">i_should_see_a_document_called</span> <span class="punct">"</span><span class="string">Gallery</span><span class="punct">"</span>
  <span class="punct">}</span>
<span class="punct">}</span></code></pre></div>

	<p>While I would agree that my version isn’t as pretty as Jonas’ version, I’d suggest it’s almost as <em>readable</em>. The difference being this is all valid Ruby code. I once saw someone (<a href="http://www.natpryce.com/">Nat Pryce</a> or <a href="http://www.m3p.co.uk/">Steve Freeman</a>, I think) do a neat trick where they changed the syntax highlighting in an editor to make some characters invisible and as a result made the code more readable. We could probably do something similar to make braces, underscores, etc invisible, and end up with something as good as Jonas’ version :-</p>


<div class="typocode"><pre><code class="typocode_default ">scenario "adding a subpage"
  given
    i am logged in
    a microsite with a home page

  when 
    i press "Add subpage"
    i fill in "Title"  with  "Gallery"
    i press "Ok"

  then 
    i should see a document called "Gallery"
  </code></pre></div>

	<h3>Overhead</h3>


	<p>It seems obvious to me that Cucumber adds an overhead in writing tests. It requires me to use regular expressions to convert natural language into code. While I recognise that the overhead is often small, it does still exist and I’ve definitely spent time debugging this aspect of tests. Given that I think it’s possible to write nicely abstracted readable tests in Ruby, it’s not obvious to me that the overhead of using Cucumber is worthwhile.</p>


	<p>I’m going to try and find the time to look at frameworks like <a href="http://github.com/elight/coulda">Coulda</a> and <a href="http://github.com/cavalle/steak">Steak</a> which seem to be more in line with my favoured approach.</p>


	<h4>Update</h4>


	<p>I thought it might be useful to include a quote from and a link to James Shore’s article on <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html">The Problems of Acceptance Testing</a></p>


	<blockquote>
		<p>My experience with Fit and other agile acceptance testing tools is that they cost more than they’re worth. There’s a lot of value in getting concrete examples from real customers and business experts; not so much value in using “natural language” tools like Fit and similar.</p>
	</blockquote><img height="1" src="http://feeds.feedburner.com/~r/floehopper-blog/~4/fVKQiY3sy34" width="1"/></div>
    </content>
    <updated>2010-08-24T13:03:01Z</updated>
    <published>2010-08-19T21:23:00Z</published>
    <category scheme="http://blog.floehopper.org/articles/tag/cucumber" term="cucumber"/>
    <category scheme="http://blog.floehopper.org/articles/tag/gherkin" term="gherkin"/>
    <category scheme="http://blog.floehopper.org/articles/tag/acceptance" term="acceptance"/>
    <category scheme="http://blog.floehopper.org/articles/tag/testing" term="testing"/>
    <category scheme="http://blog.floehopper.org/articles/tag/natural" term="natural"/>
    <category scheme="http://blog.floehopper.org/articles/tag/language" term="language"/>
    <category scheme="http://blog.floehopper.org/articles/tag/abstraction" term="abstraction"/>
    <category scheme="http://blog.floehopper.org/articles/tag/readability" term="readability"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.floehopper.org/articles/2010/08/19/ruby-acceptance-testing</feedburner:origlink>
    <author>
      <name>James Mead</name>
    </author>
    <source>
      <id>tag:blog.floehopper.org,2005:Typo</id>
      <link href="http://blog.floehopper.org/" rel="alternate" type="text/html"/>
      <link href="http://feeds.floehopper.org/floehopper-blog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle xml:lang="en-US">thoughts on the bergy bits of life</subtitle>
      <title xml:lang="en-US">Floehopper</title>
      <updated>2010-08-24T13:03:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5638372.post-4238310328536133022</id>
    <link href="http://binkley.blogspot.com/feeds/4238310328536133022/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=5638372&amp;postID=4238310328536133022" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/4238310328536133022" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/5638372/posts/default/4238310328536133022" rel="self" type="application/atom+xml"/>
    <link href="http://binkley.blogspot.com/2010/08/have-tools-will-code.html" rel="alternate" type="text/html"/>
    <title>Have tools, will code</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Thanks to the benevolent JetBrains, I now have an OSS license for IntelliJ IDEA <a href="http://binkley.blogspot.com/2010/08/nexus-out-android-in.html" title="Nexus out, Android in">to develop an Android app</a>.  I first started using IDEA at ThoughtWorks where it quickly became my favorite development tool.</p> <p>And thanks to Turbine, I have my data.lotro.com developer key!  So I am ready to start an LOTRO Android App.  And I've already been getting <a href="http://forums.lotro.com/showthread.php?t=350815" title="How to get a data.lotro.com developer key?">encouraging words</a> from the LOTRO forums.  Go, community!</p><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5638372-4238310328536133022?l=binkley.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-24T10:22:34Z</updated>
    <published>2010-08-24T10:22:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="lotro"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="android"/>
    <author>
      <name>binkley</name>
      <email>binkley@alumni.rice.edu</email>
      <uri>http://www.blogger.com/profile/06617364377560752378</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5638372</id>
      <author>
        <name>binkley</name>
        <email>binkley@alumni.rice.edu</email>
        <uri>http://www.blogger.com/profile/06617364377560752378</uri>
      </author>
      <link href="http://binkley.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://binkley.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/5638372/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Just myself.</subtitle>
      <title>binkley's BLOG</title>
      <updated>2010-08-31T16:47:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-23</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/jd-HNmaHlUA/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-23 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://packages.python.org/ordf/odm.html">Object Description Mapper — Open Knowledge Foundation RDF v0.14 documentation</a></li>
<li><a href="http://text-processing.com/docs/">API Documentation for text-processing.com — text-processing.com API v1.0 documentation</a></li>
<li><a href="http://www.soccermanager.com/index.php">Free online football manager game - Soccer Manager.com</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/jd-HNmaHlUA" width="1"/></div>
    </summary>
    <updated>2010-08-24T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-23</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://agilewarrior.wordpress.com/?p=787</id>
    <link href="http://feedproxy.google.com/~r/AgileWarriorBlog/~3/lVInHOQH7OU/" rel="alternate" type="text/html"/>
    <title>JR</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Movie might be a bit of stretch. Heck trailer might be a bit of a stretch. But when the Prags asked me to make a short promotional video for the Agile Samurai I immediately said: “Hell ya!” The first cut of the video (the one I really wanted to use) looked something like this: But <a class="excerpt-more-link" href="http://agilewarrior.wordpress.com/2010/08/23/agile-samurai-the-movie/">[…]</a><img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=787&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Movie might be a bit of stretch. Heck trailer might be a bit of a stretch.</p>
<p>But when the <a href="http://www.pragprog.com/">Prags</a> asked me to make a short promotional video for the <a href="http://www.pragprog.com/titles/jtrap/the-agile-samurai">Agile Samurai</a> I immediately said: “Hell ya!”</p>
<p>The first cut of the video (the one I really wanted to use) looked something like this:</p>
<p><span style="text-align: center; display: block;"><a href="http://agilewarrior.wordpress.com/2010/08/23/agile-samurai-the-movie/"><img alt="" src="http://img.youtube.com/vi/9d_37JLoOmg/2.jpg"/></a></span></p>
<p>But for obvious copyright infringement purposes, it ended up looking more like this.</p>
<p><span style="text-align: center; display: block;"><a href="http://agilewarrior.wordpress.com/2010/08/23/agile-samurai-the-movie/"><img alt="" src="http://img.youtube.com/vi/8lRBU2cxOE0/2.jpg"/></a></span></p>
<p>Making short clips like this is super easy with <a href="http://www.apple.com/ilife/imovie/">iMovie</a>. All you need are some jpgs of slides you’d like to present and video of stuff you’d like to edit.</p>
<p>Slides you can create with PowerPoint, KeyNote, or Illustrator. You just need to be able to export and save them somewhere as jpgs.</p>
<p>Video you can get from youtube, and download and import into iMovie (as mp4s) using <a href="http://keepvid.com">keepvid.com</a>.</p>
<p>And once in iMovie everything else is a snap. You simply cut the scenes you want, order the slides, add and remove audio, and in no time you’ll have a fun one to two minute video of something you’ve always wanted to create.</p>
<p>Happy moving making!</p>
<br/>Filed under: <a href="http://agilewarrior.wordpress.com/category/agile/">agile</a> Tagged: <a href="http://agilewarrior.wordpress.com/tag/agile/">agile</a>, <a href="http://agilewarrior.wordpress.com/tag/agile-samurai/">agile samurai</a>, <a href="http://agilewarrior.wordpress.com/tag/apple/">apple</a>, <a href="http://agilewarrior.wordpress.com/tag/book/">book</a>, <a href="http://agilewarrior.wordpress.com/tag/imovie/">imovie</a>, <a href="http://agilewarrior.wordpress.com/tag/movie-making/">movie making</a> <a href="http://feeds.wordpress.com/1.0/gocomments/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/agilewarrior.wordpress.com/787/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/agilewarrior.wordpress.com/787/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/agilewarrior.wordpress.com/787/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/agilewarrior.wordpress.com/787/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/agilewarrior.wordpress.com/787/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/agilewarrior.wordpress.com/787/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/agilewarrior.wordpress.com/787/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/agilewarrior.wordpress.com/787/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=787&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/><img height="1" src="http://feeds.feedburner.com/~r/AgileWarriorBlog/~4/lVInHOQH7OU" width="1"/></div>
    </content>
    <updated>2010-08-23T22:21:17Z</updated>
    <category term="agile"/>
    <category term="agile samurai"/>
    <category term="apple"/>
    <category term="book"/>
    <category term="imovie"/>
    <category term="movie making"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://agilewarrior.wordpress.com/2010/08/23/agile-samurai-the-movie/</feedburner:origlink>
    <author>
      <name>JR</name>
    </author>
    <source>
      <id>http://agilewarrior.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/f5507dfac8bd5cc9a12c654ee97e46fe?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://agilewarrior.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://feeds.feedburner.com/AgileWarriorBlog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>A blog about creating valuable software</subtitle>
      <title>The Agile Warrior</title>
      <updated>2010-09-02T13:06:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1093</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/ZRtzp9ijvC4/socialize-debt-and-privatize-profit.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Socialize debt and privatize profit</title>
    <summary>Fantastic interview with David Zirin, author of ‘Bad Sports’. You socialize the debt of a stadium project, but the profit goes to private hands. In a lot of ways you can look at sports as being a kind of Trojan Horse for enacting a set of policies that nobody would agree with it if were [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Fantastic <a href="http://www.expressnightout.com/content/2010/08/dave-zirin-bad-sports-at-politics-prose.php">interview</a> with David Zirin, author of ‘Bad Sports’.</p>
<blockquote><p>
You socialize the debt of a stadium project, but the profit goes to private hands. In a lot of ways you can look at sports as being a kind of Trojan Horse for enacting a set of policies that nobody would agree with it if were about any other business or entity. On the other hand, you could see it as a harbinger to the bank bailouts that have just taken place and to the entire economic recovery plan that has been enacted over the last couple of years.
</p></blockquote>
<p>And lest you think it’s just about the money:</p>
<blockquote><p>
Donald Sterling, owner of the Clippers, just had to write a check for the largest racial housing discrimination suit in the history of the United States, and NBA commissioner David Stern doesn’t say a damn thing, even though his league is more than 80 percent African-American. And now he’s being sued by NBA Hall of Famer Elgin Baylor — inarguably the greatest player to come out of Washington, D.C. — for racial discrimination, and once again Stern saying nothing.
</p></blockquote>
<p>This is the same commissioner that mandates a <a href="http://en.wikipedia.org/wiki/NBA_dress_code">dress code</a> for players.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/ZRtzp9ijvC4" width="1"/></div>
    </content>
    <updated>2010-08-23T17:17:27Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/socialize-debt-and-privatize-profit.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1092</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/Nvqzcivh33U/wait-you-mean-200-million-for-100-losses-a-year-is-bad.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Wait, you mean $200 million for 100+ losses a year is bad?</title>
    <summary>Revenue sharing is one of the hallmarks of baseball. Small market teams get to reap the financial benefits from larger market teams. They get a guaranteed payout every year regardless of team performance. Given that, I can’t imagine why the Pittsburgh Pirate owners wouldn’t want to increase payroll to win. From The Sports Economist: If [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Revenue sharing is one of the hallmarks of baseball.  Small market teams get to reap the financial benefits from larger market teams.  They get a guaranteed payout every year regardless of team performance.  Given that, I can’t imagine why the Pittsburgh Pirate owners wouldn’t want to increase payroll to win.  From <a href="http://thesportseconomist.com/wordpress/2010/08/23/the-perils-of-revenue-sharing">The Sports Economist</a>:</p>
<blockquote><p>
If they won and were forced to increase their payroll from $34 million to $75 million or $80 million … how profitable would they be? There’s a ceiling in terms of gate revenues, ” said Dave Berri and Roger Noll, a Stanford University economist, follows with, “Probably the Pirates would be less profitable if they tried to improve the team substantially.”
</p></blockquote>
<p>Ah.</p>
<p><a href="http://blog.1530technologies.com/2010/06/basketball-lean-and-incentives.html">Once</a> <a href="http://blog.1530technologies.com/2010/08/a-painful-dilemma-over-how-high-to-set-prices.html">again</a>, people, true incentives dictate behavior.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/Nvqzcivh33U" width="1"/></div>
    </content>
    <updated>2010-08-23T14:56:53Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/wait-you-mean-200-million-for-100-losses-a-year-is-bad.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1091</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/d50lKs4nnVo/deliver-on-wednesdays-not-fridays-or-mondays.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Deliver on Wednesdays, not Fridays or Mondays</title>
    <summary>When jumping into any company, people will immediately begin to ask that you finish things BY FRIDAY! Monday is another typical choice for deadlines. The end of the week and start of a new week is the perfect time to pick for delivering. Why? Well, for starters, Friday is the end of the work week [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>When jumping into any company, people will immediately begin to ask that you finish things <strong>BY FRIDAY</strong>!  Monday is another typical choice for deadlines.  The end of the week and start of a new week is the perfect time to pick for delivering.</p>
<p>Why?</p>
<p>Well, for starters, Friday is the end of the work week and Monday is the beginning.  It’s a simple concept to grasp. It doesn’t take too much work to remember when, in relation to today, things are due.  “It’s Wednesday, so my project is due in two days.”  Simple.</p>
<p>But is it the best?  Is Friday/Monday really the ideal delivery dates for things?  Obviously, if you’ve read this posts title, you know that I would argue that it isn’t.  Why?</p>
<p>Frankly, every single person sees the two days between Friday &amp; Monday as cushion.  “It’s really ok if it’s not done until Friday, I can just put in a few hours over the weekend.”  Wrong.  By thinking like that, most people develop <a href="http://en.wikipedia.org/wiki/Student_syndrome">Student Syndrome</a>.  They’ll let things slip and slip and slip until the deadline is staring themselves in the face.  When that happens, the best way to ensure you’re doing sub-par work is to try and cram it into a weekend.</p>
<p>Second, have you actually ever tried to get something done on a Friday? Also, forget about getting other people to help you.  In most offices, by 3pm Friday afternoon, the place will be a ghost town.  Monday mornings are almost worse since those that ARE there will likely be lethargic and “catching up” on things that they themselves didn’t do on Friday.</p>
<p>It’s also easier to miss Mondays &amp; Fridays.  3-Day weekends, holidays, vacations and plain ‘ol “sick days” are more likely to fall on Mondays and Fridays than any other days.</p>
<p>Be sane.  Always pick either Tuesday, Wednesday or Thursday for deadlines.  Preferably Wednesdays, since they’re right in the middle.  It gives two days from the weekend either way.  You can start the week refreshed knowing nothing is due immediately and it gives you two days to get into your zone for deliver.  Same goes for Thursday and Friday.  You can usually get substantial work done on a project on Thursday and Friday and not worry too much about forgetting where you were on Monday morning.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/d50lKs4nnVo" width="1"/></div>
    </content>
    <updated>2010-08-22T22:05:35Z</updated>
    <category term="Business"/>
    <category term="Small Team Lean"/>
    <category term="Technology"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/deliver-on-wednesdays-not-fridays-or-mondays.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1089</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/qDo5I2GcWMo/debt-no-matter-how-creatively-structured-is-anathema-to-peace-of-mind.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Debt, no matter how creatively structured, is anathema to peace of mind.</title>
    <summary>Ryan Freitas on 35 lessons he’s learned in his 35 years. The title should certainly resonate with anyone who’s spent more than 5 minutes talking with me about startups and funding. My second favorite lesson: Your reputation is more important than your paycheck, and your integrity is worth more than your career. Amen to that.</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Ryan Freitas on <a href="http://ryanfreitas.tumblr.com/post/968361763/35-lessons-in-35-years">35 lessons he’s learned in his 35 years</a>.  The title should <a href="http://blog.1530technologies.com/2010/02/being-my-own-angel-investor.html">certainly</a> <a href="http://blog.1530technologies.com/2010/04/cash-rules-everything-around-me.html">resonate</a> with anyone who’s spent more than 5 minutes talking with me about startups and funding.</p>
<p>My second favorite lesson:</p>
<blockquote><p>Your reputation is more important than your paycheck, and your integrity is worth more than your career.</p></blockquote>
<p>Amen to that.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/qDo5I2GcWMo" width="1"/></div>
    </content>
    <updated>2010-08-22T18:00:41Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/debt-no-matter-how-creatively-structured-is-anathema-to-peace-of-mind.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1088</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/HaeUWC1R8q0/a-painful-dilemma-over-how-high-to-set-prices.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>A painful dilemma over how high to set prices</title>
    <summary>Interesting economics spin around the unadvertised short cappuccino at Starbucks by Slate. The practice is hundreds of years old. The French economist Emile Dupuit wrote about the early days of the railways, when third-class carriages were built without roofs, even though roofs were cheap: “What the company is trying to do is prevent the passengers [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.slate.com/id/2133754">Interesting economics spin</a> around the unadvertised short cappuccino at Starbucks by Slate.</p>
<blockquote><p>
The practice is hundreds of years old. The French economist Emile Dupuit wrote about the early days of the railways, when third-class carriages were built without roofs, even though roofs were cheap: “What the company is trying to do is prevent the passengers who can pay the second-class fare from traveling third class; it hits the poor, not because it wants to hurt them, but to frighten the rich.”
</p></blockquote>
<p>I continuously maintain that we should be introducing basic, basic economic lessons to our kids earlier and earlier.  It’s so critical to understand incentives.  Especially how people manipulate things in response to to said incentives.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/HaeUWC1R8q0" width="1"/></div>
    </content>
    <updated>2010-08-22T03:07:45Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/a-painful-dilemma-over-how-high-to-set-prices.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1087</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/SAFlKn5vXyM/creep-executive-officier.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Creep Executive Officier</title>
    <summary>Gruber nails my feelings with this critique of Eric Schmidt.</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://daringfireball.net/">Gruber</a> nails <a href="http://blog.1530technologies.com/2010/08/why-google-im-shocked.html">my feelings</a>  with this <a href="http://daringfireball.net/2010/08/creep_executive_officer">critique</a> of Eric Schmidt.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/SAFlKn5vXyM" width="1"/></div>
    </content>
    <updated>2010-08-21T21:23:22Z</updated>
    <category term="Business"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/creep-executive-officier.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.1530technologies.com/?p=1084</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/BbEtWsgW7R8/piranha-3d-is-a-horror-movie-bar-mitzvah.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license"/>
    <title>Piranha 3D is a horror movie bar mitzvah.</title>
    <summary>Thus begins Cinematicals review of Piranha 3D It turns boys into men, cleaving their life into two distinct periods: Before Piranha 3D, a time we shall refer to as The Darkness, and after Piranha 3D, also known as The Awakening. Now that I have thankfully awoken in its glorious elysian fields of excessive gore and [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Thus begins <a href="http://www.cinematical.com">Cinematicals</a> <a href="http://www.cinematical.com/2010/08/20/review-piranha-3d/">review</a> of Piranha 3D</p>
<blockquote><p>
It turns boys into men, cleaving their life into two distinct periods: Before Piranha 3D, a time we shall refer to as The Darkness, and after Piranha 3D, also known as The Awakening. Now that I have thankfully awoken in its glorious elysian fields of excessive gore and outrageous nudity, I never want to return to horror films that require fewer than 800,000 gallons of fake blood spilling forth from 500 bikini-clad extras. Anything less is an insult and, frankly, a malicious waste of my time.
</p></blockquote>
<p>Sounds like quite a time.</p>
<img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/BbEtWsgW7R8" width="1"/></div>
    </content>
    <updated>2010-08-20T17:49:07Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.1530technologies.com/2010/08/piranha-3d-is-a-horror-movie-bar-mitzvah.html</feedburner:origlink>
    <author>
      <name>Griffin</name>
    </author>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://agilewarrior.wordpress.com/?p=768</id>
    <link href="http://feedproxy.google.com/~r/AgileWarriorBlog/~3/9IQ8HZWFl4U/" rel="alternate" type="text/html"/>
    <title>seven_samurai</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Two types of people you often find on software projects are samurai and rice pickers. Samurai are the ones who: say what needs to be said call BS when they see it laugh in the face of unrealistic schedules and expectations tackle all the hard, complex, thorny stuff no one else wants to wade into <a class="excerpt-more-link" href="http://agilewarrior.wordpress.com/2010/08/20/are-you-a-samurai-or-a-rice-picker/">[…]</a><img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=768&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Two types of people you often find on software projects are samurai and rice pickers.</p>
<p>Samurai are the ones who:</p>
<ul>
<li>say what needs to be said</li>
<li>call BS when they see it</li>
<li>laugh in the face of unrealistic schedules and expectations</li>
<li>tackle all the hard, complex, thorny stuff no one else wants to wade into</li>
<li>are technically excellent at their craft</li>
<li>take pride in their work</li>
<li>and are comfortable in their own skins</li>
</ul>
<p><img alt="" class="alignnone size-medium wp-image-770" height="225" src="http://agilewarrior.files.wordpress.com/2010/08/seven_samurai.jpg?w=300&amp;h=225" title="seven_samurai" width="300"/></p>
<p>They are usually the people you see project managers and companies fist fighting over to get onto their projects.</p>
<p>Every project/team needs a couple samurai.</p>
<p>Then there are the rice pickers.<br/>
If samurai are the pioneers, rice pickers are the settlers.</p>
<p>Rice pickers are the people who:</p>
<ul>
<li>like to collect a pay cheque, keep their heads down, and quietly go home at the end of the day.</li>
<li>aren’t necessarily lazy, they would just rather be told what to do and not have to think for themselves.</li>
<li>have opinions but aren’t big on taking the initiative</li>
<li>generally they just like to be left alone and are quite happy sitting in the maze nibbling their <a href="http://en.wikipedia.org/wiki/Who_Moved_My_Cheese%3F">cheese</a></li>
<li>they also form the bulk of our workforce</li>
</ul>
<p>Now, I’m not saying everyone can or should be a samurai.<br/>
The world needs rice pickers and people to keep the lights on.</p>
<p>But if you find you aren’t getting the opportunities, promotions, or things you feel entitled too, take a look in the mirror and honestly ask yourself:</p>
<p>And are you a samurai, or a rice picker?</p>
<p>Thanks to <a href="http://en.wikipedia.org/wiki/Jason_Calacanis">Jason Calacanis</a> for acting as the inspiration behind this post.</p>
<br/>Filed under: <a href="http://agilewarrior.wordpress.com/category/life/">life</a> Tagged: <a href="http://agilewarrior.wordpress.com/tag/career/">career</a>, <a href="http://agilewarrior.wordpress.com/tag/getting-ahead/">getting ahead</a>, <a href="http://agilewarrior.wordpress.com/tag/inspiration/">inspiration</a>, <a href="http://agilewarrior.wordpress.com/tag/life/">life</a>, <a href="http://agilewarrior.wordpress.com/tag/promotion/">promotion</a> <a href="http://feeds.wordpress.com/1.0/gocomments/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/agilewarrior.wordpress.com/768/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/agilewarrior.wordpress.com/768/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/agilewarrior.wordpress.com/768/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/agilewarrior.wordpress.com/768/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/agilewarrior.wordpress.com/768/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/agilewarrior.wordpress.com/768/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/agilewarrior.wordpress.com/768/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/agilewarrior.wordpress.com/768/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=agilewarrior.wordpress.com&amp;blog=6931535&amp;post=768&amp;subd=agilewarrior&amp;ref=&amp;feed=1" width="1"/><img height="1" src="http://feeds.feedburner.com/~r/AgileWarriorBlog/~4/9IQ8HZWFl4U" width="1"/></div>
    </content>
    <updated>2010-08-20T12:40:56Z</updated>
    <category term="life"/>
    <category term="career"/>
    <category term="getting ahead"/>
    <category term="inspiration"/>
    <category term="promotion"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://agilewarrior.wordpress.com/2010/08/20/are-you-a-samurai-or-a-rice-picker/</feedburner:origlink>
    <author>
      <name>JR</name>
    </author>
    <source>
      <id>http://agilewarrior.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/f5507dfac8bd5cc9a12c654ee97e46fe?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://agilewarrior.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://feeds.feedburner.com/AgileWarriorBlog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://agilewarrior.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>A blog about creating valuable software</subtitle>
      <title>The Agile Warrior</title>
      <updated>2010-09-02T13:06:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-19</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/rRigITvvwJE/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-19 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://github.com/bradford/infer">bradford's infer at master - GitHub</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/rRigITvvwJE" width="1"/></div>
    </summary>
    <updated>2010-08-20T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-19</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-09-02T07:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.gigoo.org/2010/08/18/agile-multitasking-context-switching/</id>
    <link href="http://blog.gigoo.org/2010/08/18/agile-multitasking-context-switching/" rel="alternate" type="text/html"/>
    <title>Agile multitasking, context switching</title>
    <summary>These days, computers made multitasking a doodle. In the same minute you can read this blog post, chat with friend on IM, check your email, Facebook or Twitter account, perhaps even do some work. We can switch our attention quickly from one task to another. But … is it good for our brain? Is it [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>These days, computers made multitasking a doodle. In the same minute you can read this blog post, chat with friend on IM, check your email, Facebook or Twitter account, perhaps even do some work. We can switch our attention quickly from one task to another. But … is it good for our brain? Is it good for the work we are doing? Are we really more productive?</p>
<p><img height="207" src="http://loneplacebo.com/wp-content/uploads/2010/04/multitasking.jpg" style="display: block; float: none; margin-left: auto; margin-right: auto;" width="331"/></p>
<p>It’s been few weeks since I started to talk to people about context switching and multitasking. Most of them recognize it as an issue. Many agree that it is counter-productive. I decided to take closer look at the problem and do a little research. Here are the results.</p>
<h2>Human brain</h2>
<p>According to many Neurologists and Psychologists our brain was not designed for multitasking. In 1999, Jordan Grafman used MRI to scan people brain. He discovered that frontal cortex of brain of people engaged in multitasking was more active than any other. This part of the brain is the least known to science, it is said that this is “what makes us human”.</p>
<p>Psychologist René Marois discovered that there is a bottleneck in the brain, when it’s being stimulated to perform more than one task. David Mayer thinks, that rather than a bottleneck, brain has a process that helps to select and prioritise tasks and obey any instructions that are not on that list. </p>
<p>Russel Poldrack, a psychology professor found that “multitasking affects the way you learn”. He discovered that people who multitask while learning, use the part of the brain responsible for learning new skills (striatum). Rather, they should be using part of the brain responsible for storing and recalling information (hippocampus). </p>
<p>There is a dozens more of scientists that have done research in brain and psychology area that will confirm the fact, that we work better if we focus on a single item.</p>
<p>I like the words of American novelist <a href="http://en.wikipedia.org/wiki/Walter_Kirn" target="_blank">Walter Kirn</a> who summarises multitasking phenomena:</p>
<blockquote><p>This is the great irony of multitasking–that its overall goal, getting more done in less time, turns out to be chimerical. In reality, multitasking slows our thinking. It forces us to chop competing tasks into pieces, set them in different piles, then hunt for the pile we are interested in, pick up its pieces, review the rules for putting the pieces back together, and then attempt to do so, often quite awkwardly.</p>
</blockquote>
<p> </p>
<h3/>
<h2>Multitasking or context switching</h2>
<p>It is easiest for me to talk about multitasking or the process of switching tasks (context) when talking about software development. During our development process quite often we are getting in the state which is defined by <a href="http://en.wikipedia.org/wiki/Mih%C3%A1ly_Cs%C3%ADkszentmih%C3%A1lyi" target="_blank">Mihály Csíkszentmihályi</a> as the <a href="http://en.wikipedia.org/wiki/Flow_(psychology)" target="_blank">Flow</a> . If we are getting interrupted or interrupting others it’s the Flow that suffer.</p>
<h4/>
<h3>Receiving end of the stick</h3>
<p>Think of the number of times that email, phone, IM chat, news ticker or anything else that interrupted your work. Very often we drop whatever we are doing and we answer an email. We are voluntarily destroying our context, switching to another one, just to get it back on track minutes later. This comes for a cost. It cost time and your focus. It is a typical distracter that actually we have control of.</p>
<p><font size="1">We can also get interrupted by other people. Project manager, team leader etc. comes to us asking to stop working on whatever we are doing and do something else instead. Something small and quick, that is only going to take you 5 minutes. So we do that, and then we consume our mental energy on getting the entire context of interrupted task back on track.</font></p>
<p>As a developer I always work in the teams. My fellow developers always have some questions, problems that they might need a help with. I can’t tell them to buzz-off. I will be helpful and pay the cost of interruption later <img alt=":)" class="wp-smiley" src="http://blog.gigoo.org/wp-includes/images/smilies/icon_smile.gif"/> </p>
<h3><font size="1">The trouble maker</font></h3>
<p>When we are in a despair and need answers we are not worrying about anyone else. The goal is to ask or tell to achieve whatever we are after. We are not taking into consideration that we might be disturbing someone else <a href="http://en.wikipedia.org/wiki/Flow_(psychology)" target="_blank">Flow</a>. </p>
<p>It is the same when we aren’t using contact in person but electronic medium, like email, telephone or IM chat.</p>
<h3>Too many things at the time</h3>
<p>Almost 10 years ago, <a href="http://www.joelonsoftware.com" target="_blank">Joel Spolsky</a> wrote on his <a href="http://www.joelonsoftware.com/articles/fog0000000022.html" target="_blank">blog</a>:</p>
<blockquote><p>As it turns out, if you give somebody two things to work on, you should be grateful if they "starve" one task and only work on one, because they’re going to get more stuff done and finish the average task sooner. In fact, the real lesson from all this is that you should <b>never let people work on more than one thing at once.</b> Make sure they know what it is. Good managers see their responsibility as <i>removing obstacles</i> so that people can focus on <i>one thing</i> and really get it done.</p>
</blockquote>
<h2/>
<h2>Getting tasks under control</h2>
<p>When I started my short research on multitasking it became more and more obvious to me how Agile, Lean and XP methodologies are actually trying to bring the software development process to the state where individuals are focused on single task, complete it in full and move on to the next one. With no interruptions comes better quality as well. I would like to mention and shortly describe some of the techniques that could help team members to achieve the <a href="http://en.wikipedia.org/wiki/Flow_(psychology)" target="_blank">Flow</a> and Focus and produce results.</p>
<h3>Pair programming</h3>
<p>You might think that having other person next to you means a constant interruptions, and impossibility finishing anything. Nothing more wrong. The positives that are coming from pair programming in the context of help with multitasking issue:</p>
<ul>
<li>having another person next to you and focusing on a work, limits you to NOT respond to email, chat invitations and cutting short phone conversations or generally do anything else not related to work</li>
<li>engaged in a work you need to keep constant focus, follow your colleague and check (improve) the quality of result</li>
<li>when you think you stuck on something, you have a mate next to you that can give you a helping hand (that limits the interruptions to others as well). Also with switching and rotating pairs you have constantly a fresh source of knowledge on the project areas you have never worked on </li>
<li>it might be harder for someone to come over to you and ask about anything or ask to switch task to do something, as it is more obvious that he/she will be interrupting</li>
</ul>
<p>There is more positives coming from pair programming but I will not write about it as it is a story for separate article.</p>
<h3>Pomodoro technique</h3>
<p>I was writing about the <a href="http://en.wikipedia.org/wiki/Pomodoro_Technique" target="_blank">Pomodoro Technique</a> in one of my previous posts <a href="http://blog.gigoo.org/2010/05/26/how-can-pomodore-help-you-shave-a-yak/" target="_blank" title="&#x201C;How can Pomodore help you shave a Yak?&#x201D;">“How can Pomodore help you shave a Yak?”</a> Technique used will help with:</p>
<ul>
<li>keeping focus on a task for period of time</li>
<li>adding short breaks to refresh the brain and take a step back to look at the task from a perspective</li>
<li>when interrupted by other person or own thoughts, writing the interruptions on a piece of paper makes you assure that the issues won’t be forgotten and ease your thoughts of it. This in turn helps you concentrate back on a task</li>
<li>if you make people aware that, while you are in pomodoro you would rather be uninterrupted, you will be more effective</li>
</ul>
<p>For more info on Pomodoro, you can look at my <a href="http://blog.gigoo.org/2010/05/26/how-can-pomodore-help-you-shave-a-yak/" target="_blank">previous post</a> or visit Google <img alt=":)" class="wp-smiley" src="http://blog.gigoo.org/wp-includes/images/smilies/icon_smile.gif"/> </p>
<h3>Kanban</h3>
<p>It could potentially take few more posts to describe <a href="http://en.wikipedia.org/wiki/Kanban" target="_blank">Kanban</a>. As simple concept as it is, it actually creates a wide range of improvements to development process. It is a great tool to be introduced by Project Managers for use by the entire team. Few upsides:</p>
<ul>
<li>working on a single item makes you focusing on a single task. The single story/task/functionality flow</li>
<li>creating only quality results means that the actual task is not finished until QAs and BAs are happy with the result. This means that testing needs to come early into the process, even better – during the process (<a href="http://christianralph.blogspot.com/2010/02/menage-trois-in-kinky-teams.html" target="_blank">read this article by Christian Blunden</a>, it will show you how)</li>
<li>testing brought earlier, means also that you can help testers creating automated tests and keep in the same context until it is finished</li>
</ul>
<h2>Finally</h2>
<p>It is in the basis of Agile techniques that work should be divided into small deliverable chunks (stories) that can be picked up and work on. If the chunks are small and team is disciplined, everyone will work uninterrupted until quality result is delivered. Project managers can employ techniques that help team members focusing on a single task and deliver it in full. I’m sure those techniques can save us many frustrating moments <img alt=":)" class="wp-smiley" src="http://blog.gigoo.org/wp-includes/images/smilies/icon_smile.gif"/> </p>
<p>This article is only a short introduction and brief summary of my little research project. I’m also preparing the talk and presentation with much wider explanation of the concepts and techniques mentioned in here.</p>
<p>Greg </p>
<p><font size="1">Some of the sources if you would like to research more: </font></p>
<ul>
<li><a href="http://www.thenewatlantis.com/publications/the-myth-of-multitasking"><font size="1">http://www.thenewatlantis.com/publications/the-myth-of-multitasking</font></a></li>
<li><a href="http://eebatou.wordpress.com/2007/10/24/qotd-walter-kirn-on-multitasking/"><font size="1">http://eebatou.wordpress.com/2007/10/24/qotd-walter-kirn-on-multitasking/</font></a></li>
<li><a href="http://www.joelonsoftware.com/articles/fog0000000022.html"><font size="1">http://www.joelonsoftware.com/articles/fog0000000022.html</font></a></li>
<li><a href="http://www.wikipedia.org">http://www.wikipedia.org</a></li>
</ul></div>
    </content>
    <updated>2010-08-18T22:55:36Z</updated>
    <category term="development"/>
    <category term="stuff"/>
    <category term="agile"/>
    <category term="lean"/>
    <category term="multitasking"/>
    <category term="software development"/>
    <category term="techniques"/>
    <category term="xp"/>
    <author>
      <name>Greg Gigon</name>
    </author>
    <source>
      <id>http://blog.gigoo.org</id>
      <link href="http://blog.gigoo.org/feed/?category_name=development" rel="self" type="application/atom+xml"/>
      <link href="http://blog.gigoo.org" rel="alternate" type="text/html"/>
      <subtitle>wEBbLOG</subtitle>
      <title>Gigu's blog » development</title>
      <updated>2010-08-26T23:04:11Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-4084458860381242516.post-7990898932939301262</id>
    <link href="http://puttingtheteaintoteam.blogspot.com/feeds/7990898932939301262/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=4084458860381242516&amp;postID=7990898932939301262" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/4084458860381242516/posts/default/7990898932939301262" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/4084458860381242516/posts/default/7990898932939301262" rel="self" type="application/atom+xml"/>
    <link href="http://puttingtheteaintoteam.blogspot.com/2010/08/minispa-2010-friday-september-10th-bcs.html" rel="alternate" type="text/html"/>
    <title>miniSPA 2010 - Friday September 10th - BCS London</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.exdriven.co.uk/">Mike Hill</a> and I have been volunteered to co-chair the miniSPA conference.<br/><br/><a href="http://www.spaconference.org/">SPA</a> is a fantastic conference - miniSPA is a condensed (and free!) version - it'll be great - all the places will go, so book now.<br/><br/>Here's the announcement and <a href="http://www.bcs-spa.org/minispa-2010.html">registration link</a> (sorry the registration system is really horrible):<br/><blockquote><br/>Experience some of the most popular sessions from this year's BCS SPA conference, for free, at miniSPA2010 on Friday September 10th at BCS London (near Covent Garden).<br/><br/>The miniSPA2010 one-day programme features five sessions, in two streams, that give an excellent guide to the variety and quality you'll find at every SPA conference.<br/><br/>We hope that attending miniSPA will encourage you to submit a session proposal for SPA2011, which will be taking place from June 12-15 (also at BCS London).<br/><br/>For more information visit <a href="http://bcs-spa.org/minispa-2010.html">http://bcs-spa.org/minispa-2010.html</a>. Booking is essential. Places are limited so reserve yours now.<br/><br/>See <a href="http://bcs-spa.org/">http://bcs-spa.org/</a> for details of our programme of regular events.<br/><br/>©2010 BCS SPA | 5 Southampton Street | London | WC2E 7HA<br/></blockquote><br/><br/>Copyright © 2010 Ivan Moore<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/4084458860381242516-7990898932939301262?l=puttingtheteaintoteam.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-08-18T20:17:16Z</updated>
    <published>2010-08-18T20:00:00Z</published>
    <author>
      <name>Ivan Moore</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/09119134602348298270</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-4084458860381242516</id>
      <author>
        <name>Ivan Moore</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/09119134602348298270</uri>
      </author>
      <link href="http://puttingtheteaintoteam.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/4084458860381242516/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://puttingtheteaintoteam.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/4084458860381242516/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Putting the tea into team</title>
      <updated>2010-08-23T18:25:49Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-17</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/JmDVW0gjczM/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-17 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://gunicorn.org/">Green Unicorn - Welcome</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/JmDVW0gjczM" width="1"/></div>
    </summary>
    <updated>2010-08-18T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-17</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-08-31T07:06:10Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://lizkeogh.com/?p=599</id>
    <link href="http://lizkeogh.com/2010/08/17/coderetreat/" rel="alternate" type="text/html"/>
    <title>CodeRetreat</title>
    <summary>I always have so much fun at Agile 20XX conferences that it sometimes feels anticlimactic when they end. This year, however, I was lucky enough to get one of the last few tickets for Corey Haines’ latest CodeRetreat in Orlando.
The CodeRetreats are focused on having fun while learning, and follow a simple formula: 45 minute [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I always have so much fun at Agile 20XX conferences that it sometimes feels anticlimactic when they end. This year, however, I was lucky enough to get one of the last few tickets for <a href="http://www.coreyhaines.com/">Corey Haines’</a> latest <a href="http://coderetreat.ning.com/">CodeRetreat</a> in Orlando.</p>
<p>The CodeRetreats are focused on having fun while learning, and follow a simple formula: 45 minute sessions of pair-programming on <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life">Conway’s Game of Life</a>, then deleting all the code written and taking a 15 minute break. As well as giving up his time, Corey organises a storming lunch. Thank you Corey!</p>
<p>Deleting the code, for me, is the magic. I didn’t fully understand until Corey tutored me out of my outside-in, BDD habit at the last Code Retreat in Bletchley Park. “Why did you start with the Grid?” he asked.</p>
<p>“Well… because that’s how I’ll know I’ve solved the problem.”</p>
<p>“Are you trying to get things done?” Corey asked. “Don’t try and get anything done. 45 minutes isn’t long enough, and we’re going to delete the code anyway. Why not pick something interesting and see if you can find a different way to do it? Why not look at the rules, or a single cell, or the number of neighbours?”</p>
<p>I got it. CodeRetreat isn’t about solving a problem or getting something done. It’s explicitly the opposite. It’s about learning, even if that means you never solve anything or get anything done. The 45 minute period is just long enough to learn significantly but not quite long enough to make any real headway, unless you already know the Game of Life backwards.</p>
<p>As part of teaching BDD and driving out various BDD tools, I’ve produced multiple implementations of the Game of Life in Java and C#, to the extent where I already have a good idea of the classes I’m going to use. That can actually be a handicap in the CodeRetreat, because it makes it hard to learn anything new. I often find myself letting my pair take the direction, just to see if any other interesting patterns emerge.</p>
<p>In Orlando, we were lucky enough to have several great programmers amongst us – including <a href="http://www.michaelfeathers.com/">Michael Feathers</a>, <a href="http://www.exampler.com/">Brian Marick</a> and <a href="http://en.wikipedia.org/wiki/Uncle_Bob">Uncle Bob</a>. Having already experienced a cage match between Michael’s Haskell and Brian’s Clojure implementations of the Game of Life, I was excited by the opportunities to learn a new language. Brian was kind enough to show me some of the language features in Clojure. We didn’t really get very far with the problem, but that’s OK – the object was not to solve the problem, just to learn. Thank you Brian!</p>
<p>For the last session of the day, we voted to use a bit of extra time to conduct a longer session, and Bob kindly volunteered to help me continue exploring Clojure. We started with a function which would find all the potential candidates for life in the next generation, and worked from there.</p>
<p>10 minutes before the end of the session, we had a working copy, which <a href="http://blog.objectmentor.com/articles/2010/08/15/game-of-life-with-lunivore">Uncle Bob has kindly blogged</a> here. The code is a little tidier and a lot more readable than the version we ended up with. I need to find out what <code>conj</code> and <code>%</code> do! We should also have deleted it, but since we had already gotten something done, it was too late.</p>
<p>Clojure turns out to be a very beautiful language, and Uncle Bob is a <strike>lot less scary in real life</strike> wonderfully patient mentor. Thank you, Bob!</p></div>
    </content>
    <updated>2010-08-17T17:48:00Z</updated>
    <category term="uncategorized"/>
    <author>
      <name>liz</name>
    </author>
    <source>
      <id>http://lizkeogh.com</id>
      <link href="http://lizkeogh.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://lizkeogh.com" rel="alternate" type="text/html"/>
      <subtitle>Software, Training, Coaching, Writing</subtitle>
      <title>Liz Keogh's blog</title>
      <updated>2010-08-26T21:09:27Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://grahamis.com/blog/?p=277</id>
    <link href="http://feedproxy.google.com/~r/VirtualSurreality/~3/jOYPSFzEJ9Q/" rel="alternate" type="text/html"/>
    <title>How to disable submit buttons using jQuery</title>
    <summary>Came across this twice in the past two weeks. How NOT to do it: $('form :submit').click(function() { $(this).attr("disabled", true); $(this).val("wait..."); $(this).addClass("disabled"); }); Doing it the above way, the click event will indeed fire, but on some browsers the submit event will not. The event to bind to is submission of a form, not clicking of [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgrahamis.com%2Fblog%2F2010%2F08%2F17%2Fdisable-submit-buttons-using-jquery%2F"><br/>
				<img height="61" src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgrahamis.com%2Fblog%2F2010%2F08%2F17%2Fdisable-submit-buttons-using-jquery%2F&amp;source=delitescere&amp;style=normal&amp;service=bit.ly" width="50"/><br/>
			</a>
		</div>
<p>Came across this twice in the past two weeks.</p>
<p>How <strong><em>NOT</em></strong> to do it:</p>
<pre class="javascript" name="code">$('form :submit').click(function() {
    $(this).attr("disabled", true);
    $(this).val("wait...");
    $(this).addClass("disabled");
});
</pre>
<p>Doing it the above way, the click event will indeed fire, but on some browsers the submit event will not.</p>
<p>The event to bind to is submission of a form, not clicking of a submit button. </p>
<p>How to do it:</p>
<pre class="javascript" name="code">$('form').submit(function() {
    $(":submit").attr("disabled", "disabled");
    $(":submit").val("wait...");
    $(":submit").addClass("disabled");
});
</pre>
<p>Also, the <code>:submit</code> selector is a jQuery cross-browser selector for input and button elements that could submit the form, used in preference to <code>input[type="submit"]</code></p>
<img height="1" src="http://feeds.feedburner.com/~r/VirtualSurreality/~4/jOYPSFzEJ9Q" width="1"/></div>
    </content>
    <updated>2010-08-17T13:58:55Z</updated>
    <category term="Coding"/>
    <category term="Reminder"/>
    <category term="javascript"/>
    <category term="jquery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://grahamis.com/blog/2010/08/17/disable-submit-buttons-using-jquery/</feedburner:origlink>
    <author>
      <name>Josh Graham</name>
    </author>
    <source>
      <id>http://grahamis.com/blog</id>
      <link href="http://grahamis.com/blog" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/VirtualSurreality" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>It's too real to be true</subtitle>
      <title>Virtual Surreality</title>
      <updated>2010-08-29T00:06:14Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://del.icio.us/gcaprio#2010-08-16</id>
    <link href="http://feedproxy.google.com/~r/MemoirsOfABystander/~3/rDLP1Yv8s9c/gcaprio" rel="alternate" type="text/html"/>
    <title>Links for 2010-08-16 [del.icio.us]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
<li><a href="http://cordlessdog.com/stay/">Cordless Dog: Stay</a></li>
<li><a href="http://api-status.com/">Public APIs availability - uptime and down time - slow performance</a></li>
</ul><img height="1" src="http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/rDLP1Yv8s9c" width="1"/></div>
    </summary>
    <updated>2010-08-17T07:00:00Z</updated><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://del.icio.us/gcaprio#2010-08-16</feedburner:origlink>
    <source>
      <id>http://blog.1530technologies.com</id>
      <author>
        <name>Griffin Caprio</name>
      </author>
      <link href="http://blog.1530technologies.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/MemoirsOfABystander" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>One step back, but one step to the left.</subtitle>
      <title>Strange Loops</title>
      <updated>2010-08-28T07:08:48Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>https://sivajag.wordpress.com/?p=131</id>
    <link href="http://techbehindtech.com/2010/08/16/compojure-demystified-with-an-example-part-3/" rel="alternate" type="text/html"/>
    <title>sivajag</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In part2 we saw how to setup a skeleton project with Compojure. In this part we will see how to add static files to a Compojure project. For our application, we will use JQuery as front end and Clojure as a backend. I will concentrate more on Compojure. 1) Create folders for static files. mkdir [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=131&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In <a href="http://techbehindtech.com/2010/08/15/compojure-demystified-with-an-example-part-2/">part2</a> we saw how to setup a skeleton project with Compojure. In this part we will see how to add static files to a Compojure project.</p>
<p>For our application, we will use JQuery as front end and Clojure as a backend. I will concentrate more on Compojure.</p>
<p>1) Create folders for static files.</p>
<pre class="brush: plain;">mkdir public
mkdir public/css
mkdir public/js
</pre>
<p>It is better to have static files under a seperate directory that way you could use your webserver to serve these files. For now we will use Compojure to serve these files.</p>
<p>2) Create index.html under public folder</p>
<pre class="brush: xml;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt;
	&lt;head&gt;
		&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
		&lt;title&gt;My Address book&lt;/title&gt;
		&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;&lt;/script&gt;
	&lt;/head&gt;

  &lt;body id="main"&gt;
    &lt;p&gt;
      My Address Book
    &lt;/p&gt;
  &lt;body&gt;
&lt;/html&gt;
</pre>
<p>3) Start your server</p>
<pre class="brush: plain;">lein repl src/address_book/core.clj
</pre>
<p>4) Access index.html</p>
<p>Go to http://localhost:8080/index.html . You will get “Page not found” instead of “My Address Book”. This is happening because we have not told compojure about our static files folder.</p>
<h3><span style="text-decoration: underline;">Route helper functions in Compojure</span></h3>
<p>In Compojure we have two route helper functions. We have seen one already in core.clj file.</p>
<h4>1) <span style="text-decoration: underline;">not-found </span>:</h4>
<p>This function is used to capture all other routes that are not defined in Compojure. As we still have not defined index.html we got “Page not found”.</p>
<h4>2) <span style="text-decoration: underline;">files </span>:</h4>
<p>This function is used to inform Compojure where static files are present.</p>
<p>Lets change our core.clj to handle static files</p>
<pre class="brush: plain; highlight: [8];">(ns address_book.core
  (:use [compojure.core]
        [ring.adapter.jetty])
  (:require [compojure.route :as route]))

(defroutes example
  (GET "/" [] "&lt;h1&gt;My Address Book!&lt;/h1&gt;")
  (route/files "/" {:root "public"})
  (route/not-found "Page not found"))

(run-jetty example {:port 8080})
</pre>
<p>Restart your server (there is a way to avoid restarting using futures. I will show that in a later blog) and access http://localhost:8080/index.html .  Now you should see “My Address Book”.</p>
<p>In this part we saw how we can handle static files. In next part we will implement Add , View and View All functionalities.</p>
<p>PS: Using <a href="http://github.com/weavejester/hiccup">Hiccup</a> you can create HTML and css in clojure. I will try to cover this in future blogs.</p>
<p><strong><em>Source code is now available at </em></strong><a href="http://github.com/sivajag/Address-Book"><strong><em>github</em></strong></a><strong><em> . Created branches for each part.</em></strong></p>
<p><strong><em>Checkout <a href="http://techbehindtech.com/2010/08/24/compojure-demystified-with-an-example-part-4/">PART4</a></em><em> …</em></strong></p>
<br/>Filed under: <a href="http://techbehindtech.com/category/clojure/">Clojure</a> Tagged: <a href="http://techbehindtech.com/tag/clojure-2/">clojure</a>, <a href="http://techbehindtech.com/tag/compojure/">compojure</a>, <a href="http://techbehindtech.com/tag/web/">web</a> <a href="http://feeds.wordpress.com/1.0/gocomments/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sivajag.wordpress.com/131/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sivajag.wordpress.com/131/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sivajag.wordpress.com/131/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sivajag.wordpress.com/131/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sivajag.wordpress.com/131/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sivajag.wordpress.com/131/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/sivajag.wordpress.com/131/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sivajag.wordpress.com/131/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=131&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2010-08-17T04:04:27Z</updated>
    <category term="Clojure"/>
    <category term="clojure"/>
    <category term="compojure"/>
    <category term="web"/>
    <author>
      <name>Siva Jagadeesan</name>
    </author>
    <source>
      <id>http://techbehindtech.com</id>
      <logo>http://0.gravatar.com/blavatar/ea259bd3a901b0e5c68149ed7392c564?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://techbehindtech.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://techbehindtech.com" rel="alternate" type="text/html"/>
      <link href="http://techbehindtech.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://techbehindtech.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Raw information. No finesse :)</subtitle>
      <title>Tech behind Tech</title>
      <updated>2010-09-02T16:05:48Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.natpryce.com/articles/000780.html</id>
    <link href="http://www.natpryce.com/articles/000780.html" rel="alternate" type="text/html"/>
    <title>TDD at the System Scale</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In <a href="http://www.growing-object-oriented-software.com" title="The website for the book Growing Object-Oriented Software, Guided by Tests">Growing
    Object-Oriented Software, Guided by Tests</a>, we advocate starting
    development by writing a system test (or tests). This caused more
    controversy than I expected. System tests have the reputation of being
    slow (not entirely avoidable, I admit), difficult to automate reliably and
    difficult to diagnose when they fail. However, I find that many teams
    follow a TDD process at the unit-level, but do <span xml:lang="lat">post-hoc</span> testing at the system level, and so don't
    use system tests as a source of design feedback.</p>

    <p>For me, the key feature of the TDD process is that when something is
    hard to test, that's a driver to go back and adjust the design until it is
    easy to test.</p>

    <div class="Diagram"><img alt="Design feedback from testing" src="http://www.natpryce.com/articles/images/listening-to-the-tests.png"/></div>

    <p>At the system-test scale, tests become unreliable when they cannot
    observe the activity of the system well enough to reliably synchronise
    their execution with that of the system. Failures are hard to understand
    if the tests cannot gather and filter information about the activity of
    the system during execution of the test. Defects will break test isolation
    and cause cascading failures if the tests cannot wait until the system
    becomes passive and restore it to a known good state when the system fails
    a test.</p>

    <p>To reliably test a system, we must be able to...</p>

    <ul class="BulletProof">
      <li><img alt="System activity" class="BulletIcon" src="http://www.natpryce.com/articles/000780/what-is-it-doing.png"/>determine what the system is
      doing.</li>

      <li><img alt="System inactivity" class="BulletIcon" src="http://www.natpryce.com/articles/000780/has-it-stopped.png"/>detect when it has stopped doing
      it.</li>

      <li><img alt="System failure" class="BulletIcon" src="http://www.natpryce.com/articles/000780/has-it-failed.png"/>detect when the system has
      failed.</li>

      <li><img alt="Diagnosis" class="BulletIcon" src="http://www.natpryce.com/articles/000780/why-has-it-failed.png"/>explain why has it failed.</li>

      <li><img alt="Restore to known good state" class="BulletIcon" src="http://www.natpryce.com/articles/000780/restore.png"/>restore the system to a known good
      state.</li>
    </ul>

    <p>If our system tests are unreliable, that's a sign that we need to add
    interfaces to our system through which tests can better observe,
    synchronise with and control the activity of the system.</p>

    <p>Those changes turned out to be exactly what we need to better
    <em>manage</em> the systems we built. We used the same interfaces that the
    system exposed to the tests to build automated and manual support
    tools.</p>

    <p>It seems obvious in hindsight: to reliably <del>test</del> manage a
    system, we must be able to...</p>

    <ul class="BulletProof">
      <li><img alt="System activity" class="BulletIcon" src="http://www.natpryce.com/articles/000780/what-is-it-doing.png"/>determine what the system is
      doing.</li>

      <li><img alt="System inactivity" class="BulletIcon" src="http://www.natpryce.com/articles/000780/has-it-stopped.png"/>detect when it has stopped doing
      it.</li>

      <li><img alt="System failure" class="BulletIcon" src="http://www.natpryce.com/articles/000780/has-it-failed.png"/>detect when the system has
      failed.</li>

      <li><img alt="Diagnosis" class="BulletIcon" src="http://www.natpryce.com/articles/000780/why-has-it-failed.png"/>explain why has it failed.</li>

      <li><img alt="Restore to known good state" class="BulletIcon" src="http://www.natpryce.com/articles/000780/restore.png"/>restore the system to a known good
      state.</li>
    </ul>

    <h2>Design Feedback from TDD</h2>

    <p>TDD at the unit scale guides the design of the code to make the system
    easier to modify, because it is easier to test code that is organised into
    loosely coupled, cohesive units that have clear responsibilities. </p>

    <p>My hunch is that TDD at the system scale works in a similar way,
    guiding the design of the architecture to make the system easier to
    manage, because it requires the system have machine-readable interfaces
    through which tools can observe and control its activity.</p></div>
    </content>
    <updated>2010-08-16T21:42:57Z</updated>
    <source>
      <id>http://www.natpryce.com/news.feed</id>
      <icon>http://www.natpryce.com/icon.png</icon>
      <logo>http://www.natpryce.com/logo.jpg</logo>
      <author>
        <name>Nat Pryce</name>
      </author>
      <link href="http://www.natpryce.com" rel="alternate" type="text/html"/>
      <link href="http://www.natpryce.com/news.feed" rel="self" type="application/atom+xml"/>
      <rights>Copyright © 2010 Nat Pryce</rights>
      <title>Mistaeks I Hav Made</title>
      <updated>2010-08-16T21:42:57Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>https://sivajag.wordpress.com/?p=104</id>
    <link href="http://techbehindtech.com/2010/08/15/compojure-demystified-with-an-example-part-2/" rel="alternate" type="text/html"/>
    <title>sivajag</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In part 1 I introduced the address book application that we are going to build. In this part we will setup our skeleton project with compojure. 1) Install Leiningen http://github.com/technomancy/leiningen/blob/master/README.md 2) Create a new project using Leiningen lein new address_book 3) Add Compojure to our project: a) Edit project.clj (defproject address_book "1.0.0-SNAPSHOT" :description "Address Book" [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=104&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In <a href="http://techbehindtech.com/2010/08/14/compojure-demystified-with-an-example-part-1/">part 1 </a> I introduced the address book application that we are going to build.</p>
<p>In this part we will setup our skeleton project with compojure.</p>
<p>1) Install Leiningen</p>
<p><a href="http://github.com/technomancy/leiningen/blob/master/README.md">http://github.com/technomancy/leiningen/blob/master/README.md</a></p>
<p>2) Create a new project using Leiningen</p>
<pre class="brush: plain;">lein new address_book</pre>
<p>3) Add Compojure to our project:</p>
<p>a) Edit project.clj</p>
<pre class="brush: plain;">(defproject address_book "1.0.0-SNAPSHOT"
  :description "Address Book"
  :dependencies [[org.clojure/clojure "1.1.0"]
                 [org.clojure/clojure-contrib "1.1.0"]
                 [compojure "0.4.1"]
                 [ring/ring-jetty-adapter "0.2.3"]])
</pre>
<p>b) Install dependencies</p>
<p><code>lein deps</code></p>
<p>This should install all dependencies of compojure</p>
<p>c) Test whether our setup is working</p>
<p>Edit src/address_book/core.clj</p>
<pre class="brush: plain;">(ns address_book.core
  (:use [compojure.core]
           [ring.adapter.jetty])
  (:require [compojure.route :as route]))

(defroutes example
  (GET "/" [] "My Address Book!")
  (route/not-found "Page not found"))

(run-jetty example {:port 8080})
</pre>
<p>Run the server</p>
<pre class="brush: plain;">lein repl src/address_book/core.clj</pre>
<p>Goto http://localhost:8080 and you should see “My Address Book!”</p>
<p>In next <a href="http://techbehindtech.com/2010/08/16/compojure-demystified-with-an-example-part-3/">part</a> we will start implementing our functionalities.</p>
<br/>Filed under: <a href="http://techbehindtech.com/category/clojure/">Clojure</a> Tagged: <a href="http://techbehindtech.com/tag/clojure-2/">clojure</a>, <a href="http://techbehindtech.com/tag/compojure/">compojure</a>, <a href="http://techbehindtech.com/tag/web/">web</a> <a href="http://feeds.wordpress.com/1.0/gocomments/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sivajag.wordpress.com/104/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sivajag.wordpress.com/104/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sivajag.wordpress.com/104/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sivajag.wordpress.com/104/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sivajag.wordpress.com/104/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sivajag.wordpress.com/104/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/sivajag.wordpress.com/104/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sivajag.wordpress.com/104/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=techbehindtech.com&amp;blog=11954221&amp;post=104&amp;subd=sivajag&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2010-08-16T01:49:59Z</updated>
    <category term="Clojure"/>
    <category term="clojure"/>
    <category term="compojure"/>
    <category term="web"/>
    <author>
      <name>Siva Jagadeesan</name>
    </author>
    <source>
      <id>http://techbehindtech.com</id>
      <logo>http://0.gravatar.com/blavatar/ea259bd3a901b0e5c68149ed7392c564?s=96&amp;d=http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://techbehindtech.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://techbehindtech.com" rel="alternate" type="text/html"/>
      <link href="http://techbehindtech.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <link href="http://techbehindtech.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Raw information. No finesse :)</subtitle>
      <title>Tech behind Tech</title>
      <updated>2010-09-02T16:05:49Z</updated>
    </source>
  </entry>
</feed>
