<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>CITCON Blog Aggregator</title>
      <description>Aggregates the blogs from various CITCON participants, and filters out the dupes amongst them. Filters out posts not related to CI &amp; Testing.</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=b787fd1ec5db6b74feb6129e9d55dfe8</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=b787fd1ec5db6b74feb6129e9d55dfe8&amp;_render=rss&amp;page=2" />
      <pubDate>Fri, 10 Feb 2012 13:05:02 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CitconBlogs" /><feedburner:info uri="citconblogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>New updated TDD, BDD and Testing Best Practices for Java Developers course</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/oT7Eoo0x5SY/new-updated-tdd-bdd-and-testing-best-practices-java-developers-course</link>
         <description>&lt;img border="0" align="left"/&gt;&lt;p&gt;&lt;img hspace="2" vspace="15" border="0" align="left" title="Updated Testing and TDD Workshop" alt="Updated Testing and TDD Workshop" src="http://www.wakaleo.com/images/stories/learning_sml.jpg"/&gt;&lt;/p&gt;&lt;p&gt;Our popular &lt;b&gt;TDD, BDD and Testing Best Practices&lt;/b&gt; course has now been updated with new slides and labs, as well as including additional new topics on refactoring techniques and clean code practices. The course also includes new material on more advanced integration and automated acceptance testing using tools like Arquillian and Thucydides. This is a great way to learn how to write more effective tests and improve your code quality in general.&lt;/p&gt; &lt;p&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Courses will be running in &lt;b&gt;Sydney&lt;/b&gt;, &lt;b&gt;Melbourne&lt;/b&gt; and &lt;b&gt;Canberra&lt;/b&gt;, with more course dates still to be confirmed. Registrations are limited so get in quick to secure your place&amp;hellip; &lt;a rel="nofollow" target="_blank" href="http://www.wakaleo.com/training/testing-and-tdd-for-java-developers"&gt;Register now!&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/oT7Eoo0x5SY" height="1" width="1"/&gt;</description>
         <author>johnsmartjohnsmart</author>
         <guid isPermaLink="false">883406 at http://www.java.net</guid>
         <pubDate>Thu, 09 Feb 2012 23:31:50 +0000</pubDate>
      <feedburner:origLink>http://www.java.net/blog/johnsmart/archive/2012/02/09/new-updated-tdd-bdd-and-testing-best-practices-java-developers-course</feedburner:origLink></item>
      <item>
         <title>Who’s been fetching from my repo?</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/sUgmglAVw6g/</link>
         <description>It&amp;#8217;s interesting knowing who is using your Artifact Repository: where, and who are they? &amp;#8216;whois&amp;#8217; and your favourite DNS client are handy tools to have. It&amp;#8217;s why I always put an HTTP server in front of these tools, both for flexibility, and the standard access log format. Who&amp;#8217;s been fetching from my repo? is a [...]&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/09/whos-been-fetching-from-my-repo/"&gt;Who&amp;#8217;s been fetching from my repo?&lt;/a&gt; is a post from: &lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com"&gt;The Build Doctor&lt;/a&gt;.  Sponsored by &lt;a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&amp;utm_medium=rss&amp;utm_campaign=sponsor"&gt;AnthillPro&lt;/a&gt;, the build and deployment automation server that lets you release with confidence.&lt;/p&gt;</description>
         <author>Julian SimpsonJulian Simpson</author>
         <guid isPermaLink="false">http://www.build-doctor.com/?p=2601</guid>
         <pubDate>Thu, 09 Feb 2012 17:13:01 +0000</pubDate>
         <content:encoded><![CDATA[<p>It&#8217;s interesting knowing who is using your Artifact Repository: where, and who are they? &#8216;whois&#8217; and your favourite DNS client are handy tools to have. 
<div>It&#8217;s why I always put an HTTP server in front of these tools, both for flexibility, and the standard access log format.
</div>
<p style="clear:both;"><span style="display:inline;float:left;margin:0 10px 10px 0;"></span></p> 
<p><br class="final-break" style="clear:both;"/></p>
<p><a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/09/whos-been-fetching-from-my-repo/">Who&#8217;s been fetching from my repo?</a> is a post from: <a rel="nofollow" target="_blank" href="http://www.build-doctor.com">The Build Doctor</a>.  Sponsored by <a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&utm_medium=rss&utm_campaign=sponsor">AnthillPro</a>, the build and deployment automation server that lets you release with confidence.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/sUgmglAVw6g" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.build-doctor.com/2012/02/09/whos-been-fetching-from-my-repo/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=whos-been-fetching-from-my-repo</feedburner:origLink></item>
      <item>
         <title>Looking Back at 2011 Sonar Platform Accomplishments</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/4IQvXlAAs4w/</link>
         <description>The beginning of a new year always provides a good opportunity to look back at what was achieved the previous year and this is what I am going to do today for the Sonar platform. Let&amp;#8217;s start with a short version of this retrospective. Last year was made of: 8 releases of Sonar 110+ releases [...]</description>
         <author>Freddy MalletFreddy Mallet</author>
         <guid isPermaLink="false">http://www.sonarsource.org/?p=5850</guid>
         <pubDate>Thu, 09 Feb 2012 15:10:02 +0000</pubDate>
         <content:encoded><![CDATA[<p>The beginning of a new year always provides a good opportunity to look back at what was achieved the previous year and this is what I am going to do today for the Sonar platform.</p>
<p>Let&#8217;s start with a short version of this retrospective. Last year was made of:</p>
<ul>
<li>8 releases of Sonar</li>
<li>110+ releases in the ecosystem</li>
<li>55,000 downloads of Sonar</li>
<li>10,000+ messages on mailing lists</li>
</ul>
<p>So I suppose we can call this a pretty active year for the community. Now, the longer version:</p>
<h1>The Plan</h1>
<p>One year ago, we had <a rel="nofollow" target="_blank" href="http://www.sonarsource.org/what-is-coming-up-for-sonar-in-2011/">the following ambitions</a> :</p>
<p> Track changes : The next step is to provide the ability to report on code coverage of new source code. This is to ensure that whatever legacy code is there, teams have the ability to monitor the coverage by unit tests on added code if they wish.</p> 
<p>Since <a rel="nofollow" target="_blank" href="http://www.sonarsource.org/sonar-2-7-in-screenshots/">Sonar 2.7</a> and with help of the <a rel="nofollow" target="_blank" href="http://docs.codehaus.org/display/SONAR/SCM+Activity+Plugin">SCM Activity plugin</a>, this magic feature is available.</p>
<p> Code Review : This is really the next strategic move for the Sonar platform : add a manual dimension to the automated one to provide a complete code review tool.</p> 
<p>This was a major change to accomodate into the platform and we therefore decided to adopt a baby step approach. The full functionality was delivered over 5 releases, from 2.8 to 2.12. Here is what the platform now covers:</p>
<ul>
<li>Review a violation</li>
<li>Comment, assign, plan a review</li>
<li>Flag false-positive violations through the UI</li>
<li>Create manual violations through the UI</li>
<li>Change the severity of a violation through the UI</li>
</ul>
<p>Next step will be to provide the ability to customize the review workflow and its related permissions. </p>
<p> Language consolidation : Provide a Squid-like engine to the C# plugin to make it more robust</p> 
<p>It took us 6 month with the great help of Alexandre Victoor to rewrite the C# plugin that embeds its own C# parser and natively supports visual studio projects.</p>
<p> Language consolidation : Improve the C parser to gain robustness, support non ANSI-85 extensions and increase significantly the number of rules available</p> 
<p>We haven&#8217;t worked as much as we wanted on this C plugin and so the number of rules remains limited. That&#8217;s why we&#8217;ve already started working to implement the <a rel="nofollow" target="_blank" href="http://www.misra-c.com/Activities/MISRAC/tabid/160/Default.aspx">MISRA-C standard</a>. </p>
<p> Language consolidation : Improve the PL/SQL plugin to provide currently missing metrics</p> 
<p>A PL/SQL parser has been written to provide all those metrics and to start implementing some new rules outside the Toad CodeXpert tool.</p>
<p> Sonar Eclipse : Now that we have a stable version 1.0 of the plugin, we can start building on it. The objective for this year is to provide capability for running local analysis inside Eclipse</p> 
<p>This local mode is now available but in fact the greatest new feature of Sonar Eclipse is certainly the integration of Mylyn to <a rel="nofollow" target="_blank" href="http://www.sonarsource.org/effective-code-review-with-sonar/">manage reviews directly from the IDE</a>. </p>
<p> Support New Bootstrappers : We have started last year some background work to decouple Sonar from Maven. This work will enable us to support 2 new mechanisms for bootstrapping analysis in Sonar 2.6 : an ANT task and a Java runner. Next step is to also provide Gradle bootstrapper.</p> 
<p><a rel="nofollow" target="_blank" href="http://docs.codehaus.org/display/SONAR/Analyse+with+Ant+Task">DONE</a>, <a rel="nofollow" target="_blank" href="http://docs.codehaus.org/display/SONAR/Analyse+with+a+simple+Java+Runner">DONE</a>, <a rel="nofollow" target="_blank" href="http://gradle.org/docs/current/userguide/sonar_plugin.html">DONE</a>, Sonar is now fully decoupled from Maven but if you want to use the power of Maven along with Sonar, <a rel="nofollow" target="_blank" href="http://www.sonarsource.org/we-had-a-dream-mvn-sonarsonar/">it is of course still possible</a>.</p>
<p> JaCoCo Integration : We intend to make 2 major integrations of JaCoCo into Sonar this year. The first one is to integrate it into Sonar core. The second one is to provide ANT integration of JaCoCo and therefore provide a simple way of gathering code coverage when you execute unit tests from ANT.</p> 
<p><a rel="nofollow" target="_blank" href="http://www.sonarsource.org/sonar-2-12-in-screenshots/">DONE</a> &#038; <a rel="nofollow" target="_blank" href="http://docs.codehaus.org/display/SONAR/Code+coverage+plugins">DONE</a>. </p>
<h1>Beyond the Plan</h1>
<p>Obviously, we did not plan for all upcoming innovations for the year. Here are three major features of Sonar that weren&#8217;t planned and that have been implemented:</p>
<ul>
<li>Sonar CPD : this new technology introduced in Sonar 2.10 will fully replace PMD CPD in Sonar 2.14 and allows to track cross-projects duplications</li>
<li>i18n : Since <a rel="nofollow" target="_blank" href="http://www.sonarsource.org/sonar-2-10-in-screenshots/">Sonar 2.10</a> the Sonar UI can be in spanish, french, greek&#8230;</li>
<li>Email notifications : Since <a rel="nofollow" target="_blank" href="http://www.sonarsource.org/sonar-2-9-in-screenshots/">Sonar 2.10</a> a user can subscribe to some events to be notified by email. For instance when a review is assigned to him.</li>
</ul>
<p>And this is also true in the ecosystem, here are two examples: </p>
<ul>
<li>a great effort made on the PHP plugin to resurrect it</li>
<li>development of an extension for SAP ABAP</li>
</ul>
<p>So after all this, what could be an exciting challenge for 2012 ? This is going to be the subject of my next post !</p>
<img src="http://feeds.feedburner.com/~r/Sonar/~4/uk3teWTJigU" height="1" width="1"/><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/4IQvXlAAs4w" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://feedproxy.google.com/~r/Sonar/~3/uk3teWTJigU/</feedburner:origLink></item>
      <item>
         <title>Comic: Configuration Management</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/cs0ofmxJiRw/</link>
         <description>&amp;#160; Comic: Configuration Management is a post from: The Build Doctor. Sponsored by AnthillPro, the build and deployment automation server that lets you release with confidence.&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/08/comic-configuration-management/"&gt;Comic: Configuration Management&lt;/a&gt; is a post from: &lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com"&gt;The Build Doctor&lt;/a&gt;.  Sponsored by &lt;a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&amp;utm_medium=rss&amp;utm_campaign=sponsor"&gt;AnthillPro&lt;/a&gt;, the build and deployment automation server that lets you release with confidence.&lt;/p&gt;</description>
         <author>Julian SimpsonJulian Simpson</author>
         <guid isPermaLink="false">http://www.build-doctor.com/?p=2588</guid>
         <pubDate>Wed, 08 Feb 2012 18:00:27 +0000</pubDate>
         <content:encoded><![CDATA[<p style="clear:both;"><a rel="nofollow" class="image-link" target="_blank" href="http://www.build-doctor.com/wp-content/uploads/2012/02/Immunology.jpg"><img class="linked-to-original" style="text-align:center;display:block;margin:0 auto 10px;" src="http://www.build-doctor.com/wp-content/uploads/2012/02/Immunology-thumb.jpg" alt="configuration management" width="380" height="268"/></a></p>
<p>&nbsp;</p>
<p><a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/08/comic-configuration-management/">Comic: Configuration Management</a> is a post from: <a rel="nofollow" target="_blank" href="http://www.build-doctor.com">The Build Doctor</a>.  Sponsored by <a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&utm_medium=rss&utm_campaign=sponsor">AnthillPro</a>, the build and deployment automation server that lets you release with confidence.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/cs0ofmxJiRw" height="1" width="1"/>]]></content:encoded>
         <category>Comics</category>
      <feedburner:origLink>http://www.build-doctor.com/2012/02/08/comic-configuration-management/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=comic-configuration-management</feedburner:origLink></item>
      <item>
         <title>FOSDEM 2012</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/rDiOt7HzzQg/fosdem-2012</link>
         <description>&lt;p&gt;Last weekend I attended &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/"&gt;FOSDEM&lt;/a&gt;, &amp;#8220;the biggest free and non-commercial event organized by and for the community". The Free and Open-Source Software Developers Meeting, held in Brussels, pulls in roughly &lt;a rel="nofollow" target="_blank" href="http://archive.fosdem.org/2011/about/fosdem"&gt;4000&lt;/a&gt; FOSS hackers from around the world. I was one of the speakers on the schedule in the &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/track/free_java_devroom"&gt;Free Java Dev Room&lt;/a&gt;, introducing my open source project, &lt;a rel="nofollow" target="_blank" href="http://www.mutabilitydetector.org"&gt;Mutability Detector&lt;/a&gt;. The &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/track/free_java_devroom"&gt;lineup&lt;/a&gt; was pretty illustrious, including &lt;a rel="nofollow" target="_blank" href="http://blog.headius.com/"&gt;Charles Nutter&lt;/a&gt;, co-lead of &lt;a rel="nofollow" target="_blank" href="http://jruby.org/"&gt;JRuby&lt;/a&gt;, and &lt;a rel="nofollow" target="_blank" href="http://mreinhold.org/"&gt;Mark Reinhold&lt;/a&gt;, the Chief Architect of Java Development at Oracle. Here I&amp;#8217;ll describe some of my experiences at FOSDEM, and relay some of the interesting stuff people presented. (Apologies if I misremember anything - there was a lot going on at the conference!)&lt;/p&gt;

&lt;h3&gt;Lost in Translation&lt;/h3&gt;

&lt;p&gt;First off, let this be a warning to any potential FOSDEM-goers. &lt;a rel="nofollow" target="_blank" href="http://www.ulb.ac.be/"&gt;ULB&lt;/a&gt;, the University that hosts the event, has two campuses. &lt;a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps/place?q=Campus&amp;amp;hl=en&amp;amp;cid=17155248451941211428"&gt;Campus Solbosch&lt;/a&gt;, where the entirety of FOSDEM happens, and about &lt;a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps?saddr=Avenue+Franklin+Roosevelt+50,+1050+City+of+Brussels,+Belgium+(Universit%C3%A9+Libre+de+Bruxelles&amp;amp;daddr=ULB+Campus+Solbosch&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;ll=50.83489,4.325695&amp;amp;spn=0.064506,0.181789&amp;amp;sll=50.813419,4.346809&amp;amp;sspn=0.064536,0.181789&amp;amp;geocode=FQ5cBwMd6hpBACGRZnzAU5Lr6A%3BFadZBwMdoeZCACkHHYiC3MTDRzGx2EWgWEkPlQ&amp;amp;dirflg=r&amp;amp;ttype=now&amp;amp;noexp=0&amp;amp;noal=0&amp;amp;sort=def&amp;amp;mra=ltm&amp;amp;t=m&amp;amp;z=13&amp;amp;start=0"&gt;11km from that&lt;/a&gt;, way over on the other side of the city, &lt;a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps/place?q=Campus+near+Erasme,+Anderlecht,+Brussels,+Belgique&amp;amp;hl=en&amp;amp;cid=16783669324735604369"&gt;Campus Erasmus&lt;/a&gt;, where I went. Top tip: when planning international trips to foreign countries that you&amp;#8217;ve never visited before, &lt;a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps?q=ulb%20brussels"&gt;don&amp;#8217;t rely on Google Maps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After a 1hr 30min commute, with the help of a few fellow location-impaired, and thankfully French-&lt;strong&gt;and&lt;/strong&gt;-English-speaking FOSDEM attendees, I finally made it to Campus Solbosch. Unfortunately that meant missing the welcome keynote, the introduction to the Free Java Dev Room, and talks about the OpenJDK from Mark Reinhold and Dalibor Topic. Massive facepalm. Hugely embarrassing. Mothers, don&amp;#8217;t let your children grow up to be&amp;#8230; someone who goes to the wrong ULB campus for FOSDEM.&lt;/p&gt;

&lt;h3&gt;Lambdas and Traits and Bears, Oh My&lt;/h3&gt;

&lt;p&gt;The first talk I saw was by &lt;a rel="nofollow" target="_blank" href="http://archive.fosdem.org/2008/schedule/speakers/jeroen+frijters"&gt;Jeroen Frijters&lt;/a&gt;, demonstrating the work he&amp;#8217;s been doing to bring &lt;a rel="nofollow" target="_blank" href="http://jcp.org/en/jsr/detail?id=292"&gt;JSR292 (Invoke Dynamic)&lt;/a&gt; to &lt;a rel="nofollow" target="_blank" href="http://www.ikvm.net/"&gt;IKVM.NET&lt;/a&gt;, the virtual machine that runs Java on the CLR. Next up came &lt;a rel="nofollow" target="_blank" href="http://www.java.net/author/r%C3%A9mi-forax"&gt;Remi Forax&lt;/a&gt; to discuss lambdas in Java. Following a clear disclaimer that design choices and syntax he discussed was still in the air, and subject to change, he showed off an expected feature for the Java language. Named &amp;#8220;Virtual Extension Methods", they allow adding methods to interfaces&amp;#8230; &lt;a rel="nofollow" target="_blank" href="http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf"&gt;with &lt;strong&gt;implementations&lt;/strong&gt;&lt;/a&gt;. The motivation being that, along with lambdas, you could put a method like &lt;code class="codespan"&gt;Iterable&amp;lt;T&amp;gt; filter(Predicate&amp;lt;T&amp;gt; predicate)&lt;/code&gt; onto, say, &lt;code class="codespan"&gt;java.lang.Iterable&lt;/code&gt;, with an implementation, without causing compiler errors in everyone&amp;#8217;s code. There was a bit of a collective gasp when some people in the audience assumed this meant multiple inheritance was coming to Java. However, the subtle but crucial point is that with a virtual extension method, it&amp;#8217;s not possible to reference state, such as fields. The body of a virtual extension method must rely on the concrete implementations to supply state, with the developer resolving conflicts from inherited methods in the concrete implementation at compile time. That leaves the feature looking a lot more like traits (awesome) than C++ style multiple inheritance with the diamond problem (not awesome).&lt;/p&gt;

&lt;p&gt;Following Remi were &lt;a rel="nofollow" target="_blank" href="http://urma.com/"&gt;Raoul Gabriel Urma&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/speaker/janina_voigt"&gt;Janina Voigt&lt;/a&gt;, two PhD students from Cambridge, who used the OpenJDK to explore the use of &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Arrays_in_C.23_and_Java"&gt;covariant arrays&lt;/a&gt; in the wild. Taking a look at lots of open-source projects, and using the novel approach of modifying the javac compiler to find the code they were interested in, they found that covariance is rarely required, and normal Java generics is usually enough to add type safety to methods employing covariance. I really liked the empirical approach taken to a language theory question, and love the idea they had of setting up some kind of open-source corpus, where those doing similar surveys could quickly get their hands on a huge amount of real-world code.&lt;/p&gt;

&lt;h3&gt;Community Is Not Just A TV Show&lt;/h3&gt;

&lt;p&gt;Then came &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/speaker/ben_evans"&gt;Ben Evans&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/speaker/martijn_verburg"&gt;Martijn Verburg&lt;/a&gt;, giving a talk entitled &amp;#8220;Politics, Positives, Paperwork and Pain: Our year to date in the JCP". Ben and Martijn are the leaders of the London Java user group, the &lt;a rel="nofollow" target="_blank" href="http://www.meetup.com/Londonjavacommunity/"&gt;London Java Community&lt;/a&gt; (LJC), which, in the past year, has won a voting seat on the &lt;a rel="nofollow" target="_blank" href="http://jcp.org/en/home/index"&gt;JCP&lt;/a&gt; (Java Community Process). They discussed some of their experiences, from the bad:&lt;/p&gt;

&lt;p&gt; - the acronym soup that appear in most every conversation (JCP, JSR, JSPA, TCK, RI&amp;#8230; TLA ETC - okay those last two aren&amp;#8217;t real)&lt;br /&gt;
 - phone conference calls with lawyers representing some of the companies involved in the JCP, discussing in minute detail whether to change &amp;#8220;notwithstanding&amp;#8221; to &amp;#8220;nevertheless&amp;#8221; in clause 27(g)&lt;br /&gt;
 - no-show members of the JCP who only participate in discussions after decisions they don&amp;#8217;t like have already been made&lt;/p&gt;

&lt;p&gt;But they did have a lot of positives to recount:&lt;/p&gt;

&lt;p&gt; - completion of the first of several reforms to the JSR (Java Specification Request) process which will make it more open and inclusive, and hopefully &amp;#8220;prevent another EJB 2&amp;Prime;&lt;br /&gt;
 - the (surprising) willingness and motivation of several of the bigger JCP members to move towards being more open&lt;br /&gt;
 - significant takeup of the LJC-led &lt;a rel="nofollow" target="_blank" href="http://java.net/projects/ljc-london-jug/pages/AdoptAJSRProgram"&gt;&amp;#8220;Adopt a JSR&amp;#8221;&lt;/a&gt; appeal, which gets everyday developers involved in particular JSRs, from development to evangelism (I myself am signed up to take part in &lt;a rel="nofollow" target="_blank" href="http://java.net/projects/ljc-london-jug/pages/AdoptAJSRProgram#JSR-353_%28Java_API_for_JSON_Processing%29"&gt;JSR 353 - API for JSON Processing&lt;/a&gt;, as we have been building a JSON-based API for one of our products recently)&lt;br /&gt;
 - drumming up lots of interest in contributing to the OpenJDK from LJC developers, which included a couple of &lt;a rel="nofollow" target="_blank" href="https://wikis.oracle.com/display/OpenJDK/JDK8+Warnings+Cleanup+Day"&gt;&amp;#8216;Warnings Cleanup&amp;#8217; hack sessions&lt;/a&gt;, where a bunch of hackers dived into the OpenJDK code to pick some low hanging fruit, fix the code, and submit patches. This is slowly pushing the OpenJDK project to make building, modifying and contributing much easier. One such event was hosted here at TIM Group, with all available spaces being taken about an hour after &lt;a rel="nofollow" target="_blank" href="http://www.meetup.com/Londonjavacommunity/events/49243872/"&gt;announcing it on meetup.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Overall Ben and Martijn are optimistic about the future of the OpenJDK as a community.&lt;/p&gt;

&lt;h3&gt;Open Sesame&lt;/h3&gt;

&lt;p&gt;For the rest of the afternoon, we were introduced to several open-source tools: Thermostat for monitoring performance of your Java application; GCSpy for inspecting and visualising garbage collection (here was the first time I heard the humorous quote &amp;#8220;If Java had true garbage collection, most programs would delete themselves upon execution.&amp;#8221; &amp;#8211; Robert Sewell); Byteman which allows you to inject bytecode into classes at runtime, and a DSL to allow you to talk about bytecode at a higher level of abstraction; and CacioWeb, which can let you run a Swing app inside your browser, which struck me as weird thing to want to do, but it had some pretty interesting use cases (e.g. rather than people using VNC to access their own Swing app running in their own JVM, the app can be hosted by a single JVM for multiple users). Steve O&amp;#8217; Grady argued, with some metrics and empirical counts, that Java the language is still not dead, and it&amp;#8217;s not only about the JVM either.&lt;/p&gt;

&lt;p&gt;The audience were also given the fine treat of listening to me harp on about they should design their classes to be immutable, and how they should totally use &lt;a rel="nofollow" target="_blank" href="http://www.mutabilitydetector.org/"&gt;Mutability Detector&lt;/a&gt; to keep them that way, the lucky devils. It&amp;#8217;s not every day you get to hear me crack some lame jokes about how XML sucks (my colleagues, on the other hand&amp;#8230;). Some good ideas and suggestions came out of the Q&amp;amp;A after my talk, and I also got a lot of positive feedback (like Mark Reinhold tweeting &lt;a rel="nofollow" target="_blank" href="https://twitter.com/#!/mreinhold/status/165815786802380800"&gt;&amp;#8220;@grundlefleck&amp;#8217;s Java immutability detector is really cool&amp;#8221;&lt;/a&gt; &amp;#8211; after which I almost audibly &lt;a rel="nofollow" target="_blank" href="http://www.urbandictionary.com/define.php?term=squee"&gt;squee&lt;/a&gt;&amp;#8216;d). Overall Mutability Detector was received well, and I&amp;#8217;m really glad I applied to present.&lt;/p&gt;

&lt;h3&gt;Absinthe Makes The Heart Grow Fonder&lt;/h3&gt;

&lt;p&gt;Once Saturday&amp;#8217;s talks were finished, I was invited to dinner with other speakers and sponsors of the Free Java Dev Room in a &lt;a rel="nofollow" target="_blank" href="http://www.chezleon.be/index.asp?intro"&gt;restaurant just off Brussel&amp;#8217;s Grand Place&lt;/a&gt;. Lots of interesting code talk, nice food, and Belgian beer. Having spent a lot of Saturday suffering from Friday night&amp;#8217;s excesses at FOSDEMs &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/beerevent"&gt;Free Beer event at a local bar named Delerium&lt;/a&gt;, I didn&amp;#8217;t fancy a repeat on Sunday. So I ducked out early-ish, before Raoul, the PhD student and Belgian native, could convince me to visit a nearby absinthe bar. Judging by the &amp;#8216;tender&amp;#8217; disposition of some of the folks on Sunday morning, it appeared to be one of the more sensible choices I made over the weekend.&lt;/p&gt;

&lt;h3&gt;Fast Ruby and ARMed Java&lt;/h3&gt;

&lt;p&gt;The first Sunday talk I attended was Charles Nutter discussing JRuby and some of the achievements they&amp;#8217;ve made with the project. I was surprised to hear that JRuby on the JVM was (for most things) the fastest implementation of Ruby around, even including native implementations. Then came a talk on how the Eclipse project works. It was interesting to see just how big an ecosystem and community it is, and they managed to ship, on time, on the same date for the past six years. The speaker, Mike Milinkovich, emphasized the importance of &lt;strong&gt;predictable&lt;/strong&gt; releases, and how the Eclipse project has and will drop features to make the scheduled release date. We then heard from Andrew Haley of RedHat, the work he&amp;#8217;d been doing to port OpenJDK to ARM processors, and someone from the audience showed an Eclipse installation which was built, and currently running, on an ARM processor machine, which was impressive.&lt;/p&gt;

&lt;p&gt;The next talk which (I am told) was excellent, was on a music-based Java project named Gervill. It included a musical representation of a Java program, using the Byteman project demonstrated the previous day, where every call to &lt;code class="codespan"&gt;list.add()&lt;/code&gt;, was translated into a note, where the index argument became a position on the scale. I say &lt;em&gt;I was told&lt;/em&gt; it was excellent, because I&amp;#8217;d actually ducked out of this talk, and into one of FOSDEM&amp;#8217;s Hack Rooms, where I introduced Martijn Verburg to the internal workings of Mutability Detector, which lead to the first bit of activity ("frsit psot", and a patch!) on my project&amp;#8217;s &lt;a rel="nofollow" target="_blank" href="http://groups.google.com/group/mutability-detector"&gt;mailing list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The day concluded with talks about IcedRobot (an Android implementation for the desktop), IcedTea and IcedTea-Web (RedHat&amp;#8217;s repackaging of Oracle&amp;#8217;s OpenJDK sans proprietary parts), and then a free-form discussion on Java, with the likes of Mark Reinhold, Dalibor Topic, Georges Raab (the VP of Software Development, Java Platform Group at Oracle) answering questions and discussing community issues in and around the OpenJDK project. It&amp;#8217;s great to see this kind of discussion take place, and it&amp;#8217;s somehow always astonishing to me to hear just how many people and projects depend on Java, and how much effort goes into releases, distribution and upgrades. I&amp;#8217;m so glad that in my day job here at TIM Group, we generally only work in two week release cycles, developing a hosted web application &amp;#8211; some of our problems can seem slightly trivial in comparison!&lt;/p&gt;

&lt;p&gt;And thus ended the scheduled talks at FOSDEM. I capped off the weekend enjoying a few beers and dinner with a few of the speakers from the Free Java Dev Room.&lt;/p&gt;

&lt;h3&gt;Belgium, man! Belgium!&lt;/h3&gt;

&lt;p&gt;Overall, despite the calamitous beginning of the weekend, attending FOSDEM was a hugely rewarding experience. The speaker line-up for the Java room was impressive, and it looked to be the same for the other tracks and dev rooms, with well known names in the open-source world. The conference also gave me the chance to meet and personally thank &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/"&gt;Koshuke Kawaguchi&lt;/a&gt; for his and the rest of the project&amp;#8217;s efforts on the &lt;a rel="nofollow" target="_blank" href="http://jenkins-ci.org/"&gt;Jenkins CI&lt;/a&gt; system that is used heavily at TIM Group. There was a very friendly vibe around the place, and what the organizers accomplish, without ever charging a penny for tickets, is astonishing.&lt;/p&gt;

&lt;p&gt;So in summary, if you can make it to FOSDEM (and it definitely helps if you work for a company like TIM Group, that lets you take the time to go, and puts up the cash for travel and accommodation), you definitely should&amp;#8230; but you should go to the correct campus.&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a rel="nofollow" target="_blank" href="https://devblog.timgroup.com/index.php/2012/02/08/fosdem-2012"&gt;Original post&lt;/a&gt; blogged on &lt;a rel="nofollow" target="_blank" href="http://b2evolution.net/"&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
         <author>graham.allangraham.allan</author>
         <guid isPermaLink="false">315@https://devblog.timgroup.com/</guid>
         <pubDate>Wed, 08 Feb 2012 10:30:24 +0000</pubDate>
         <content:encoded><![CDATA[<p>Last weekend I attended <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/">FOSDEM</a>, &#8220;the biggest free and non-commercial event organized by and for the community". The Free and Open-Source Software Developers Meeting, held in Brussels, pulls in roughly <a rel="nofollow" target="_blank" href="http://archive.fosdem.org/2011/about/fosdem">4000</a> FOSS hackers from around the world. I was one of the speakers on the schedule in the <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/track/free_java_devroom">Free Java Dev Room</a>, introducing my open source project, <a rel="nofollow" target="_blank" href="http://www.mutabilitydetector.org">Mutability Detector</a>. The <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/track/free_java_devroom">lineup</a> was pretty illustrious, including <a rel="nofollow" target="_blank" href="http://blog.headius.com/">Charles Nutter</a>, co-lead of <a rel="nofollow" target="_blank" href="http://jruby.org/">JRuby</a>, and <a rel="nofollow" target="_blank" href="http://mreinhold.org/">Mark Reinhold</a>, the Chief Architect of Java Development at Oracle. Here I&#8217;ll describe some of my experiences at FOSDEM, and relay some of the interesting stuff people presented. (Apologies if I misremember anything - there was a lot going on at the conference!)</p>

<h3>Lost in Translation</h3>

<p>First off, let this be a warning to any potential FOSDEM-goers. <a rel="nofollow" target="_blank" href="http://www.ulb.ac.be/">ULB</a>, the University that hosts the event, has two campuses. <a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps/place?q=Campus&amp;hl=en&amp;cid=17155248451941211428">Campus Solbosch</a>, where the entirety of FOSDEM happens, and about <a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps?saddr=Avenue+Franklin+Roosevelt+50,+1050+City+of+Brussels,+Belgium+(Universit%C3%A9+Libre+de+Bruxelles&amp;daddr=ULB+Campus+Solbosch&amp;hl=en&amp;ie=UTF8&amp;ll=50.83489,4.325695&amp;spn=0.064506,0.181789&amp;sll=50.813419,4.346809&amp;sspn=0.064536,0.181789&amp;geocode=FQ5cBwMd6hpBACGRZnzAU5Lr6A%3BFadZBwMdoeZCACkHHYiC3MTDRzGx2EWgWEkPlQ&amp;dirflg=r&amp;ttype=now&amp;noexp=0&amp;noal=0&amp;sort=def&amp;mra=ltm&amp;t=m&amp;z=13&amp;start=0">11km from that</a>, way over on the other side of the city, <a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps/place?q=Campus+near+Erasme,+Anderlecht,+Brussels,+Belgique&amp;hl=en&amp;cid=16783669324735604369">Campus Erasmus</a>, where I went. Top tip: when planning international trips to foreign countries that you&#8217;ve never visited before, <a rel="nofollow" target="_blank" href="http://maps.google.co.uk/maps?q=ulb%20brussels">don&#8217;t rely on Google Maps</a>.</p>

<p>After a 1hr 30min commute, with the help of a few fellow location-impaired, and thankfully French-<strong>and</strong>-English-speaking FOSDEM attendees, I finally made it to Campus Solbosch. Unfortunately that meant missing the welcome keynote, the introduction to the Free Java Dev Room, and talks about the OpenJDK from Mark Reinhold and Dalibor Topic. Massive facepalm. Hugely embarrassing. Mothers, don&#8217;t let your children grow up to be&#8230; someone who goes to the wrong ULB campus for FOSDEM.</p>

<h3>Lambdas and Traits and Bears, Oh My</h3>

<p>The first talk I saw was by <a rel="nofollow" target="_blank" href="http://archive.fosdem.org/2008/schedule/speakers/jeroen+frijters">Jeroen Frijters</a>, demonstrating the work he&#8217;s been doing to bring <a rel="nofollow" target="_blank" href="http://jcp.org/en/jsr/detail?id=292">JSR292 (Invoke Dynamic)</a> to <a rel="nofollow" target="_blank" href="http://www.ikvm.net/">IKVM.NET</a>, the virtual machine that runs Java on the CLR. Next up came <a rel="nofollow" target="_blank" href="http://www.java.net/author/r%C3%A9mi-forax">Remi Forax</a> to discuss lambdas in Java. Following a clear disclaimer that design choices and syntax he discussed was still in the air, and subject to change, he showed off an expected feature for the Java language. Named &#8220;Virtual Extension Methods", they allow adding methods to interfaces&#8230; <a rel="nofollow" target="_blank" href="http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf">with <strong>implementations</strong></a>. The motivation being that, along with lambdas, you could put a method like <code class="codespan">Iterable&lt;T&gt; filter(Predicate&lt;T&gt; predicate)</code> onto, say, <code class="codespan">java.lang.Iterable</code>, with an implementation, without causing compiler errors in everyone&#8217;s code. There was a bit of a collective gasp when some people in the audience assumed this meant multiple inheritance was coming to Java. However, the subtle but crucial point is that with a virtual extension method, it&#8217;s not possible to reference state, such as fields. The body of a virtual extension method must rely on the concrete implementations to supply state, with the developer resolving conflicts from inherited methods in the concrete implementation at compile time. That leaves the feature looking a lot more like traits (awesome) than C++ style multiple inheritance with the diamond problem (not awesome).</p>

<p>Following Remi were <a rel="nofollow" target="_blank" href="http://urma.com/">Raoul Gabriel Urma</a> and <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/speaker/janina_voigt">Janina Voigt</a>, two PhD students from Cambridge, who used the OpenJDK to explore the use of <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Arrays_in_C.23_and_Java">covariant arrays</a> in the wild. Taking a look at lots of open-source projects, and using the novel approach of modifying the javac compiler to find the code they were interested in, they found that covariance is rarely required, and normal Java generics is usually enough to add type safety to methods employing covariance. I really liked the empirical approach taken to a language theory question, and love the idea they had of setting up some kind of open-source corpus, where those doing similar surveys could quickly get their hands on a huge amount of real-world code.</p>

<h3>Community Is Not Just A TV Show</h3>

<p>Then came <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/speaker/ben_evans">Ben Evans</a> and <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/speaker/martijn_verburg">Martijn Verburg</a>, giving a talk entitled &#8220;Politics, Positives, Paperwork and Pain: Our year to date in the JCP". Ben and Martijn are the leaders of the London Java user group, the <a rel="nofollow" target="_blank" href="http://www.meetup.com/Londonjavacommunity/">London Java Community</a> (LJC), which, in the past year, has won a voting seat on the <a rel="nofollow" target="_blank" href="http://jcp.org/en/home/index">JCP</a> (Java Community Process). They discussed some of their experiences, from the bad:</p>

<p> - the acronym soup that appear in most every conversation (JCP, JSR, JSPA, TCK, RI&#8230; TLA ETC - okay those last two aren&#8217;t real)<br />
 - phone conference calls with lawyers representing some of the companies involved in the JCP, discussing in minute detail whether to change &#8220;notwithstanding&#8221; to &#8220;nevertheless&#8221; in clause 27(g)<br />
 - no-show members of the JCP who only participate in discussions after decisions they don&#8217;t like have already been made</p>

<p>But they did have a lot of positives to recount:</p>

<p> - completion of the first of several reforms to the JSR (Java Specification Request) process which will make it more open and inclusive, and hopefully &#8220;prevent another EJB 2&Prime;<br />
 - the (surprising) willingness and motivation of several of the bigger JCP members to move towards being more open<br />
 - significant takeup of the LJC-led <a rel="nofollow" target="_blank" href="http://java.net/projects/ljc-london-jug/pages/AdoptAJSRProgram">&#8220;Adopt a JSR&#8221;</a> appeal, which gets everyday developers involved in particular JSRs, from development to evangelism (I myself am signed up to take part in <a rel="nofollow" target="_blank" href="http://java.net/projects/ljc-london-jug/pages/AdoptAJSRProgram#JSR-353_%28Java_API_for_JSON_Processing%29">JSR 353 - API for JSON Processing</a>, as we have been building a JSON-based API for one of our products recently)<br />
 - drumming up lots of interest in contributing to the OpenJDK from LJC developers, which included a couple of <a rel="nofollow" target="_blank" href="https://wikis.oracle.com/display/OpenJDK/JDK8+Warnings+Cleanup+Day">&#8216;Warnings Cleanup&#8217; hack sessions</a>, where a bunch of hackers dived into the OpenJDK code to pick some low hanging fruit, fix the code, and submit patches. This is slowly pushing the OpenJDK project to make building, modifying and contributing much easier. One such event was hosted here at TIM Group, with all available spaces being taken about an hour after <a rel="nofollow" target="_blank" href="http://www.meetup.com/Londonjavacommunity/events/49243872/">announcing it on meetup.com</a>.</p>

<p>Overall Ben and Martijn are optimistic about the future of the OpenJDK as a community.</p>

<h3>Open Sesame</h3>

<p>For the rest of the afternoon, we were introduced to several open-source tools: Thermostat for monitoring performance of your Java application; GCSpy for inspecting and visualising garbage collection (here was the first time I heard the humorous quote &#8220;If Java had true garbage collection, most programs would delete themselves upon execution.&#8221; &#8211; Robert Sewell); Byteman which allows you to inject bytecode into classes at runtime, and a DSL to allow you to talk about bytecode at a higher level of abstraction; and CacioWeb, which can let you run a Swing app inside your browser, which struck me as weird thing to want to do, but it had some pretty interesting use cases (e.g. rather than people using VNC to access their own Swing app running in their own JVM, the app can be hosted by a single JVM for multiple users). Steve O&#8217; Grady argued, with some metrics and empirical counts, that Java the language is still not dead, and it&#8217;s not only about the JVM either.</p>

<p>The audience were also given the fine treat of listening to me harp on about they should design their classes to be immutable, and how they should totally use <a rel="nofollow" target="_blank" href="http://www.mutabilitydetector.org/">Mutability Detector</a> to keep them that way, the lucky devils. It&#8217;s not every day you get to hear me crack some lame jokes about how XML sucks (my colleagues, on the other hand&#8230;). Some good ideas and suggestions came out of the Q&amp;A after my talk, and I also got a lot of positive feedback (like Mark Reinhold tweeting <a rel="nofollow" target="_blank" href="https://twitter.com/#!/mreinhold/status/165815786802380800">&#8220;@grundlefleck&#8217;s Java immutability detector is really cool&#8221;</a> &#8211; after which I almost audibly <a rel="nofollow" target="_blank" href="http://www.urbandictionary.com/define.php?term=squee">squee</a>&#8216;d). Overall Mutability Detector was received well, and I&#8217;m really glad I applied to present.</p>

<h3>Absinthe Makes The Heart Grow Fonder</h3>

<p>Once Saturday&#8217;s talks were finished, I was invited to dinner with other speakers and sponsors of the Free Java Dev Room in a <a rel="nofollow" target="_blank" href="http://www.chezleon.be/index.asp?intro">restaurant just off Brussel&#8217;s Grand Place</a>. Lots of interesting code talk, nice food, and Belgian beer. Having spent a lot of Saturday suffering from Friday night&#8217;s excesses at FOSDEMs <a rel="nofollow" target="_blank" href="http://fosdem.org/2012/beerevent">Free Beer event at a local bar named Delerium</a>, I didn&#8217;t fancy a repeat on Sunday. So I ducked out early-ish, before Raoul, the PhD student and Belgian native, could convince me to visit a nearby absinthe bar. Judging by the &#8216;tender&#8217; disposition of some of the folks on Sunday morning, it appeared to be one of the more sensible choices I made over the weekend.</p>

<h3>Fast Ruby and ARMed Java</h3>

<p>The first Sunday talk I attended was Charles Nutter discussing JRuby and some of the achievements they&#8217;ve made with the project. I was surprised to hear that JRuby on the JVM was (for most things) the fastest implementation of Ruby around, even including native implementations. Then came a talk on how the Eclipse project works. It was interesting to see just how big an ecosystem and community it is, and they managed to ship, on time, on the same date for the past six years. The speaker, Mike Milinkovich, emphasized the importance of <strong>predictable</strong> releases, and how the Eclipse project has and will drop features to make the scheduled release date. We then heard from Andrew Haley of RedHat, the work he&#8217;d been doing to port OpenJDK to ARM processors, and someone from the audience showed an Eclipse installation which was built, and currently running, on an ARM processor machine, which was impressive.</p>

<p>The next talk which (I am told) was excellent, was on a music-based Java project named Gervill. It included a musical representation of a Java program, using the Byteman project demonstrated the previous day, where every call to <code class="codespan">list.add()</code>, was translated into a note, where the index argument became a position on the scale. I say <em>I was told</em> it was excellent, because I&#8217;d actually ducked out of this talk, and into one of FOSDEM&#8217;s Hack Rooms, where I introduced Martijn Verburg to the internal workings of Mutability Detector, which lead to the first bit of activity ("frsit psot", and a patch!) on my project&#8217;s <a rel="nofollow" target="_blank" href="http://groups.google.com/group/mutability-detector">mailing list</a>.</p>

<p>The day concluded with talks about IcedRobot (an Android implementation for the desktop), IcedTea and IcedTea-Web (RedHat&#8217;s repackaging of Oracle&#8217;s OpenJDK sans proprietary parts), and then a free-form discussion on Java, with the likes of Mark Reinhold, Dalibor Topic, Georges Raab (the VP of Software Development, Java Platform Group at Oracle) answering questions and discussing community issues in and around the OpenJDK project. It&#8217;s great to see this kind of discussion take place, and it&#8217;s somehow always astonishing to me to hear just how many people and projects depend on Java, and how much effort goes into releases, distribution and upgrades. I&#8217;m so glad that in my day job here at TIM Group, we generally only work in two week release cycles, developing a hosted web application &#8211; some of our problems can seem slightly trivial in comparison!</p>

<p>And thus ended the scheduled talks at FOSDEM. I capped off the weekend enjoying a few beers and dinner with a few of the speakers from the Free Java Dev Room.</p>

<h3>Belgium, man! Belgium!</h3>

<p>Overall, despite the calamitous beginning of the weekend, attending FOSDEM was a hugely rewarding experience. The speaker line-up for the Java room was impressive, and it looked to be the same for the other tracks and dev rooms, with well known names in the open-source world. The conference also gave me the chance to meet and personally thank <a rel="nofollow" target="_blank" href="http://kohsuke.org/">Koshuke Kawaguchi</a> for his and the rest of the project&#8217;s efforts on the <a rel="nofollow" target="_blank" href="http://jenkins-ci.org/">Jenkins CI</a> system that is used heavily at TIM Group. There was a very friendly vibe around the place, and what the organizers accomplish, without ever charging a penny for tickets, is astonishing.</p>

<p>So in summary, if you can make it to FOSDEM (and it definitely helps if you work for a company like TIM Group, that lets you take the time to go, and puts up the cash for travel and accommodation), you definitely should&#8230; but you should go to the correct campus.</p><div class="item_footer"><p><small><a rel="nofollow" target="_blank" href="https://devblog.timgroup.com/index.php/2012/02/08/fosdem-2012">Original post</a> blogged on <a rel="nofollow" target="_blank" href="http://b2evolution.net/">b2evolution</a>.</small></p></div><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/rDiOt7HzzQg" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>https://devblog.timgroup.com/index.php/2012/02/08/fosdem-2012</feedburner:origLink></item>
      <item>
         <title>Give Travis your love</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/917ky15HvQA/</link>
         <description>Travis looks like a fascinating CI system. It&amp;#8217;s fully buzzword compliant (RabbitMQ, Chef, Vagrant, VeeWee), and provides a free CI service for open source projects. The founders will offer private CI services in the future. As running Continuous Integration is really expensive, they&amp;#8217;ve made a call for donations. You can make a donation below, and [...]&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/07/give-travis-your-love/"&gt;Give Travis your love&lt;/a&gt; is a post from: &lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com"&gt;The Build Doctor&lt;/a&gt;.  Sponsored by &lt;a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&amp;utm_medium=rss&amp;utm_campaign=sponsor"&gt;AnthillPro&lt;/a&gt;, the build and deployment automation server that lets you release with confidence.&lt;/p&gt;</description>
         <author>Julian SimpsonJulian Simpson</author>
         <guid isPermaLink="false">http://www.build-doctor.com/?p=2584</guid>
         <pubDate>Tue, 07 Feb 2012 20:42:51 +0000</pubDate>
         <content:encoded><![CDATA[<p>Travis looks like a fascinating CI system. It&#8217;s fully buzzword compliant (RabbitMQ, Chef, Vagrant, VeeWee), and provides a free CI service for open source projects.
<div>The founders will offer private CI services in the future.
<div></div>
<div>As running Continuous Integration is really expensive, they&#8217;ve made a call for donations. You can make a donation below, and you damn well should if your code (or code that you use) is built at Travis. Even if it doesn&#8217;t get compiled.</div>
<div>[<a rel="nofollow" target="_blank" href="https://love.travis-ci.org/">link</a>]</div>
</div>
<p><br class="final-break" style="clear:both;"/></p>
<p><a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/07/give-travis-your-love/">Give Travis your love</a> is a post from: <a rel="nofollow" target="_blank" href="http://www.build-doctor.com">The Build Doctor</a>.  Sponsored by <a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&utm_medium=rss&utm_campaign=sponsor">AnthillPro</a>, the build and deployment automation server that lets you release with confidence.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/917ky15HvQA" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.build-doctor.com/2012/02/07/give-travis-your-love/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=give-travis-your-love</feedburner:origLink></item>
      <item>
         <title>Sonar in the news</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/RYlunDpJC1I/</link>
         <description>Welcome to the roundup of blog posts and pages that mentioned Sonar last month… Sonar and Gradle Multi-Module Projects By Gunnar Hillert, 13 January 2012 I love Sonar. It is a wonderful way to collect some metrics for your Java projects &amp;#8211; hassle-free and wrapped in a sweet-looking UI. For Maven-based projects Sonar literally works [...]</description>
         <author>Olivier GaudinOlivier Gaudin</author>
         <guid isPermaLink="false">http://www.sonarsource.org/?p=5999</guid>
         <pubDate>Tue, 07 Feb 2012 15:00:23 +0000</pubDate>
         <content:encoded><![CDATA[<p>Welcome to the roundup of blog posts and pages that mentioned Sonar last month…<span id="more-5999"></span></p>
<p><a rel="nofollow" target="_blank" href="http://hillert.blogspot.com/2012/01/sonar-and-gradle-multi-module-projects.html">Sonar and Gradle Multi-Module Projects</a><br />
By Gunnar Hillert, 13 January 2012<br />
 I love Sonar. It is a wonderful way to collect some metrics for your Java projects &#8211; hassle-free and wrapped in a sweet-looking UI.  For Maven-based projects Sonar literally works out of the box. Just start up your Sonar instance (assuming you are using the default settings running on localhost) and then you simply fire it off using:</p> 
<p><a rel="nofollow" target="_blank" href="http://java.dzone.com/articles/measuring-code"> Measuring Code </a><br />
By David Green, 2 January 2012<br />
 How good is your code? If you’re like the other 80% of above average developers, then I bet your code is pretty awesome. But are you sure? How can you tell? Or perhaps you’re working on a legacy code base – just how bad is the code? And is it getting better? Code metrics provide a way of measuring your code – some people love ‘em, but some hate ‘em.</p> 
<p><a rel="nofollow" target="_blank" href="http://www.wappworks.com/2012/01/06/making-a-business-case-for-using-codehaus-sonar/">Making a Business Case For Using Codehaus Sonar</a><br />
By Chris Khoo, 6 January 2012<br />
 Augmenting the development process is often a hard sell – processes don’t contribute directly to company profits and there are financial and time costs (for integration and maintenance)  to consider. Personally, I’m a firm believer in adopting processes on an as-needed basis rather than trying to build the ultimate workflow/process all at once.</p> 
<p><a rel="nofollow" target="_blank" href="http://www.coding-stories.com/2012/01/23/couverture-des-tests-dintegration-avec-jacoco-maven-et-sonar/">Couverture des tests d’intégration avec JaCoCo, Maven et Sonar</a><br />
By Jean-Christophe, 23 January 2012<br />
 Dans nos projets on rencontre souvent ce cas de figure : certaines portions de code se prêtent mal au test unitaire. Ce sont les interfaces graphiques, le code qui manipule des fichiers, les connexions réseaux… Cela peut poser problème lorsqu’on …</p> 
<p><a rel="nofollow" target="_blank" href="http://www.javaworld.com/community/?q=node/8293"> Continuous Integration and Testing </a><br />
By John Dobie, 16 January 2012<br />
 How do you know if using code metrics really does help to produce code with fewer bugs.<br />
I am convinced they do, but how can I possibly prove it? All projects have historic data. This is usually stored in your bug tracking and source code control tools. We can use the data stored in these systems to perform ‘code forensics.’ We use the historic data from real issues to see if they could have been avoided.</p> 
<img src="http://feeds.feedburner.com/~r/Sonar/~4/guoGbXqPcRc" height="1" width="1"/><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/RYlunDpJC1I" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://feedproxy.google.com/~r/Sonar/~3/guoGbXqPcRc/</feedburner:origLink></item>
      <item>
         <title>BCS Configuration Management 2012 Conference – Call for Papers</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/5prKIlU-aAQ/</link>
         <description>I recently joined the British Computer Society I also joined the BCS Configuration Management Group, and I&amp;#8217;m now on the committee. To me it&amp;#8217;s important to understand the place of CM on your project, especially as the landscape is changing so rapidly. That&amp;#8217;s why I&amp;#8217;m telling you about the call for papers for the conference [...]&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/02/bcs-configuration-management-2012-conference-call-for-papers/"&gt;BCS Configuration Management 2012 Conference &amp;#8211; Call for Papers&lt;/a&gt; is a post from: &lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com"&gt;The Build Doctor&lt;/a&gt;.  Sponsored by &lt;a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&amp;utm_medium=rss&amp;utm_campaign=sponsor"&gt;AnthillPro&lt;/a&gt;, the build and deployment automation server that lets you release with confidence.&lt;/p&gt;</description>
         <author>Julian SimpsonJulian Simpson</author>
         <guid isPermaLink="false">http://www.build-doctor.com/?p=2574</guid>
         <pubDate>Thu, 02 Feb 2012 23:44:02 +0000</pubDate>
         <content:encoded><![CDATA[<p style="clear:both;">I recently joined the British Computer Society I also joined the BCS Configuration Management Group, and I&#8217;m now on the committee.</p>
<p style="clear:both;">To me it&#8217;s important to understand the place of CM on your project, especially as the landscape is changing so rapidly.</p>
<p style="clear:both;">That&#8217;s why I&#8217;m telling you about the call for papers for the conference in London, on May 29. I&#8217;d love to see some submissions from people who are addressing CM as part of DevOps (and not just system configuration management).</p>
<p style="clear:both;"><a rel="nofollow" target="_blank" href="http://bcs-cmsg.org.uk/conference2012/call-for-papers.html" title="">Link</a>.</p>
<p><br class="final-break" style="clear:both;"/></p>
<p><a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/02/bcs-configuration-management-2012-conference-call-for-papers/">BCS Configuration Management 2012 Conference &#8211; Call for Papers</a> is a post from: <a rel="nofollow" target="_blank" href="http://www.build-doctor.com">The Build Doctor</a>.  Sponsored by <a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&utm_medium=rss&utm_campaign=sponsor">AnthillPro</a>, the build and deployment automation server that lets you release with confidence.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/5prKIlU-aAQ" height="1" width="1"/>]]></content:encoded>
         <category>Conferences</category>
      <feedburner:origLink>http://www.build-doctor.com/2012/02/02/bcs-configuration-management-2012-conference-call-for-papers/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=bcs-configuration-management-2012-conference-call-for-papers</feedburner:origLink></item>
      <item>
         <title>Vendor news, February 2</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/O9vLdCgnHBA/</link>
         <description>I haven&amp;#8217;t worked this hard in years. Sorry for the delay in posting anything. Accurev just attempted to make a corporate version of git. I think most of the enhancements that they&amp;#8217;ve added will horrify the typical git user, but that&amp;#8217;s not to say that development managers won&amp;#8217;t buy it by the bucketload to stop [...]&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/02/vendor-news-february-2/"&gt;Vendor news, February 2&lt;/a&gt; is a post from: &lt;a rel="nofollow" target="_blank" href="http://www.build-doctor.com"&gt;The Build Doctor&lt;/a&gt;.  Sponsored by &lt;a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&amp;utm_medium=rss&amp;utm_campaign=sponsor"&gt;AnthillPro&lt;/a&gt;, the build and deployment automation server that lets you release with confidence.&lt;/p&gt;</description>
         <author>Julian SimpsonJulian Simpson</author>
         <guid isPermaLink="false">http://www.build-doctor.com/2012/02/02/vendor-news-february-2/</guid>
         <pubDate>Thu, 02 Feb 2012 21:59:56 +0000</pubDate>
         <content:encoded><![CDATA[<p style="clear:both;">I haven&#8217;t worked this hard in years. Sorry for the delay in posting anything.</p>
<ul style="clear:both;">
<li>Accurev just attempted to make a corporate version of git. I think most of the enhancements that they&#8217;ve added will horrify the typical git user, but that&#8217;s not to say that development managers won&#8217;t buy it by the bucketload to stop their devs moaning about Subversion. [l<a rel="nofollow" target="_blank" href="http://accurev.com/blog/2012/01/31/accurev-announces-kando-git-integration/">ink</a>]</li>
<li>ThoughtWorks released a new version of Mingle that makes a Kanban board. [<a rel="nofollow" target="_blank" href="http://www.thoughtworks-studios.com/docs/mingle/3.5/help/whats_new_in_mingle.html">link</a>]</li>
<li>UrbanCode [warning, they sponsor this blog] added a thoughtful feature to their tools: disabling Nagios checks while you deploy [<a rel="nofollow" target="_blank" href="http://blogs.urbancode.com/uncategorized/new-nagios-plugin/">link</a>]</li>
<li>DevOpsDays Austin is selling out fast. April 2 and 3. [<a rel="nofollow" target="_blank" href="http://www.eventbrite.com/event/2357705962/eanrecl">link</a>]</li>
<li>Sonatype are announcing Nexus 2 features later this month. I&#8217;ll report back.</li>
</ul>
<p>Update: <a rel="nofollow" target="_blank" href="http://blog.wolfplusplus.com/">Wolfplusplus</a> pointed out that Fog Creek&#8217;s <a rel="nofollow" target="_blank" href="http://www.fogcreek.com/kiln/">Kiln</a> seems to be the same trick as Kando, but for Mercurial. I think the Accurev version plays more to the suits, though.<br class="final-break" style="clear:both;"/></p>
<p><a rel="nofollow" target="_blank" href="http://www.build-doctor.com/2012/02/02/vendor-news-february-2/">Vendor news, February 2</a> is a post from: <a rel="nofollow" target="_blank" href="http://www.build-doctor.com">The Build Doctor</a>.  Sponsored by <a rel="nofollow" target="_blank" href="http://www.anthillpro.com/html/products/anthillpro/default.html?utm_source=doctor&utm_medium=rss&utm_campaign=sponsor">AnthillPro</a>, the build and deployment automation server that lets you release with confidence.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/O9vLdCgnHBA" height="1" width="1"/>]]></content:encoded>
         <category>News</category>
      <feedburner:origLink>http://www.build-doctor.com/2012/02/02/vendor-news-february-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vendor-news-february-2</feedburner:origLink></item>
      <item>
         <title>Create hidden files in Apache VFS with the RAM filesystem type</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/UhGVH33rSIM/</link>
         <description>Apache VFS is a great way to access different file systems in the same way. I particularly like the custom RAM filesystem in my unit tests in order to check code that eventually accesses the actual file system. For example: &amp;#8230; &lt;a rel="nofollow" target="_blank" href="http://ericlefevre.net/wordpress/2012/02/02/create-hidden-files-in-apache-vfs-with-the-ram-filesystem-type/"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
         <author>Eric Lefevre-ArdantEric Lefevre-Ardant</author>
         <guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=1034</guid>
         <pubDate>Thu, 02 Feb 2012 09:57:47 +0000</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://commons.apache.org/vfs/">Apache VFS</a> is a great way to access different file systems in the same way. I particularly like the custom <a rel="nofollow" target="_blank" href="http://commons.apache.org/vfs/filesystems.html">RAM filesystem</a> in my unit tests in order to check code that eventually accesses the actual file system.</p>
<p>For example:</p>
<pre>
StandardFileSystemManager manager = new StandardFileSystemManager();
manager.init();
manager.resolveFile("ram://root/file.txt").createFile(); // prepare test harness
...
manager.resolveFile("ram://root/file.txt").getName(); // do something useful
</pre>
<p>Annoyingly, Apache VFS API provides a way to check if a file/folder is hidden, but, although it is always possible to manually create hidden files on your system, there is no way to mark a file as hidden in the RAM filesystem.</p>
<pre>
manager.resolveFile("ram://root/file.txt").isHidden(); // returns false
manager.resolveFile("ram://root/.file.txt").isHidden(); // also returns false
</pre>
<p>The solution is to modify the RAM filesystem and customize its checking of the hidden attribute. This means that we need a new RamFileProvider, a new RamFileSystem and finally a new RamFileObject. In this example, all files and folders whose names start with a dot will be considered hidden:</p>
<pre>
public class RamFileProvider extends org.apache.commons.vfs2.provider.ram.RamFileProvider {
  @Override
  protected FileSystem doCreateFileSystem(FileName name, FileSystemOptions fileSystemOptions) throws FileSystemException {
    return new RamFileSystem(name, fileSystemOptions);
  }

  private static class RamFileSystem extends org.apache.commons.vfs2.provider.ram.RamFileSystem {
    public RamFileSystem(FileName rootName, FileSystemOptions fileSystemOptions) {
      super(rootName, fileSystemOptions);
    }

    @Override
    protected FileObject createFile(AbstractFileName name) throws Exception {
      return new RamFileObject(name, this);
    }
  }

  private static class RamFileObject extends org.apache.commons.vfs2.provider.ram.RamFileObject {
    public RamFileObject(AbstractFileName name, RamFileSystem ramFileSystemWithHiddenSupport) {
      super(name, ramFileSystemWithHiddenSupport);
    }

    @Override
    public boolean isHidden() throws FileSystemException {
      // this is the important part
      if (getName().getBaseName().startsWith(".")) {
        return true;
      }
      return super.isHidden(); // in practice, this always return false
    }
  }
}
</pre>
<p>Finally, this new RamFileProvider must be registered with your existing FileSystemManager. In my case, I get something like that:</p>
<pre>
StandardFileSystemManager manager = new StandardFileSystemManager();
manager.init();
manager.addProvider("ram-ext", new RamFileProvider());
manager.resolveFile("ram-ext:///root/file.txt").createFile();
manager.resolveFile("ram-ext:///root/.file.txt").createFile();
...
manager.resolveFile("ram-ext://root/file.txt").isHidden(); // returns false
manager.resolveFile("ram-ext://root/.file.txt").isHidden(); // returns true
</pre>
<p>Note that I did not replace the &#8220;ram&#8221; filesystem entirely. Although that would have been my preferred option, that would have taken too much time in my little experiment.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/UhGVH33rSIM" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://ericlefevre.net/wordpress/2012/02/02/create-hidden-files-in-apache-vfs-with-the-ram-filesystem-type/</feedburner:origLink></item>
      <item>
         <title>“Where Should I Start Looking….”</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/8CvUyachw9Q/</link>
         <description>My friend and excellent agile coach Michele Sliger, co-author of The Software Project Manager’s Bridge to Agility ,  recently emailed me this question that she hears a lot: &amp;#8220;Where should I start looking to learn more about test automation and tooling?&amp;#8221; Naturally, I replied with a typically long-winded answer. She must have liked it though, [...]</description>
         <author>lcrispinlcrispin</author>
         <guid isPermaLink="false">http://lisacrispin.com/wordpress/?p=902</guid>
         <pubDate>Mon, 30 Jan 2012 02:55:34 +0000</pubDate>
         <content:encoded><![CDATA[<p><span style="color:#333399;">My friend and excellent agile coach <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://www.sligerconsulting.com/"><span style="color:#333399;text-decoration:underline;">Michele Sliger</span></a></span>, co-author of<span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://www.sligerconsulting.com/resources/books/"><span style="color:#333399;"> <em>The Software Project Manager’s Bridge to Agility</em></span></a></span> ,  recently emailed me this question that she hears a lot: &#8220;Where should I start looking to learn more about test automation and tooling?&#8221;</span></p>
<p><span style="color:#333399;">Naturally, I replied with a typically long-winded answer. She must have liked it though, because she suggested I cut and paste my reply into a blog post. Here it is!</span></p>
<p><span style="color:#333399;">The key thing with a newbie agile team is to not say &#8220;move testers on all teams into automated testing&#8221; but &#8220;help all teams learn to take whole-team responsibility for quality and testing, and learn how programmers and testers collaborate to automate tests at all levels&#8221;. Automated test code is code, and generally, it&#8217;s much quicker and better in the long run for programmers to code the automation fixtures. Testers know what to test, and when programmers do the coding, testers have lots of time to help customers come up with examples of desired behavior to turn into tests. Then they can pair with the programmers to automate regression testing and any other types of tests (performance, load etc). Then they will still have time to do the all-important manual exploratory testing. </span></p>
<p><span style="color:#333399;"> If they read our book <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://www.amazon.com/Agile-Testing-Practical-Guide-Testers/dp/0321534468/ref=sr_1_1?ie=UTF8&amp;qid=1327891879&amp;sr=8-1"><span style="color:#333399;text-decoration:underline;"><em>Agile Testing</em></span></a></span>, they will learn that they have to be patient and invest a lot of time in learning and experimenting with different test frameworks. And they should use Mike Cohn&#8217;s test automation pyramid concept to see where they&#8217;ll get the best ROI in automation. Generally, they should always start by learning how to do TDD and get traction on unit level tests. Then they can move on to API or service level tests, then GUI. But that&#8217;s not a rule, each team has to figure out what&#8217;s best for them.</span></p>
<p><span style="color:#333399;"> I highly recommend Gojko Adzic&#8217;s <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://specificationbyexample.com"><span style="color:#333399;"><em>Specification by Example</em></span></a></span> book, and also his blog, <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://gojko.net/"><span style="color:#333399;text-decoration:underline;">gojko.net</span></a></span>. <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://shino.de"><span style="color:#333399;text-decoration:underline;">Markus Gaertner</span></a></span> has a great ATDD book coming out but it&#8217;s not published yet. </span></p>
<p><span style="color:#333399;"> There are SO many test frameworks, drivers, tools, it&#8217;s overwhelming. Recently we had to find a way to automate GUI regression tests for our new code that uses Dojo. Our existing GUI tools aren&#8217;t able to interpret the Dojo JS properly. It was truly a team effort, though not a smooth one. Our sys admin had earlier played around with Selenium, and we thought Webdriver might work. The sys admin did a spike and proved it did work, then he and our senior architect spiked a couple of different frameworks &#8211; one homegrown, one using Geb. They demo&#8217;ed it and got everyone&#8217;s opinions. For now we are going with the Geb framework, but down the road we might decide it&#8217;s not quite right and try something else.</span></p>
<p><span style="color:#333399;"> Anyway, that&#8217;s a long-winded answer. One good place to start getting an idea about functional test tools is the Agile Alliance Functional Test Tools group&#8217;s spreadsheet comparing various tools, at <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://bit.ly/AgileTestTools"><span style="color:#333399;text-decoration:underline;">http://bit.ly/AgileTestTools</span></a></span>. When the teams are ready to think about functional testing, they might take a look and get an idea of all the choices. It&#8217;s a good idea to stop and plan a <span style="text-decoration:underline;"><a rel="nofollow" target="_blank" href="http://searchsoftwarequality.techtarget.com/tip/Devising-a-test-automation-strategy-Getting-started">test automation strategy</a></span>.<br />
</span></p>
<p><span style="color:#333399;">It is really, really hard to get started with test automation. There&#8217;s a period where it&#8217;s just extra work and no reward. But eventually they&#8217;ll cross over that Hump of Pain and start reaping the benefits, eating away at their technical debt!</span></p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/8CvUyachw9Q" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://lisacrispin.com/wordpress/2012/01/29/where-should-i-start-looking/</feedburner:origLink></item>
      <item>
         <title>Cleaning up test code</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/bQyEF0XqaHo/</link>
         <description>My former colleague David just posted an example of verbose test code on his blog (the parts in French have been translated to English by myself): /** * */ @Test public void testGetCustomerOK() { LOGGER.info("======= testGetCustomerOK starting..."); try { CustomerDTO &amp;#8230; &lt;a rel="nofollow" target="_blank" href="http://ericlefevre.net/wordpress/2012/01/27/cleaning-up-test-code/"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
         <author>Eric Lefevre-ArdantEric Lefevre-Ardant</author>
         <guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=1028</guid>
         <pubDate>Fri, 27 Jan 2012 17:52:03 +0000</pubDate>
         <content:encoded><![CDATA[<p>My former colleague <a rel="nofollow" target="_blank" href="https://twitter.com/#!/dgageot">David</a> just posted an <a rel="nofollow" target="_blank" href="http://blog.javabien.net/2012/01/27/unit-test-verbosity/">example of verbose test code on his blog</a> (the parts in French have been translated to English by myself):</p>
<pre>
/**
 *
 */
@Test
public void testGetCustomerOK() {

  LOGGER.info("======= testGetCustomerOK starting...");

  try {
    CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

    // Check.
    Assert.assertNotNull("Extra not found.", targetDTO);
    Assert.assertEquals("accountIds must be the same.", "ABC99", targetDTO.getAccountId());

  } catch (CustomerBusinessException exception) {
    LOGGER.error("CustomerBusinessException : {}",
	    exception.getCause());
    Assert.fail(exception.getMessage());
  } catch (UnavailableResourceException exception) {
    LOGGER.error("UnavailableResourceException : {}",
	    exception.getMessage());
    Assert.fail(exception.getMessage());
  } catch (UnexpectedException exception) {
    LOGGER.error("UnexpectedException : {}" +
	    exception.getMessage());
    Assert.fail(exception.getMessage());
  } catch (Exception exception) {
    LOGGER.error("CRASH : " + exception.getMessage());
    Assert.fail(exception.getMessage());
  }

  LOGGER.info("======= testGetCustomerOK done.");
}
</pre>
<p>Facing this code, the first thing I would do is remove the logs in the catch clauses, which are clearly obscuring the code the most. They do not provide actual value, since the exception message is used in Assert.fail() calls. </p>
<pre>
/**
 *
 */
@Test
public void testGetCustomerOK() {

  LOGGER.info("======= testGetCustomerOK starting...");

  try {
    CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

    // Check.
    Assert.assertNotNull("Extra not found.", targetDTO);
    Assert.assertEquals("accountIds must be the same.", "ABC99", targetDTO.getAccountId());

  } catch (CustomerBusinessException exception) {
    Assert.fail(exception.getMessage());
  } catch (UnavailableResourceException exception) {
    Assert.fail(exception.getMessage());
  } catch (UnexpectedException exception) {
    Assert.fail(exception.getMessage());
  } catch (Exception exception) {
    Assert.fail(exception.getMessage());
  }

  LOGGER.info("======= testGetCustomerOK done.");
}
</pre>
<p>Next, the catching of exceptions and calling Assert.fail() is in fact the same work that the test runner actually does. We can let the test runner handle those cases:</p>
<pre>
/**
 *
 */
@Test
public void testGetCustomerOK() throws Exception {

  LOGGER.info("======= testGetCustomerOK starting...");

  CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

  // Check.
  Assert.assertNotNull("Extra not found.", targetDTO);
  Assert.assertEquals("accountIds must be the same.", "ABC99", targetDTO.getAccountId());

  LOGGER.info("======= testGetCustomerOK done.");
}
</pre>
<p>The remaining logs are actually information that can already be known from the test runner, since test results are presented by methods. My guess is that they were added to make the previous logs more readable. They can go now:</p>
<pre>
/**
 *
 */
@Test
public void testGetCustomerOK() throws Exception {
  CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

  // Check.
  Assert.assertNotNull("Extra not found.", targetDTO);
  Assert.assertEquals("accountIds must be the same.", "ABC99", targetDTO.getAccountId());
}
</pre>
<p>The &#8220;check&#8221; comment serves no useful purpose. Also, there is an empty comment that obviously adds no value:</p>
<pre>
@Test
public void testGetCustomerOK() throws Exception {
  CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

  Assert.assertNotNull("Extra not found.", targetDTO);
  Assert.assertEquals("accountIds must be the same.", "ABC99", targetDTO.getAccountId());
}
</pre>
<p>We are down to 6 lines of code. The first assert does a check that is also done implicitely by the following one. That seems redundant. Also, it is clearly a situation that should <em>not</em> happen in a normal test run. That can go:</p>
<pre>
@Test
public void testGetCustomerOK() throws Exception {
  CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

  Assert.assertEquals("accountIds must be the same.", "ABC99", targetDTO.getAccountId());
}
</pre>
<p>The remaining assertion has a comment that says what the test does. In some way, there is some value in this. However, in most (all?) cases, the person seeing the error would open the test class anyway and read the code. The test comment seems redundant. At the very least, its value is far from clear. In those situations, I remove the comments:</p>
<pre>
@Test
public void testGetCustomerOK() throws Exception {
  CustomerDTO targetDTO = this.serviceImpl.getCustomer("ABC99");

  Assert.assertEquals("ABC99", targetDTO.getAccountId());
}
</pre>
<p>OK, a little inlining can now be done:</p>
<pre>
@Test
public void testGetCustomerOK() throws Exception {
  Assert.assertEquals("ABC99", this.serviceImpl.getCustomer("ABC99").getAccountId());
}
</pre>
<p>The Assert.assertEquals method can also be statically imported:</p>
<pre>
@Test
public void testGetCustomerOK() throws Exception {
  assertEquals("ABC99", this.serviceImpl.getCustomer("ABC99").getAccountId());
}
</pre>
<p>And the test could use a renaming:</p>
<pre>
@Test
public void can_obtain_a_customer_by_account_id() throws Exception {
  assertEquals("ABC99", this.serviceImpl.getCustomer("ABC99").getAccountId());
}
</pre>
<p>Hm&#8230; the &#8220;this.&#8221; clause is not really necessary:</p>
<pre>
@Test
public void can_obtain_a_customer_by_account_id() throws Exception {
  assertEquals("ABC99", serviceImpl.getCustomer("ABC99").getAccountId());
}
</pre>
<p>And&#8230; that&#8217;s it. I&#8217;m down to 4 lines of code. There might be fewer comments, but I believe the result is a lot more readable.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/bQyEF0XqaHo" height="1" width="1"/>]]></content:encoded>
         <category>java</category>
      <feedburner:origLink>http://ericlefevre.net/wordpress/2012/01/27/cleaning-up-test-code/</feedburner:origLink></item>
      <item>
         <title>Spec by Example workshop in London – March 15-16</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/HgbM14VL3uI/</link>
         <description>The best course I’ve attended in my career. I loved that the instructor challenged us to think for ourselves and did not give us the answers straight away - Trond Svensen, SITS</description>
         <author>gojkogojko</author>
         <guid isPermaLink="false">http://gojko.net/?p=2696</guid>
         <pubDate>Wed, 18 Jan 2012 21:15:35 +0000</pubDate>
         <content:encoded><![CDATA[<p><i>&ldquo;The best course I’ve attended in my career. I loved that the instructor challenged us to think for ourselves and did not give us the answers straight away.&rdquo; Trond Svensen, SITS</i></p>
<p>My two-day hands-on Specification by Example workshop is finally coming back to London. Since 2007, more than 2000 people have benefited from this training. The workshop is aimed at testers, business analysts and developers and based on my books Specification by Example and Bridging the Communication Gap. Through facilitated exercises and discussion, you will learn:</p>
<ul>
<li>how to extend specifications with examples to create a single source of truth for testing and development</li>
<li>how to avoid functional gaps and inconsistencies in specifications and tests</li>
<li>how to run specification workshops to facilitate collaboration</li>
<li>good practices for designing specifications with examples and acceptance tests for agile teams</li>
<li>how to create a living documentation system to facilitate change and improve your process long-term</li>
<li>how other teams, from small web startups to large distributed teams in investment banks, apply specification by example in their contexts </li>
</ul>
<p>For more information and to sign up, see <a rel="nofollow" target="_blank" href="http://sbelondon-gojkohd.eventbrite.com/">the event page on EventBrite</a>.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/HgbM14VL3uI" height="1" width="1"/>]]></content:encoded>
         <category>news</category>
      <feedburner:origLink>http://gojko.net/2012/01/18/hands-on-spec-by-example-workshop-in-london-march-15-16/</feedburner:origLink></item>
      <item>
         <title>Find The Test Structure That Fits Your Team</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/61cEqcMjKhw/find-test-structure-that-fits-your-team.html</link>
         <description>&lt;p&gt;A number of recent posts by &lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/2012/01/02/structuring-unit-tests.aspx"&gt;Phil Haack&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://ayende.com/blog/152897/structuring-your-unit-tests-why"&gt;Ayende Rahien&lt;/a&gt;, and &lt;a rel="nofollow" target="_blank" href="http://www.typemock.com/blog/2012/01/11/do-tests-get-too-much-respect/"&gt;Gil Zilberfeld&lt;/a&gt; dealt with the topic of test organization. Each approach has its pros and cons, but neither is a silver bullet. Your (and your team's, project's) context determines which approach is right.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Without aiming to provide an exhaustive list, below are some questions that have influence on test organization:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Is the team in a consulting project where test documentation is required as part of delivery? &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Is it a product team? Is the firm in its early stage or is it mature like Oracle with mature products?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What is the turnover rate of the team? What are the plans for its growth? The team might have all the knowledge in their head, but if it'll double in size in a year, then the communication value of tests could increase.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What is the maturity level of the team? How long have they been working together?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How closely and often do team members collaborate? &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Is there &lt;a rel="nofollow" target="_blank" href="http://www.extremeprogramming.org/rules/collective.html"&gt;collective code ownership&lt;/a&gt;?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How does the team and its customers communicate? Some customers can - and willing to - read code, some need English (Turkish/Hungarian/German/etc.). Some teams have a level of (grown and deserved) trust that just saying the software works is accepted, some need a more formal acceptance and regression process.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Is there proper IDE support for discoverability? Do all people reporting bugs (as tests) have access to that IDE? If not so, how do they find examples of how to write the bug-report test?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Feel free to add more questions in the comments!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096360220196456218-8081312787324671428?l=zsoldosp.blogspot.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/zsoldosp/~4/YIQfRvO8wps" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/61cEqcMjKhw" height="1" width="1"/&gt;</description>
         <author>Peter Zsoldos</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-8096360220196456218.post-8081312787324671428</guid>
         <pubDate>Thu, 12 Jan 2012 19:14:00 +0000</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/zsoldosp/~3/YIQfRvO8wps/find-test-structure-that-fits-your-team.html</feedburner:origLink></item>
      <item>
         <title>Sonar in the news</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/JVJ7vq-rQxo/</link>
         <description>Welcome to the roundup of blog posts and pages that mentioned Sonar last month… Sonar and JaCoCo By Raghu, 1 December 2011 I am a fan (and regular user) of Sonar, a platform to manage code quality. The 2.12 release of Sonar, which happened yesterday, introduced a bunch of new features including Java 7 support [...]</description>
         <author>Olivier GaudinOlivier Gaudin</author>
         <guid isPermaLink="false">http://www.sonarsource.org/?p=5836</guid>
         <pubDate>Wed, 11 Jan 2012 16:29:25 +0000</pubDate>
         <content:encoded><![CDATA[<p>Welcome to the roundup of blog posts and pages that mentioned Sonar last month…<span id="more-5836"></span></p>
<p><a rel="nofollow" target="_blank" href="http://maruhgar.blogspot.com/2011/12/sonar-and-jacoco.html">Sonar and JaCoCo</a><br />
By Raghu, 1 December 2011<br />
 I am a fan (and regular user) of Sonar, a platform to manage code quality.  The 2.12 release of Sonar, which happened yesterday, introduced a bunch of new features including Java 7 support and the availability of Jacoco into Sonar core.</p> 
<p><a rel="nofollow" target="_blank" href="http://www.flex-tutorial.fr/2011/12/05/industrialiser-vos-projets-flex-avec-hudson-maven-sonar-flexpmd-et-flexcpd/">Industrialiser vos projets Flex avec Hudson, Maven, Sonar, FlexPMD et FlexCPD</a><br />
By Fabien Nicollet, 5 December 2011<br />
 Dans le monde Java, il existe de nombreux outils permettant de vérifier l&#8217;intégrité de votre code (tests unitaires) mais aussi pour vous assurer que la qualité de votre code est respectée. Ces outils vous permettent d&#8217;assurer la robustesse des applications que vous créez.</p> 
<p><a rel="nofollow" target="_blank" href="http://blog.schauderhaft.de/2011/12/11/my-testing-and-code-analysis-toolbox/">My Testing and Code Analysis Toolbox</a><br />
By Jens Schauder, 11 December 2011<br />
 Last week we kicked of a “Testing Skill Group” at LINEAS, a group for exchanging knowledge about testing. One question that came up over and over again in various flavors was: What tools are there for testing and analyzing your code? So here is my personal answer for this, in the approximately order I tend to introduce them into projects&#8230;</p> 
<p><a rel="nofollow" target="_blank" href="http://qualilogy.com/code-analysis-tools/open-source-code-legacy/">Open Source &#038; code Legacy</a><br />
By Jean-Pierre FAYOLLE, 18 December 2011<br />
 There are more and more solutions of analysis of code which allow to measure the quality of your applications. Most are sold by software vendors, and we had the opportunity to verify that these solutions are expensive to buy, to implement and to use (Disposable software). In response, the last decade has seen the rise of the Open Source alternative to proprietary software.</p> 
<p><a rel="nofollow" target="_blank" href="http://blog.yoz.sk/2011/12/flex-ant-maven-sonar/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=flex-ant-maven-sonar">Flex + ( Ant | Maven ) + Sonar</a><br />
By Jozef Chutka, 5 December 2011<br />
 The title may sound like there are two possible ways how you can have your source code analyzed and published to sonar, but you better do not rejoice prematurely. After spending couple of hours trying to figure out how to make it work using ant I may have hit some nice articles, however sonar-ant-task seems to have major issues with sonar version 2.8. The solution is maven!</p> 
<img src="http://feeds.feedburner.com/~r/Sonar/~4/cKouveNoOYM" height="1" width="1"/><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/JVJ7vq-rQxo" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://feedproxy.google.com/~r/Sonar/~3/cKouveNoOYM/</feedburner:origLink></item>
   </channel>
</rss><!-- fe2.pipes.sp1.yahoo.com compressed/chunked Fri Feb 10 13:04:55 UTC 2012 -->

