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

<channel>
	<title>blog.codecentric.de &#187; Fabian Lange</title>
	<atom:link href="http://blog.codecentric.de/en/author/fla/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.codecentric.de</link>
	<description>Ein Blog von und über die codecentric GmbH</description>
	<lastBuildDate>Tue, 09 Mar 2010 10:38:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Java Specialist Master Course Field Report</title>
		<link>http://blog.codecentric.de/en/2010/03/erfahrungsbericht-java-specialist-master-course/</link>
		<comments>http://blog.codecentric.de/en/2010/03/erfahrungsbericht-java-specialist-master-course/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 09:11:19 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[codecentric]]></category>
		<category><![CDATA[meet the experts]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3169</guid>
		<description><![CDATA[Last week I had the pleasure attended Heinz Kabutz Java Specialists Master course to sharpen my Java skills. Java Champion Heinz, is a great trainer who manages to combine anecdotes, hard facts and deep Java knowledge with engaging exercises to a well done course. The scope was the whole spectrum of Java, but focusing on [...]]]></description>
			<content:encoded><![CDATA[<p><p>Last week I had the pleasure attended Heinz Kabutz <a href="http://www.javaspecialists.eu/courses/master.jsp">Java Specialists Master course</a> to sharpen my Java skills. <a href="https://java-champions.dev.java.net/content/corechampions.html">Java Champion Heinz</a>, is a great trainer who manages to combine anecdotes, hard facts and deep Java knowledge with engaging exercises to a well done course. The scope was the whole spectrum of Java, but focusing on the details you normally do not use, or know how to use. Some of the material he already published as part of <a href="http://www.javaspecialists.eu/archive/archive.jsp">his newsletters</a>, which are read all around the world.</p>
<p>Let me share my impressions on the course with you in this day by day review&#8230;<span id="more-3169"></span></p>
<p><strong>Day 1</strong></p>
<p>The course started with discussing Threads, and how we should use them. Quite a complex topic for early morning. We played with a ThreadGroup that became a custom Thread pool. <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadGroup.html">ThreadGroup</a> is not the best designed class. Heinz called it a child&#8217;s drawing from the early years of Java. I found using the <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/package-summary.html">java.util.concurrent Locks</a> really easy. Finally gone are the days of <em>synchronized()</em>. Before the lunch break, Heinz showed us his laws on concurrency, which he also presented in an abbreviated form at our <a href="http://www.meettheexperts.de/static/pdf/praesentationen/2009-06-26-performance/meet-the-experts-the-secrets-of-concurrency.pdf">meet the experts &#8211; performance event</a>. We came across this code:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #006600; font-weight: bold;">boolean</span> running = <span style="color: #006600; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> dojob<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000;  font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>running<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// do something useful</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> shutdown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  running = <span style="color: #006600; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>When running in a Server VM (with java -server), this might never stop, due to optimizing running would be inlined by HotSpot with being true all the time. To avoid this you would have to make it <em>volatile</em>. Because I asked about debugging, we tried stopping there and the debugger showed us: <em>running = false</em>. Still the code continued to executed, because the debugger sees the correct field value, but the running code doesn&#8217;t. It gets more interesting with this code:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> doJob<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-weight: bold;">boolean</span> myRunning = running<span style="color: #339933;">;</span>
  <span style="color: #000000;  font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>running<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// do something useful</span>
    myRunning = running<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>When looking with the debugger we saw this:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">running = <span style="color: #006600; font-weight: bold;">false</span><span style="color: #339933;">;</span> myrunning = <span style="color: #006600; font-weight: bold;">true</span><span style="color: #339933;">;</span></pre></div></div>

<p>however the loop still looped. But when forcing the line to execute via F7, code terminated. This can be a nightmare to debug, so it is good to know what you should take care of when writing multithreaded programs.</p>
<p>Also something to remember is to check</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Thread</span>.<span style="color: #006633;">interrupted</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">InterruptedException</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>as first code in all methods declaring an <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/InterruptedException.html">InterruptedException</a>.</p>
<p>We learned about <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/CompletionService.html">CompletionService</a> looks like an interesting interface for mass processing of asynchronous work. So, who needs closures? <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Day 2</strong></p>
<p>We started with <a href="http://java.sun.com/j2se/1.4.2/docs/guide/nio/">Java new (yet another new?) IO</a>, which brings quite a lot of new features, but somehow is not as widely used as it should be. One reason might be that it can easily get much more complicated to use. Perhaps one should try easy examples before writing an Async nonblocking server (which you can after attending the course <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #003399; font-weight: bold;">FileChannel</span> fc = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">RandomAccessFile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.txt&quot;</span>, <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getChannel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">MappedByteBuffer</span> buffer = fc.<span style="color: #006633;">map</span><span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">FileChannel.<span style="color: #006633;">MapMode</span></span>.<span style="color: #006633;">READ_ONLY</span>, <span style="color: #cc66cc;">0</span>, fc.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Second half was on understanding Java memory management. This of course is less often really applicable, but understanding it is quite critical to solving problems. We had a look at stuff like caching and pooling, and why this creates leaks or loitering objects. This reminds me of my older <a href="http://blog.codecentric.de/2009/08/jsp-tag-pooling-memory-leaks/">post about tag pooling</a> in servlet containers. I never understood really why tags are pooled, and even worse, do not have proper lifecycle methods to detect this when using an IDE. We used <a href="https://visualvm.dev.java.net/">jVisualVm</a> and <a href="http://www.javaperformancetuning.com/tools/hpjmeter/index.shtml">HPjMeter</a> to watch the GC at work.</p>
<p><strong>Day 3</strong></p>
<p>On day 3, I learned some interesting inner mechanics of Collection classes I did not use before (like <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html">PriorityQueue</a>), as well as some nasty tricks on classloading. Heinz explained<a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Proxy.html"> java.lang.reflect.Proxies</a> really well, and once understood, using them was not that difficult. Actually the best instruction is in the JavaDoc, but you must know how to read it:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">Foo f = <span style="color: #009900;">&#40;</span>Foo<span style="color: #009900;">&#41;</span> <span style="color: #003399; font-weight: bold;">Proxy</span>.<span style="color: #006633;">newProxyInstance</span><span style="color: #009900;">&#40;</span>
		Foo.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getClassLoader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">Class</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span> Foo.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #009900;">&#125;</span>,
		<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">InvocationHandler</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399; font-weight: bold;">Object</span> invoke<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Object</span> foo, <span style="color: #003399; font-weight: bold;">Method</span> method, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> arguments<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399; font-weight: bold;">Throwable</span> <span style="color: #009900;">&#123;</span>
		    <span style="color: #000000; font-weight: bold;">return</span> method.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>foo, arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>In the afternoon we discussed about Exceptions, and I made up my mind on checked vs unchecked exceptions. Personally I will use unchecked exceptions for developer/programming errors. Catching them is not required, app may crash &#8211; Developers should fix this. However everything which is related to the Environment the app runs ins should work with checked exceptions. Ideally they provide sensible information, not just a message. Also quite important: Just rethrow Exceptions! Found yourself not able to decide what to do with an InterruptedException? Well just rethrow it <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  And handle it in the Thread code (calling interrupted() and exiting a loop). I never did that often, because I don&#8217;t like polluting my method signature, but it should be considered. Do not be afraid of retrowing Exceptions.</p>
<p><strong>Day 4</strong></p>
<p>The last day of the course started with a tough performance optimization exercise. The tough part was that we were not allowed to improve the code until we had all the numbers written down and eliminated any overhead of testing code. I especially liked this, because it thought me how eager I am sometimes fixing issues that I forget proving them first. As kind of side note, we discussed the various modes the JVM can run in and found out how slow java -Xint is.  After having sped up the code down to 10% of its initial runtime, we moved on to Date and Time, which was a bit short chapter. I can recommend using <a href="http://joda-time.sourceforge.net/">jodatime</a> and <a href="http://site.icu-project.org/">icu4j</a>, and try to stay away from java.util.Date. Before the end of the course we covered logging including some nifty tricks. The most important lesson about logging is that you need to use code guards (which was not new to me, but I like the term, I never heard before):</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>log.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  log.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span>complexObject.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> + expensive.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Wrap-Up</strong></p>
<p>I can wholeheartedly recommend this course. 4 days packed with lots of information and exercises that are well done so that they are a challenge for every participant. You should have worked with Java already some time. This is definitely not a beginners course. You will rush past topics which you can only grasp when you have experienced the problem before. I can also recommend taking this training in German, because Heinz has a really funny accent <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2010/03/erfahrungsbericht-java-specialist-master-course/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>codecentric playing at german board game championship</title>
		<link>http://blog.codecentric.de/en/2010/02/codecentric-bei-der-deutschen-brettspielemeisterschaft/</link>
		<comments>http://blog.codecentric.de/en/2010/02/codecentric-bei-der-deutschen-brettspielemeisterschaft/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 21:17:56 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3119</guid>
		<description><![CDATA[&#8220;Dr. codecentric und seine kranken Pfleger&#8221;, (codecentric, M.D. and his sick attendants) the codecentric board game team, Andreas Ebbert-Karroum, Torsten Rodemann, Marc Clemens and Fabian Lange (left to right) competed in Dinslakenhighly motivated for the qualification for the national board game championship this Saturday. After having been quite successful last year at our first attempt, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.codecentric.de/wp-content/uploads/2010/02/Dr_codecentric_und_seine_kranken_Pfleger.png" rel="lightbox"><img class="alignright size-full wp-image-3147" style="padding: 10px;" title="Dr_codecentric_und_seine_kranken_Pfleger" src="http://blog.codecentric.de/wp-content/uploads/2010/02/Dr_codecentric_und_seine_kranken_Pfleger.png" alt="" width="297" height="183" /></a>&#8220;Dr. codecentric und seine kranken Pfleger&#8221;, (codecentric, M.D. and his sick attendants) the codecentric board game team, Andreas Ebbert-Karroum, Torsten Rodemann, Marc Clemens and Fabian Lange (left to right) competed in Dinslakenhighly motivated for the qualification for the national board game championship this Saturday. After having been quite successful last year at our first attempt, our expectations were high, despite the lack of proper training.</p>
<p>Every player had to play one round of each of the games: <a href="http://www.amazon.de/gp/product/B0010B5472?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B0010B5472">Agricola</a>, a pretty complex strategy game, <a href="http://www.amazon.de/gp/product/B0014LETVU?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B0014LETVU">Stoneage</a>, a round based resource gathering game, <a href="http://www.amazon.de/gp/product/B001EWE4EG?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B001EWE4EG">Dominion</a>, an interesting card game, in which players compile a custom card deck according to the available cards and their strategy, and <a href="http://www.amazon.de/gp/product/B0007M18XY?ie=UTF8&amp;tag=exfuror&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B0007M18XY">Heckmeck am Bratwurmeck</a>, a pretty simple dice-rolling game, which trains you calculating probabilities.<br />
<span id="more-3119"></span></p>
<ul>
<li> First round of the Tournament, sporting Dominion went really well for our Team. 2 first places and a second one were great. Only one game was lost due to the high amount of curses played by witches.</li>
<li>Agricola strained our nerves for over two hours. It was pretty intense, and we were unable to oppose our co-players, who were well prepared. We tried both, the farmer and rancher strategy, but only achieved a second, 2 third and a fourth place.</li>
<li>After a short snack-break, we had some relaxing dice rolling activities with Heckmeck am Bratwurmeck. But it seems gambling is not our profession. 3 times a fourth place was really sub-par. The other third place could not compensate those losses.</li>
<li>Last game of the day was Stoneage. 3 of us tried the &#8220;starvation&#8221; strategy, which was working fairly well, but only brought us 2 third and a fourth place. The one victory was done with some more mainstream farming and building strategy. Overheard discussions tought us that most players already have overcome &#8220;starvation&#8221; and came up with something better.</li>
</ul>
<p>Despite the not very successful results, we had a fun day! And lots of motivation for the coming year. Perhaps we should then run a board game training bootcamp? <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2010/02/codecentric-bei-der-deutschen-brettspielemeisterschaft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Looking forward to the Java Specialist Master Course</title>
		<link>http://blog.codecentric.de/en/2010/02/vorschau-auf-den-java-specialist-master-kurs/</link>
		<comments>http://blog.codecentric.de/en/2010/02/vorschau-auf-den-java-specialist-master-kurs/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 15:25:28 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[specialist master course]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3089</guid>
		<description><![CDATA[I will be attending the course by Dr. Heinz Kabutz next week from 2nd-5th of March in Düsseldorf.
I have pretty high expectations, as I already read his newsletter since quite some time and also my impressions of Heinz, when he gave his talk at our meet the experts, were very positive. He really knows all [...]]]></description>
			<content:encoded><![CDATA[<p>I will be attending the <a href="http://meettheexperts.de/jsp/schulungen/schulungen.jsp">course by Dr. Heinz Kabutz</a> next week from 2nd-5th of March in Düsseldorf.</p>
<p>I have pretty high expectations, as I already read his newsletter since quite some time and also my impressions of Heinz, when he gave his talk at our meet the experts, were very positive. He really knows all the nasty details about Java, and I hope I can get some of those out of his and into my brain. <a href="http://www.javaspecialists.eu/courses/master.jsp">The course promises &#8220;Extreme Java&#8221;</a>. I am looking forward to very esotheric subtleties without any practical value. And of course to many caveates that you indeed would find in everyday work.</p>
<p>I am also looking forward to meeting other Java geeks to exchange knowledge and have a good week. Will you be there?</p>
<p>(note that the course is in German)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2010/02/vorschau-auf-den-java-specialist-master-kurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hot Coffee and Green Builds</title>
		<link>http://blog.codecentric.de/en/2010/02/frischer-kaffee-und-grune-builds/</link>
		<comments>http://blog.codecentric.de/en/2010/02/frischer-kaffee-und-grune-builds/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 12:31:26 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[eXtreme Programming]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[coffee]]></category>
		<category><![CDATA[continuous integration]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=3001</guid>
		<description><![CDATA[Automated builds and tests already have a long tradition at codecentric, but we never managed to put up build radiators in our new offices. Till today. Developers could have looked up the status in the past, but getting it pushed to you while enjoying a hot coffee or tea helps. This is because when you [...]]]></description>
			<content:encoded><![CDATA[<p>Automated builds and tests already have a long tradition at codecentric, but we never managed to put up build radiators in our new offices. Till today. Developers could have looked up the status in the past, but getting it pushed to you while enjoying a hot coffee or tea helps. This is because when you forget checking for your build status it is most likely red.<a href="http://blog.codecentric.de/wp-content/uploads/2010/02/coofeeandbuilds.png" rel="lightbox"><img src="http://blog.codecentric.de/wp-content/uploads/2010/02/coofeeandbuilds.png" alt="" title="coofeeandbuilds" width="468" height="276" class="aligncenter size-full wp-image-3002" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2010/02/frischer-kaffee-und-grune-builds/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Retrospective on 2009</title>
		<link>http://blog.codecentric.de/en/2010/01/retrospektive-2009/</link>
		<comments>http://blog.codecentric.de/en/2010/01/retrospektive-2009/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:38:03 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[meet the experts]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=2810</guid>
		<description><![CDATA[2009 has passed a few days by now, so I think it would be appropriate to look back on what has happened last year. Just recently I said to somebody: &#8220;Well I am with codecentric for only a year and a half so far&#8221;, but in fact we did quite a lot in 2009. So [...]]]></description>
			<content:encoded><![CDATA[<p>2009 has passed a few days by now, so I think it would be appropriate to look back on what has happened last year. Just recently I said to somebody: &#8220;Well I am with codecentric for only a year and a half so far&#8221;, but in fact we did quite a lot in 2009. So there is a lot to look back. Like the <a href="http://blog.codecentric.de/en/2009/">85 blogposts</a> published. And there is a lot to look forward to. I am very proud of our achievements and our spirit.<span id="more-2810"></span></p>
<p><strong>January</strong></p>
<p>2009 was kicked off by moving to our <a href="http://www.codecentric.de/de/unternehmen/news/News_Amtsgericht_Ohligs.html">beautiful premises at the old courthouse</a> in Solingen Ohligs. We left behind the old offices in the Gründer und Technologiezentrum where codecentric dwelt well for 4 years.</p>
<p><strong>February</strong></p>
<p>Our partner dynatrace awarded us with the &#8220;Partner of the Year&#8221; award for our strong relationship and making most dynatrace sales. Partnership with dynatrace has always been of great importance for both parties. Also during February our team &#8220;Dr. codecentric und seine kranken Pfleger&#8221;  missed the finals of the German Board Game Championship by just one position. We try better this year <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>April</strong></p>
<p>Dr. Heinz Kabutz offers his excellent <a href="http://www.javaspecialists.eu/courses/master.jsp">Java Specialist Master course</a> in Germany exlusively on the codecentric webpage.</p>
<p><strong>June</strong></p>
<p>Our first &#8220;<a href="http://meettheexperts.de/">Meet The Experts</a>&#8221; took place. The topic &#8220;Performance&#8221; is strongly tied to the roots of codecentric and presented by first class experts. The success of the event was overwhelming proving our ideas more than correct. Its really great to have experts in talking range, rather than on just listening to them as you can do on big conferences. Meet the Experts was continued with &#8220;Agility&#8221; and &#8220;Architecture&#8221; events and will be continued 2010.</p>
<p><strong>July</strong></p>
<p>&#8220;<a href="http://blog.codecentric.de/en/2009/07/codecentric-coding-night/">codecentric coding night</a>&#8221; was the name of our experiment. Many codecentricer camped at the office for the weekend and produced a time tracking system using Spring Web MVC as technology and a lightweight Scrum as process. On Sunday afternoon, when the experiment ended, we knew that we learned a lot on technology and process, but unforunately did not finish our product as planned. But we will for sure start another coding night soon&#8230; perhaps using Grails?</p>
<p><strong>November</strong></p>
<p>codecentric <a href="http://www.codecentric.de/de/unternehmen/news/gewinner-start-award-nrw-2009">won the annual Start Award</a> for being the most successful startup. Fantastic!  There was a camera team in our offices a few weeks before the final round, and they produced a nice promotional clip that I would like to share with you.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="580" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/08Dz6BiKuMw&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="580" height="360" src="http://www.youtube-nocookie.com/v/08Dz6BiKuMw&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Have a happy and successful year 2010!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2010/01/retrospektive-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#scrumday in düsseldorf</title>
		<link>http://blog.codecentric.de/en/2009/12/scrumday-in-dusseldorf/</link>
		<comments>http://blog.codecentric.de/en/2009/12/scrumday-in-dusseldorf/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 21:32:18 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Boris Gloger]]></category>
		<category><![CDATA[meet the experts]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=2724</guid>
		<description><![CDATA[scrumdays are local smaller sized events where SCRUM communities can meet and exchange their experience. As we are also very active in the agile community, codecentric of course had also a booth at todays scrumday in Düsseldorf. From the talks I was able to pick up two trending topics, which are quite interesting. They are [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.codecentric.de/wp-content/uploads/2009/12/scrumday-01a.jpg" alt="scrumday düsseldorf" title="scrumday düsseldorf" width="200" height="150" class="alignleft size-full wp-image-2731" style="padding:10px"/><a href="http://www.scrum-day.de/">scrumdays</a> are local smaller sized events where SCRUM communities can meet and exchange their experience. As we are also very active in the agile community, codecentric of course had also a booth at todays scrumday in Düsseldorf. From the talks I was able to pick up two trending topics, which are quite interesting. They are not dealing with what scrum is and why it is great.<br />
<span id="more-2724"></span><br />
They were talking about adaptions to the process to make it fit for large and small companies, which is a bit worrying, because I think the idea is &#8220;plan do check act&#8221; or &#8220;apply, inspect, adapt&#8221;. So please try to do SCRUM by the book for at least 3 iterations (the standard length <a href="http://borisgloger.com/">Boris Gloger</a> recommends <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) before adapting the process. I know its hard. But you really should try this to get the full effect. The presentations should not give the impression that you have to do scrum wrong to get it working correctly. I think that should have been made clearer.</p>
<p>The second topic is much more interesting: Ok, we have Scrum, but how does this affect our organization? Do we need different management levels? Do we need different payment models? What motivates people to work in a SCRUM environment?<br />
My <a href="http://www.codecentric.de/de/unternehmen/team/solingen/SeniorConsultants/AndreasEbbertKarroum/index.html">colleague Andreas</a> talked about the science behind motivation and why SCRUM is really good at motivating people. I can really recommend his talk, so I included it below from slideshare. Also <a href="http://chcrudy.wordpress.com/">Christiane Philipps</a> gave some interesting insights. I think these ideas need to be explored further, because SCRUM reveals people issues which traditional models try to suppress.</p>
<p>However the event as such was a bit disappointing. It felt like the main audience were the speakers presenting each other and to the exhibitors. Not that many &#8220;regular guests&#8221;. Time between sessions was spot on, but the sessions itself felt a bit short with only 45 minutes. I think 60 would have been better.<br />
I personally liked more our meet the experts instead, even though (or perhaps because?) there is just one track, excellent speakers and a much more familiar atmosphere in our premises rather than the anonymous hotel lobby, which is not that suited for having interesting discussions.</p>
<p>As promised here Andreas slides. All credits for them please attribute to him <img src='http://blog.codecentric.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div id="__ss_2635198" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Macht Scrum zufriedener?" href="http://www.slideshare.net/AndreasEK/macht-scrum-zufriedener">Macht Scrum zufriedener?</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=machtscrumzufriedener-091202142645-phpapp02&amp;stripped_title=macht-scrum-zufriedener" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=machtscrumzufriedener-091202142645-phpapp02&amp;stripped_title=macht-scrum-zufriedener" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/AndreasEK">Andreas Ebbert-Karroum</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2009/12/scrumday-in-dusseldorf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meet The Experts Architecture &#8211; Open Space: Managing the JAR Chaos</title>
		<link>http://blog.codecentric.de/en/2009/11/meet-the-experts-architektur-open-space-verwaltung-des-jar-chaos/</link>
		<comments>http://blog.codecentric.de/en/2009/11/meet-the-experts-architektur-open-space-verwaltung-des-jar-chaos/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 16:58:49 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[meet the experts]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=2718</guid>
		<description><![CDATA[This post shall sum up the results from our fruitful discussion on friday evenig. The idea for the open space discussion was sparked by Stefan Zörner who talked about modularity and what happens when you have no control over modularity. This post will not try to repeat the discussion but merely conserve the results:


OSGi is [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.codecentric.de/wp-content/uploads/2009/11/mte-architektur-jar-openspace.jpg" alt="mte-architektur-jar-openspace" title="mte-architektur-jar-openspace" width="200" height="150" class="alignright size-full wp-image-2721" style="padding:10px"/>This post shall sum up the results from our fruitful discussion on friday evenig. The idea for the open space discussion was sparked by Stefan Zörner who talked about modularity and what happens when you have no control over modularity. This post will not try to repeat the discussion but merely conserve the results:<br />
<span id="more-2718"></span></p>
<ul>
<li>OSGi is a great module concept that is missing in pure Java. It is somewhat sad that the average enterprise developer will not be able to use it for a while. The main problem seems to be the migration and interoperability of existing non OSGi code, and the changed runtime environment, which is new for the standard operations department.</li>
<li>You shall make many small modules for your own software. There is a benefit in having them although it cost slightly more work to manage them (for example in eclipse).</li>
<li>It is mandatory to have somebody watching over external dependencies.</li>
<li>Many third party dependencies cause various troubles: Classloading, legal, filesize, deployment time, runtime memory</li>
<li>Maven or Ivy do not solve the problem but they help a lot</li>
<li>Evaluate the usage of third party code on a regular basis. Consider removing dependencies that are only used for very few code</li>
</ul>
<p>Thanks to all attendees. Over twenty people joining the discussion shows that there is a need for good ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2009/11/meet-the-experts-architektur-open-space-verwaltung-des-jar-chaos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mule+CXF struggle with quoted encodings</title>
		<link>http://blog.codecentric.de/en/2009/11/mulecxf-haben-probleme-mit-encodings-in-anfuhrungszeichen/</link>
		<comments>http://blog.codecentric.de/en/2009/11/mulecxf-haben-probleme-mit-encodings-in-anfuhrungszeichen/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 15:57:41 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=2713</guid>
		<description><![CDATA[After upgrading Java to version 1.6.0.17 our CXF based webservices running on Mule ESB did not work anymore.


Caused by: javax.xml.stream.XMLStreamException: java.io.UnsupportedEncodingException: &#34;utf-8&#34;
	at com.ctc.wstx.stax.WstxOutputFactory.createSW&#40;WstxOutputFactory.java:257&#41;
	at com.ctc.wstx.stax.WstxOutputFactory.createXMLStreamWriter&#40;WstxOutputFactory.java:124&#41;
	at org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage&#40;StaxOutInterceptor.java:67&#41;
	... 25 more
Caused by: java.io.UnsupportedEncodingException: &#34;utf-8&#34;
	at sun.nio.cs.StreamEncoder.forOutputStreamWriter&#40;StreamEncoder.java:42&#41;
	at java.io.OutputStreamWriter.&#60;init&#62;&#40;OutputStreamWriter.java:83&#41;
	at com.ctc.wstx.stax.WstxOutputFactory.createSW&#40;WstxOutputFactory.java:253&#41;
	... 27 more

That looks strange, because utf-8 should be a supported encoding. But a closer look reveals that the encoding passed contains the [...]]]></description>
			<content:encoded><![CDATA[<p>After upgrading Java to version 1.6.0.17 our CXF based webservices running on Mule ESB did not work anymore.<br />
<span id="more-2713"></span></p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">Caused by: javax.<span style="color: #006633;">xml</span>.<span style="color: #006633;">stream</span>.<span style="color: #006633;">XMLStreamException</span>: java.<span style="color: #006633;">io</span>.<span style="color: #003399; font-weight: bold;">UnsupportedEncodingException</span>: <span style="color: #0000ff;">&quot;utf-8&quot;</span>
	at com.<span style="color: #006633;">ctc</span>.<span style="color: #006633;">wstx</span>.<span style="color: #006633;">stax</span>.<span style="color: #006633;">WstxOutputFactory</span>.<span style="color: #006633;">createSW</span><span style="color: #009900;">&#40;</span>WstxOutputFactory.<span style="color: #006633;">java</span>:<span style="color: #cc66cc;">257</span><span style="color: #009900;">&#41;</span>
	at com.<span style="color: #006633;">ctc</span>.<span style="color: #006633;">wstx</span>.<span style="color: #006633;">stax</span>.<span style="color: #006633;">WstxOutputFactory</span>.<span style="color: #006633;">createXMLStreamWriter</span><span style="color: #009900;">&#40;</span>WstxOutputFactory.<span style="color: #006633;">java</span>:<span style="color: #cc66cc;">124</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">cxf</span>.<span style="color: #006633;">interceptor</span>.<span style="color: #006633;">StaxOutInterceptor</span>.<span style="color: #006633;">handleMessage</span><span style="color: #009900;">&#40;</span>StaxOutInterceptor.<span style="color: #006633;">java</span>:<span style="color: #cc66cc;">67</span><span style="color: #009900;">&#41;</span>
	... <span style="color: #cc66cc;">25</span> more
Caused by: java.<span style="color: #006633;">io</span>.<span style="color: #003399; font-weight: bold;">UnsupportedEncodingException</span>: <span style="color: #0000ff;">&quot;utf-8&quot;</span>
	at sun.<span style="color: #006633;">nio</span>.<span style="color: #006633;">cs</span>.<span style="color: #006633;">StreamEncoder</span>.<span style="color: #006633;">forOutputStreamWriter</span><span style="color: #009900;">&#40;</span>StreamEncoder.<span style="color: #006633;">java</span>:<span style="color: #cc66cc;">42</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">io</span>.<span style="color: #003399; font-weight: bold;">OutputStreamWriter</span>.<span style="color: #339933;">&lt;</span>init<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">OutputStreamWriter</span>.<span style="color: #006633;">java</span>:<span style="color: #cc66cc;">83</span><span style="color: #009900;">&#41;</span>
	at com.<span style="color: #006633;">ctc</span>.<span style="color: #006633;">wstx</span>.<span style="color: #006633;">stax</span>.<span style="color: #006633;">WstxOutputFactory</span>.<span style="color: #006633;">createSW</span><span style="color: #009900;">&#40;</span>WstxOutputFactory.<span style="color: #006633;">java</span>:<span style="color: #cc66cc;">253</span><span style="color: #009900;">&#41;</span>
	... <span style="color: #cc66cc;">27</span> more</pre></div></div>

<p>That looks strange, because utf-8 should be a supported encoding. But a closer look reveals that the encoding passed contains the quotes. And that does not work. According to the specification quotes are allowed around the charset, but that is not very common.<br />
The quotes were <a href="http://fisheye5.cenqua.com/changelog/jax-ws-sources?cs=MAIN:jitu:20070518012921">introduced in JAX-WS 2.1.2</a>.</p>
<p>luckily the problem is easy to patch when you know this:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>encoding <span style="color: #339933;">!</span>= <span style="color: #006600; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> encoding.<span style="color: #006633;">startsWith</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> encoding.<span style="color: #006633;">endsWith</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  encoding = encoding.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, encoding.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> - <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>insert this code at two places:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">cxf</span>.<span style="color: #006633;">interceptor</span>.<span style="color: #006633;">StaxInInterceptor</span>#handleMessage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
after
<span style="color: #003399; font-weight: bold;">String</span> encoding = <span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span><span style="color: #009900;">&#41;</span>message.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>Message.<span style="color: #006633;">ENCODING</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
and
org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">cxf</span>.<span style="color: #006633;">interceptor</span>.<span style="color: #006633;">StaxInInterceptor</span>#getEncoding<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
before
<span style="color: #000000; font-weight: bold;">return</span> encoding<span style="color: #339933;">;</span></pre></div></div>

<p>The patched class needs to be on the classpath before the original one. When doing so, the webservices worked again. A small unit test verifies this behavior and ensures that after a potential Mule/CXF upgrade the quoted encodings work.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2009/11/mulecxf-haben-probleme-mit-encodings-in-anfuhrungszeichen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#devoxx 09: map&amp;reduce and closures</title>
		<link>http://blog.codecentric.de/en/2009/11/devoxx-09-mapreduce-und-closures/</link>
		<comments>http://blog.codecentric.de/en/2009/11/devoxx-09-mapreduce-und-closures/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:22:24 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[devoxx]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=2706</guid>
		<description><![CDATA[A hot topic here at the Devoxx were the upcoming Java editions with their features and changes in the language syntax. While it is nice that you will be able to switch() on Strings, have a modularized platform and other cool stuff, one thing is a bit odd: the hype Closures get. Java 7 will [...]]]></description>
			<content:encoded><![CDATA[<p>A hot topic here at the Devoxx were the upcoming Java editions with their features and changes in the language syntax. While it is nice that you will be able to switch() on Strings, have a modularized platform and other cool stuff, one thing is a bit odd: the hype <a href="http://en.wikipedia.org/wiki/Closure">Closures</a> get. Java 7 will be delayed mainly by this. But what is the hype?<br />
<span id="more-2706"></span></p>
<blockquote><p>Closures are tricky to explain. I am not going to try it. But it is basically a piece of code that gets its own life. Closures can reference state that is no longer existing outside their scope.</p></blockquote>
<p>Closures are neat. no doubt. I like programming with them in JavaScript. And I was pretty much attracted by <a href="http://clojure.org">Clojure</a> when Howard Lewis Ship demoed it yesterday in his session. When talking about languages like Clojure it is crystal clear that this is a new language; it comes with its very own concepts you need to understand before you can develop. Knowing how to develop in OO Java does not help for developing in Clojure, even though it has interop with Java. I do wonder where Java is heading with adding closures. The average Java developer does not understand it, or even when he does, has no need for it. You need a different mental model to successfully implement this.</p>
<p>This new model is <a href="http://en.wikipedia.org/wiki/MapReduce">map&amp;reduce</a>. Well, ok, map and reduce are not the mental model behind Clojure, but understanding it allows developing in Java and using closures efficiently. Map&amp;reduce was almost in every session, and it seems to be the answer to the scaling question. It simplifies a lot, because it only works when you simplify. To quote Gregor Hohpe: &#8220;if we would have rebuilt a relational database, just to make it faster, we would have failed&#8221;. This is so true. The inherent complexity of an relational model / database does not get any faster. If it would be possible, Oracle certainly would have done this already.</p>
<p>So we have to simplify, but how? Treat data as key value pairs, like in the good old Cobol times. Dump relations, what makes them important? They just cause troubles.</p>
<p>When you have made it to this with you mental transition you are ready to go with any language. With or without closures. you can do map and reduce and paralleliz as you like. The link between those is that you accept to handle one item at a time, you don&#8217;t have global state or side effects, and you invoke your closures as workers on data which return results.</p>
<p>Gregor showed a few patterns they apply at Google. I especially liked Sawzall, which seems not to be open sourced by Google yet. It is a nice descriptive and concise calculation instruction per data item. Its actually pretty much a single closure:</p>
<pre>errorcount table sum of int
--------
if contains input 'error'
  emit errorcount &lt;- 1</pre>
<p>It is basically a call to think outside the box. We cannot solve problems without, because we cannot improve existing solutions anymore. They are highly optimized. We need something new to solve our challenges.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2009/11/devoxx-09-mapreduce-und-closures/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>codecentric Crew visiting #Devoxx 2009</title>
		<link>http://blog.codecentric.de/en/2009/11/codecentric-crew-auf-der-devoxx-2009/</link>
		<comments>http://blog.codecentric.de/en/2009/11/codecentric-crew-auf-der-devoxx-2009/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 16:53:20 +0000</pubDate>
		<dc:creator>Fabian Lange</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.codecentric.de/?p=2699</guid>
		<description><![CDATA[As every year, codecentric Developers are attending the Devoxx.  Devoxx in Antwerp is among the top conferences for Java in Europe, known for its hand picked Speakers and excellent topics. No surprise that the depicted 7 gents in codecentric Shirts did not want to miss this conference.

Already during the fist keynote, #devoxx grew to a [...]]]></description>
			<content:encoded><![CDATA[<p>As every year, codecentric Developers are attending the Devoxx.  Devoxx in Antwerp is among the top conferences for Java in Europe, known for its hand picked Speakers and excellent topics. No surprise that the depicted 7 gents in codecentric Shirts did not want to miss this conference.</p>
<p><img class="aligncenter size-full wp-image-2703" title="codecentric_at_devoxx" src="http://blog.codecentric.de/wp-content/uploads/2009/11/codecentric_at_devoxx.png" alt="codecentric_at_devoxx" width="548" height="411" /><span id="more-2699"></span></p>
<p>Already during the fist keynote, <a href="http://twitter.com/#search?q=%23devoxx">#devoxx</a> grew to a trending topic on twitter. Partially due to the still working wifi, which is withstanding the enormous activity quite well.</p>
<p>Antwerp and the Devoxx crew offer a great sideshow as well. We have our traditional steak dinner, Belgium beer and the sponsored  <a href="http://www.imdb.com/title/tt1190080/">2012</a> movie here at the Metropolis cinema, where also all the sessions and the exhibition take place.</p>
<p>I am pretty sure we will have one or another post on interesting sessions or topics as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.codecentric.de/en/2009/11/codecentric-crew-auf-der-devoxx-2009/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
