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

<channel>
	<title>Thinking Inside a Bigger Box &#187; Uncategorized</title>
	<atom:link href="http://johannesbrodwall.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://johannesbrodwall.com</link>
	<description>Johannes Brodwall&#039;s Musings on Software Architecture and Programming</description>
	<lastBuildDate>Mon, 03 May 2010 20:24:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>		<item>
		<title>Making FitNesse Maven friendly (now with Slim)</title>
		<link>http://johannesbrodwall.com/2008/11/23/making-fitnesse-maven-friendly-now-with-slim/</link>
		<comments>http://johannesbrodwall.com/2008/11/23/making-fitnesse-maven-friendly-now-with-slim/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 23:44:20 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://brodwall.com/johannes/blog/2008/11/23/making-fitnesse-maven-friendly-now-with-slim/</guid>
		<description><![CDATA[Regular readers of my blog may remember that I&#8217;ve researched how to get the classpath from the FitNesse-process inherited by the Fit process that FitNesse spawns when it runs a test. This trick is an easy way to get around having to specify classpath variables in your FitNesse tests. This blogposts provides an easier way, [...]]]></description>
			<content:encoded><![CDATA[<p>Regular readers of my blog may remember that I&#8217;ve <a href="http://brodwall.com/johannes/blog/2008/03/19/some-fitnesse-tricks-classpath-and-debugging/">researched</a> how to get the classpath from the FitNesse-process inherited by the Fit process that FitNesse spawns when it runs a test. This trick is an easy way to get around having to specify classpath variables in your FitNesse tests. This blogposts provides an easier way, plus compatibility with the new <a href="http://blog.objectmentor.com/articles/2008/10/02/slim">Slim testrunner</a> in FitNesse.</p>
<p>This is the basic process:</p>
<ol>
<li>Create a Maven project with a dependency on your System Under Test in addition to FitNesse.</li>
<li>Insert a few bootstrap files and classes into the project (to be explained)</li>
<li>Start <code>fitnesse.FitNesse</code> as a main class in the project</li>
<li>All classes in the project and its dependencies will now be available in Fixture classes</li>
</ol>
<p>This article uses the 20081115 version of FitNesse, which is not yet in the Maven repository. To get it yourself, download it from <a href="http://fitnesse.org/FitNesse.DownLoad">the FitNesse website</a>.</p>
<h3>The problem</h3>
<p>Fixing the classpath is exceedingly simple. But you need to understand a bit of the inner workings of FitNesse to get it to work. When you press the “test” button on a test, or the suite button on a test suite, FitNesse instantiates a class based on the registered “responder”. Our first order of business is to override this, but in order to do that, we need to take control over FitNesse.</p>
<p>You can do this by adding fitnesse.jar and fitlibrary.jar to your classpath, either manually in Eclipse, or by using a Maven dependency on org.fitnesse:fitnesse and org.fitnesse:fitlibrary.</p>
<p>Once FitNesse is in you IDE’s classpath, you can run the Java class “fitnesse.FitNesse”. This starts FitNesse on port 80. Navigate to, say “http://localhost/MyFirstTest”, and you’re ready to add a test.</p>
<p>In order to get it to work, though, you will have to do something like the following:</p>
<pre><code>
!path target/classes
!path /.m2/repository/org/fitnesse/fitnesse/20060719/fitnesse-20060719.jar
!path /.m2/repository/org/fitnesse/fitlibrary/20060719/fitlibrary-20060719.jar

!|my.test.ExampleFixture|
|first|second|sum?|product?|
|10|10|20|100|
|1|0|1|0|
|10000|1|10001|10000|
</code></pre>
<p>Ugh! Bad FitNesse!</p>
<h3>The solution</h3>
<p>What actually happens when you press &#8220;test&#8221; is that FitNesse creates and executes a <code>Responder</code> class. You can override a responder by adding a file called <code>plugins.properties</code> to the current working directory. Here is an example of such a file:</p>
<pre><code>
Responders = test:com.brodwall.fitnesse.InheritClasspathTestResponder
</code></pre>
<p>As you can see, I replace the test-responder with my own subclass. Here is the code of the <code>InheritClasspathTestResponder</code> for the very latest version of FitNesse:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> InheritClasspathTestResponder <span style="color: #000000; font-weight: bold;">extends</span> TestResponder <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> PATH_SEPARATOR <span style="color: #339933;">=</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;path.separator&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/** For FitNesse 20081115 and later */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">String</span> buildClassPath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">buildClassPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> PATH_SEPARATOR <span style="color: #339933;">+</span> getInheritedClassPath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">String</span> getInheritedClassPath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> inheritedClasspath <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> parentClassPath <span style="color: #339933;">=</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;java.class.path&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> classPathElements <span style="color: #339933;">=</span> parentClassPath.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span>PATH_SEPARATOR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> element <span style="color: #339933;">:</span> classPathElements<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            inheritedClasspath <span style="color: #339933;">+=</span> PATH_SEPARATOR <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;">+</span> element <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> inheritedClasspath<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>For older versions of FitNesse, you can instead override the <code>buildCommand</code> method as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/** For FitNesse 20080812 and earlier */</span>
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">String</span> buildCommand<span style="color: #009900;">&#40;</span>PageData data, <span style="color: #003399;">String</span> program,
                <span style="color: #003399;">String</span> classPath<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">buildCommand</span><span style="color: #009900;">&#40;</span>data, program, classPath <span style="color: #339933;">+</span> getInheritedClassPath<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>This works both with both the original Fit test runner and the new Slim test runner. To try it out with a Slim runner, insert the following into a test page:</p>
<pre><code>
!define TEST_SYSTEM {slim}
</code></pre>
<p>(Notice that Uncle Bob&#8217;s <a href="http://blog.objectmentor.com/articles/2008/10/02/slim">article introducting Slim</a> mistakenly !defines TEST_RUNNER. The correct variable is TEST_SYSTEM)</p>
<h3>Debugging</h3>
<p>In <a href="http://brodwall.com/johannes/blog/2008/03/19/some-fitnesse-tricks-classpath-and-debugging/">my original experiment</a>, I also managed to get debugging support for FitNesse. This is how it works:</p>
<ol>
<li>After running a test, replace the part <code>?test</code> in the URL with <code>?debug</code>. The page will look like it&#8217;s hanging while the server is waiting for the debugger.</li>
<li>In your IDE, attach a remote debugger to the Fit-process.</li>
<li>You can now debug your code just as normal</li>
</ol>
<p>This turned out to be a lot harder with the newest version of FitNesse. To support Slim, this version introduces the concept of <code>TestSystem</code> classes, of which there are two implementations, <code>FitTestSystem</code> and <code>SlimTestSystem</code>. These classes build up the (Java) command line to execute the test runner.</p>
<p>As of the current version of FitNesse, there is no plugin point to put new implementations of <code>TestSystem</code>, so I had to change <code>TestResponder</code> implementation of <code>performExecution</code> quite a bit. The original has some caching and other freaky stuff which I finally gave up trying to override. Sadly, my implementation only works for Slim. For some reason, overriding <code>FitTestSystem#buildCommand</code> causes FitNesse to hang. So: Use at your own risk.</p>
<p>To install the code, you have to modify the <code>plugins.properties</code> file described above:</p>
<pre><code>
Responders = test:com.brodwall.fitnesse.InheritClasspathTestResponder, \
debug:com.brodwall.fitnesse.DebugTestResponder
</code></pre>
<p>Here is the awful implementation of <code>DebugTestResponder</code>. I&#8217;ll see if I can get changes implemented in FitNesse to make it easier.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DebugTestResponder <span style="color: #000000; font-weight: bold;">extends</span> InheritClasspathTestResponder <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> PATH_SEPARATOR <span style="color: #339933;">=</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;path.separator&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> DEBUG_PORT <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1044</span><span style="color: #339933;">;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> performExecution<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        TestSystem testSystem <span style="color: #339933;">=</span> createTestSystem<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// The following line is the correct behavior,</span>
        <span style="color: #666666; font-style: italic;">//  but TestResponder.fastTest is private :-(</span>
        <span style="color: #666666; font-style: italic;">//testSystem.setFastTest(fastTest);</span>
        testSystem.<span style="color: #006633;">setFastTest</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        testSystem.<span style="color: #006633;">getExecutionLog</span><span style="color: #009900;">&#40;</span>classPath, TestSystem.<span style="color: #006633;">getTestRunner</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        testSystem.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>testSystem.<span style="color: #006633;">isSuccessfullyStarted</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>
            addToResponse<span style="color: #009900;">&#40;</span>HtmlUtil.<span style="color: #006633;">getHtmlOfInheritedPage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;PageHeader&quot;</span>, page<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            SetupTeardownIncluder.<span style="color: #006633;">includeInto</span><span style="color: #009900;">&#40;</span>data, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>data.<span style="color: #006633;">getContent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
                response.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>formatter.<span style="color: #006633;">messageForBlankHtml</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            testSystem.<span style="color: #006633;">sendPageData</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            testSystemGroup.<span style="color: #006633;">bye</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> TestSystem createTestSystem<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> testSystemName <span style="color: #339933;">=</span> TestSystem.<span style="color: #006633;">getTestSystemName</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;slim&quot;</span>.<span style="color: #006633;">equalsIgnoreCase</span><span style="color: #009900;">&#40;</span>TestSystem.<span style="color: #006633;">getTestSystemType</span><span style="color: #009900;">&#40;</span>testSystemName<span style="color: #009900;">&#41;</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;">return</span> <span style="color: #000000; font-weight: bold;">new</span> SlimTestSystem<span style="color: #009900;">&#40;</span>page, <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                @Override
                <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">String</span> buildCommand<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> program, <span style="color: #003399;">String</span> classPath<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">return</span> DebugTestResponder.<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">buildCommand</span><span style="color: #009900;">&#40;</span>program, classPath<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: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// For some reason, overriding FitTestSystem.buildCommand causes FitNesse to hang</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> FitTestSystem<span style="color: #009900;">&#40;</span>context, page, <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">String</span> buildCommand<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> program, <span style="color: #003399;">String</span> classPath<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> debugOptions <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=&quot;</span>
                        <span style="color: #339933;">+</span> DEBUG_PORT<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;java &quot;</span> <span style="color: #339933;">+</span> debugOptions <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;-cp &quot;</span> <span style="color: #339933;">+</span> classPath <span style="color: #339933;">+</span> PATH_SEPARATOR
                        <span style="color: #339933;">+</span> getInheritedClassPath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">+</span> program<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>In conclusion</h3>
<p>It is possibly, you could even say easy, to make Maven and FitNesse play nice. The trick with <code>InheritClasspathTestResponder</code> shows how you can stop maintaining the FitNesse classpath separate from the Maven classpath, which makes FitNesse into just another main-class in your system.</p>
<p>Sadly, the structure around the new <code>TestSystem</code> classes needs a little improvement to support debugging.</p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/11/23/making-fitnesse-maven-friendly-now-with-slim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m moderating the IfI alumni open source debate</title>
		<link>http://johannesbrodwall.com/2008/10/23/im-moderating-the-ifi-alumni-open-source-debate/</link>
		<comments>http://johannesbrodwall.com/2008/10/23/im-moderating-the-ifi-alumni-open-source-debate/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 21:38:07 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2008/10/23/im-moderating-the-ifi-alumni-open-source-debate/</guid>
		<description><![CDATA[The alumni organization from my old university is arranging a debate about open source, and I&#8217;ll be moderating. The debate will be next Wednesday at Scotsman in downtown Oslo.
There will be a four person panel, with two skeptics and two open source fans. So far, the panel looks as follows:

Heidi Arnesen Austlid, Friprogsenteret
Per Hove, Oracle [...]]]></description>
			<content:encoded><![CDATA[<p>The alumni organization from my old university is arranging a debate about open source, and I&#8217;ll be moderating. The debate will be next Wednesday at Scotsman in downtown Oslo.</p>
<p>There will be a four person panel, with two skeptics and two open source fans. So far, the panel looks as follows:</p>
<ul>
<li>Heidi Arnesen Austlid, Friprogsenteret</li>
<li>Per Hove, Oracle Norge</li>
<li>Shahzad Rana, Questpoint</li>
<li>An exciting surprise!</li>
</ul>
<p>The event will be held in The Scotsman, where they sell beer! And there will be free pizza! Free code, free beer, free pizza!</p>
<p><a href="http://docs.google.com/Doc?id=ah7s7jp277fz_76w378hvpr">More information</a></p>
<p>Hope to see you there.</p>
<p><em>The text of this blogpost was shamelessly ripped of <a href="http://tfnico.blogspot.com/2008/10/debate-about-open-source-in-oslo-next.html">Ferris&#8217;s blog</a> and patched slightly</em></p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/10/23/im-moderating-the-ifi-alumni-open-source-debate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Smidig 2008 conference is this week!</title>
		<link>http://johannesbrodwall.com/2008/10/04/the-smidig-2008-conference-is-this-week/</link>
		<comments>http://johannesbrodwall.com/2008/10/04/the-smidig-2008-conference-is-this-week/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 17:08:28 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2008/10/04/the-smidig-2008-conference-is-this-week/</guid>
		<description><![CDATA[
In the middle of changing jobs, I have also been quite busy with the last minute preparations for the Smidig 2008 conference for the Oslo Agile user community (&#8220;smidig&#8221; being the closest Norwegian translation of &#8220;agile&#8221;).
The conference be two days of lightning talks before lunch and open spaces after lunch. The program is in the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://smidig2008.no"><img src="http://smidig.no/page_attachments/0000/0118/smidig2008_468x60.png" alt="Smidig 2008, 9. - 10. oktober, Oslo Kongressenter" ></a></p>
<p>In the middle of changing jobs, I have also been quite busy with the last minute preparations for the Smidig 2008 conference for the Oslo Agile user community (&#8220;smidig&#8221; being the closest Norwegian translation of &#8220;agile&#8221;).</p>
<p>The conference be two days of <a href="http://smidig.no/smidig2008/program/">lightning talks</a> before lunch and open spaces after lunch. The program is in the final stages of being finalized as we speak.</p>
<p>There are still a few open seats. We&#8217;ve structured the price so that we don&#8217;t need to sell out to avoid losing money. But we want to make sure that as many people as possible take advantage of the opportunity to learn and discuss with a large number of other practitioners of agile software development.</p>
<p>You can <a href="http://smidig.no/smidig2008/paamelding/">sign up</a> at <a href="http://smidig2008.no">http://smidig2008.no</a>. Hope I see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/10/04/the-smidig-2008-conference-is-this-week/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wordle</title>
		<link>http://johannesbrodwall.com/2008/09/27/wordle/</link>
		<comments>http://johannesbrodwall.com/2008/09/27/wordle/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 21:22:34 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2008/09/27/wordle/</guid>
		<description><![CDATA[Here is a wordle of my blog:

(Inspired by Thomas Ferris)
]]></description>
			<content:encoded><![CDATA[<p>Here is a <a href="http://wordle.net/">wordle</a> of my blog:</p>
<p><a href="http://wordle.net/gallery/wrdl/214520/Johannes_Brodwall_blog" title="Wordle: Johannes Brodwall blog"><img src="http://wordle.net/thumb/wrdl/214520/Johannes_Brodwall_blog" style="padding:4px;border:1px solid #ddd" /></a></p>
<p>(Inspired by <a href="http://tfnico.blogspot.com/2008/09/im-giving-docs.html">Thomas Ferris</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/09/27/wordle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I received an overwhelmingly warm welcome as the new chief scientist at Steria</title>
		<link>http://johannesbrodwall.com/2008/09/11/i-received-an-overwhelmingly-warm-welcome-as-the-new-chief-scientist-at-steria/</link>
		<comments>http://johannesbrodwall.com/2008/09/11/i-received-an-overwhelmingly-warm-welcome-as-the-new-chief-scientist-at-steria/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 00:49:47 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2008/09/11/i-received-an-overwhelmingly-warm-welcome-as-the-new-chief-scientist-at-steria/</guid>
		<description><![CDATA[I am changing employers. As of October 1st, I will no longer be lead software architect at BBS Nordic. Instead, I will be the chief scientist at the Norwegian division of Steria.
This weekend, I was invited to join my new employer at their gathering at a resort in the south of Norway. I&#8217;ve had a [...]]]></description>
			<content:encoded><![CDATA[<p>I am changing employers. As of October 1st, I will no longer be lead software architect at BBS Nordic. Instead, I will be the chief scientist at the Norwegian division of Steria.</p>
<p>This weekend, I was invited to join my new employer at their gathering at a resort in the south of Norway. I&#8217;ve had a chance to speak with a lot of my new colleagues, and I was overwhelmed by the number of skilled, thoughtful and friendly people.</p>
<p>Steria has lots of very talented people, and I&#8217;m still looking for the best way to help the organization in my new role. I hope I can personally teach a lot of people the architecture and testing techniques that I&#8217;ve learned over the last years, and I hope I can help the people who actually produce the results that are needed at the end of the day get a stronger voice with our management and our customers.</p>
<p>Watch the thrilling story: What happens when you take a domesticated programmer out of his natural habitat and put him into a new world. Will be be overwhelmed by the differences, or will he be a new invasive species in the foreign ecosystem?</p>
<p>(Yes: I will insist that my proper title should still be JustAprogrammer. How long will I get away with it?)</p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/09/11/i-received-an-overwhelmingly-warm-welcome-as-the-new-chief-scientist-at-steria/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>&#8220;Wow&#8221;-talks</title>
		<link>http://johannesbrodwall.com/2008/08/25/wow-talks/</link>
		<comments>http://johannesbrodwall.com/2008/08/25/wow-talks/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 21:58:04 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2008/08/25/wow-talks/</guid>
		<description><![CDATA[ I just watched another amazing talk from the TED conference. Spencer Wells is a natural public speaker. He talks about where we all, as a species, came from. Amazingly enough, everyone who is alive today share a common ancestor in Africa no more than about 2000 generations, or 60,000 years ago. Wells describes the [...]]]></description>
			<content:encoded><![CDATA[<p> I just watched another amazing talk from the TED conference. Spencer Wells is a natural public speaker. He talks about where we all, as a species, came from. Amazingly enough, everyone who is alive today share a common ancestor in Africa no more than about 2000 generations, or 60,000 years ago. Wells describes the fascinating questions and their answers, as we know them today.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/tmHloU_xEJo&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/tmHloU_xEJo&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>The TED conference is full of remarkable talks. Here are some of my absolute favorites:</p>
<h2>Robert Full: Secrets of movement</h2>
<p>In this must-watch talk, Robert Full talks about feet. I promise you will absolutely fascinated by feet. I was hooked after about 2:30 minutes.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Ascql_RoeBU&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/Ascql_RoeBU&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>There&#8217;s another equally fascinating talk about locomotion in general: http://www.youtube.com/watch?v=BUmOKfllAEo</p>
<h2>Craig Venter: On the verge of creating synthetic life</h2>
<p>I bet you had no idea how fast the art of bioengineering really is moving:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/nKZ-GjSaqgo&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/nKZ-GjSaqgo&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h2>Richard St. John: The secret to success</h2>
<p>Only 3:46 minutes long, this presentation shows how much you can communicate in very little time:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Y6bbMQXQ180&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/Y6bbMQXQ180&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/08/25/wow-talks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ben Zander: Presentation with shining eyes</title>
		<link>http://johannesbrodwall.com/2008/06/29/ben-zander-presentation-with-shining-eyes/</link>
		<comments>http://johannesbrodwall.com/2008/06/29/ben-zander-presentation-with-shining-eyes/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 16:10:44 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2008/06/29/ben-zander-presentation-with-shining-eyes/</guid>
		<description><![CDATA[The TED conference has some amazing talks. If you never knew you were interested in car seats for children, classical music, or feet (yeah!), some of these talks will blow you mind.
A recent video that really moved me was Benjamin Zander, the conductor of the Boston Philharmonic. His insights and inspiration is invaluable for everyone [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://youtube.com/user/TEDtalksDirector">TED conference</a> has some amazing talks. If you never knew you were interested in car seats for children, classical music, or feet (yeah!), some of these talks will blow you mind.</p>
<p>A recent video that really moved me was Benjamin Zander, the conductor of the Boston Philharmonic. His insights and inspiration is invaluable for everyone who considers themselves a leader.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/r9LCwI5iErE&#038;hl=en"></param><embed src="http://www.youtube.com/v/r9LCwI5iErE&#038;hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object></p>
<p>&#8220;The conductor doesn&#8217;t make a sound, he depends for his power on the ability to make other people powerful&#8230; I realized that my job was to awaken possibility in other people.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2008/06/29/ben-zander-presentation-with-shining-eyes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Little Bobby Tables</title>
		<link>http://johannesbrodwall.com/2007/10/25/little-bobby-tables/</link>
		<comments>http://johannesbrodwall.com/2007/10/25/little-bobby-tables/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 22:00:09 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2007/10/25/little-bobby-tables/</guid>
		<description><![CDATA[I got this one from xkcd via Chris Searle. It&#8217;s now posted on the walls at work:

]]></description>
			<content:encoded><![CDATA[<p>I got this one from <a href="http://xkcd.com/327/">xkcd</a> via Chris Searle. It&#8217;s now posted on the walls at work:</p>
<p><a href='http://xkcd.com/327/' title='exploits_of_a_mom.png'><img src='http://johannesbrodwall.com/wp-content/uploads/2007/10/exploits_of_a_mom.png' alt='Oh, dear - did he break something?' width="450" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2007/10/25/little-bobby-tables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presenting Naked</title>
		<link>http://johannesbrodwall.com/2007/09/14/presenting-naked/</link>
		<comments>http://johannesbrodwall.com/2007/09/14/presenting-naked/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 01:59:27 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2007/09/14/presenting-naked/</guid>
		<description><![CDATA[My presentation at JavaZone was riddled with technical difficulties this year. To make a long story short: I learned five minutes before the presentation the the projector would be inoperative for a while (turned out to be 30 minutes). This threw a wrench into my plans, as I had planned to open with a demo.
I [...]]]></description>
			<content:encoded><![CDATA[<p>My presentation at <a href="http://www.javazone.no">JavaZone</a> was riddled with technical difficulties this year. To make a long story short: I learned five minutes before the presentation the the projector would be inoperative for a while (turned out to be 30 minutes). This threw a wrench into my plans, as I had planned to open with a demo.</p>
<p>I have read many times on <a href="http://presentationzen.blogs.com/presentationzen/2005/10/make_your_next_.html">presentation zen</a> about presenting without slides. But before I stood in front of four hundred people with nothing to look at except me, I didn&#8217;t really believe how effective it would be. I&#8217;ve never seen a more attentive crowd! Thanks, everybody!</p>
<p>I don&#8217;t know if I had dared to throw the slides away if I hadn&#8217;t been forced to do so. But my next talk, I want to do without slides, too. This really was a serendipitous mishap.</p>
<p><small>There will be a video available of the talk, sadly, I forgot this, and spoke in Norwegian when I learned it was an all-Norwegian audience. I will link to the video for my Norwegian readers as soon as it is available.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2007/09/14/presenting-naked/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Comment Overheard at JavaZone</title>
		<link>http://johannesbrodwall.com/2007/09/14/best-comment-overheard-at-javazone/</link>
		<comments>http://johannesbrodwall.com/2007/09/14/best-comment-overheard-at-javazone/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 01:25:44 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brodwall.com/johannes/blog/2007/09/14/best-comment-overheard-at-javazone/</guid>
		<description><![CDATA[&#8220;I just feel that in this company, there&#8217;s too many chiefs and not enough Indians.&#8221;
&#8220;Sure. Now, if they&#8217;d only been Indian chiefs.&#8221;
I have been real quiet lately. I will try to be better about writing in the future. I&#8217;ll do my best to stay away from project management issues, though. I&#8217;ve stepped on enough toes [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;I just feel that in this company, there&#8217;s too many chiefs and not enough Indians.&#8221;</p>
<p>&#8220;Sure. Now, if they&#8217;d only been Indian chiefs.&#8221;</p>
<p>I have been real quiet lately. I will try to be better about writing in the future. I&#8217;ll do my best to stay away from project management issues, though. I&#8217;ve stepped on enough toes lately, I think. Here are some teasers of upcoming topics: REST, <a href="http://andersnoras.com/blogs/anoras/archive/2007/09/11/introducing-quaere-language-integrated-queryies-for-java.aspx">Quaere</a>, introducing tests into existing code bases, the Norwegian conference &#8220;<a href="http://smidig.no/smidig2007/">Smidig 2007</a>&#8220;, my JavaZone talk, and closures for Java. </p>
<p>Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://johannesbrodwall.com/2007/09/14/best-comment-overheard-at-javazone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
