<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>simplericity - Java category</title>
  <link>http://simplericity.com/categories/java/</link>
  <description>Reducing software entropy</description>
  <language>en</language>
  <copyright>Eirik Bjørsnøs</copyright>
  <lastBuildDate>Thu, 11 Nov 2010 21:22:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>DogmaticMVC: The MVC framework that lets you know when you suck </title>
    <link>http://simplericity.com/2010/11/11/1289510520000.html</link>
    
      
        <description>
          &lt;p&gt;Yeah, I know, I know.. Does the world really need Yet Another Web Framework?&lt;/p&gt;
&lt;p&gt;Ok, perhaps not. But I had this idea, and I felt like implementing it. The result is a web framework that takes test driven development to the extreme.&lt;/p&gt;
&lt;p&gt;DogmaticMVC was first presented in a lighting talk at the great &lt;a href=&#034;http://www.mindviewinc.com/Conferences/JavaPosseRoundup/&#034;&gt;Java Posse Roundup&lt;/a&gt; conference back in March. The noticeable amount of  grinning among the audience encouraged me to submit a talk about it for &lt;a href=&#034;http://xp2010.org/&#034;&gt;XP2010&lt;/a&gt;. And now I&#039;m presenting it at the &lt;a href=&#034;http://smidig2010.no&#034;&gt;Smidig 2010&lt;/a&gt; agile conference in Oslo next week. So I figured it was about time I blogged about  it.&lt;/p&gt;
&lt;p&gt;Let&#039;s see what development with DogmaticMVC looks like. Here&#039;s a controller responding to the /HelloWorld URL: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/helloworld.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Pretty simple code. (Groovy code actually.) If the client is in the local machine, we output the message &amp;quot;Hello Localhost&amp;quot;. Otherwise, we output &amp;quot;Hello world&amp;quot;. Accessing the application from localhost should produce &amp;quot;Hello Localhost&amp;quot;.  Right..? Think again: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/notests.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;DogmaticMVC has intercepted our request, looked at the code, found that it has no tests and refused to let us run it.  After all, the the code has no tests, who knows what it will do? &lt;/p&gt;
&lt;p&gt;So we add the @TestWith annotation and point it to our test class: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/test.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Admittedly not the world&#039;s most thorough test, but hey, it executes out code right? Let&#039;s see what DogmaticMVC has to say about the matter: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/testcoverage.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;66% coverage? Sure we can do better. We&#039;ll add another test that will fake a request from localhost and thus execute line 11: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/extratest.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;So now we have 100% line coverage. Very few projects out there in the Real World have that kind of test coverage. So are you happy now, DogmaticMVC? Let&#039;s save our test and hit reload: &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/asserting.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;This is DogmaticMVC letting us know (in polite terms) that even when they cover 100% of our code, our tests really suck. They suck because they don&#039;t assert anything about our code. In fact they just execute the code blindly and do not catch that DogmaticMVC mutated our code before running it, carefully injecting bugs by switching &lt;em&gt;less than&lt;/em&gt; with &lt;em&gt;greater than&lt;/em&gt; etc. Really, what&#039;s the use of tests if they don&#039;t catch bugs? &lt;/p&gt;
&lt;p&gt;We can fix that by adding proper asserts that actually detect that code is not up to spec:  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/asserts.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Now what? &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/honest.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;This was actually cheating since I added a bug manually just to show that DogmaticMVC will detect it and show you the failing test. Once that &amp;quot;bug&amp;quot; is &amp;quot;fixed&amp;quot;, we finally get what we wanted all along: Hello world. (Or as in this case, localhost)  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/final.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Not only do we have a hello world that seems to work, we have a hello world that we can actually prove will work and that we can trust will continue to work.  &lt;/p&gt;
&lt;p&gt;As a bonus for reading this long, I present to you:  A new feature! Web frameworks is all about features aren&#039;t they?   &lt;/p&gt;
&lt;p&gt;Speaking of features, let us for just a minute pretend that some real customer actually wanted our HelloWorld application. In fact, they like it so much they&#039;d buy if it it only had this extra &amp;quot;near&amp;quot; feature. Sure we can add that? It&#039;s just a couple of extra lines of code. They clutter up our class, but the customer really wants it so we end up with this: &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/extrafeatures.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Now what does DogmaticMVC have to say about this code? &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/yourmethodsucks.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Here DogmaticMVC no longer sees any reason to stay polite. Feature creep is turning our code into a hairball. But this time we&#039;ll pick lazy honesty over hard work Software Craftsmanship and just slap the method with a @ThisMethodSucks annotation:  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/dogmaticmvc/suckannotation.png&#034; /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt; Are you in Oslo next week? Come see &lt;a href=&#034;http://smidig2010.no/talks/32&#034;&gt;my talk&lt;/a&gt; at the Smidig conference, Wednesday 17th. &lt;/p&gt;
        </description>
      
      
    
    
    
    <category>Java</category>
    
    <comments>http://simplericity.com/2010/11/11/1289510520000.html#comments</comments>
    <guid isPermaLink="true">http://simplericity.com/2010/11/11/1289510520000.html</guid>
    <pubDate>Thu, 11 Nov 2010 21:22:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Make your war file executable with the Jetty Console Maven plugin</title>
    <link>http://simplericity.com/2009/11/10/1257880778509.html</link>
    
      
        <description>
          &lt;p&gt;A while back I made a little Maven plugin that takes a war file and makes it executable. With executable I mean that it embeds a Jetty servlet container. Running java -jar myapp.war will deploy your war with the embedded Jetty instance.&lt;/p&gt;
&lt;p&gt;This provides a very convenient distribution method for Java web applications. It lets you distribute your application as a single artifact. Your users are no longer forced to install a big and ugly app server just to run your app. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;But if they really want to, the war is still a war file that can be deployed the &amp;quot;normal&amp;quot; way in Tomcat, Glassfish, Weblogic, Websphere or any servlet compliant web server. (You tell me you actually use Websphere? Seriously!?).&lt;/p&gt;
&lt;p&gt; With a single distribution in a single file, there&#039;s also less chance of your users getting confused about how to get your application running.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&#034;http://blogs.webtide.com/janb/&#034;&gt;Jan Bartel&lt;/a&gt; of Jetty fame asked for a link describing this plugin and since I didn&#039;t really have any thing useful, here&#039;s a blog post:&lt;/p&gt;
&lt;h2&gt;An example: The Puffin Secrets Webapp&lt;/h2&gt;
&lt;p&gt;Meet the Puffin Secrets webapp. This very small, yet very useful web application let us listen in on the puffins while they chat about Jetty:&lt;/p&gt;
&lt;img src=&#034;http://simplericity.com/images/jettyconsole/puffin-app.png&#034; alt=&#034;&#034; /&gt;&lt;br /&gt;
&lt;p&gt;Since puffins are a bit shy, we need to click the button to see what they really think about Jetty:&lt;/p&gt;
&lt;img src=&#034;http://simplericity.com/images/jettyconsole/puffin-app-love.png&#034; alt=&#034;&#034; /&gt;&lt;br /&gt;
&lt;p&gt;To make this war file executable, we need to add a bit of plugin configuration to our Maven pom.xml:&lt;/p&gt;
&lt;pre&gt;&lt;build&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;org.simplericity.jettyconsole&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;jetty-console-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;1.23&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;executions&amp;gt;&lt;br /&gt;        &amp;lt;execution&amp;gt;&lt;br /&gt;            &amp;lt;goals&amp;gt;&lt;br /&gt;                &amp;lt;goal&amp;gt;createconsole&amp;lt;/goal&amp;gt;&lt;br /&gt;            &amp;lt;/goals&amp;gt;&lt;br /&gt;        &amp;lt;/execution&amp;gt;&lt;br /&gt;    &amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;    &lt;/build&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;After running mvn clean install, we should now have a target directory looking like this:&lt;/p&gt;
&lt;img src=&#034;http://simplericity.com/images/jettyconsole/target-directory.png&#034; alt=&#034;&#034; /&gt;&lt;br /&gt;
&lt;p&gt;Notice the -jetty-console.war version of your war file. This war file is now runnable with java -jar (On a Mac it&#039;s actually double-clickable!). Running the war will start a little Swing console (unless run on a server):&lt;/p&gt;
&lt;img src=&#034;http://simplericity.com/images/jettyconsole/console.png&#034; alt=&#034;&#034; /&gt;&lt;br /&gt;
&lt;p&gt;The flies are there to remind you that you probably have bugs in your code. Still you might want to use a less generic background image. This can be done by adding the following configuration:&lt;/p&gt;
&lt;pre&gt;&lt;configuration&gt;&lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;org.simplericity.jettyconsole&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;jetty-console-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;1.23&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;executions&amp;gt;&lt;br /&gt;        &amp;lt;execution&amp;gt;&lt;br /&gt;            &amp;lt;goals&amp;gt;&lt;br /&gt;                &amp;lt;goal&amp;gt;createconsole&amp;lt;/goal&amp;gt;&lt;br /&gt;            &amp;lt;/goals&amp;gt;&lt;br /&gt;            &amp;lt;configuration&amp;gt;&lt;br /&gt;                &lt;strong&gt;&amp;lt;backgroundImage&amp;gt;${basedir}/src/main/jettyconsole/puffin.jpg&amp;lt;/backgroundImage&amp;gt;&lt;/strong&gt;&lt;br /&gt;            &amp;lt;/configuration&amp;gt;&lt;br /&gt;        &amp;lt;/execution&amp;gt;&lt;br /&gt;    &amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This gives us a much more puffin-relevant background:&lt;/p&gt;
&lt;img src=&#034;http://simplericity.com/images/jettyconsole/console-puffins.png&#034; alt=&#034;&#034; /&gt;&lt;br /&gt;
&lt;p&gt;The console is currently pretty simple. It allows the user to select a port and start the application. As a convenience the console will open a browser with the correct URL. This saves the user some seconds. (When demoing a product, seconds matter!)&lt;/p&gt;
&lt;h2&gt;Command line options&lt;/h2&gt;
&lt;p&gt;While the graphical console is nice for demoing an application or distributing it to testers, for installation on a server we need some command line interaction. You can see a list of available options by typing java -jar myapp.war --help&lt;/p&gt;
&lt;pre&gt;Usage: java org.simplericity.jettyconsole.JettyConsoleStarter [--option=value] [--option=value]&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt; --sslProxied        - Running behind an SSL proxy&lt;br /&gt; --port n            - Create an HTTP listener on port n (default 8080)&lt;br /&gt; --bindAddress addr  - Accept connections only on address addr (default: accept on any address)&lt;br /&gt; --forwarded         - Set reverse proxy handling using X-Forwarded-For headers&lt;br /&gt; --contextPath /path - Set context path (default: /)&lt;br /&gt; --headless          - Don&#039;t open graphical console, even if available&lt;br /&gt; --help              - Print this help message&lt;br /&gt; --tmpDir /path      - Temporary directory, default is /tmp&lt;br /&gt;&lt;/pre&gt;
&lt;h2&gt;Plugins&lt;/h2&gt;
&lt;p&gt;The core of the Jetty console is intentionally kept as small as possible. Additional functionality can be included by adding plugins to your plugin configuration. You might want to add the log4j plugin: &lt;br /&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;configuration&gt;&lt;additionaldependencies&gt;&lt;additionaldependency&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;    &amp;lt;backgroundImage&amp;gt;${basedir}/src/main/jettyconsole/puffin.jpg&amp;lt;/backgroundImage&amp;gt;&lt;br /&gt;    &amp;lt;additionalDependencies&amp;gt;&lt;br /&gt;        &lt;strong&gt;&amp;lt;additionalDependency&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;jetty-console-log4j-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;/additionalDependency&amp;gt;&lt;/strong&gt;&lt;br /&gt;    &amp;lt;/additionalDependencies&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;artifactid&gt;&lt;/artifactid&gt;&lt;/additionaldependency&gt;&lt;/additionaldependencies&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;/pre&gt;
&lt;p&gt;This should give you an extra option when running --help :&lt;/p&gt;
&lt;pre&gt;Usage: java org.simplericity.jettyconsole.JettyConsoleStarter [--option=value] [--option=value]&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt; --sslProxied        - Running behind an SSL proxy&lt;br /&gt; --port n            - Create an HTTP listener on port n (default 8080)&lt;br /&gt; --bindAddress addr  - Accept connections only on address addr (default: accept on any address)&lt;br /&gt; --forwarded         - Set reverse proxy handling using X-Forwarded-For headers&lt;br /&gt; --contextPath /path - Set context path (default: /)&lt;br /&gt; --headless          - Don&#039;t open graphical console, even if available&lt;br /&gt; --help              - Print this help message&lt;br /&gt; --tmpDir /path      - Temporary directory, default is /tmp&lt;br /&gt; &lt;strong&gt;--logConfig file    - Read log4j configuration from file&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;The other plugins currently available are:&lt;/p&gt;
&lt;strong&gt;ajp&lt;/strong&gt;: Lets you configure an AJP connector in Jetty&lt;br /&gt;
&lt;strong&gt;requestlog&lt;/strong&gt;: Allows you to log requests to an access log for traffic analysis&lt;br /&gt;
&lt;strong&gt;jsp&lt;/strong&gt;: Adds JSP support to your application&lt;br /&gt;
&lt;strong&gt;jettyxml&lt;/strong&gt;: Allows you to apply arbitrary Jetty XML configurations to your Server or WebAppContext&lt;br /&gt;
&lt;strong&gt;gzip&lt;/strong&gt;: Compresses your HTML, CSS and Javascript for bandwidth savings&lt;br /&gt;
&lt;p&gt;If the available plugins don&#039;t match your needs, it&#039;s quite easy to make your own and include it with in &amp;lt;additionalDependencies/&amp;gt;&lt;additionaldependencies&gt;. &lt;/additionaldependencies&gt;&amp;lt;additionalDependencies/&amp;gt;&lt;additionaldependencies&gt;&lt;additionaldependencies&gt; can also be used to add normal Maven dependencies, such as a database driver referred to in jetty.xml&lt;/additionaldependencies&gt;&lt;/additionaldependencies&gt;&lt;/p&gt;
&lt;h2&gt;Maven repository configuration&lt;/h2&gt;
&lt;p&gt;Since this plugin is not (yet) in the Maven Central repository, you&#039;ll need to add a pluginRepository to your pom.xml: &lt;br /&gt;
&lt;/p&gt;
&lt;pre&gt;&amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;    &amp;lt;pluginRepository&amp;gt;&lt;br /&gt;        &amp;lt;id&amp;gt;kos&amp;lt;/id&amp;gt;&lt;br /&gt;        &amp;lt;url&amp;gt;http://opensource.kantega.no/nexus/content/groups/public/&amp;lt;/url&amp;gt;&lt;br /&gt;    &amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;&amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;repositories&amp;gt;&lt;br /&gt;    &amp;lt;repository&amp;gt;&lt;br /&gt;        &amp;lt;id&amp;gt;kos&amp;lt;/id&amp;gt;&lt;br /&gt;        &amp;lt;url&amp;gt;http://opensource.kantega.no/nexus/content/groups/public/&amp;lt;/url&amp;gt;&lt;br /&gt;    &amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;lt;/repositories&amp;gt;&lt;/pre&gt;
&lt;p&gt;The complete puffin example webapp is available in Subversion here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#034;http://simplericity.org/svn/simplericity/trunk/jetty-console-example/&#034;&gt;http://simplericity.org/svn/simplericity/trunk/jetty-console-example/&lt;/a&gt;&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>Java</category>
    
    <comments>http://simplericity.com/2009/11/10/1257880778509.html#comments</comments>
    <guid isPermaLink="true">http://simplericity.com/2009/11/10/1257880778509.html</guid>
    <pubDate>Tue, 10 Nov 2009 19:19:38 GMT</pubDate>
  </item>
  
  <item>
    <title>Back from a fantastic Java Posse Roundup 2009</title>
    <link>http://simplericity.com/2009/03/10/1236710820000.html</link>
    
      
        <description>
          &lt;p&gt; After a 30 hours, 5 flights travel, last night I finally made it home from the Java Posse Roundup in lovely Crested Butte, Colorado. After sleeping for 13 hours I&#039;m now feeling quite good.&lt;/p&gt;
&lt;p&gt;&lt;img align=&#034;right&#034; src=&#034;http://simplericity.com/images/jpr09/cb.jpg&#034; alt=&#034;&#034; /&gt;Although I suffered jet lag, got a cold and had altitude induced headaches and nosebleeds I must say this was an absolutely awesome conference experience.  &lt;/p&gt;
&lt;p&gt; Day Zero was the alternative languages day. I enjoyed learning about Scala and LINQ, but after lunch I used my two feet and joined the JavaFX dojo. During lunch break I discussed lightning talks with Tor and Joe and we ended up spending the rest of the day creating a lightning talk timer application. Sitting next to Tor trying to keep up with his JavaFX hacking was very fun. I learned more JavaFX in a couple of hours than I probably would on a week on my own.  &lt;/p&gt;
&lt;p&gt; Tuesday through friday we had open space discussions on a wide variety of Java and software related topics. We had three or four sessions at the same time, so I&#039;m looking forward to hear the ones I missed on the Java Posse podcast. By wednesday I had unfortunately lost my voice due to a cold. This turns out to be a serious handicap on an open space conference. Although I wasn&#039;t able to contribute much in the discussion I still had a great experience and I learned a lot. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#034;http://simplericity.com/images/jpr09/recording.jpg&#034; alt=&#034;&#034; /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The evening &lt;a href=&#034;http://joelneely.wordpress.com/2009/03/06/jpr-2009-thursday-lightning-talks/&#034;&gt;lightning talks&lt;/a&gt;&amp;nbsp; was a great success and we had no trouble filling the slots. The mix of Java and non-technical talks worked out really well. I initially thought five minutes would be too tight, but it allowed for more talks and people really had to stay focused to get their points through. My personal highlight would be James Ward&#039;s Flex UI demos and Andrew Harmel Law&#039;s talk about zombies. &lt;/p&gt;
&lt;p&gt; Crested Butte was a very nice town for this kind of conference. Many of us rented houses around town which turned out to be a great way of getting to know people. Many people went downhill or snowmobiling, but because of my cold I decided cross country skiing would be enough of a challenge. So I had a couple of really nice skiing sessions, here&#039;s a picture from one of them with Dave Briccetti, Dianne Marsh, Dick Wall and Joel Neely:&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img src=&#034;http://simplericity.com/images/jpr09/xc.jpg&#034; alt=&#034;&#034; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Waiting for my connecting flight in Denver I just had to take this picture:&lt;/p&gt;
&lt;img alt=&#034;&#034; src=&#034;http://simplericity.com/images/jpr09/wiperchange.jpg&#034; /&gt;
&lt;p&gt;Seems like the guy is trying to replace the wiper blades of the plane by leaning out the window. Eventually he gave up and a few minutes later a guy with a lift came and finished the job. &lt;br /&gt;
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>Java</category>
    
    <comments>http://simplericity.com/2009/03/10/1236710820000.html#comments</comments>
    <guid isPermaLink="true">http://simplericity.com/2009/03/10/1236710820000.html</guid>
    <pubDate>Tue, 10 Mar 2009 18:47:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
