<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ivan's agile thinkings &#187; Uncategorized</title>
	<atom:link href="http://ivansthunks.com/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivansthunks.com/blog</link>
	<description>My thoughts and opinions on all things agile</description>
	<lastBuildDate>Sat, 02 Jul 2011 20:21:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Halloween Costume Decoration/Construction</title>
		<link>http://ivansthunks.com/blog/2010/10/04/halloween-costume-decorationconstruction/</link>
		<comments>http://ivansthunks.com/blog/2010/10/04/halloween-costume-decorationconstruction/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 05:00:54 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/?p=49</guid>
		<description><![CDATA[The majority of the individual pieces are done.  There are a few &#8216;technical&#8217; pieces left that can wait a while: the main focus now is sticking everything together and decorating it.  We&#8217;ve been making some good progress on this, once we decided how we were actually going to decorate everything. So here&#8217;s the new &#8216;construction&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>The majority of the individual pieces are done.  There are a few &#8216;technical&#8217; pieces left that can wait a while: the main focus now is sticking everything together and decorating it.  We&#8217;ve been making some good progress on this, once we decided how we were actually going to decorate everything.</p>
<p>So here&#8217;s the new &#8216;construction&#8217; burndown.  It shows those components (made of several pieces) that are complete.</p>
<p><img class="aligncenter" title="Construction Burndown" src="https://spreadsheets1.google.com/oimg?key=0Aqe2PqNKuq0adDNXZ0dlcFNRUE03QnRITDhOT1N2eXc&amp;oid=5&amp;zx=lsexz86h9zvj" alt="" width="450" height="341" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/10/04/halloween-costume-decorationconstruction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Halloween Costume Scope Change</title>
		<link>http://ivansthunks.com/blog/2010/09/26/halloween-costume-scope-change/</link>
		<comments>http://ivansthunks.com/blog/2010/09/26/halloween-costume-scope-change/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 21:16:34 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/?p=45</guid>
		<description><![CDATA[As with most (all?) projects, we learn something new along the way.  This happened this morning with the Halloween Costumes.  There&#8217;s one component that needed a bit of a redesign and that means new pieces.  So, I&#8217;ve frozen the burndown image in the previous post and will include a new updating one here.  This new [...]]]></description>
			<content:encoded><![CDATA[<p>As with most (all?) projects, we learn something new along the way.  This happened this morning with the Halloween Costumes.  There&#8217;s one component that needed a bit of a redesign and that means new pieces.  So, I&#8217;ve frozen the burndown image in the previous post and will include a new updating one here.  This new image reflects the need for a previously unexpected 8 reenforcement pieces.  I had a stellar preparation day yesterday and even did some construction where it made sense (composing components from the pieces).  My mind is starting to think about how we are actually going to do the decoration that will bring the costumes to life: decorate before or after construction?</p>
<p>Interesting to note that the way my spreadsheet was set up, when I upped the total number of pieces it gave me a negative velocity.  That obviously can&#8217;t be the case.  The velocity shouldn&#8217;t change downward because of the new work, I&#8217;m am still completing work at a similar rate to previous: there&#8217;s just more work to do now.  I fixed up my spreadsheet so that velocity is appropriate (the number of pieces &#8216;done&#8217;) and the remaining work has gone up too.  The day is still young(ish) and if I choose I could make a concerted effort to bring the project back onto the previous schedule, or I can have a chat with the PO about pushing the schedule or reducing scope.  As it is I&#8217;ve started with plenty of time and effort cost is only my time (and I&#8217;m enjoying the work).</p>
<p>The more I do, the more pumped I get that this is going to be a seriously awesome costume!</p>
<p><img class="aligncenter" title="Halloween Costume Piece Burndown" src="https://spreadsheets.google.com/oimg?key=0Aqe2PqNKuq0adHhFVW9kbmc0anZ6bmFYN0FWbkJubkE&amp;oid=5&amp;zx=jy1qxcej64nt" alt="" width="450" height="341" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/09/26/halloween-costume-scope-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Halloween Costume Burndown</title>
		<link>http://ivansthunks.com/blog/2010/09/21/halloween-costume-burndown/</link>
		<comments>http://ivansthunks.com/blog/2010/09/21/halloween-costume-burndown/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 15:34:40 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Halloween Costume]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/?p=38</guid>
		<description><![CDATA[My Halloween costume this year is going to be epic.  We gave everyone a chance last year, but the return of something on the level of paper mache Pinky and The Brain must be seen this time around. The (secret) costumes I&#8217;ve selected (plus other friends) requires a whole bunch of &#8216;pieces&#8217;.  We&#8217;re in the [...]]]></description>
			<content:encoded><![CDATA[<p>My Halloween costume this year is going to be epic.  We gave everyone a chance last year, but the return of something on the level of paper mache Pinky and The Brain must be seen this time around.</p>
<p>The (secret) costumes I&#8217;ve selected (plus other friends) requires a whole bunch of &#8216;pieces&#8217;.  We&#8217;re in the prep phase so we&#8217;ve got piles of inventory building up.  This isn&#8217;t very lean, but I thought at least we try a little agile.  Note that the total number of pieces may go up at any point as we refine the design.</p>
<p>So, here&#8217;s the burn-down for the preparation phase &#8211; still got a ways to go!</p>
<div id="attachment_41" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-41" title="Halloween Costume Piece Burndown" src="http://ivansthunks.com/blog/wp-content/uploads/2010/09/piece_burndown.png" alt="" width="450" height="341" /><p class="wp-caption-text">Piece Burndown Snapshot</p></div>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2010/09/21/halloween-costume-burndown/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vi learnings</title>
		<link>http://ivansthunks.com/blog/2009/05/17/vi-learnings/</link>
		<comments>http://ivansthunks.com/blog/2009/05/17/vi-learnings/#comments</comments>
		<pubDate>Mon, 18 May 2009 00:41:19 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2009/05/17/vi-learnings/</guid>
		<description><![CDATA[Here are a few useful vi keystrokes I learned the other day (from colleagues and from the help system): Searching without case-sensitivity &#8211; global switch: :set ignorecase Searching without case-sensitivity  &#8211; for a single pattern: prefix the pattern with \c Searching backwards: ? (rather than /) Search again in the opposite direction: N (rather than [...]]]></description>
			<content:encoded><![CDATA[<p>Here are a few useful vi keystrokes I learned the other day (from colleagues and from the help system):</p>
<p>Searching without case-sensitivity &#8211; global switch:</p>
<pre>:set ignorecase</pre>
<p>Searching without case-sensitivity  &#8211; for a single pattern:</p>
<pre>prefix the pattern with \c</pre>
<p>Searching backwards:</p>
<pre>? (rather than /)</pre>
<p>Search again in the opposite direction:</p>
<pre>N (rather than n)</pre>
<p>Nothing too thrilling, but it makes using vi that little easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2009/05/17/vi-learnings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding an auxiliary enchancer to OpenJPA</title>
		<link>http://ivansthunks.com/blog/2008/12/02/adding-an-auxiliary-enchancer-to-openjpa/</link>
		<comments>http://ivansthunks.com/blog/2008/12/02/adding-an-auxiliary-enchancer-to-openjpa/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 06:28:38 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Constant Learning]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[AuxiliaryEnhancer]]></category>
		<category><![CDATA[Enhancer]]></category>
		<category><![CDATA[OpenJpa]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2008/12/02/adding-an-auxiliary-enchancer-to-openjpa/</guid>
		<description><![CDATA[A while back I attempted to create a visualization of the relations that OpenJPA creates between the Java classes that it enhances &#8211; the intent was to help better understand a particularly intertwined persistent object graph and see if I couldn&#8217;t figure out why we were getting a few strange problems. The initial approach I [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I attempted to create a visualization of the relations that OpenJPA creates between the Java classes that it enhances &#8211; the intent was to help better understand a particularly intertwined persistent object graph and see if I couldn&#8217;t figure out why we were getting a few strange problems.</p>
<p>The initial approach I took was a hilarious trip into the land of sed, perl and graphviz.  It kinda looked like it worked, but didn&#8217;t actually <img src='http://ivansthunks.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Time passed&#8230;&#8230;more time passed&#8230;&#8230;I learned more&#8230;&#8230;more time passed&#8230;&#8230;.and then I had the wacky notion of tying directly into the Enhancer that OpenJPA uses to create the persistence enabled classes.  I haven&#8217;t done the visualization yet, but this is what I learned about actually tying in an AuxiliaryEnhancer.</p>
<h2>1. Create the AuxiliaryEnhancer</h2>
<p>The following code is the minimal you will need.  Enter this and then compile &#8211; you will need OpenJPA and serp on your classpath.</p>
<pre>
<pre class="brush: java; title: ; notranslate">package com.ij;

import org.apache.openjpa.enhance.PCEnhancer.AuxiliaryEnhancer;
import serp.bytecode.BCClass;
import serp.bytecode.BCMethod;
import org.apache.openjpa.meta.ClassMetaData;

public class Grapher implements AuxiliaryEnhancer {

    public void run(BCClass bc, ClassMetaData meta) {
        System.out.println(&quot;Running Enhancement&quot;);
    }

    public boolean skipEnhance(BCMethod m) {
         System.out.println(&quot;skipEnhance?&quot;);
         return false;
    }
}
</pre>
</pre>
<h2>2. Register the enhancer using jar based services</h2>
<p>This is something I was only barely aware off &#8211; registering concrete implementations of services through jar file meta-data.</p>
<ul>
<li>Create a file in a <strong>META-INF/services</strong>/ directory called <strong>org.apache.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer</strong>
<ul>
<li>Note the dollar sign! That one caught me out for a while: I couldn&#8217;t decide whether the dot notation or the dollar notation should be used to reference the nested class.</li>
</ul>
</li>
<li>This file should simply contain the fully qualified name of the Enhancer you wrote: com.ij.Grapher</li>
<li>Jar this directory and the class file up and you should end up with a jar listing like this</li>
</ul>
<pre>
<pre class="brush: java; title: ; notranslate">
ivan-jensens-computer:jar ivanjensen$ jar tvf ../grapher.jar
     0 Tue Dec 02 21:56:42 PST 2008 META-INF/
    60 Tue Dec 02 21:56:42 PST 2008 META-INF/MANIFEST.MF
     0 Tue Dec 02 21:54:28 PST 2008 META-INF/services/
    16 Tue Dec 02 21:30:44 PST 2008 META-INF/services/org.apache.renamed.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer
     0 Tue Dec 02 21:55:16 PST 2008 com/
     0 Tue Dec 02 21:55:38 PST 2008 com/ij/
   771 Tue Dec 02 21:55:38 PST 2008 com/ij/Grapher.class
   465 Tue Dec 02 21:54:46 PST 2008 com/ij/Grapher.java
</pre>
</pre>
<h2>3. Add the new jar file to the enhancer classpath</h2>
<p>I did this by adding my jar file to the classpath element of my ant script &#8211; pretty simple.</p>
<h2>4. Re-enhance your classes</h2>
<p>Re-enhance your classes and you will see the System.out.println statements all over your console.</p>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] Running Enhancement</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<pre> [openjpac] skipEnhance?</pre>
<p>One thing I noticed about this: I had to delete my persistent classes and re-enhance, only then would the &#8216;run&#8217; method be called.  The skipMethod is called whether I delete the classes or not.  I don&#8217;t know what that means yet, but I&#8217;m sure I am about to find out.</p>
<h2>Notes:</h2>
<p>I was actually using a patched version of OpenJpa 1.0.1 (for various, non-amusing, reasons), but the patches shouldn&#8217;t affect this tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2008/12/02/adding-an-auxiliary-enchancer-to-openjpa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Engineering Radio &#8211; fantastic podcast</title>
		<link>http://ivansthunks.com/blog/2008/08/24/software-engineering-radio-fantastic-podcast/</link>
		<comments>http://ivansthunks.com/blog/2008/08/24/software-engineering-radio-fantastic-podcast/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 00:46:11 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[listen]]></category>
		<category><![CDATA[podcasts]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2008/08/24/software-engineering-radio-fantastic-podcast/</guid>
		<description><![CDATA[About two months ago I stumbled on the Software Engineering Radio podcast, and in my opinion it&#8217;s one of the best techy podcasts out there (anyone knows any different?). There are currently 107 podcasts available and the 13 I&#8217;ve listened to (and listened to again) have been worth their virtual weight in gold.  There are [...]]]></description>
			<content:encoded><![CDATA[<p>About two months ago I stumbled on the <a href="http://se-radio.net/">Software Engineering Radio podcast</a>, and in my opinion it&#8217;s one of the best techy podcasts out there (anyone knows any different?).</p>
<p>There are currently 107 podcasts available and the 13 I&#8217;ve listened to (and listened to again) have been worth their virtual weight in gold.  There are a lot of interviews about many, many topics and the interviewees really know there stuff.</p>
<p>SE-Radio is an invaluable resource for the professional software developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2008/08/24/software-engineering-radio-fantastic-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Ultimate Commit Token</title>
		<link>http://ivansthunks.com/blog/2008/04/24/the-ultimate-commit-token/</link>
		<comments>http://ivansthunks.com/blog/2008/04/24/the-ultimate-commit-token/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 02:19:07 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Configuration management]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ivansthunks.com/blog/2008/04/24/the-ultimate-commit-token/</guid>
		<description><![CDATA[I&#8217;ve rarely had to use a commit token.  The teams I&#8217;ve worked in generally edit unrelated source items as much as is possible.  Over the years I&#8217;ve read about various amusing items being used as commit tokens: rubber ducks, action figures, hats and little flags, to name a few.  The general idea is that you [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve rarely had to use a commit token.  The teams I&#8217;ve worked in generally edit unrelated source items as much as is possible.  Over the years I&#8217;ve read about various amusing items being used as commit tokens: rubber ducks, action figures, hats and little flags, to name a few.  The general idea is that you should physically have the token to be allowed to commit &#8211; meaning there are no updates made to the source repository so your changes will go in cleanly.</p>
<p>It is possible that this could be side-stepped though &#8211; Mr Naughty Committer might pretend to be holding the Pokémon and commit &#8211; how can the source repository be expected to know where Pikachu is at any given moment??</p>
<p>However, one of my colleagues had a great idea the other day &#8211; &#8216;The Ultimate Commit Token&#8221;.  Simply appropriate one of those single use password setups with a single key fob.  You could try borrowing it from your corporate VPN setup &#8211; I&#8217;m sure they wouldn&#8217;t miss it.</p>
<p><a title="The Ultimate Commit Token!" href="http://ivansthunks.com/blog/wp-content/uploads/2008/04/keyfob.gif"></a></p>
<p style="text-align: center;"><a title="The Ultimate Commit Token!" href="http://ivansthunks.com/blog/wp-content/uploads/2008/04/keyfob.gif"><img src="http://ivansthunks.com/blog/wp-content/uploads/2008/04/keyfob.gif" alt="The Ultimate Commit Token!" width="462" height="307" /></a></p>
<p>Wire your pre-commit script into the server-side element and have the fob floating between developers.  Et Voila! One very annoying, yet extremely effective commit token!!!</p>
<p>I know, I know, it&#8217;s not very exotic looking, but fear not!  I reckon it would look natty glued to the back of <a href="http://www.toymania.com/customcorner/cc12/mpb.shtml">Spud Of Nine</a>.</p>
<p><a title="Spud Of Nine" href="http://ivansthunks.com/blog/wp-content/uploads/2008/04/tater_seven.jpg"><img src="http://ivansthunks.com/blog/wp-content/uploads/2008/04/tater_seven.jpg" alt="Spud Of Nine" width="470" height="374" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2008/04/24/the-ultimate-commit-token/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World</title>
		<link>http://ivansthunks.com/blog/2008/02/09/hello-world/</link>
		<comments>http://ivansthunks.com/blog/2008/02/09/hello-world/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 23:19:55 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ivanjensen.com/blog/2008/02/09/hello-world/</guid>
		<description><![CDATA[It does for for programming, it&#8217;ll do for blogging &#8211; Hello World!]]></description>
			<content:encoded><![CDATA[<p>It does for for programming, it&#8217;ll do for blogging &#8211; Hello World!</p>
]]></content:encoded>
			<wfw:commentRss>http://ivansthunks.com/blog/2008/02/09/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

