<?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>Renaissance Developer &#187; Continuous Integration</title>
	<atom:link href="http://www.exubero.com/joe/category/continuous-integration/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.exubero.com/joe</link>
	<description>Follically Challenged in a Hirsute World</description>
	<lastBuildDate>Sat, 01 May 2010 04:11:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CITCON &#8216;09: Better Ant Builds</title>
		<link>http://www.exubero.com/joe/2009/09/citcon-09-better-ant-builds/</link>
		<comments>http://www.exubero.com/joe/2009/09/citcon-09-better-ant-builds/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 20:53:53 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Build Automation]]></category>
		<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=376</guid>
		<description><![CDATA[The first session I attended (and partially ran) was Better Ant Builds.
During the session proposals, Ivan Moore originally suggested a talk on better builds for Java programs. There were later proposals for sessions regarding improvements to Maven, so I proposed my own session &#8220;Better Ant Builds&#8221; to differentiate it from the Maven sessions.
My main goal [...]]]></description>
			<content:encoded><![CDATA[<p>The first session I attended (and partially ran) was Better Ant Builds.</p>
<p>During the session proposals, Ivan Moore originally suggested a talk on better builds for Java programs. There were later proposals for sessions regarding improvements to Maven, so I proposed my own session &#8220;Better Ant Builds&#8221; to differentiate it from the Maven sessions.</p>
<p>My main goal was to promote by own contribution to this area: the <a href="http://www.exubero.com/asl/">Ant Script Library</a>. JTF knew about this, and asked some leading questions when I proposed the talk about my library, which I thought was funny. I thought it would have been a bit too cheeky to give a great big marketing pitch, but then again I&#8217;m not the best marketer. Thanks for the push, Jeff!</p>
<p>Despite there being no projector available, I was able to talk a fair bit about the ASL, along with some of it&#8217;s background and design. People seemed interested, which I&#8217;m taking as a good sign. I won&#8217;t go into details, the <a href="http://www.exubero.com/asl/">website</a> already has everything I discussed.</p>
<p>Jeff also pointed out the <a href="http://code.google.com/p/ant-master-build-scripts/">Ant Master Build Scripts</a>, which at a glance seems to be a very similar project to the ASL. Looking at them, I&#8217;m pretty impressed. The author of those scripts presented a session at JavaOne called &#8220;<a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-4166&amp;yr=2009&amp;track=javase">Object Oriented Ant Scripts for the Enterprise</a>&#8220;, which I think nails the leading design principles for reusable Ant scripts. I&#8217;d say the the master build scripts have a higher emphasis on J2EE projects, which the ASL leans more to building Java libraries, applications and static analysis. Plenty of room for both projects to grow!</p>
<p>The main question I had for the group was this: &#8220;How do you test an Ant script&#8221;? Historically, this has not been a problem. You wrote a script for a specific project. You ran the script, and it either worked or it didn&#8217;t. However, the Ant Script Library doesn&#8217;t have it&#8217;s own project &#8211; it is reused to build other projects. From my point of view, I really want to be able to set up an &#8220;integration test&#8221;. The answer is pretty obvious: set up a real project that you can use to run the ant script against. After running the script, you should be able to assert that artifacts are created in the expected locations. Duh! (in hindsight, anyway)</p>
<p>One more good tip: <a href="http://github.com/">GitHub</a> is a good place to set up an open source project. Another alternative might be <a href="http://code.google.com/">Google Code</a>. Currently, I&#8217;m running ASL from my own Subversion server. I&#8217;m thinking about moving to a location that can handle proper project infrastructure (version control, wiki, mailing lists, etc). Personally, I really like subversion, and I think it&#8217;s a pretty nice way to integrate ASL with your own project using svn:externals (assuming you&#8217;re using Subversion, too). Google Code uses Subversion, but GitHub uses another version control system I can&#8217;t remember (oh, wait: Git). Food for thought; I&#8217;ll think about that one for a bit.</p>
<p>For more details of the session, there is a <a href="http://citconf.com/wiki/index.php?title=BetterAntBuilds">write up on the wiki</a>.</p>
<p><strong>Update</strong>: The Build Doctor was actually taking good notes (as opposed to my vague recollection from 2 days later), and has a lot more detail in his <a href="http://www.build-doctor.com/2009/09/20/better-apache-ant-builds">own blog post</a> on the discussion.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/09/citcon-09-better-ant-builds/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CITCON Europe 2009</title>
		<link>http://www.exubero.com/joe/2009/09/citcon-europe-2009/</link>
		<comments>http://www.exubero.com/joe/2009/09/citcon-europe-2009/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 16:31:43 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=373</guid>
		<description><![CDATA[As I type, I&#8217;m listening to the final session of CITCON Europe 2009, at ISEP in Paris. Without doubt, I find CITCON to be one the most energetic and fun conferences I&#8217;ve ever attended. I think this has a lot to do with the way that the conference is run. Probably two main features that [...]]]></description>
			<content:encoded><![CDATA[<p>As I type, I&#8217;m listening to the final session of <a href="http://www.citconf.com">CITCON</a> Europe 2009, at ISEP in Paris. Without doubt, I find CITCON to be one the most energetic and fun conferences I&#8217;ve ever attended. I think this has a lot to do with the way that the conference is run. Probably two main features that contribute to this are:</p>
<ol>
<li>The conference is run in a open space format. This virtually guarantees that the most interesting and important subjects are represented</li>
<li>The conference is free to attend, and runs over the weekend. This has the affect that people who attend are extremely engaged with the topic at hand. Pretty much everyone who attends contributes to each discussion. There are not really any people there just to make sure that training budget is used.</li>
</ol>
<p>A huge thanks to <a href="http://blog.jeffreyfredrick.com">Jeff</a> and <a href="http://www.pauljulius.com/">PJ</a> for starting this conference, and developing a great community around continuous integration and testing.</p>
<p>There were 5 sessions during the day. I&#8217;ll go into more detail about specific sessions in later posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/09/citcon-europe-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detecting Cycles using JDepend and Ant</title>
		<link>http://www.exubero.com/joe/2009/09/detecting-cycles-using-jdepend-and-ant/</link>
		<comments>http://www.exubero.com/joe/2009/09/detecting-cycles-using-jdepend-and-ant/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 22:57:45 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=351</guid>
		<description><![CDATA[Package dependency cycles are bad, mmkay? However, it&#8217;s amazing how easy it is for cycles to accidentally appear, especially among teams of developers who may not be aware of the pitfalls. Ideally, I would like the automated build to break if a cycle appears, ensuring that the problem can be fixed up before it gets [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/search?q=Package+dependency+cycles+are+bad">Package dependency cycles are bad</a>, mmkay? However, it&#8217;s amazing how easy it is for cycles to accidentally appear, especially among teams of developers who may not be aware of the pitfalls. Ideally, I would like the automated build to break if a cycle appears, ensuring that the problem can be fixed up before it gets out of hand.</p>
<p><a href="http://clarkware.com/software/JDepend.html">JDepend</a> already reports if cycles are present between packages, but it isn&#8217;t as easy as it could be to cause the build to break. One suggestion is to write a JUnit test that runs JDepend separately, and fails if a cycle is found (see the <a href="http://clarkware.com/software/JDepend.html#junit">JDepend documentation</a>). Although possible, I don&#8217;t think it is as elegant as it could be, because:</p>
<ul>
<li>I have to get the path to the compiled code into the unit test, either by hard coding the path, or possibly passing it in as a parameter somehow. This is tight coupling between the unit test and the place from which it runs.</li>
<li>I have to invoke JDepend twice: once to check for cycles, and again to generate the HTML report.</li>
</ul>
<p>I think that an Ant script is a much better place for this functionality: it already has all the path information, all it needs is a way to find out if there are any cycles. If so, it can fail the build if appropriate. Unfortunately, the current <a href="http://ant.apache.org/manual/OptionalTasks/jdepend.html">JDepend Ant task</a> doesn&#8217;t provide a way to find out. Until now, that is! I&#8217;ve just completed a couple of patches: one to JDepend itself, and another to the JDepend Ant task. My patch added an extra attribute to the &lt;jdepend&gt; element called &#8220;cyclesdetectedproperty&#8221;. This will set a property if JDepend detected a cycle. I expect that this could be used in a manner similar to this:</p>
<pre>&lt;target name="report-jdepend" depends="compile"
       description="Creates a package dependency report"&gt;
   &lt;mkdir dir="${java-report.jdepend-data-dir}"/&gt;
   &lt;jdepend outputfile="${java-report.jdepend-data-dir}/jdepend.xml"
            format="xml"
            <strong>cyclesdetectedproperty="jdepend-cycles-found"</strong>&gt;
       &lt;exclude name="java.*"/&gt;
       &lt;exclude name="javax.*"/&gt;
       &lt;classespath&gt;
           &lt;pathelement location="${java-build.classes-dir}"/&gt;
       &lt;/classespath&gt;
   &lt;/jdepend&gt;

   &lt;mkdir dir="${java-report.jdepend-dir}"/&gt;
   &lt;xslt basedir="${java-report.jdepend-data-dir}"
          destdir="${java-report.jdepend-dir}"
          includes="jdepend.xml"
          style="${ant.home}/etc/jdepend.xsl"/&gt;

   <strong>&lt;fail if="jdepend-cycles-found"&gt;Cyclical package dependencies found&lt;/fail&gt;</strong>
&lt;/target&gt;</pre>
<p>I haven&#8217;t released these patches yet, but I will soon be adding it to the <a href="http://www.exubero.com/asl/">Ant Script Library</a>. All going well, I&#8217;ll try and get the patches rolled back into the JDepend and Ant code bases. Let me know if you&#8217;re interested in seeing it earlier.</p>
<p><strong>Update:</strong></p>
<p>I just spotted the <a href="http://ant-contrib.sourceforge.net/tasks/tasks/verifydesign.html">verifydesign</a> task in AntContrib, which actually does what I would like, and more. Pretty neat, but I&#8217;d still prefer that I could fail the build from JDepend, as it is a much simpler task to configure.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 33px; width: 1px; height: 1px;">&lt;target name=&#8221;report-jdepend&#8221; depends=&#8221;compile&#8221;<br />
description=&#8221;Creates a package dependency report&#8221;&gt;<br />
&lt;mkdir dir=&#8221;${java-report.jdepend-</p>
<div id=":pg" class="ii gt">data-dir}&#8221;/&gt;<br />
&lt;jdepend outputfile=&#8221;${java-report.jdepend-data-dir}/jdepend.xml&#8221;<br />
format=&#8221;xml&#8221;<br />
cyclesdetectedproperty=&#8221;jdepend-cycles-found&#8221;&gt;<br />
&lt;exclude name=&#8221;java.*&#8221;/&gt;<br />
&lt;exclude name=&#8221;javax.*&#8221;/&gt;<br />
&lt;classespath&gt;<br />
&lt;pathelement location=&#8221;${java-build.classes-dir}&#8221;/&gt;<br />
&lt;/classespath&gt;<br />
&lt;/jdepend&gt;</p>
<p>&lt;mkdir dir=&#8221;${java-report.jdepend-dir}&#8221;/&gt;<br />
&lt;xslt basedir=&#8221;${java-report.jdepend-data-dir}&#8221;<br />
destdir=&#8221;${java-report.jdepend-dir}&#8221;<br />
includes=&#8221;jdepend.xml&#8221;<br />
style=&#8221;${ant.home}/etc/jdepend.xsl&#8221;/&gt;</p>
<p>&lt;fail if=&#8221;jdepend-cycles-found&#8221;&gt;Cyclical package dependencies found&lt;/fail&gt;<br />
&lt;/target&gt;</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/09/detecting-cycles-using-jdepend-and-ant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CITCON Preparations</title>
		<link>http://www.exubero.com/joe/2009/07/citcon-preparations/</link>
		<comments>http://www.exubero.com/joe/2009/07/citcon-preparations/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 21:39:51 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=332</guid>
		<description><![CDATA[I&#8217;ve just booked my hotel and Eurostar tickets to CITCON Paris 2009. I&#8217;m quite excited to be going back to Paris &#8211; it&#8217;s actually been 8 years since I was last there. My complete ignorance of the French language will make it all the more fun, I&#8217;m sure.
I had a look at the list of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just booked my hotel and Eurostar tickets to <a href="http://citconf.com/paris2009/">CITCON Paris 2009</a>. I&#8217;m quite excited to be going back to Paris &#8211; it&#8217;s actually been 8 years since I was last there. My complete ignorance of the French language will make it all the more fun, I&#8217;m sure.</p>
<p>I had a look at the <a href="http://citconf.com/wiki/index.php?title=CITCONEurope2009Registrants">list of registrants</a>, and I was quite pleased to see that there are quite a few people I&#8217;ve met before on various jaunts around London and elsewhere. I won&#8217;t be completely in an unknown group. Let&#8217;s hope it will be as much fun as <a href="http://www.exubero.com/joe/2006/10/citcon-london-2006-retrospective/">my last CITCON</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/07/citcon-preparations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Doctor Giveaway</title>
		<link>http://www.exubero.com/joe/2009/06/build-doctor-giveaway/</link>
		<comments>http://www.exubero.com/joe/2009/06/build-doctor-giveaway/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 21:19:38 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Build Automation]]></category>
		<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=330</guid>
		<description><![CDATA[The Build Doctor is running a competition to win some swag donated by Atlassian. The catch is you have to tell a short story about your best or worst (or best and worst) build/deployment experience. The deadline is this Friday, so get cracking!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.build-doctor.com/">The Build Doctor</a> is running a <a href="http://www.build-doctor.com/2009/06/16/atlassian-bamboo-giveaway">competition</a> to win some swag donated by Atlassian. The catch is you have to tell a short story about your best or worst (or best and worst) build/deployment experience. The deadline is this Friday, so get cracking!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/06/build-doctor-giveaway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Metrics from a CI Implementation</title>
		<link>http://www.exubero.com/joe/2009/06/build-metrics-from-a-ci-implementation/</link>
		<comments>http://www.exubero.com/joe/2009/06/build-metrics-from-a-ci-implementation/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 00:00:01 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=325</guid>
		<description><![CDATA[One of my favourite features of CruiseControl is the build metrics tab in the old reporting application. One of the graphs marks when builds occur, with date on the horizontal axis, and time on the vertical axis. This means that sequential builds through the day form a dotted line at a slant. &#8220;Good&#8221; builds are [...]]]></description>
			<content:encoded><![CDATA[<p>One of my favourite features of CruiseControl is the build metrics tab in the old reporting application. One of the graphs marks when builds occur, with date on the horizontal axis, and time on the vertical axis. This means that sequential builds through the day form a dotted line at a slant. &#8220;Good&#8221; builds are blue, and &#8220;Bad&#8221; builds are red.</p>
<p><a href="http://www.exubero.com/joe/wp-content/uploads/2009/06/cc-metrics-mainline.png"><img class="aligncenter size-full wp-image-326" title="CruiseControl Build Metrics" src="http://www.exubero.com/joe/wp-content/uploads/2009/06/cc-metrics-mainline.png" alt="CruiseControl Build Metrics" width="402" height="301" /></a></p>
<p>More than anything else, this graph tells a story. Here, a relatively large team of developers, spread across 2 time zones are coming to grips with this new fangled &#8220;continuous integration&#8221; malarkey, over a period of 7 weeks after the new build system was switched on at the end of April.</p>
<ul>
<li>Initially, the builds are sporadic; the developers are unsure of the new tools (which includes a completely unfamiliar SCM tool and CruiseControl), as well as the CI commit rules (&#8221;don&#8217;t break the build!&#8221;).</li>
<li>For the first week, there are only a handful of commits, about a third of them break. People feel a little overwhelmed by the changes; many of the developers are unhappy with the new system, there is a general muttering in the corridors.</li>
<li>In the second week, developers gain more confidence, and by Wednesday, the number of commits starts to rise drastically.</li>
<li>In the third week, the shit hits the fan as everyone jumps into the fray and starts to commit their changes as fast as they can. This week sees the first bouts of long term breakages, and developers check in broken code, and don&#8217;t know how to fix it. The muttering in the corridors gets louder, and people start complaining over the harsh strictures involved (&#8221;We didn&#8217;t have to worry about this before!&#8221;)</li>
<li>The fourth week shows a slight improvement, though there are still a number of 3 hour breakages.</li>
<li>By the fifth week, things appear to be running much smoother. Breakages are still occurring, but the developers have learned to watch out for them, and have become a bit more careful about verifying their code before they check it in. The week also marks the end of a major code release cycle.</li>
<li>In weeks 6 and 7 the builds are going along much more smoothly, and the team has developed a good rhythm: code, test (sometimes), check in, and watch for problems. Bugs are fixed very quickly indeed. The grumbling in the corridors has mostly stopped, as everyone gets more familiar with what is expected. The release team had an easier job, as well this time. There was much less compilation problems as they tried to build a release.</li>
</ul>
<p>From my perspective, it&#8217;s a fascinating process to watch, as a team comes to grips with a new process. I suspect the team is still pining for old &#8220;easier&#8221; ways, but there are now a number of developers and release engineers who have grown to appreciate the advantages.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/06/build-metrics-from-a-ci-implementation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration is a Human Process</title>
		<link>http://www.exubero.com/joe/2009/03/continuous-integration-is-a-human-process/</link>
		<comments>http://www.exubero.com/joe/2009/03/continuous-integration-is-a-human-process/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 21:23:01 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=305</guid>
		<description><![CDATA[The Build Doctor tells us the way it is:
http://www.build-doctor.com/2009/03/25/continuous-integration-is-not-a-silver-bullet
]]></description>
			<content:encoded><![CDATA[<p>The Build Doctor tells us the way it is:</p>
<p><a href="http://www.build-doctor.com/2009/03/25/continuous-integration-is-not-a-silver-bullet">http://www.build-doctor.com/2009/03/25/continuous-integration-is-not-a-silver-bullet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/03/continuous-integration-is-a-human-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Small CruiseControl Fix, and a Critique of Spring</title>
		<link>http://www.exubero.com/joe/2009/03/a-small-cruisecontrol-fix-and-a-critique-of-spring/</link>
		<comments>http://www.exubero.com/joe/2009/03/a-small-cruisecontrol-fix-and-a-critique-of-spring/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 22:35:15 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=277</guid>
		<description><![CDATA[I quite like the new Dashboard that was added to CruiseControl last year. It has a certain style that makes it appealing to the end users who may be watching the build status, and is a step up from the old reporting JSPs. Until today, I had never really looked into how it was implemented.
My [...]]]></description>
			<content:encoded><![CDATA[<p>I quite like the new <a href="http://cruisecontrol.sourceforge.net/dashboard.html">Dashboard</a> that was added to CruiseControl last year. It has a certain style that makes it appealing to the end users who may be watching the build status, and is a step up from the old <a href="http://cruisecontrol.sourceforge.net/reporting/jsp/index.html">reporting JSPs</a>. Until today, I had never really looked into how it was implemented.</p>
<p>My problem today was that the Dashboard does not show raw build output by default (it will show plenty of reports and other bits and pieces from an Ant build). In my case, I&#8217;m calling an external build tool (not Ant) using the CC &lt;exec&gt;  builder, but there is no way to actually see the output.</p>
<p>A quick look at the <code>dashboard-config.xml</code> file showed that there appeared to be a simple way to add another tab to the build display using classes from the Widget package. Looking in the CC source code, I spotted a class called <code>net.sourceforge.cruisecontrol.dashboard.widgets.AntOutputWidget</code>, which despite it&#8217;s name, looked like it would display the build output for anything. I tried adding a reference to this class to the configuration. Sure enough, a new tab appeared. Unfortunately, it only ever displayed the text &#8220;No information for Ant Output&#8221;. Doh!</p>
<p>Googling about, I was able to turn up a <a href="http://www.nabble.com/First-attempt-at-fixing-Ant-Output-widget-(2.7.2)-p16692905.html">message from Pete Doyle</a> who had exactly the same problem. He had even submitted a patch to the CC mailing list, but it appeared to have been missed. I tried out his patch, and everything worked fine (after a few fine tweaks). While I was there, I created a new task in the CruiseControl issue tracker: <a href="http://jira.public.thoughtworks.org/browse/CC-899">CC-899</a>. Hopefully, this can get rolled into the next CC release. Score 1 for open source!</p>
<p>However, the story doesn&#8217;t end there. Before I moved on, I just happened to glance at the <a href="http://cruisecontrol.sourceforge.net/dashboard.html#subtabs">documentation for subtabs</a>. There is a strong note warning that these widgets are deprecated:</p>
<blockquote><p><em>Note that the dashboard widget API is deprecated and will be replaced in a future version of CruiseControl. We strongly recommend developers do not create widgets using this API, as it will not be supported in the future.</em></p></blockquote>
<p>I found this curious: I didn&#8217;t think the code for Widgets was that bad, what New and Improved implementation was replacing it? The answer was harder to work out than I expected.</p>
<p>The problem (as I see it) is that there is a relatively convoluted set of Spring configuration files joining bits and pieces together in hidden ways, and somehow using a heap of Velocity templates to generate the UI. My issue is that although the code appears to be quite solid and well factored, the configuration that wires it all together is quite opaque. Because it is Spring configuration (programming by XML), I lost the ability to easily navigate the code using the IDE. It was back to searching for snippets of text, and then looking up the referenced classes.</p>
<p>XML is not a good language in which to write programs. I don&#8217;t mind Spring in small doses, but I&#8217;ve been burnt a number of times by very large and unwieldy Spring configurations that wire together lots of small pieces in such a way that it&#8217;s very hard to get a view of the important features. Scoping, encapsulation, IDE integration: trodden over in a very haphazard way.</p>
<p>I&#8217;m all for dependency injection and inversion of control, but I definitely think that most of that can be done more efficiently in code. There are a few posts floating about on the same subject. Here are some of my favourites:</p>
<ul>
<li>Crazy Bob (inventor of Guice): <a href="http://crazybob.org/2006/01/i-dont-get-spring.html">I Don&#8217;t Get Spring</a></li>
<li>Floating point: <a href="http://floatingpoint.tinou.com/2007/03/a_critique_of_s.html">A Critique of Spring</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/03/a-small-cruisecontrol-fix-and-a-critique-of-spring/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Continuous Integration and Testing Presentations</title>
		<link>http://www.exubero.com/joe/2009/03/continuous-integration-and-testing-presentations/</link>
		<comments>http://www.exubero.com/joe/2009/03/continuous-integration-and-testing-presentations/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 23:35:45 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=267</guid>
		<description><![CDATA[I had the opportunity last week to present to some co-workers on the subject of Continuous Integration. My first thought was to pull out the old presentation I had done a few years back:

http://www.exubero.com/ccintro/ccintro-s5.html

However, that presentation is getting slightly dated. Searching around, I dug up some nicer examples from Slide Share. I especially liked the [...]]]></description>
			<content:encoded><![CDATA[<p>I had the opportunity last week to present to some co-workers on the subject of Continuous Integration. My first thought was to pull out the old presentation I had done a few years back:</p>
<ul>
<li><a href="http://www.exubero.com/ccintro/ccintro-s5.html">http://www.exubero.com/ccintro/ccintro-s5.html</a></li>
</ul>
<p>However, that presentation is getting slightly dated. Searching around, I dug up some nicer examples from Slide Share. I especially liked the first one:</p>
<ul>
<li><a href="http://www.slideshare.net/drluckyspin/continuous-integration">http://www.slideshare.net/drluckyspin/continuous-integration</a></li>
<li><a href="http://www.slideshare.net/dnoble/testing-in-java">http://www.slideshare.net/dnoble/testing-in-java</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/03/continuous-integration-and-testing-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CITCON Paris 2009</title>
		<link>http://www.exubero.com/joe/2009/02/citcon-paris-2009/</link>
		<comments>http://www.exubero.com/joe/2009/02/citcon-paris-2009/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 21:06:44 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.exubero.com/joe/?p=249</guid>
		<description><![CDATA[It&#8217;s been nearly three years since I last went, but I&#8217;ve just registered my details for CITCON, Paris 2009. I had a fun time at the last event, picked up a heap of useful knowledge, and met a lot of great people. I&#8217;m really looking forward to the next one.
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been nearly three years since <a href="http://www.exubero.com/joe/2006/10/citcon-london-2006-retrospective/">I last went</a>, but I&#8217;ve just registered my details for <a href="http://www.citconf.com/paris2009/">CITCON, Paris 2009</a>. I had a fun time at the last event, picked up a heap of useful knowledge, and met a lot of great people. I&#8217;m really looking forward to the next one.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exubero.com/joe/2009/02/citcon-paris-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
