<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Principia &#187; Tools &#039;n&#039; Tips</title>
	<atom:link href="http://blog.principia-it.co.uk/category/tools-n-tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.principia-it.co.uk</link>
	<description>Power from Simplicity</description>
	<lastBuildDate>Tue, 07 Feb 2012 07:40:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.principia-it.co.uk' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/6f78c9f4917c134dd89eb02c5ec6e5d8?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Principia &#187; Tools &#039;n&#039; Tips</title>
		<link>http://blog.principia-it.co.uk</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.principia-it.co.uk/osd.xml" title="Principia" />
	<atom:link rel='hub' href='http://blog.principia-it.co.uk/?pushpress=hub'/>
		<item>
		<title>Grinding my gears. Marketeers (again)</title>
		<link>http://blog.principia-it.co.uk/2012/01/27/1025/</link>
		<comments>http://blog.principia-it.co.uk/2012/01/27/1025/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 10:00:24 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=1025</guid>
		<description><![CDATA[Yesterday I posted on how I get annoyed by marketeers making groundless claims for their tools (or at least claims for which they provide no supporting data). Here&#8217;s another thing tool vendors do that irritates the hell out of me&#8230; answering a question with &#8216;buy my tool&#8217; or &#8216;my tool solves this problem&#8217; type posts. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=1025&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I <a title="Marketing claims" href="http://blog.principia-it.co.uk/2012/01/26/marketing-claims/">posted</a> on how I get annoyed by marketeers making groundless claims for their tools (or at least claims for which they provide no supporting data). Here&#8217;s another thing tool vendors do that irritates the hell out of me&#8230; answering a question with &#8216;buy my tool&#8217; or &#8216;my tool solves this problem&#8217; type posts.</p>
<p>Gargh!</p>
<p>Okay. Don&#8217;t get me wrong, I have nothing against you telling me how your tool addresses the problem at hand. In fact I <em>really</em> want to know <em>how</em> your tool address the specific problem being posed. If it takes too long for a short post, link to a white paper or an article or post on your website/blog. But please, please, please, make sure that whatever you point to <strong>really does address the problem being asked about</strong>. Don&#8217;t just link to some random marketing bullshit about your product. The person asking the question wants to know how to solve a specific problem, at least do them the curtesy of answering with something more enlightening than &#8216;buy our product&#8217;.</p>
<p>What if the question is more general? Well, again, add to the conversation. Answering with &#8216;take a look at my tool&#8217; just makes you look like one. The <em>only</em> question that should be answered &#8216;take a look at my tool&#8217; (unless you&#8217;re in a dodgy &#8217;70s porno) is &#8216;can you please list tools in the X category&#8217;, and only then if your tool is firmly in the X category (not in the &#8216;could be used in the X category, if you have a really good imagination or are willing to invest an additional one billion dollars in customising our tool&#8217;).</p>
<p>Vendor input on forums is, at its best, very useful and helpful. Sadly it is too often lazy, irritating, and unhelpful.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/1025/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/1025/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/1025/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/1025/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/1025/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/1025/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/1025/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/1025/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=1025&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2012/01/27/1025/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Marketing claims</title>
		<link>http://blog.principia-it.co.uk/2012/01/26/marketing-claims/</link>
		<comments>http://blog.principia-it.co.uk/2012/01/26/marketing-claims/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 16:04:27 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Business Cases]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=1022</guid>
		<description><![CDATA[One thing that&#8217;s always bugged me is unfounded, or at least unsupported, claims made by tool vendors (actually, by anyone, but in this context particularly tool vendors). I&#8217;m starting to call them out whenever I can. Here&#8217;s an example of what I mean, posts on forums where claims like the following are made. Eliminate the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=1022&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One thing that&#8217;s always bugged me is unfounded, or at least unsupported, claims made by tool vendors (actually, by anyone, but in this context particularly tool vendors). I&#8217;m starting to call them out whenever I can.</p>
<p>Here&#8217;s an example of what I mean, posts on forums where claims like the following are made.</p>
<blockquote><p>Eliminate the number of potential risks threatening database development and deployment by 60% and reduce deployment costs by 95%.[sic]</p></blockquote>
<p>What does this even mean? Reduce what deployment costs? Against what baseline? Is this an average observable saving, if so, where&#8217;s your supporting data?</p>
<p>Which development and deployment risks are you talking about? Which of these risks does your tool mitigate? How much effort is required to mitigate those risks? Is it really worth it?</p>
<p>In this particular case a link was provided to a press release. Still no sign of any substantiating data. What about their web site. Nope. Not a thing.</p>
<p>Or how about this one,</p>
<blockquote><p>AccuRev will eliminate up to 90% of normal merge activity.</p></blockquote>
<p>What is &#8216;normal merge activity&#8217;? On what basis does this person (who was a representative of the company) make this claim? 90%? At first blush this is a remarkably specific claim (read it carefully and they&#8217;ve included those marketing weasel words &#8216;up to&#8217;), it must be based on some pretty sound data. Or maybe not. Maybe it&#8217;s just one of those made up statistics again. Yeah. That&#8217;s what it was. I contacted the person involved and they continued to be vague and push out marketing speak, but failed to come up with anything more substantial than &#8216;Our customers have typically seen between 70-90% reduction in merging activity.&#8217; Another unsubstantiated claim, and even if it&#8217;s true is still seems to be based on perception and hearsay rather than hard numbers. (Oh, and 70-90% is a heck of a wide range and boldly claiming 90% in the original statement is misleading even if you accept the more qualified range.)</p>
<p>Ah, you say, but it claims &#8216;<em>up to</em> 90%&#8217;. Well that&#8217;s BS too. I can save <em>up to</em> 100% by not doing any parallel development at all. No merging, no merging costs. Alternatively, if your merges are normally done by a bunch of alcoholic monkeys, then I guess saving 90% is possible by using properly trained software engineers and following good branch and merge practices.</p>
<p>And if they save you 0%, well, that&#8217;s up to 90% too. 90% is just a made up number plucked out of some marketing guy&#8217;s butt.</p>
<p>Now, I understand that marketing people like to make these claims, they look impressive on paper, but they&#8217;re absolutely useless to anyone with an IQ greater than their shoe size who is trying to evaluate tools. Frankly, if you&#8217;re going to make ridiculous, unsubstantiated claims then I for one don&#8217;t want to be doing business with you. I mean, if you can&#8217;t be up-front and straighforward at the beginning of our relationship, how trustworthy are you going to be when it matters? (I&#8217;m tired of hearing people say things like, &#8216;but the sales guys said this tool would solve this problem&#8217;. Really? The sales guys said that did he? And you didn&#8217;t think to verify that before you bought the damned tool?)</p>
<p>The stock reply of course is, &#8216;but everyone does it and if we don&#8217;t make these claims no one will pay any attention.&#8217; Really? You&#8217;re falling back on the &#8216;everyone else does it&#8217; defence? If that&#8217;s the best you have then, once again, I&#8217;m not sure I want to do business with you. (As my old Mum says, &#8216;if everyone else stuck their head in an oven, would you?&#8217;)</p>
<p>Another justification goes along the lines, &#8216;but there is no good way to measure X&#8217;. Now that may be true, but that doesn&#8217;t give you license to just make shit up. If there&#8217;s no good way to measure something then claiming to reduce that something by a specific quantity is&#8230; well, bullshit. &#8216;Oh yes, I can reduce your unspecified cost by 53%.&#8217; How the hell can you say that with a straight face?</p>
<p>These sort of unfounded claims really make my blood boil. So I&#8217;ve decided that whenever I see unsubstantiated claims I&#8217;m going to call them on their BS. It&#8217;s simple enough, just reply to their post asking, &#8216;I am interested in your claim that X will say me Y%. I wonder if you could provide us with the data on which this claim is based, I&#8217;m sure the community will be interested to see the methodology and metrics you used to gather this data, as well as the data itself. In an industry where such benchmark studies are rare, or at least seldom published, your data will be most useful.&#8217;</p>
<p>I bet not one will reply with anything remotely like an independent data set that substantiates the marketing claim. And if they do, all the better because I for one would love to see this sort of data collected and published.</p>
<p>Remember, marketing statistics and claims are generally worth exactly what you paid for them. Zero. And I have data to support that.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/business/'>Business</a>, <a href='http://blog.principia-it.co.uk/category/business-cases/'>Business Cases</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/1022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/1022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/1022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/1022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/1022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/1022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/1022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/1022/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=1022&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2012/01/26/marketing-claims/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Running ANT within ANT under a different JVM</title>
		<link>http://blog.principia-it.co.uk/2011/03/24/running-ant-within-ant-under-a-different-jvm/</link>
		<comments>http://blog.principia-it.co.uk/2011/03/24/running-ant-within-ant-under-a-different-jvm/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 18:00:46 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[ANT]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=872</guid>
		<description><![CDATA[Problem You have set up a continuous integration build using CruiseControl. The build loop initiates your build using an ANT script mainBuild.xml. This mainBuild.xml needs to invoke several other build files, but (and here&#8217;s the catch) you want the sub-builds to use a different JDK. Using the ant task will invoke the sub-build using the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=872&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Problem</h2>
<p>You have set up a continuous integration build using CruiseControl. The build loop initiates your build using an ANT script <span class="code">mainBuild.xml</span>. This <span class="code">mainBuild.xml</span> needs to invoke several other build files, but (and here&#8217;s the catch) you want the sub-builds to use a different JDK.</p>
<p>Using the <span class="code">ant</span> task will invoke the sub-build using the same context as the calling script. Changing <span class="code">JAVA_HOME</span> will have no effect on the Java used by the sub-build. How then, can you invoke the sub-builds with the correct Java context?</p>
<h2>Solutions</h2>
<p>One obvious solution is to create wrapper scripts (<span class="code">bat</span> or <span class="code">sh</span>, for example) that set the context for you and then invoke the &#8216;real&#8217; ANT script. This will work, but lacks elegance and means adding in the wrapper scripts — more maintenance work.</p>
<p>A better, more elegant, solution is to invoke ANT directly from the <span class="code">mainBuild.xml</span> using the <span class="code">java</span> task.</p>
<p>The listing below shows a macro that wraps the direct invocation of ANT to provide simplify calling ANT this way.</p>
<p><strong>Note:</strong> This macro requires <a title="ant-contrib sourceforge project" href="http://sourceforge.net/projects/ant-contrib/">ant-contrib</a>.</p>
<p><pre class="brush: xml;">
&lt;macrodef name=&quot;runAntWithJVM&quot;&gt;
    &lt;attribute name=&quot;buildFile&quot;/&gt;
    &lt;attribute name=&quot;buildDir&quot;/&gt;
    &lt;attribute name=&quot;target&quot;/&gt;
    &lt;attribute name=&quot;cmdLineArgs&quot; default=&quot;&quot;/&gt;
    &lt;attribute name=&quot;javaHome&quot; default=&quot;${JAVA_HOME}&quot;/&gt;
    &lt;attribute name=&quot;timeout&quot; default=&quot;4000000&quot;/&gt;
    &lt;attribute name=&quot;maxMemory&quot; default=&quot;512m&quot;/&gt;
    &lt;sequential&gt;
        &lt;var name=&quot;l.javaresult&quot; unset=&quot;true&quot;/&gt;
        &lt;var name=&quot;l.javaoutput&quot; unset=&quot;true&quot;/&gt;
        &lt;var name=&quot;l.level&quot; value=&quot;info&quot;/&gt;
        &lt;java classname=&quot;org.apache.tools.ant.launch.Launcher&quot;
                  jvm=&quot;@{javaHome}/bin/java&quot;
                  fork=&quot;true&quot;
                  failonerror=&quot;false&quot;
                  resultproperty=&quot;l.javaresult&quot;
                  outputproperty=&quot;l.javaoutput&quot;
                  dir=&quot;@{buildDir}&quot;
                  timeout=&quot;@{timeout}&quot;
                  maxmemory=&quot;@{maxMemory}&quot;
                  taskname=&quot;startAnt&quot;&gt;
            &lt;classpath&gt;
                &lt;pathelement location=&quot;${ant.home}/lib/ant-launcher.jar&quot;/&gt;
            &lt;/classpath&gt;
            &lt;arg value=&quot;-buildfile&quot;/&gt;
            &lt;arg file=&quot;@{buildDir}/@{buildFile}&quot;/&gt;
            &lt;arg value=&quot;-DJAVA_HOME=@{javaHome}&quot;/&gt;
            &lt;arg line=&quot;@{cmdLineArgs}&quot;/&gt;
            &lt;arg value=&quot;@{target}&quot;/&gt;
        &lt;/java&gt;
        &lt;if&gt;
            &lt;not&gt;
                 &lt;equals arg1=&quot;${l.javaresult}&quot; arg2=&quot;0&quot;/&gt;
            &lt;/not&gt;
            &lt;then&gt;
                &lt;var name=&quot;l.level&quot; value=&quot;error&quot;/&gt;
            &lt;/then&gt;
        &lt;/if&gt;
        &lt;echo level=&quot;${l.level}&quot;&gt;System build output:
${l.javaoutput}

Returned status:${l.javaresult}&lt;/echo&gt;
        &lt;fail&gt;
            &lt;condition&gt;
                &lt;not&gt;
                    &lt;equals arg1=&quot;${l.javaresult}&quot; arg2=&quot;0&quot;/&gt;
                &lt;/not&gt;
            &lt;/condition&gt;
        &lt;/fail&gt;
    &lt;/sequential&gt;
&lt;/macrodef&gt;
</pre></p>
<p>Line 01 declares the macro and lines 02-08 setup the macro&#8217;s attributes.</p>
<p>Lines 09-12 set up some local properties that are used to capture output from the sub-build ANT file so that it can be reported back as part of the <span class="code">mainBuild.xml</span> output.</p>
<p>Lines 13-31 are the real meat of this macro. Lines 13-22 set up the java task, lines 23-25 simply put the <span class="code">ant-launcher.jar</span> onto the classpath (it is the <span class="code">ant-launcher</span> that is used to run ANT in the new context). </p>
<p>Lines 26-30 are the command line arguments to be passed to the new JVM initiated by the <span class="code">java</span> task. Notice that the <span class="code">JAVA_HOME</span> is set explicitly here and will match the JVM invoked for the sub-build.</p>
<p>Returning to lines 13-22.</p>
<p>Line 13 provides the entry point class into <span class="code">ant-launcher</span>.</p>
<p>Line 14 is the one that does the magic, it tells the <span class="code">java</span> task to use a specific JVM to run.</p>
<p>Line 15 ensures that a new JVM is used (<span class="code">fork</span> is not <span class="code">true</span> then the <span class="code">jvm</span> setting is ignored and the sub-build will run in the same JVM as <span class="code">mainBuild.xml</span>).</p>
<p>Line 16 ensures that any failure of the sub-build will not bring down the <span class="code">mainBuild.xml</span>. We need this so that output from the sub-build can be properly reported before <span class="code">mainBuild.xml</span> fails gracefully.</p>
<p>Line 17 collects the return status of the sub-build and is used to decide if the <span class="code">mainBuild.xml</span> should fail after reporting the output of the sub-build.</p>
<p>Line 18 collects all the output from the sub-build into a property.</p>
<p>Line 19 sets a default working directory. In this case it is set to the sub-build directory provided by the caller.</p>
<p>Line 20 sets a timeout (in milliseconds) that we are willing to have the java task run for. This is a backstop that prevents our build hanging indefinitely.</p>
<p>Line 21 sets a <span class="code">maxMemory</span> for the forked JVM (you may not need to set it this high, or you may need to make it higher, all depends on your sub-build requirements).</p>
<p>Line 22 changes the task name reported in logging information (it&#8217;s just a bit clearer than seeing <span class="code">[Java]</span> all the way through the log.</p>
<p>The remainder of the macro just marshals the output of the sub-build, reports it and then decides whether to throw a fatal error if the sub-build failed.</p>
<h2>Using the macro</h2>
<p>Just invoke it with a command like the following.</p>
<p><pre class="brush: xml;">
&lt;runAntWithJVM buildDir=&quot;${basedir}/subBuild&quot;
               buildFile=&quot;bulid.xml&quot;
               target=&quot;all&quot;
               javaHome=&quot;C:/Program Files/java/jdk1.6.15_05&quot;&gt;
</pre><br />
This will run the <span class="code">subBuild/build.xml</span> hitting the target <span class="code">all</span> using the 1.6.15_05 JDK, no matter which JVM the original build file was invoked using.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/tools-n-tips/ant/'>ANT</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/ant/'>ANT</a>, <a href='http://blog.principia-it.co.uk/tag/java/'>Java</a>, <a href='http://blog.principia-it.co.uk/tag/jdk/'>JDK</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/872/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=872&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2011/03/24/running-ant-within-ant-under-a-different-jvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>What problem does it solve?</title>
		<link>http://blog.principia-it.co.uk/2011/03/08/what-problem-does-it-solve/</link>
		<comments>http://blog.principia-it.co.uk/2011/03/08/what-problem-does-it-solve/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 07:36:59 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=857</guid>
		<description><![CDATA[This simple question will save you hours of pain. Whenever you are looking at a new methodology or technology. Whenever you are designing a new process or procedure. Ask yourself, &#8216;what problem does it solve?&#8217;. If you can&#8217;t come up with a clear well defined answer then the chances are you should not proceed with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=857&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This simple question will save you hours of pain.</p>
<p>Whenever you are looking at a new methodology or technology. Whenever you are designing a new process or procedure. Ask yourself, &#8216;what problem does it solve?&#8217;. If you can&#8217;t come up with a clear well defined answer then the chances are you should not proceed with an implementation.</p>
<p>If you cannot answer the question &#8216;what problem does it solve?&#8217; then why is the tool, method, process, or whatever needed? If you don&#8217;t know why it&#8217;s needed, why are you spending time implementing it?</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/857/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=857&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2011/03/08/what-problem-does-it-solve/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Conversations and workshops</title>
		<link>http://blog.principia-it.co.uk/2010/12/10/conversations-and-workshops/</link>
		<comments>http://blog.principia-it.co.uk/2010/12/10/conversations-and-workshops/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 15:01:19 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Body of Knowledge]]></category>
		<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[ITSLM]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Principia Notifications]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=811</guid>
		<description><![CDATA[I have, for some time, considered the possibilities of the Internet for the real-time exchange of ideas around the lifecycle management subject (config, change, release, problem, and project management, among others). In particular I have been pondering how to start a useful dialogue about the Lifecycle Management Body of Knowledge. I suspect that one of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=811&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have, for some time, considered the possibilities of the Internet for the real-time exchange of ideas around the lifecycle management subject (config, change, release, problem, and project management, among others). In particular I have been pondering how to start a useful dialogue about the <a href="http://itslmbok.com/">Lifecycle Management Body of Knowledge</a>.</p>
<p>I suspect that one of the reasons for a lack of contributions to the body of knowledge is people feel rather vulnerable offering opinions in writing on a public forum. Committing your untested view to writing can be a daunting prospect, especially when you lack confidence in your ability to clearly express yourself in writing and your audience is well informed and apparently well established on the forum/site. I know I&#8217;d benefit greatly from such a forum, even though I contribute to blogs and forum debates now.</p>
<p>While it is satisfying to exchange ideas in forums or through blogs, it is not quite the same as a more real-time interactive session. There is simply no substitute for sitting down in a relaxed informal environment and talking over a subject that interests you. Things like the <a href="http://www.cmcrossroads.com/alm-expo">ALM Expo</a> help but I think they are still too formal and often little more than a series of marketing pitches by vendors, which is not what I&#8217;m looking for. I want a sort of &#8216;watercooler&#8217; or &#8216;drinks in the bar&#8217; exchange of ideas.</p>
<p>I want to move away from a stultifying formal environment, where we feel our every word is being judged and consequently we feel the need to be &#8216;professional&#8217; at all times, into a more relaxed environment where we can have a proper conversation.</p>
<p>To this end I have looked at a number of possible mechanisms for sharing and interacting in real-time. </p>
<p>One obvious method is the webinar. Most webinars I have seen get the format horribly wrong (or rather, they corrupt the format into something so far removed from a webinar that it&#8217;s unrecognisable). A webinar should be like a face-to-face seminar (a host makes a short presentation on the topic at hand to stimulate participation, followed by an extended period of dialogue between participants). Most &#8216;webinars&#8217; that I have attended are little more than a marketing pitch in which the host presents their product (sometimes thinly veiled behind some more general question) followed by one or two selected questions. This format is more like a lecture but would be more accurately described as &#8216;ad-inars&#8217;. Completely useless for what I want, which is a dialogue, an exchange of ideas—in other words, what I would expect from a seminar/webinar.</p>
<p>Then there are broadcast forums such as <a href="http://blogtv.com">BlogTV</a>. Again, while this is primarily a broadcast medium, the interactive chat available to all viewers does provide the audience with a means to direct the &#8216;show&#8217; by asking questions and challenging the presenter. So, perhaps a little more of the dialogue I am looking for; a chance for people to ask questions and challenge the host&#8217;s views. BlogTV also has the opportunity to co-host, allowing for the interesting possibility of debates, interviews and the like. BlogTV&#8217;s non-commercial nature also, in my opinion, makes it more relaxed and less formal than some other formats.</p>
<p>Another interesting possibility is the chat room style interaction offered by services like <a href="http://stickam.com">Stickam</a> or <a href="http://youcams.com">YouCams</a>. These allow several people to interact via audio/video links while others contribute in chat format. People can &#8220;step up to the mic&#8221; when a slot is released, making for a fairly dynamic interaction.</p>
<p>These five modes (blogs, forums, webinars, broadcast, and video chat-room) each has merits and shortcomings. I already participate in most of these formats but only the first two in a professional capacity. I find myself dissatisfied with the interactions provided by the forum and blog formats (it&#8217;s like having a conversation in slow motion and it takes too long to write the post and then spend time clarifying and resolving misunderstandings that could be cleared up in seconds face to face). So, what about the other formats?</p>
<p>Well, the most obvious problem with each of the other three is precisely their real-time nature. At what time should I offer to take part in them? I have good conversations with people in India, Europe, and the US and these cover a wide range of time zones. To cover all of them would require several sessions. Then there is the matter of when people can take part. Some of you can access audio or video at work, others cannot. Some are willing to take part in these sorts of conversations in your spare time, others are not. To reach as wide an audience as possible, to discuss the topic with as many people as possible and benefit from different viewpoints means running multiple sessions but obviously I want to make each session as relevant and accessible as I can.</p>
<p>How many people want to spend their spare time talking about their profession? When I first thought about this my reaction was &#8216;not many&#8217;, but then I thought, &#8216;but you want to, there must be others like you&#8217;. But maybe I&#8217;m just strange? We shall see.</p>
<p>All of this musing lead me to the conclusion that the only way to proceed was to &#8216;give it a go&#8217;. So, over the coming months I will be setting up some open webinars, doing some <a href="http://www.blogtv.com/people/Principia">BlogTV</a>, and coordinating some video chat-room sessions. Some will start with a specific topic, others will be more open-ended. I will try to run sessions at different times in the hope you can join in at least one of them.</p>
<p>If you are interesting in making your own presentation at a webinar (I want people willing to present a 10-15 minute introduction, a well framed question would make a good introduction, to stimulate dialog—no vendor style &#8216;ad-inars&#8217;), or you want to co-host a blogTV session, then<a href="http://www.principia-it.co.uk/contact/mark-bools"> contact me</a> and we&#8217;ll sort something out. If you want to participate but cannot find a suitably timed session then <a href="http://www.principia-it.co.uk/contact/mark-bools">contact me</a> and let me know your time zone and when would be a better time for you (no promises, I do have to work and sleep too <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Oh, and if you have any suggestions for topics for these sessions,<a href="http://www.principia-it.co.uk/contact/mark-bools"> let me know</a> and I&#8217;ll see what I can do.</p>
<p>I will <a href="http://blog.principia-it.co.uk">blog</a>, <a href="http://twitter.com/PrincipiaIT">tweet</a>, post to the <a href="http://www.cmcrossroads.com/forums?func=showcat&amp;catid=50">CM Forum</a>, and announce on the <a href="http://itslmbok.com/">ITSLM Body of Knowledge web site</a> all of the sessions.</p>
<p>Whether I continue with these will depend upon whether people are interested in participating (there&#8217;s no point in them if people don&#8217;t take part).</p>
<p>I hope to speak with many of you in the near future.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/itslm/body-of-knowledge/'>Body of Knowledge</a>, <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/general/'>General</a>, <a href='http://blog.principia-it.co.uk/category/itslm/'>ITSLM</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/principia-notifications/'>Principia Notifications</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/811/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/811/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/811/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/811/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/811/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/811/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/811/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/811/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=811&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/12/10/conversations-and-workshops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Keeping configuration separate in ANT</title>
		<link>http://blog.principia-it.co.uk/2010/10/21/keeping-configuration-separate-in-ant/</link>
		<comments>http://blog.principia-it.co.uk/2010/10/21/keeping-configuration-separate-in-ant/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 11:21:19 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[ANT]]></category>
		<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Plain Old Blog]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=788</guid>
		<description><![CDATA[Actually, this advice holds for any software system, but in this article I am focussing on ANT. One often sees, in ANT scripts, something like this at the head of the build.xml file. So far, so good. The author of this ANT script has thought to define properties that control the script&#8217;s behaviour at the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=788&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Actually, this advice holds for any software system, but in this article I am focussing on ANT.</p>
<p>One often sees, in ANT scripts, something like this at the head of the <span class="code">build.xml</span> file.</p>
<p><pre class="brush: xml;">
&lt;project name=&quot;myproj&quot;&gt;
    &lt;property name=&quot;buildroot.dir&quot; location=&quot;${basedir}/..&quot;/&gt;
    &lt;property name=&quot;source.dir&quot; location=&quot;${buildroot.dir}/src&quot;/&gt;
    &lt;property name=&quot;bin.dir&quot; location=&quot;${buildroot.dir}/bin&quot;/&gt;

    &lt;property name=&quot;bld.package&quot; value=&quot;true&quot;&gt;
</pre></p>
<p>So far, so good. The author of this ANT script has thought to define properties that control the script&#8217;s behaviour at the start of the script. This means that, should circumstances change, it is relatively easy to change the script&#8217;s behaviour. So, should it be decided that the <span class="code">bin</span> directory should be moved to another location, we simply change the definition of the <span class="code">bin.dir</span> property and no other changes are necessary in the script.</p>
<p>Another, not so obvious, advantage of this approach is that these properties can be easily changed by defining the properties outside the script (passed on the command line, e.g. <span class="code">ant -Dbin.dir=special/bin</span> or by some client script, e.g. a call from CruiseControl), either way, the property defined will not be overridden by the script because <span class="code">&lt;property&gt;</span> never redefines a property once it is set. Neat.</p>
<p>The problem with putting properties in the <span class="code">build.xml</span> file itself makes them more difficult to access from other ANT scripts.</p>
<p>Suppose I have another ANT script that I want to interact with the same build system. I want to ensure that the script can pick up the configuration information (things like the directories the build system is using or settings that dictate build behaviour like the <span class="code">bld.package</span> property). If these are defined in the <span class="code">build.xml</span> then accessing them is tricky. If, however, they are defined in their own file I can simply load that &#8216;configuration&#8217; file separate to the <span class="code">build.xml</span> but be confident that the settings are the same as were used by the build itself.</p>
<p>There are two approaches to isolating configuration from the scripts that use them; use another ANT file and <span class="code">&lt;include&gt;</span> or <span class="code">&lt;import&gt;</span> it, or I can use a property file, e.g. <span class="code">build.properies</span> and <span class="code">&lt;property file=&quot;build.properties&quot;&gt;</span> or <span class="code">&lt;loadproperties srcfile=&quot;build.properties&quot;&gt;</span> it into a script. The approach you take will depend upon the sort of information you want in your configuration, where you are likely to use it, and how much flexibility you need.</p>
<p>Personally I prefer <span class="code">&lt;loadproperties srcfile=&quot;build.properties&quot;&gt;</span> for most purposes and I use <span class="code">&lt;include&gt;</span> as a wrapper when I need special configuration that is not accessible through the more direct <span class="code">build.properies</span> format.</p>
<p>So, I might have the following in my main <span class="code">build.xml</span>.</p>
<p><pre class="brush: xml;">
&lt;project name=&quot;myproj&quot;&gt;
    &lt;include file=&quot;config.xml&quot;/&gt;
</pre></p>
<p>And then, in the <span class="code">config.xml</span> I might have the following.</p>
<p><pre class="brush: xml;">
&lt;project name=&quot;myproj.config&quot;&gt;
    &lt;loadproperties srcfile=&quot;build.properties&quot;/&gt;

    &lt;defaultexcludes add=&quot;**/*.bak&quot;&gt;
&lt;/project&gt;
</pre></p>
<p>The <span class="code">defaultexcludes</span> would me more difficult to set using a properties file, so I use the <span class="code">config.xml</span> here. I am using <span class="code">&lt;loadproperties&gt;</span> here, but could have used <span class="code">&lt;properties file=&quot;&quot;&gt;</span>.  <span class="code">&lt;loadproperties&gt;</span> provides some extra flexibility because it supports filterchains, but that&#8217;s a topic for another post. I just feel that  <span class="code">&lt;loadproperties&gt;</span> describes better what the script is doing, but as I say, in this case, it&#8217;s a matter of personal preference.</p>
<p>And finally, in the <span class="code">build.properties</span> I might have the following.</p>
<p><pre class="brush: plain;">
buildroot.dir=${basedir}/..
source.dir=${buildroot.dir}/src
bin.dir=${buildroot.dir}/bin

bld.package=true
</pre></p>
<p>Now the <span class="code">build.properties</span> are available in a simple form to be loaded into any script that needs this project&#8217;s main configuration. The <span class="code">config.xml</span> provides additional configuration that I may want to load but is not available in the property file format, and is often not relevant to basic configuration information such as locations. I can also use the <span class="code">config.xml</span> to perform more advanced scripting of configuration if needed.</p>
<div class="sidebar">
A note of caution: when using this approach you need to be careful that the <span class="code">basedir</span> property is correctly set before loading the <span class="code">build.properties</span>, otherwise all your paths will be wrong.
</div>
<p>I find that this approach of breaking out configuration into separate files according to both its function and how I think it will be accessed has saved me a lot of work over the years. It also disciplines me into thinking about how my builds should be configured and encourages me to keep all the configuration information in one place (if I find myself tempted to use a <span class="code">&lt;property&gt;</span> to define a location or simple string in my main <span class="code">build.xml</span> I ask myself, would this be better in the <span class="code">build.properties</span>? It generally is.)</p>
<p>Keeping configuration separate also makes the main <span class="code">build.xml</span> much easier to reuse. Just copy the build system into the new project, change the <span class="code">build.properties</span> and, assuming you&#8217;ve written your <span class="code">build.xml</span> well, everything should work without further change.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/tools-n-tips/ant/'>ANT</a>, <a href='http://blog.principia-it.co.uk/category/itslm/build-management/'>Build Management</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/788/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=788&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/10/21/keeping-configuration-separate-in-ant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>How do you copy 60m files?</title>
		<link>http://blog.principia-it.co.uk/2010/09/25/how-do-you-copy-60m-files/</link>
		<comments>http://blog.principia-it.co.uk/2010/09/25/how-do-you-copy-60m-files/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 11:20:12 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=783</guid>
		<description><![CDATA[It is a problem you are bound to face sooner or later in your CM career, How do you copy 60m files?. Okay, you may not need to copy 60 million files, but anyone who has tried to copy millions of files between servers knows that it can be fraught with problems, especially if those [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=783&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It is a problem you are bound to face sooner or later in your CM career, <a href="http://www.theregister.co.uk/2010/09/24/sysadmin_file_tools/">How do you copy 60m files?</a>. Okay, you may not need to copy 60 million files, but anyone who has tried to copy millions of files between servers knows that it can be fraught with problems, especially if those two servers are running Windows. In the linked article, Trevor Pott steps through the things he tried when face with this problem and reaches an interesting, if only mildly surprising, conclusion.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/general/'>General</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/783/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=783&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/09/25/how-do-you-copy-60m-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Is Perl an essential skill of SCMers</title>
		<link>http://blog.principia-it.co.uk/2010/09/21/is-perl-an-essential-skill-of-scmers/</link>
		<comments>http://blog.principia-it.co.uk/2010/09/21/is-perl-an-essential-skill-of-scmers/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 13:27:37 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Glue Software]]></category>
		<category><![CDATA[PERL]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=616</guid>
		<description><![CDATA[Is being able to use Perl an essential skill for people working at the technical coal face of software configuration management? The obvious, and probably correct, answer is &#8216;probably not essential&#8216; but if you work in software configuration management it is well worth considering. Perl is fairly ubiquitous, there are few platforms that do not [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=616&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Is being able to use Perl an essential skill for people working at the technical coal face of software configuration management?</p>
<p>The obvious, and probably correct, answer is &#8216;probably not <em>essential</em>&#8216; but if you work in software configuration management it is well worth considering. </p>
<p>Perl is fairly ubiquitous, there are few platforms that do not have a Perl implementation available and it is a standard part of many Unix distributions. Perl code is (with a little caution needed to avoid explicit platform dependencies) portable too, the Tk packages even provide a reasonably portable GUI system should you need it. Perl is a fairly simple language to learn and has a legacy of library code freely available from <a href="http://www.cpan.org/">CPAN</a> that offers a multitude of useful utilities to the SCM practitioner.</p>
<p>While a similar case can be made for Java or Python, I contend that, excellent skills to have though they may be, both languages place more demands on the casual programmer, requiring more time to learn and more discipline to write code. Perl benefits from a much more relaxed approach to scripting. Being a semi-compiled scripting language it is easy to write quick scripts and easy to develop these in a more-or-less <em>ad hoc</em> way.</p>
<p>It is undoubtedly true that Perl&#8217;s relaxed approach can bite the unwary, and it is very easy to end up with unmaintainable systems if you let them get out of control. But with a little discipline you can, so to speak, have your cake and eat it — benefiting from simple, rapid scripting facilities, leveraging libraries and ease of developing small scripts into greater things.</p>
<p>If you get serious about your Perl then you will need an IDE. I use ActiveState&#8217;s <a href="http://www.activestate.com/komodo-ide/features">Kermodo</a> and it serves well with its integrated code assistance, online help, coverage analysis, and debugger being major benefits. Activstate&#8217;s <a href="http://www.activestate.com/activeperl-pro-studio">Perl developer package</a> also comes with a nice packaging tool that wraps a Perl interpreter with your code to provide a single executable package that does not require Perl to be installed on the user&#8217;s environment. </p>
<p>If your tastes run more to the Eclipse IDE then there&#8217;s an extension for Perl, which also supports the Perl debugger, called <a href="http://www.epic-ide.org/">EPIC</a>. Having used both, I favour the ActiveState environment for all the additional features their package supports, but that&#8217;s a personal choice.</p>
<p>Over the past fifteen years I have found my Perl skills have enabled me to quickly develop and reuse Perl scripts in many different environments, on many different projects, for many different clients. So, for me, Perl has been one of the skills I have been very glad to have in my toolbox.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/glue-software/'>Glue Software</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/glue-software/perl/'>PERL</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/616/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=616&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/09/21/is-perl-an-essential-skill-of-scmers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Which SCM tool?</title>
		<link>http://blog.principia-it.co.uk/2010/09/08/which-scm-tool/</link>
		<comments>http://blog.principia-it.co.uk/2010/09/08/which-scm-tool/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 16:43:55 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Business Cases]]></category>
		<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=763</guid>
		<description><![CDATA[This is one of the most common questions asked on the CMCrossroads forums, and perhaps one of the most pointless. The question is variously stated as, &#8220;which is the best tool?&#8221;, &#8220;is tool X better than tool Y?&#8221;, or &#8220;we are looking for the best tool to X&#8221;. All such questions are equally vacuous. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=763&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is one of the most common questions asked on the <a href="http://www.cmcrossroads.com/forums?func=showcat&amp;catid=4">CMCrossroads</a> forums, and perhaps one of the most pointless. The question is variously stated as, &#8220;which is the best tool?&#8221;, &#8220;is tool X better than tool Y?&#8221;, or &#8220;we are looking for the best tool to X&#8221;. All such questions are equally vacuous. The answer, as always, is &#8220;it depends&#8221;. There are simply too many variables for this question to be answered in any sensible fashion from such vague criteria.</p>
<p>Sometimes the questioner will provide some clues about their specific circumstances, but inevitably the answers will reiterate, &#8220;it depends&#8221;.</p>
<p>The correct approach to this problem is not to solicit <em>ad hoc</em> advice from internet fora, but to consider your own situation. The process is simple enough but requires that you put some thought and effort into finding the right tool. It boils down to the following steps.</p>
<ol>
<li>Draw up a set of criteria to be met by the tools you intend to evaluate.</li>
<li>Draw up an evaluation matrix.</li>
<li>Create a shortlist of possible tools.</li>
<li>Evaluate the shortlisted tools against your criteria.</li>
<li>Get vendor demonstrations.</li>
<li>Get evaluation license installations.</li>
<li>Finally select, in as objective a manner as you can, the best solution for your predefined criteria.</li>
</ol>
<p>An alternative strategy is to employ an expert in the ALM tools field, but they will follow this process anyway. Any other approach is utterly pointless. Let&#8217;s take a more detailed look at each step.</p>
<h2>Generate a Requirements Document</h2>
<p>You must have a list of requirements the tool is to satisfy (otherwise you would not know you wanted a tool). Formalise these requirements into a document. Be specific.</p>
<p>If the tool is to support version control then consider whether you need it to support branching, baselining, labelling, parallel development and so on. Do you need it to support locking to prevent more than one user changing a file revision at a time? If so, must this locking be provided at a revision, branch or file level?</p>
<p>Are there specific integrations you require? Must the tool integrate with developer IDEs? Do you have existing build systems that the system must integrate with, or do you perhaps need a system with an integrated build system? Do you have special tool integration requirements?</p>
<p>Does the tool need to track changes (workflow control of change requests)? Or perhaps you have an existing change request system that needs to work with the new tool?</p>
<p>Do you need to support specific platforms? It&#8217;s no use looking at tools that run on Windows platforms if your development uses Unix. Similarly you may (as is common nowadays) have many platforms to support. If so, make sure you specify those that must be supported (and perhaps some that would be &#8216;nice to have&#8217; — there&#8217;s no use turning down a perfect fit for 99% of your environments just because one developer uses an odd platform).</p>
<p>Mario Moreira&#8217;s excellent  <em>Software Configuration Management Implementation Roadmap</em> (Amazon <a href="http://www.amazon.co.uk/Software-Configuration-Management-Implementation-Roadmap/dp/0470862645/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1283878457&amp;sr=8-2-spell">uk</a>,<a href="http://www.amazon.com/Software-Configuration-Management-Implementation-Roadmap/dp/0470862645/ref=sr_1_5?ie=UTF8&amp;s=books&amp;qid=1283880366&amp;sr=8-5">us</a>) is an excellent place to start in establishing your requirements.</p>
<p>Don&#8217;t forget the future! You may have a specific set of requirements now, but talk to your strategy team and find out whether they have plans to move to other platforms in the near to mid-term future. It may take many weeks to find and procure the tools, and once you have them integrated into your development process it can be tricky to change them, so make sure you are buying a tool set that will serve your needs for the next five years or more. (Sure, things may change in that time, but it&#8217;s stupid in the extreme to ignore what you know now. So plan ahead!)</p>
<p>The future is, they say, a foreign land and no amount of planning can anticipate every future requirement. Planning ahead is essential, but not guaranteed foolproof. Plan to transition to new tools in the future by including requirements for extracting data from the tool set you are investing in. This is a common mistake, tying yourself in to one system and finding it impractical to move to a new system later. Again, think ahead.</p>
<p>Formalise all your requirements into a document and review it with the stakeholders. Get sign-off from all stakeholders so that you know exactly what you need to find.</p>
<h2>Draw up an evaluation matrix</h2>
<p>Once you have the core requirements agreed on, draw up a simple evaluation matrix.</p>
<p>An evaluation matrix is a simple grid down one side of which are all your requirements. Next to each requirement put a weighting (a simple multiplier) indicating how important that feature is to your organisation. For example, you could use a scale of 1 through 5 (1 being optional and non-essential, and 5 being absolutely mandatory). Going across the top of the grid will be a series of columns where you specify the tools you intend to evaluate. This matrix can then be completed for each tool as you evaluate it when creating the shortlist (next step).</p>
<p>For each tool, you will enter a value indicating how satisfactorily it meets each requirement (0 for not at all, through to 5 for completely, for example). By multiplying the original factor with the satisfaction measure, you get a more-or-less objective value for how much each tool satisfies each requirement, and thus the degree to which each tool in its entirety meets the needs of your organisation or project. So, an optional requirement will always contribute less while a mandatory requirement will contribute more; and a tool that does not satisfy the criteria contributes nothing while a tool that satisfies the requirement completely contributes more.</p>
<p>There are many ways to adjust the way you calculate the value of each tool&#8217;s satisfaction of requirements (by adjusting the weighting factors or the way you calculate the final score), but whatever you decide to do, decide before you start evaluating tools and do not be tempted to fudge the results. We are aiming for as objective an assessment as we can get and it is tempting to see an appealing tool and try to adjust the weightings so that tool scores well. Doing this defeats the purpose of the evaluation; you may as well just &#8216;buy the pretty one&#8217;.</p>
<h2>Draw up a shortlist</h2>
<p>Okay, now you are ready to start researching tools. First, scan the internet for likely candidates. By all means visit forums and ask questions, but keep them both focussed and general. Ask people to suggest tools in general categories, for example: &#8220;I am looking for a change management tool to run on a Unix server that can be accessed from both Windows and Unix clients&#8221; or &#8220;I am looking for a version control tool that supports branching and merging and allows locking at the revision level&#8221;. Once you get these suggestions, go look at the vendor&#8217;s website and see how the tool matches your general requirements.</p>
<p>During this research phase you don&#8217;t need to be too specific, you&#8217;re just trying to get a shortlist of tools to add to your evaluation matrix and examine more closely.</p>
<p>Once you have your shortlist, you&#8217;re ready to do some more detailed assessments.</p>
<h2>Evaluate shortlisted tools</h2>
<p>A quick way to start your detailed evaluation is to send your requirements document (not the matrix, it won&#8217;t have any detailed description of your requirements) to the vendors of each tool. Make sure you contact the vendor and that you are dealing with a specific individual (you want to have someone accountable for making sure you get responses).</p>
<p>Only once you have responses should you move on to real evaluations. Oh, and any vendor that fails to respond should be dropped, after all if they can&#8217;t answer (or if they refuse to answer) questions then you have good reason to suspect their after-sales support may not be too hot either.</p>
<p>Okay, so you have your responses. Now add these to your evaluation matrix and add in your evaluations for how satisfactorily each tool meets your requirements. Contact the vendor (the person you dealt with when submitting your requirements) and get clarification as required.</p>
<p>Eliminate tools that score too badly from further investigation. (Of course, &#8216;too badly&#8217; will depend on what you are looking for.)</p>
<p>The final part of your initial investigation is to check the vendor company. Are they well established? Financially stable? What do forums say about their support facilities? How often do they release updates? And, of course, how much will the product cost (based on list price at this point, your procurement department will deal with negotiating the final price of licenses)? Add these details to your evaluation matrix.</p>
<p>Now, and only now, should you approach vendors for demonstrations.</p>
<h2>Get vendor demonstrators</h2>
<p>Why leave it so late to see the tool in action? Two reasons; firstly, until you have requirements, and a statement from the vendor on how ther tool satisfies the requirements, you are not in a position to evaluate any demonstration. Secondly, it is very easy to be distracted by a generic shiny demonstration (I know only too well that generic vendor demonstrations have the &#8216;wow&#8217; appeal, especially to non-technical managers, and it&#8217;s easy to be seduced). Generic pre-sales demonstrations are designed to look good. The vendor is showing off their tool. Of course it looks good. Of course it runs smoothly (although I&#8217;ve seen some howlers in my time). This is fine for showrooms, but terrible for purchasing decisions. Remember, we are looking for the right tool for your organisation, not the tool the vendor wants you to buy.</p>
<p>Once you have good evaluation criteria you can ask vendors to come and demonstrate how their product satisfies your requirements. Make sure you are clear when requesting the demonstration that you expect to see evidence of how their tool meets the requirements document that they have already seen and provided feedback upon. Do not accept a generic demonstration at this point. If they cannot, or are unwilling to, provide a suitable demonstration, strike them from the list — you&#8217;ve put in a lot of effort and are likely to be giving them a substantial amount of money in the near future, so they should be willing to show you what you want.</p>
<p>During the demonstration, make sure you see their tool perform to the requirements that they have claimed it fulfils. Get clarification on how marginally met requirements may be worked around (those that the vendor identified as only partially satisfied) and be sure that you see an unambiguous demonstration of all requirements that the vendor declared they satisfied completely.</p>
<p>During demonstrations, be fair. It is unreasonable to expect the vendor to show you everything you need. There will also be requirements that they state they only partially satisfy; give them a break and don&#8217;t harangue them for this. Accept the limitation. Discuss options. Make a note and move on.</p>
<p>Once all the vendors have demonstrated their products, re-evaluate them on your evaluation matrix. Add notes on where the demonstration failed to meet expectations, and where the demonstration exceeded expectations.</p>
<p>Eliminate any that fail to meet expectations satisfactorily.</p>
<h2>Get evaluation license installations</h2>
<p>You should now have a very short list of potential products (two or three if you are lucky). Obtain evaluation licenses for each product.</p>
<p>While no evaluation will be 100% true to life, this evaluation phase should be as realistic as possible.</p>
<p>In particular, make sure you can check out all the integrations you need and, if possible, make sure the product supports your real processes. Also, investigate how easy the system is to administer, backup and use. Run through common scenarios and make sure the tools perform to expectations. Use real projects, real code and real users for the final evaluation.</p>
<h2>Finally, make a decision</h2>
<p>Phew! It&#8217;s been a lot of work to get this far, but you should now have a pretty comprehensive idea of what the finally shortlisted tools are capable of.</p>
<p>Using all the information gathered so far you can make an excellent business case for the tools that best meet your needs. You can include details of the problems it will solve, the costs of the tools and their support, details about the vendors&#8217; business, and the savings and contributions you anticipate the tool making.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/business-cases/'>Business Cases</a>, <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/general/'>General</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/process-tools-n-tips/'>Process</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/763/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/763/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/763/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/763/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/763/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/763/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/763/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/763/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=763&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/09/08/which-scm-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Preventing ticket ping-pong</title>
		<link>http://blog.principia-it.co.uk/2010/02/27/preventing-ticket-ping-pong/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/27/preventing-ticket-ping-pong/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 12:17:59 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Tools &#039;n&#039; Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=618</guid>
		<description><![CDATA[This is the first opportunity I have had for a while to put something on this blog — busy, busy, busy. (I can tell you that I am building up a fairly sizeable backlog of articles on parallel development and I will, I promise, get round to publishing them soon.) In the meanwhile, here&#8217;s a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=618&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is the first opportunity I have had for a while to put something on this blog — busy, busy, busy. (I can tell you that I am building up a fairly sizeable backlog of articles on parallel development and I will, I promise, get round to publishing them soon.) In the meanwhile, here&#8217;s a brief thought on designing ticketing systems.</p>
<p>Many ticketing systems, supporting processes such as incident management, are prone to ticket ping-pong where tickets are bounced from queue to queue as people keep forwarding the problem to get it off their queue. This is simple to control once you see the problem.<span id="more-618"></span></p>
<p>Processes that suffer with this problem all have one thing in common; they all allow one user to simply pass a ticket from their queue to another unchallenged. For example, an incident ticketing system shows up a ticket on Person A&#8217;s queue. They cannot deal with it (or do not want to deal with it), so they look for someone they believe should deal with it and assign it to their queue (Person B). Person B looks at the ticket, decides they should not be dealing with it and looks around for someone else to deal with it (Person C). And so it goes, the ticket to bounced around from queue to queue never being handled but always being sent on, possibly even returning to Person A who forwards it on again and the cycle continues.</p>
<p>The problem is that the ticket owner in such systems is defined as the person who has the ticket on their queue and anyone can pass a ticket to another queue. Since no one wants to be lumbered with the ticket it just keeps being passed on. It becomes an SEP (someone else&#8217;s problem), doomed to forever wander the queues, never being resolved.</p>
<p>Fixing this process is actually very simple. When a ticket is initially raised by a user onto someone&#8217;s queue (let&#8217;s say Person A) the queue owner becomes responsible for progressing the ticket. If the Person A believes the ticket belongs to someone else (say, Person B), they propose it into Person B&#8217;s queue. But, and this is the important change to the process, <em>ownership of the ticket remains with Person A</em>. Person A remains responsible for ensuring that the ticket is progressed (not simply passed from queue to queue) until Person B accepts the ticket into their queue. This puts pressure on the Person A (as the ticket owner) to actually manage the process, whereas the original process did not pressure anyone because they could simply pass the ticket on to someone else.</p>
<p>It may seem unfair on Person A. It could be that they really cannot deal with the ticket. It could be that Person B really should take ownership of the ticket but they may be trying to avoid doing so by not accepting it into their queue. This is what escalation is for. If Person A has a legitimate cause they can escalate the problem and effectively force Person B to acknowledge their responsibility. In practice this is seldom an issue as Person B, if they recognise their responsibility will simply accept the ticket into their queue and progress it to completion.</p>
<p>I Person B genuinely cannot, or should not, deal with the ticket they simply inform Person A of their reason for not accepting it into their queue. Person A must now seek the correct person to resolve the ticket. Because Person A is responsible for the ticket until someone else takes charge of it they have a vested interest in finding the correct person to deal with it. If they propose the ticket to someone&#8217;s queue and do not get a quick response they have a vested interest in following up to find out why the ticket has not been accepted.  Person A is motivated to find the correct ticket owner since no one but the correct ticket owner will take the responsibility for progressing the ticket away from Person A and until some takes it from Person A it remains theirs to progress.</p>
<p>Ensuring that people cannot simply pass tickets around the system ensures that they are progressed because it puts pressure on owners to either resolve the ticket or to find the person who really should resolve the ticket.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/process-tools-n-tips/'>Process</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/618/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=618&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/27/preventing-ticket-ping-pong/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
	</channel>
</rss>
