<?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>dow.ngra.de &#187; meme</title>
	<atom:link href="http://dow.ngra.de/category/meme/feed/" rel="self" type="application/rss+xml" />
	<link>http://dow.ngra.de</link>
	<description>no buzzwords allowed</description>
	<lastBuildDate>Wed, 04 Aug 2010 13:19:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to sneak easter eggs past the pointy haired boss</title>
		<link>http://dow.ngra.de/2009/04/15/how-to-sneak-easter-eggs-past-the-pointy-haired-boss/</link>
		<comments>http://dow.ngra.de/2009/04/15/how-to-sneak-easter-eggs-past-the-pointy-haired-boss/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 10:22:14 +0000</pubDate>
		<dc:creator>Toomas Römer</dc:creator>
				<category><![CDATA[humour]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[opinion]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=867</guid>
		<description><![CDATA[I&#8217;m part of a small team that is developing a cool Java product. We&#8217;ve been afloat for more than a year and we&#8217;re doing better every month. We&#8217;ve grown quite a bit during this time. There used to be only one developer, then I joined the team and now we already have 4 devs.
Until now [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m part of a small team that is developing a cool <a href="http://www.zeroturnaround.com/javarebel/">Java product</a>. We&#8217;ve been afloat for more than a year and we&#8217;re doing better every month. We&#8217;ve grown quite a bit during this time. There used to be only one developer, then I joined the team and now we already have 4 devs.</p>
<p>Until now we&#8217;ve got away with most of the jokes we&#8217;ve pulled but we have matured over the period and we&#8217;re not the same young naive happy hackers anymore (right!). We still do like to throw a joke in every now and then.</p>
<p>We released a XML configuration file schema with our last product release and we had to pick a schema location for that. Remembering the <a href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">Mozilla Ghostbusters reference</a> we also had to reference something. And so we did.</p>
<p>But last week we got an email from our<a href="http://en.wikipedia.org/wiki/Pointy_Haired_Boss"> pointy haired boss</a>. He had made a memo with 5 points about the documentation we have. The last point read: <em>Why is there an <strong>alderaan</strong> in the namespace? It should be our product name!</em></p>
<p>I guess this marks a landmark in our small team, we&#8217;re not small anymore and we&#8217;ll have to figure out a way to keep the pointy haired occupied with something (Google Analytics usually does the trick). Luckily for us, we could still play the founder card, but later we may not be so lucky. What jokes have you managed to sneak by your boss and how did you hide them?</p>
<p>PS. We did not have to change our schema but it came quite close. </p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/04/15/how-to-sneak-easter-eggs-past-the-pointy-haired-boss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caricature: JavaRebel winning the JOLT Productivity Award</title>
		<link>http://dow.ngra.de/2009/03/17/caricature-javarebel-winning-the-jolt-award/</link>
		<comments>http://dow.ngra.de/2009/03/17/caricature-javarebel-winning-the-jolt-award/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 15:26:54 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=758</guid>
		<description><![CDATA[
Thanks to Risto for making it. I&#8217;m the dude on the left :) Oh, and download JavaRebel!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://dow.ngra.de/wp-content/uploads/2009/03/jolt_eng.jpg"><img src="http://dow.ngra.de/wp-content/uploads/2009/03/jolt_eng.jpg" alt="jolt_eng" title="jolt_eng" width="500" height="306" class="aligncenter size-medium wp-image-759" /></a></p>
<p>Thanks to Risto for making it. I&#8217;m the dude on the left :) Oh, and <a href="http://www.zeroturnaround.com/javarebel/">download JavaRebel</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/03/17/caricature-javarebel-winning-the-jolt-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaRebel wins JOLT productivity award</title>
		<link>http://dow.ngra.de/2009/03/12/javarebel-wins-jolt-productivity-award/</link>
		<comments>http://dow.ngra.de/2009/03/12/javarebel-wins-jolt-productivity-award/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 02:35:22 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=741</guid>
		<description><![CDATA[JavaRebel wins JOLT productivity award &#8212; awesome!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zeroturnaround.com/javarebel/">JavaRebel</a> wins JOLT productivity award &#8212; <a href="http://www.earthtimes.org/articles/show/techweb-announces-winners-of-the,746892.shtml">awesome</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/03/12/javarebel-wins-jolt-productivity-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Ultimate Java Puzzler</title>
		<link>http://dow.ngra.de/2009/02/16/the-ultimate-java-puzzler/</link>
		<comments>http://dow.ngra.de/2009/02/16/the-ultimate-java-puzzler/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 15:01:08 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[meme]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=627</guid>
		<description><![CDATA[Why is this particular one the ultimate? Two reasons:

It&#8217;s at the very core of the Java language, not some obscure piece of API.
It melted my brain when I hit it.

UPDATE 2: If you want to test yourself before reading the post take this test. Results are not saved (it&#8217;s a paid feature apparently and I [...]]]></description>
			<content:encoded><![CDATA[<p>Why is this particular one the ultimate? Two reasons:</p>
<ul>
<li>It&#8217;s at the very core of the Java language, not some obscure piece of API.</li>
<li>It melted my brain when I hit it.</li>
</ul>
<p><strong>UPDATE 2:</strong> If you want to test yourself before reading the post <a href="http://www.classmarker.com/embedded_quizzes/?quiz=5ced4e42711fa927925c23e87b51be94">take this test</a>. Results are not saved (it&#8217;s a paid feature apparently and I just don&#8217;t care enough), but you can post them in the comments.</p>
<p>Let&#8217;s start by setting up the puzzler environment. We&#8217;ll have three classes in two packages. Classes <code>C1</code> and <code>C2</code> will be in package <code>p1</code>:</p>
<div class="igBar"><span id="ljava-10"><a href="#" onclick="javascript:showPlainTxt('java-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-10">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">package p1;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">1</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C2 <span style="color: #000000; font-weight: bold;">extends</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">2</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Class <code>C3</code> will be in a separate package <code>p2</code>:</p>
<div class="igBar"><span id="ljava-11"><a href="#" onclick="javascript:showPlainTxt('java-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-11">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">package p2;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C3 <span style="color: #000000; font-weight: bold;">extends</span> p1.<span style="color: #006600;">C2</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">3</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>We will also have the test class <code>p1.Main</code> with the following <code>main</code> method:</p>
<div class="igBar"><span id="ljava-12"><a href="#" onclick="javascript:showPlainTxt('java-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-12">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; C1 c = <span style="color: #000000; font-weight: bold;">new</span> p2.<span style="color: #006600;">C3</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>c.<span style="color: #006600;">m</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Note that we&#8217;re calling the method of <code>C1</code> on an instance of <code>C3</code>. The output for this example is &#8220;3&#8243; as you&#8217;d expect. Now let&#8217;s change the <code>m()</code> visibility in all three classes to default:</p>
<div class="igBar"><span id="ljava-13"><a href="#" onclick="javascript:showPlainTxt('java-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-13">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">1</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C2 <span style="color: #000000; font-weight: bold;">extends</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">2</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C3 <span style="color: #000000; font-weight: bold;">extends</span> p1.<span style="color: #006600;">C2</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">3</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
The output will now be &#8220;2&#8243;! </p>
<p>Why is that? The <code>Main</code> class that invokes the method does not see the <code>m()</code> method in the <code>C3</code> class, it being in a separate package. As far as it cares the chain ends with <code>C2</code>. But as <code>C2</code> is in the same package it overrides the <code>m()</code> method in <code>C1</code>. This does not seem too intuitive, but that&#8217;s the way it is.</p>
<p>Now let&#8217;s try something different, let&#8217;s change the modifier of <code>C3.m()</code> back to <code>public</code>. What will that do?</p>
<div class="igBar"><span id="ljava-14"><a href="#" onclick="javascript:showPlainTxt('java-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-14">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">1</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C2 <span style="color: #000000; font-weight: bold;">extends</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">2</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C3 <span style="color: #000000; font-weight: bold;">extends</span> p1.<span style="color: #006600;">C2</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">3</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now <code>Main</code> can clearly see the <code>C3.m()</code> method. But amazingly enough output is still &#8220;2&#8243;! </p>
<p>Apparently <code>C3.m()</code> is not considered to override <code>C2.m()</code> at all. One way to think about it is overriding methods should have access to the super methods (via <code>super.m()</code>). However in this case <code>C3.m()</code> wouldn&#8217;t have access to its super method, as it it not visible to it, being in another package. Therefore <code>C3</code> is considered to be in a completely different invocation chain from <code>C1</code> and <code>C2</code>. Were we to call <code>C3.m()</code> directly from <code>Main</code> the output would actually be &#8220;3&#8243;.</p>
<p>Now let&#8217;s look at one last example. <em>Protected</em> is an interesting visibility. It behaves like <em>default</em> for members in the same package and like <em>public</em> for subclasses. What will happen if we change all of the visibilities to protected?</p>
<div class="igBar"><span id="ljava-15"><a href="#" onclick="javascript:showPlainTxt('java-15'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-15">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">1</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C2 <span style="color: #000000; font-weight: bold;">extends</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">2</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C3 <span style="color: #000000; font-weight: bold;">extends</span> p1.<span style="color: #006600;">C2</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">3</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>My reasoning goes like this: as <code>Main</code> is not a subclass of any classes protected should behave as default in this case and output should be &#8220;2&#8243;. However that is not the case. The crucial thing is that <code>C3.m()</code> has access to <code>super.m()</code> and thus the actual output will be &#8220;3&#8243;. </p>
<p>Personally, when I first encountered this accessibility issue I got thoroughly confused and couldn&#8217;t get it until I did all of this examples through. The intuition I got from this is that if and only if you can access <code>super.m()</code> the subclass is a part of the invocation chain.</p>
<p><strong>UPDATE:</strong> Apparently even though the whole thing is <em>obvious</em> to anyone, the intuition I came up with was wrong. A mysterious commenter know only as &#8220;C&#8221; has provided the following example:</p>
<div class="igBar"><span id="ljava-16"><a href="#" onclick="javascript:showPlainTxt('java-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-16">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">1</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C2 <span style="color: #000000; font-weight: bold;">extends</span> C1 <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">2</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C3 <span style="color: #000000; font-weight: bold;">extends</span> p1.<span style="color: #006600;">C2</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">3</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C4 <span style="color: #000000; font-weight: bold;">extends</span> p2.<span style="color: #006600;">C3</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/*default*/</span> <span style="color: #993333;">int</span> m<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;color:#800000;">4</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Note that <code>C4</code> is in the package <code>p1</code>. If we now change the <code>Main</code> code as follows:</p>
<div class="igBar"><span id="ljava-17"><a href="#" onclick="javascript:showPlainTxt('java-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-17">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; C1 c = <span style="color: #000000; font-weight: bold;">new</span> C4<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>c.<span style="color: #006600;">m</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Then it will output &#8220;4&#8243;. However <code>super.m()</code> is not accessible from <code>C4</code> and putting <code>@Override</code> on the <code>C4.m()</code> method will stop the code from compiling. At the same time if we change the <code>main</code> method to:</p>
<div class="igBar"><span id="ljava-18"><a href="#" onclick="javascript:showPlainTxt('java-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-18">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; p2.<span style="color: #006600;">C3</span> c = <span style="color: #000000; font-weight: bold;">new</span> C4<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>c.<span style="color: #006600;">m</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
The output will be &#8220;3&#8243;. This means that <code>C4.m()</code> overrides <code>C2.m()</code> and <code>C1.m()</code>, but not <code>C3.m()</code>. This also makes the issue even more confusing, and the amended intuition is that <strong>a method in a subclass overrides a method in a superclass if and only if the method in the superclass is accessible from the subclass</strong>. Here <em>superclass</em> can be any ancestor, not necessarily the direct parent and the relation has to be transitive.</p>
<p>For the kicker try reading all of this out from the <a href="http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html">JVM specification</a> that selects the method to be invoked:</p>
<blockquote><p>
   <i><br />
    Let C be the class of objectref. The actual method to be invoked is selected by the following lookup procedure:</p>
<ul>
<li>If C contains a declaration for an instance method with the same name and descriptor as the resolved method, and the resolved method is accessible from C, then this is the method to be invoked, and the lookup procedure terminates. </li>
<li>Otherwise, if C has a superclass, this same lookup procedure is performed recursively using the direct superclass of C; the method to be invoked is the result of the recursive invocation of this lookup procedure.</li>
<li>Otherwise, an AbstractMethodError is raised. </li>
</ul>
<p></i>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2009/02/16/the-ultimate-java-puzzler/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>SpringSource is not the devil?</title>
		<link>http://dow.ngra.de/2008/10/08/springsource-is-not-the-devil/</link>
		<comments>http://dow.ngra.de/2008/10/08/springsource-is-not-the-devil/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 21:07:30 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=327</guid>
		<description><![CDATA[SpringSource is not the devil? &#8212; apparently the community outcry was strong enough to revoke the most outrageous part of the new policy: now the latest stable branch will have maintenance releases even after the three month stoppoint. The funny part is that now the &#8220;three months&#8221; don&#8217;t have any value whatsoever, as the space [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.springsource.com/2008/10/07/a-question-of-balance-tuning-the-maintenance-policy/">SpringSource is not the devil?</a> &#8212; apparently the community outcry was strong enough to revoke the most outrageous part of the new policy: now the latest stable branch <em>will</em> have maintenance releases even after the three month stoppoint. The funny part is that now the &#8220;three months&#8221; don&#8217;t have any value whatsoever, as the space between Spring branch releases is at least half a year. I get that SpringSource needs to shake the money out of the enterprise, but if JBoss somehow managed to do that without resorting to the outright extortion, so should they.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/10/08/springsource-is-not-the-devil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome, Fixed</title>
		<link>http://dow.ngra.de/2008/10/07/google-chrome-fixed/</link>
		<comments>http://dow.ngra.de/2008/10/07/google-chrome-fixed/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 10:43:03 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=325</guid>
		<description><![CDATA[The latest Dev Channel version with the &#8220;&#8211;new-http&#8221; switch fixes all the problems I had with Google Chrome for me. Kudos to the team!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://dev.chromium.org/getting-involved/dev-channel/release-notes">The latest Dev Channel version</a> with the &#8220;&#8211;new-http&#8221; switch fixes all the problems I had with Google Chrome for me. Kudos to the team!</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/10/07/google-chrome-fixed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpringSource will charge for updates to Spring, what comes next?</title>
		<link>http://dow.ngra.de/2008/09/21/springsource-will-charge-for-updates-to-spring-what-comes-next/</link>
		<comments>http://dow.ngra.de/2008/09/21/springsource-will-charge-for-updates-to-spring-what-comes-next/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 08:56:15 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=314</guid>
		<description><![CDATA[Under the new policy all bugfixes after three months will be available only in subscribed releases (the patches will still be available in the open source trunk, but you&#8217;ll have to compile them yourself).
This is a very expected move from Spring after the VC investment. Their previous business model was largely based on high class [...]]]></description>
			<content:encoded><![CDATA[<p>Under <a href="http://www.springsource.com/node/558">the new policy</a> all bugfixes after three months will be available only in subscribed releases (the patches will still be available in the open source trunk, but you&#8217;ll have to compile them yourself).</p>
<p>This is a very expected move from Spring after the VC investment. Their previous business model was largely based on high class consulting and training. Obviously this just doesn&#8217;t scale. Now they are searching for new ways to sell licenses and subscription. </p>
<p>One of them is the new Spring Application Platform (renamed from the Spring Application Server). As far as I checked it it&#8217;s a relatively thin layer over OSGi, which doesn&#8217;t stop them from charging money for it. To be fair OSGi did need something like this to be useful to the larger community and if the tools will also be up to scratch it may be a useful project.</p>
<p>The new policy is just a part of that move. There is of course no reason why someone couldn&#8217;t just set up a public repository with the compiled releases unencumbered with Spring trademarking, but it will take some work. This is exactly what happened to the RedHat Linux wrt YellowDog Linux. This leaves me wondering if the &#8220;spring&#8221; in the package names is considered trademarked, because otherwise it would be impossible to produce untrademarked binary compatible releases, which kinda defeats the whole purpose of the open source.</p>
<p>What is the next move we can expect from SpringSource? They are also already offering companies to certify themselves for a hefty price to be &#8220;Spring Certified Solutions&#8221;. They also certify developers and may start to certify whole shops for &#8220;Spring-Enabled Process&#8221; or somesuch (if they&#8217;re not doing it yet). What we may yet come to see is</p>
<ul>
<li>Making access to the Spring forums and FAQ paid</li>
<li>Making full documentation available only for a fee</li>
<li>Making full examples available only for a fee</li>
<li>Making Spring IDE commercial</li>
<li>Making downloads available only to registered users with aggressive upsale.</li>
<li>Making a Spring job board available only to certified developers and enterprises. (I was always surprised that this haven&#8217;t been done much in the industry)</li>
<li>And so on. Take any practice from Oracle/IBM/Sun and make it more aggressive, since SpringSource needs to be making money yesterday.</li>
</ul>
<p>One very important question that came to me is if there&#8217;s any contributors to the Spring framework outside the SpringSource? Unless they have signed a copyright surrender agreement the whole commercial release is a license change without the agreement of a copyright holder. Given that the Spring guys seem to like to abuse the community understanding of open source without given much though to laws, it would be nice to see them bitten in the ass with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/09/21/springsource-will-charge-for-updates-to-spring-what-comes-next/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Live: Alternative and Emerging Languages Panel at JavaZone</title>
		<link>http://dow.ngra.de/2008/09/18/live-alternative-and-emerging-languages-panel-at-javazone/</link>
		<comments>http://dow.ngra.de/2008/09/18/live-alternative-and-emerging-languages-panel-at-javazone/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 15:58:00 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=301</guid>
		<description><![CDATA[Lineup: 

Guillaume Laforge for Groovy (I can never spell his name, so I&#8217;ll just call him &#8220;Big G&#8221;)
Bill Venners for Scala 
Gilad Bracha for Newspeak
Ola Bini for JRuby
Charles Oliver Nutter for JRuby
Scott Davis against Groovy

Moderator: Robert C. Martin (Uncle Bob).
Everyone introduces themselves. Bill is to blame for the &#8220;emerging&#8221; v/s &#8220;dynamic&#8221; languages. Ola fools around [...]]]></description>
			<content:encoded><![CDATA[<p>Lineup: </p>
<ul>
<li><a href="http://glaforge.free.fr/weblog/">Guillaume Laforge</a> for Groovy (I can never spell his name, so I&#8217;ll just call him &#8220;Big G&#8221;)</li>
<li><a href="http://www.artima.com/weblogs/index.jsp?blogger=bv">Bill Venners</a> for Scala </li>
<li><a href="http://gbracha.blogspot.com/">Gilad Bracha</a> for Newspeak</li>
<li><a href="http://ola-bini.blogspot.com/">Ola Bini</a> for JRuby</li>
<li><a href="http://blog.headius.com/">Charles Oliver Nutter</a> for JRuby</li>
<li><a href="http://www.davisworld.org/blojsom/blog/">Scott Davis</a> against Groovy</li>
</ul>
<p>Moderator: <a href="http://blog.objectmentor.com/articles/category/uncle-bobs-blatherings">Robert C. Martin (Uncle Bob)</a>.</p>
<p>Everyone introduces themselves. Bill is to blame for the &#8220;emerging&#8221; v/s &#8220;dynamic&#8221; languages. Ola fools around with AI stuff, hello robot overlords! </p>
<p>Bob: &#8220;I&#8217;m sick and tired of new languages, why C++ wasn&#8217;t good enough? Same with Java?&#8221; Python isn&#8217;t really represented on the panel, although it&#8217;s not really emerging either.</p>
<p>Charles: &#8220;must embrace the multiple tools&#8221;. Big G: &#8220;haven&#8217;t you been frustrated with Java?&#8221;. Scott is annoyed by static typing, I&#8217;m annoyed by Scott :) Duck-billed platypuses comes into play, generic consulting bullshit ensues. </p>
<p>Ola: &#8220;Lisp developers laugh at Java&#8221;, forget to mention that they laugh at Ruby as well. Haskell guys will laugh at anyone. Bill just wanted something better, reminds that type inference makes Scalla waaay better than all that dynamic nonsense. All languages do trade-offs, Bill likes types. Charles: &#8220;Like C++ &#8212; keep using it. If something works better for you, use that. Embrace multiple tools!&#8221;.</p>
<p>Bob: &#8220;Why did you sacrifice the static typing? Do you have a runtime exception fetish?&#8221;.</p>
<p>Big G: &#8220;You don&#8217;t get too many runtime errors in Groovy.&#8221; He&#8217;s just way too good for that. Ola: &#8220;Scala has cool type inference, but way too complicated.&#8221; Says you get other benefits in dynamic languages, but doesn&#8217;t names them. Scott brings driving analogies, which don&#8217;t mean anything, blablabla. </p>
<p>Gilad: &#8220;Lies by academics &#8212; types are useful for catching errors. But those errors are trivial. Types are great for documentation, structuring and performance.&#8221; Charles: &#8220;Types are about not trusting the people who write the code&#8221;. Fair enough, but I don&#8217;t trust myself, not to mention others. Bill: &#8220;I&#8217;m getting nervous in a big system. Types protect against certain type of errors&#8221;. Kinda weak.</p>
<p>Bob: &#8220;Your languages are hideously slow. Explain!&#8221;</p>
<p>Scott: &#8220;Speed is overrated&#8221;. And this is when the CPUs have plateaued and we just get more concurrency that noone uses. Brings Java as example of slowness, but the CPUs caught up with Java, Groovy won&#8217;t be so lucky. Big G: &#8220;Thin DSL layer in Groovy on top of a Java library made a world of difference, still Java performance underneath.&#8221; Gilad: &#8220;Google V8 might be a target for many dynamic languages soon, &#8217;cause it&#8217;s been developed for dynamic languages&#8221;. </p>
<p>Kirk: &#8220;Productivity is king, but performance is important, if you produce bytecode why are you slower than Java?&#8221;</p>
<p>Gilad: &#8220;JIT is locked behind the type system. This makes dynamic languages reimplement basic stuff&#8221;. Charles: &#8220;Harder to know where does a method invocation end up, INVOKEDYNAMIC to the rescue. Numerical types are a real issue, unboxing them is really hard, SmallTalk did that.&#8221; Sounds reasonable. Scott speaks again. I had to switch from  Google Chrome to Firefox in between, because spellchecking there sucks :(</p>
<p>Charles: &#8220;DocumentBuilderFactory is ridiculous, static typing overhead sucks. It cannot be just one languages, it&#8217;s not enough&#8230;&#8221; Bill: &#8220;Not static type fault &#8212; structural types, implicit conversions.&#8221; </p>
<p>Me: &#8220;What about contracts?&#8221;</p>
<p>Ola: &#8220;Dynamic languages do have the same contracts. &#8221; Fails to explain what are they, though. Bill: &#8220;draw() has no meaning in dynamic languages, but it doesn&#8217;t necessarily produce more bugs&#8221;. Gilad: &#8220;Typechecker should be just a tool that warns you, while using types for documentation&#8221;. Someone from the crowd: &#8220;I program in 26 languages and that&#8217;s why your argument sucks [meaning me]&#8220;. Scott speaks. </p>
<p>Someone: &#8220;The problem isn&#8217;t in language, but in the people who use it, is it?&#8221; Reaaally long explanation that boils down to nothing specific. Oh, &#8220;What about refactoring?&#8221; OMG, please stop talking now!</p>
<p>Big G: &#8220;Refactoring works on Groovy with IntelliJ IDEA&#8221;. </p>
<p>Someone: &#8220;Multiple languages are like teenage sex, when will multiple languages become mainstream?&#8221; Time&#8217;s up!</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/09/18/live-alternative-and-emerging-languages-panel-at-javazone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome &#8212; Fast, but Unstable</title>
		<link>http://dow.ngra.de/2008/09/03/google-chrome-fast-but-unstable/</link>
		<comments>http://dow.ngra.de/2008/09/03/google-chrome-fast-but-unstable/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 22:12:39 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=288</guid>
		<description><![CDATA[I gave Google Chrome a quick spin. At least two problems came out:

Digest-based authentication isn&#8217;t handle correctly, the sent request does not include the query causing 400 Bad Request
Google Analytics will randomly crash the Flash plugin freezing the whole browser (with all the talk of isolated processes&#8230;)

On the immediate positive side it fixed my main [...]]]></description>
			<content:encoded><![CDATA[<p>I gave Google Chrome a quick spin. At least two problems came out:</p>
<ul>
<li>Digest-based authentication isn&#8217;t handle correctly, the sent request does not include the query causing <strong>400 Bad Request</strong></li>
<li>Google Analytics will randomly crash the Flash plugin freezing the whole browser (with all the talk of isolated processes&#8230;)</li>
</ul>
<p>On the immediate positive side it fixed my main pet peeve with Mozilla Prism &#8212; the inability to change font size, so I replaced the Prism shortcuts with Chrome applications. It is also really, really fast.</p>
<p>All in all it&#8217;s fast and cool, but needs lots more polish before massive adoption.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/09/03/google-chrome-fast-but-unstable/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Hug a developer today</title>
		<link>http://dow.ngra.de/2008/08/29/hug-a-developer-today/</link>
		<comments>http://dow.ngra.de/2008/08/29/hug-a-developer-today/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 20:53:04 +0000</pubDate>
		<dc:creator>Jevgeni Kabanov</dc:creator>
				<category><![CDATA[meme]]></category>
		<category><![CDATA[developer]]></category>

		<guid isPermaLink="false">http://dow.ngra.de/?p=282</guid>
		<description><![CDATA[ 
Found from tOMPSON&#8217;s blog.
]]></description>
			<content:encoded><![CDATA[<p><embed src="http://blip.tv/play/gYwjwZJqjdEh" type="application/x-shockwave-flash" width="500" height="305" allowscriptaccess="always" allowfullscreen="true"></embed> </p>
<p>Found from <a href="http://dertompson.com/2008/08/29/developers-are-in-pain/">tOMPSON&#8217;s blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dow.ngra.de/2008/08/29/hug-a-developer-today/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->