<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:admin="http://webns.net/mvcb/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Blogger</title>
<link>http://entwickler.com/blogs/syndikator/</link>
<description>/description>
<language>de-de</language>
<copyright>2007-2008 by subsist gmbh - subsist.de</copyright>
<pubDate>Thu, 17 May 2012 04:22:25 +0200</pubDate>
<image>
<url></url>
<title>Blogger</title>
<link>http://entwickler.com/blogs/syndikator/</link>
</image>
<item>
<title>Spring MVC 3.2 Preview: Chat Sample</title>
<description><![CDATA['My last blog post was based on a Spring AMQP stocks sample that involved reacting to external events. This blog post continues that theme with a chat sample where the external events are not AMQP messages but rather HTTP POST requests. Later on I'll switch to a distributed chat where the events will be Redis  <a href="http://blog.springsource.org/2012/05/16/spring-mvc-3-2-preview-chat-sample/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/oUbw2lkNPRg" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/oUbw2lkNPRg/</link>
<author>Rossen Stoyanchev</author>
<pubDate>Thu, 17 May 2012 01:22:55 +0200</pubDate>
</item>
<item>
<title>Der Weg einer Google-Mail - Daily Digest 16.05.2012 </title>
<description><![CDATA['
    <ul><li>12:16 <b>The Story of Send</b><br/>E-Mail-wege - technisch. eindrucksvoll inszenniert von google. <a href='http://www.google.com/green/storyofsend/desktop/'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5315-Der-Weg-einer-Google-Mail-Daily-Digest-16.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Wed, 16 May 2012 14:00:00 +0200</pubDate>
</item>
<item>
<title>Java EE and How to Specify The Unconventional With Convention Over Configuration [Free Article]</title>
<description><![CDATA['The free (registration is required) Java Magazine article <a href="http://www.oraclejavamagazine-digital.com/javamagazine/20120506?sub_id=nFh4uHOwWPeu#pg60" target="_blank">Convention Over Configuration in Java EE 6</a> focuses on the implementation of project and stage dependent configuration with JSF, EJB, JMX, JAX-RS and CDI. <p>Executable Maven 3 project is included and <a href="http://kenai.com/projects/javaee-patterns/sources/hg/show/ConfiguringJavaEE?rev=338" target="_blank">checked-in</a>. Feedback is, as always, highly appreciated!</p>
	<br/>
	<a href="http://workshops.adam-bien.com/real-world-javaee-bootstrap.htm">Real World Java EE Bootstrap </a> and <a href="http://workshops.adam-bien.com/effective-javaee.htm">Effective Java EE Bootstrap</a> Workshops [Airport Munich]
	<a href="http://press.adam-bien.com" target="_self">Books: Real World Java EE Night Hacks - Dissecting Best Practices ...and the bestseller Real World Java EE - Rethinking Best Practices</a>
	<p></p>
	' ]]></description>
<link>http://www.adam-bien.com/roller/abien/entry/java_ee_and_how_to</link>
<author>admin</author>
<pubDate>Wed, 16 May 2012 06:39:30 +0200</pubDate>
</item>
<item>
<title>Twitter Activity Pie, Mobile Testing bei XING, Facebook-Regeln und warum Blogs besser sind als Facebook - Daily Digest 15.05.2012 </title>
<description><![CDATA['
    <ul><li>14:19 <b>TAP: Twitter Follower Analysis</b><br/>How active are youre followers? <a href='http://leumund.ch/tap/'>#</a></li><li>17:08 <b>Facebook Policies</b><br/>Alle Fascebook-Regeln an einer Stelle. <a href='https://www.facebook.com/policies'>#</a></li><li>23:13 <b>Wie Xing Mobiles testet</b><br/>Welche Geräte und Browser werden gecheckt? <a href='http://feedproxy.google.com/~r/XingDevblog/~3/PYHpo8pQF1Y/'>#</a></li><li>08:26 <b>www.best-practice-business.de/blog &raquo; 10 Gründe, warum ein Blog besser ist als ein Facebookauftritt</b><br/>Blogging rules ;) <a href='http://www.best-practice-business.de/blog/?p=27973'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5314-Twitter-Activity-Pie,-Mobile-Testing-bei-XING,-Facebook-Regeln-und-warum-Blogs-besser-sind-als-Facebook-Daily-Digest-15.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Tue, 15 May 2012 12:21:24 +0200</pubDate>
</item>
<item>
<title>Joining Mozilla</title>
<description><![CDATA['<p><img src="http://vector.gissen.nl/mozilla.png" alt="" /></p>
<p>I&rsquo;m very excited to say that as of today I&rsquo;m a Mozillian!  I&rsquo;ll be working with the fine folks on the <a href="https://wiki.mozilla.org/WebAPI">WebAPI</a> team.  This is an entirely new set of technologies for me so I&rsquo;ll be learning a tonne.  I&rsquo;m looking forward to meeting and working with all the excellent people in the Mozilla and broader web communities.  I&rsquo;ll be working out of the beautiful <a href="http://www.mozilla.org/en-US/about/contact#map-canada-toronto">Toronto office</a>.</p>
<p>As for Eclipse and Fedora stuff, I&rsquo;m really looking forward to the release of Linux Tools 1.0 and the rest of Juno in June, 2012.  <a href="http://fedoraproject.org/wiki/Releases/17/Schedule">Before then</a>, Fedora 17 will come out and is going to be an outstanding release, especially from the Eclipse point of view.  As I&rsquo;ll be consuming Eclipse tools for my new work, I&rsquo;ll be sure to file and fix bugs and spread the good word about the power of Eclipse for C++ developers.  When I have some good HOWTO content for developing Mozilla stuff with Eclipse, I&rsquo;ll post it here and be sure to tag it so Planet Eclipse picks it up.</p>
<p>With apologies to Neil Young:  keep on rockin&rsquo; in the Free and Open Source world!</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=387</link>
<author>Andrew Overholt</author>
<pubDate>Mon, 14 May 2012 16:49:27 +0200</pubDate>
</item>
<item>
<title>Twitter: überraschend aktiv</title>
<description><![CDATA['
    Mit dem Tool TAP (<a href="http://leumund.ch/tap/oliverg">twitter activity pie - @oliverg - leumund.ch/tap</a>) kann man ermitteln, wie aktiv die eigenen Follower sind.<br />
<br />
Hier die Statistik für meine 5000+ Follower:<br />
<br />
<img src= http://blog.oliver-gassner.de/uploads/tap-oliverg.jpg /><br />
<br />
Die Differenz zu 5000 besteht wohl aus Leuten mit "gelocktem" Account und "Nur-Lesern".<br />
<br />
Immerhin 25+% sind täglich aktiv und weitere 25+% jede Woche, damit wären 52% meiner Twitterfollower mindestens wöchentlich sendend aktiv.<br />
Die Zahl der 'Active Broadcasters' wäre sogar bei ca 63+%<br />
<br />
Spannender wäre jetzt, wie das Zahlenverhältnis bei den Gefollowten aussieht... Wobei ich hier seit Jahren absolut inaktive 'kicke'.  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5313-Twitter-ueberraschend-aktiv.html</link>
<author>Oliver Gassner</author>
<pubDate>Mon, 14 May 2012 14:15:19 +0200</pubDate>
</item>
<item>
<title>Facebook-Seite: Namen ändern bis 200 Fans  - Daily Digest 14.05.2012 </title>
<description><![CDATA['
    <ul><li>16:38 <b>facebook-Page: bis 200 Fans ist der Name noch änderbar</b><br/>. <a href='http://feedproxy.google.com/~r/Allfacebookde/~3/LJY69vfwkhg/seitenname-andern-jetzt-bis-200-fans-moglich'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5312-Facebook-Seite-Namen-aendern-bis-200-Fans-Daily-Digest-14.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Mon, 14 May 2012 12:13:54 +0200</pubDate>
</item>
<item>
<title>Spring MVC 3.2 Preview: Adding Long Polling to an Existing Web Application</title>
<description><![CDATA['In my last post I discussed how to make a Spring MVC controller method asynchronous by returning a Callable which is then invoked in a separate thread by Spring MVC. But what if async processing depended on receiving an external event that will take place in a thread outside the control of the current request  <a href="http://blog.springsource.org/2012/05/13/spring-mvc-3-2-preview-adding-long-polling-to-an-existing-web-application/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/IPfo9uFNZNM" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/IPfo9uFNZNM/</link>
<author>Rossen Stoyanchev</author>
<pubDate>Mon, 14 May 2012 04:24:20 +0200</pubDate>
</item>
<item>
<title>Stadtlandschaften mit Foursquare analysieren - Daily Digest 13.05.2012 </title>
<description><![CDATA['
    <ul><li>09:48 <b>Livehoods</b><br/>Foursquare used to understand cities: "Re-Imagining the City in the Age of Social Media
Livehoods offer a new way to conceptualize the dynamics, structure, and character of a city by analyzing the social media its residents generate. By looking at people's checkin patterns at places across the city, we create a mapping of the different dynamic areas that comprise it. Each Livehood tells a different story of the people and places that shape it." <a href='http://www.livehoods.org/'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5311-Stadtlandschaften-mit-Foursquare-analysieren-Daily-Digest-13.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Sun, 13 May 2012 10:02:42 +0200</pubDate>
</item>
<item>
<title>Willkommen in der Blogosphäre: Amazon</title>
<description><![CDATA['
    Wurde gerade zu den neuen Amazon-Blogs interviewt. (d.h. der Text da unten ist NICHT von mir ;) )<br />
<i><br />
Amazon will Tech-Blogs Konkurrenz machen<br />
Seriöse Berichterstattung geplan - Aber mit Links zum Shop<br />
<br />
Amazon: Schachteln sind nicht mehr genug (Foto: Wikipedia, gemeinfrei)<br />
<br />
<br />
Seattle (pte020/11.05.2012/11:51) - Internet-Handelsriese Amazon will drei neue Blogs starten, wie The Daily berichtet. Die jeweiligen Themen sind digitale Fotografie, Gadgets und Nerd-Lifestyle. Die Plattformen sollen unvoreingenommene Artikel bieten, die jedoch auf die jeweiligen Produktseiten bei Amazon verlinkt sind. Derzeit sucht Amazon kompetentes Personal für die neuen Betätigungsfelder. Berichte über eigene Produkte wie den Kindle wird der Händler zwar kaum glaubwürdig anbieten können, Experten können sich aber vorstellen, dass sich die neuen Angebote einen Platz unter den beliebtesten Blogs erarbeiten.<br />
<br />
Ehrlichkeit ist Trumpf<br />
<br />
"Außer bei eigenen Produkten kann Amazon kein Interesse daran haben, beeinflusste Rezensionen zu liefern oder Meinungen zu manipulieren, das würde dem Konzern selber schaden. Das Problem mit den eigenen Produkten könnte durch einen separaten Kindle-Blog adressiert werden", sagt Blogger und Kommunikationsberater Oliver Gassner http://blog.oliver-gassner.de im Gespräch mit pressetext. Die Aufmachung der Amazon-Blogs soll sich an erfolgreichen Konkurrenzprodukten wie Gizmodo oder Endgadget orientieren. Insider glauben, dass die Angebote noch in diesem Jahr online gehen.<br />
<br />
Andere Blogs, die dieselben Themengebiete abdecken, werden sich auf starke Konkurrenz einstellen müssen. Amazon hat neben tiefen Taschen auch die Möglichkeit, seine Produkte flächendeckend zu vermarkten. "Solange Amazon nur eine handvoll Blogs hat, sehe ich keine großen Auswirkungen auf die Blogger-Szene. Die Produkte können sich vielleicht unter den Top-Blogs positionieren und große Talente kaufen, aber solange es nicht für jede einzelne Kategorie ein Amazon-Angebot gibt, ist die Vielfalt nicht gefährdet. Viele bestehende Blogs liefern gute Qualität", so Gassner.<br />
<br />
Ernsthafter Versuch<br />
<br />
Amazon hat auch schon früher versucht, Blogs zu betreiben. Neben einem Gadget-Blog namens "End User" gab es sieben weitere Angebote, unter anderem zu den Themen Bücher, Essen, Filme, Musik und Autos. Allerdings werden diese Angebote nicht ernsthaft betrieben. Die letzten Einträge sind teilweise über ein Jahr alt. Mit den neuen Plattformen will Amazon anscheinend mit professionellem Personal einen ernsthaften Versuch machen, seine Marke um drei erfolgreiche Blogs zu erweitern. Ob die User bereit sind, Berichten auf einer Internet-Konzern-Plattform zu trauen, wird sich weisen.<br />
</i><br /><a href="http://www.pressetext.com/">Amazon will Tech-Blogs Konkurrenz machen - pressetext Nachrichtenagentur</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5310-Willkommen-in-der-Blogosphaere-Amazon.html</link>
<author>Oliver Gassner</author>
<pubDate>Fri, 11 May 2012 13:27:47 +0200</pubDate>
</item>
<item>
<title>Spring MVC 3.2 Preview: Making a Controller Method Asynchronous</title>
<description><![CDATA['In previous posts I introduced the Servlet 3, async support feature in Spring MVC 3.2 M1 and provided background on techniques for real-time updates. In today's post I'll turn to the technical details of the new Spring MVC feature and its impact on various aspects of the Spring MVC request lifecycle. To make any existing  <a href="http://blog.springsource.org/2012/05/10/spring-mvc-3-2-preview-making-a-controller-method-asynchronous/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/byf7YG9xtx0" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/byf7YG9xtx0/</link>
<author>Rossen Stoyanchev</author>
<pubDate>Thu, 10 May 2012 20:16:06 +0200</pubDate>
</item>
<item>
<title>Summer Java EE Workshops</title>
<description><![CDATA['<ol>
<li>23.05, Amsterdam <a href="http://www.nljug.org/pages/events/partnercalendar/00077/?template=showevent.html" target="_blank">Airport Java EE Hacking, Without Airport</a>. The dutch version of <a href="http://workshops.adam-bien.com">Airport Hacking</a>. Seems like sold out.</li>
<li>26.06-27.06, Munich <a href="http://java-ee-summit.de/2012spring/trainer/">Java EE Summit. I will give sessions about testing, patterns, anti-patterns and a "Productivity with Joy" workshop</a>. Last year it was sold out.</li>
<li>09.07-10.07, Airport Munich <a href="http://workshops.adam-bien.com/real-world-javaee-bootstrap.htm">Java EE Bootstrap</a> and <a href="http://workshops.adam-bien.com/effective-javaee.htm">Effective Java EE</a> workshops. At the first day I will focus on principles and essentials needed to bootstrap a Java EE project. The second day is all about tools, approaches and tricks for effective Java EE Development. The first edition of this workshop was sold out weeks before. After scaling the venue, there are still some seats available.</li>
</ol>
<br/>
Conclusion: Everything Java EE related is sold out :-)
	<br/>
	<a href="http://workshops.adam-bien.com/real-world-javaee-bootstrap.htm">Real World Java EE Bootstrap </a> and <a href="http://workshops.adam-bien.com/effective-javaee.htm">Effective Java EE Bootstrap</a> Workshops [Airport Munich]
	<a href="http://press.adam-bien.com" target="_self">Books: Real World Java EE Night Hacks - Dissecting Best Practices ...and the bestseller Real World Java EE - Rethinking Best Practices</a>
	<p></p>
	' ]]></description>
<link>http://www.adam-bien.com/roller/abien/entry/summer_java_ee_workshops</link>
<author>admin</author>
<pubDate>Thu, 10 May 2012 18:39:58 +0200</pubDate>
</item>
<item>
<title>Web 2.0 Personalfragen und Linke vs. Rechte Blogger - Daily Digest 10.05.2012 </title>
<description><![CDATA['
    <ul><li>08:55 <b>Wenig Personal für das Sozial Web</b><br/>47% der Firmen dabei <a href='http://m.focus.de/digital/internet/netzoekonomie-blog/social-media-80-prozent-der-unternehmen-ueberlassen-soziale-medien-einem-oder-zwei-mitarbeitern_aid_749004.html'>#</a></li><li>08:52 <b>Linke Vs. Rechte Blogger in den USA</b><br/>traditionell Vs interaktiv <a href='http://science.orf.at/stories/1697600/'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5309-Web-2.0-Personalfragen-und-Linke-vs.-Rechte-Blogger-Daily-Digest-10.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Thu, 10 May 2012 11:53:56 +0200</pubDate>
</item>
<item>
<title>Using Cloud Foundry Workers with Spring</title>
<description><![CDATA['You've no doubt read Jennifer Hickey's amazing blog posts introducing Cloud Foundry workers, their application in setting up Ruby Resque background jobs, and today's post introducing the Spring support. Key Takeaways for Spring Developers You need to update your version of vmc with gem update vmc. Cloud Foundry workers let you run public static void  <a href="http://blog.springsource.org/2012/05/09/using-cloud-foundry-workers-with-spring/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/IujAOH-IJ4M" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/IujAOH-IJ4M/</link>
<author>Josh Long</author>
<pubDate>Wed, 09 May 2012 18:33:09 +0200</pubDate>
</item>
<item>
<title>Spring MVC 3.2 Preview: Techniques for Real-time Updates</title>
<description><![CDATA['In my last post I introduced the new Servlet 3, async support feature in Spring MVC 3.2 M1 in the context of long-running requests. A second very important motivation for async processing is the need for browsers to receive real-time updates. Examples include chatting in a browser, stock quotes, status updates, live sports results, and  <a href="http://blog.springsource.org/2012/05/08/spring-mvc-3-2-preview-techniques-for-real-time-updates/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/phluBNkTYeE" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/phluBNkTYeE/</link>
<author>Rossen Stoyanchev</author>
<pubDate>Tue, 08 May 2012 18:36:04 +0200</pubDate>
</item>
<item>
<title>Like-Kleiderbügel - Daily Digest 08.05.2012 </title>
<description><![CDATA['
    <ul><li>09:01 <b>C&A-Kleiderb;ügel zeigen Facebook-Likes in Echtzeit - Innovationen - derStandard.at ? Web</b><br/>Sehr elegante Hightechlösung zur Koppelung von Facebook und Reality ;) Zefel ob es was nützt oder gar kontraproduktiv ist (ach, das haben dann alle an ...) sind erlaubt ;) Attention bringt es jedenfalls. <a href='http://derstandard.at/1334797225788/Fashion-Likes-CA-Kleiderbuegel-zeigen-Facebook-Likes-in-Echtzeit'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5308-Like-Kleiderbuegel-Daily-Digest-08.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Tue, 08 May 2012 13:52:24 +0200</pubDate>
</item>
<item>
<title>Common Misconceptions: The Waterfall Model</title>
<description><![CDATA['I think the Waterfall Model is the result of a big misunderstanding, probably one of the worst in out industry. <br />
 Look at Royce's original paper (PDF can be found <a href="http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf">here</a>. You will notice that the paper starts with  the separation of different activities such as analysis and coding. To me that sound like an attempt to actually define basic software engineering activities instead of just unstructured hacking. The paper goes on and discusses more different phases that a project might go through. It shows a figure pretty much like the Waterfall model we are used to. No surprises so far.<br />
But then the fun starts: The third figure already shows that the steps are not necessarily performed in order. The text says: 
<br/>
<cite>... as each step progresses and the design is further detailed, there is an iteration with the preceding and succeeding steps but rarely with the more remote steps in the  sequence.</cite><br />
Let me repeat: The original Waterfall paper says that you might need to go back to previous steps, even remote ones. It even uses the term "iteration".<br />
It goes on and discusses that once you run in production you might learn that your system does not perform well enough. That leads to major problems - and you will probably go back to the analysis. You might call it an iterative approach - even though it is probably not voluntarily.<br />
Even better: The paper suggests:<br />
<cite>
If  the computer program in question is being developed for the first time, arrange matters so that the version finally delivered to the customer for operational deployment is actually the second version in so far as critical design / operations  areas are concerned.  
</cite>
<br />
So essentially you should do at least two iterations - the first version will not get it right. Another hint at an iterative process.<br />
And the paper even suggests to involve the customer - probably one of the most important points in Agile practices.<br />
Of course the paper includes sections that are quite different from the Agile school - such as the focus on documentation. But it is from 1970 - and the author is specialized in systems for spacecrafts. Those still rely a lot on documentation even today because of the extreme risks those systems have.<br />
However, the bottom line is that the original Waterfall paper does not advocate what is now considered the Waterfall Model. It does not require going through the steps in order and it even mentions that the first release will not be a good solutions. Quite contrarily: It talks about iterations - very limited of course but it hints the direction Agile and iterative processes took later on.<br />
I am still confused how the industry was able to misunderstand this paper. I wonder how much damage it did. Even today people still talk about Waterfall. I think everyone working with software processes should read this paper. I also suggest to use the term "Misunderstood Waterfall Model" when discussing a model that suggest going through the steps in a strict order. Because that model is just a misunderstanding, it is not what Royce described.<br />
Oh, and next time someone talks about the Waterfall Model - don't forget to ask him or her whether he has read the original paper about it...<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-3515986428377372359?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/wXf7P2AVA82HUfoDKL5ofhaqlIg/0/da"><img src="http://feedads.g.doubleclick.net/~a/wXf7P2AVA82HUfoDKL5ofhaqlIg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wXf7P2AVA82HUfoDKL5ofhaqlIg/1/da"><img src="http://feedads.g.doubleclick.net/~a/wXf7P2AVA82HUfoDKL5ofhaqlIg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=ykovrs8V7ak:91bgSfTAMAE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=ykovrs8V7ak:91bgSfTAMAE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=ykovrs8V7ak:91bgSfTAMAE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=ykovrs8V7ak:91bgSfTAMAE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=ykovrs8V7ak:91bgSfTAMAE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=ykovrs8V7ak:91bgSfTAMAE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/ykovrs8V7ak" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/ykovrs8V7ak/common-misconceptions-waterfall-model.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Tue, 08 May 2012 09:42:00 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 131: GR8Conf 2012 with S&oslash;ren Berg Glasius</title>
<description><![CDATA['Join Glen and S&oslash;ren Berg Glasius as we discuss what's hip and happening at GR8Conf 2012 - when too much Groovy, Grails, Gradle and Griffon is not enough!<br><div><strong id="internal-source-marker_0.279121849918738" style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><p dir="ltr" style="margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><span style="font-size: 13px; font-family: Verdana; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">Show Notes</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt; "><li style="list-style-type: disc; font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://gr8conf.org/"><span style="font-size: 13px; font-family: Verdana; color: #1155cc; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">GR8Conf site</span></a></p></li>
</ul></li>
</strong></div><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=zZhFST2azn4:UynCDzT9w4c:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=zZhFST2azn4:UynCDzT9w4c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=zZhFST2azn4:UynCDzT9w4c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=zZhFST2azn4:UynCDzT9w4c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=zZhFST2azn4:UynCDzT9w4c:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=zZhFST2azn4:UynCDzT9w4c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=zZhFST2azn4:UynCDzT9w4c:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/zZhFST2azn4" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/zZhFST2azn4/253</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Tue, 08 May 2012 09:11:00 +0200</pubDate>
</item>
<item>
<title>A Facelift for Planet Eclipse</title>
<description><![CDATA['<p>It&rsquo;s been a while since Planet Eclipse got the look it has today. There is some work ongoing to refresh the look. It can be previewed on our beta site at <a title="Open Planet Eclipse Beta site." href="http://planet.eclipse.org/planet-new/" target="_blank">http://planet.eclipse.org/planet-new/</a>.</p>
<p><a href="http://wagenknecht.org/blog/wp-content/uploads/2012/05/planet-eclipse-look-2012.png"><img class="aligncenter size-medium wp-image-436" title="planet-eclipse-look-2012" src="http://wagenknecht.org/blog/wp-content/uploads/2012/05/planet-eclipse-look-2012-400x204.png" alt="" width="400" height="204" /></a></p>
<p>Please give us your feedback in <a title="Bug 378285 - Facelift for Planet Eclipse" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=378285" target="_blank">bug 378285</a>.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2012/05/a-facelift-for-planet-eclipse.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=IaFc4EKoDxw:d-u-anjCGRI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=IaFc4EKoDxw:d-u-anjCGRI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=IaFc4EKoDxw:d-u-anjCGRI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=IaFc4EKoDxw:d-u-anjCGRI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=IaFc4EKoDxw:d-u-anjCGRI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=IaFc4EKoDxw:d-u-anjCGRI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=IaFc4EKoDxw:d-u-anjCGRI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=IaFc4EKoDxw:d-u-anjCGRI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=IaFc4EKoDxw:d-u-anjCGRI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=IaFc4EKoDxw:d-u-anjCGRI:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2012/05/a-facelift-for-planet-eclipse.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Mon, 07 May 2012 20:36:53 +0200</pubDate>
</item>
<item>
<title>150 gute Facebook-Kampagnen (Cases) - Daily Digest 07.05.2012 </title>
<description><![CDATA['
    <ul><li>10:37 <b>The Big List : 150 Facebook Pages Campaigns Case Studies | Wise - Facebook Analytics</b><br/> <a href='http://wisemetrics.com/blog/the-big-list-150-facebook-pages-case-studies/'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5307-150-gute-Facebook-Kampagnen-Cases-Daily-Digest-07.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Mon, 07 May 2012 13:34:04 +0200</pubDate>
</item>
<item>
<title>Spring MVC 3.2 Preview: Introducing Servlet 3, Async Support</title>
<description><![CDATA['Overview Spring MVC 3.2 M1 will introduce asynchronous request processing support based on Servlet 3.0. This is the first of several blog posts covering the new feature, providing along the way sufficient background and context to understand how and why you might want to take advantage of it. A major goal of any milestone release  <a href="http://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-support/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/699xI0Epv_Q" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/699xI0Epv_Q/</link>
<author>Rossen Stoyanchev</author>
<pubDate>Mon, 07 May 2012 04:36:35 +0200</pubDate>
</item>
<item>
<title>Great Simplification With EJB [ Screencast ]</title>
<description><![CDATA['<p>
<a href="http://www.adam-bien.com/roller/abien/entry/jsf_jpa_ejb_bloat">Esoteric and home grown transaction</a> handling, as well as, manual JPA management can be replaced with a single <code>@Stateless</code> annotation:
</p>
<p>
<iframe width="560" height="315" src="http://www.youtube.com/embed/uqZCjmpdrDE" frameborder="0" allowfullscreen></iframe>
</p>
<p>
In Java EE 7 you could replace a <code>@Stateless</code> with the ubiquitous <code>@Transactional</code> annotation. However, you will have to type 4 more characters for this purpose :-)
</p>
<p>
See also other screencasts at <a href="http://www.youtube.com/user/bienadam">http://www.youtube.com/user/bienadam</a>
</p>
	<br/>
	<a href="http://workshops.adam-bien.com/real-world-javaee-bootstrap.htm">Real World Java EE Bootstrap </a> and <a href="http://workshops.adam-bien.com/effective-javaee.htm">Effective Java EE Bootstrap</a> Workshops [Airport Munich]
	<a href="http://press.adam-bien.com" target="_self">Books: Real World Java EE Night Hacks - Dissecting Best Practices ...and the bestseller Real World Java EE - Rethinking Best Practices</a>
	<p></p>
	' ]]></description>
<link>http://www.adam-bien.com/roller/abien/entry/great_simplification_with_ejb_screencast</link>
<author>admin</author>
<pubDate>Fri, 04 May 2012 09:17:31 +0200</pubDate>
</item>
<item>
<title>Google+-Follower bestimmen  das Googleranking - Daily Digest 03.05.2012 </title>
<description><![CDATA['
    <ul><li>15:49 <b>Google+ Follower sind gut für das Google Ranking</b><br/>Spannende Statistik, was +1e und Follower auf G+ (etc.) bringen. <a href='http://lumma.de/2012/05/03/google-follower-sind-gut-fur-das-google-ranking/?utm_source=Update+Lumma.de&utm_medium=email&utm_campaign=ba23b8dd04-RSS_EMAIL_CAMPAIGN'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5306-Google+-Follower-bestimmen-das-Googleranking-Daily-Digest-03.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Thu, 03 May 2012 18:30:09 +0200</pubDate>
</item>
<item>
<title>Produktivitätstipps von Benjamin Franklin - Daily Digest 02.05.2012 </title>
<description><![CDATA['
    <ul><li>10:34 <b>Life Lessons From Benjamin Franklin - Business Insider</b><br/> <a href='http://www.businessinsider.com/14-action-inducing-lessons-from-benjamin-franklin-2012-4?utm_medium=twitter&utm_source=twitterfeed'>#</a></li></ul>Automatically published by <a href='http://pubpipe.net/'>PubPipe</a>  
    ' ]]></description>
<link>http://blog.oliver-gassner.de/archives/5305-Produktivitaetstipps-von-Benjamin-Franklin-Daily-Digest-02.05.2012.html</link>
<author>Oliver Gassner</author>
<pubDate>Wed, 02 May 2012 13:02:20 +0200</pubDate>
</item>
<item>
<title>Hanging up my fedora</title>
<description><![CDATA['<p>Two weeks shy of ten years ago, I joined Red Hat as an intern on the Red Hat Database team.  I was incredibly lucky to have gotten that internship and then to have been hired on full time 2 years later.  I&rsquo;ve had a great time working at Red Hat but have made the very difficult decision to leave.  My last day is tomorrow, Monday April 30th.</p>
<p>Red Hat has provided me with many things:  innumerable learning opportunities, career growth, exposure to open source communities, public speaking opportunities at conferences, and more.  Most importantly, though, I&rsquo;ve been given the chance to work with a lot of really amazing people both inside Red Hat and in a variety of vibrant Free Software and Open Source communities.</p>
<p>The Eclipse community has been my home for a few years now.  It&rsquo;s full of some of the most talented and passionate software developers I&rsquo;ve ever met.  I plan to remain involved in the Eclipse world and am looking forward to getting Linux Tools 1.0 released as a part of Juno and what comes after that!</p>
<p>I&rsquo;ve excited for my new job but have a few weeks of down time in between where I hope to largely be AFK.  I&rsquo;ll write a blog entry here when I start my new job.  I&rsquo;ll still be around the open source world and if you&rsquo;d like to contact me I&rsquo;m reachable here on my blog or via various social networks.  I wish everyone continued success both personally and professionally.  Thanks for everything and I&rsquo;ll see you around.</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=373</link>
<author>Andrew Overholt</author>
<pubDate>Sun, 29 Apr 2012 23:43:33 +0200</pubDate>
</item>
<item>
<title>Java SE Development Kit 7 (JDK)--Released For Mac OS X</title>
<description><![CDATA['Oracle releases <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html" target="_blank">Java SE Development Kit 7 (JDK 1.7u4)</a> for Mac OS X. It is the first official Oracle release for Mac OS X. See <a href="http://www.oracle.com/technetwork/java/javase/7u-relnotes-515228.html">Release Notes</a>. 
<p>
JAVA_HOME can be set by putting the following line into the <code>~/.profile</code> file:<br/>
<code>export JAVA_HOME="/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home"</code>
</p>
<p>
NetBeans 7.1.2 was simultaneously <a href="http://netbeans.org/community/releases/71/">released as well</a>. Also Java FX 2.1 is available for Mac and Windows to <a href="http://www.oracle.com/technetwork/java/javafx/downloads/index.html" target="_blank">download</a>.
</p>

	<br/>
	<a href="http://workshops.adam-bien.com/real-world-javaee-bootstrap.htm">Real World Java EE Bootstrap </a> and <a href="http://workshops.adam-bien.com/effective-javaee.htm">Effective Java EE Bootstrap</a> Workshops [Airport Munich]
	<a href="http://press.adam-bien.com" target="_self">Books: Real World Java EE Night Hacks - Dissecting Best Practices ...and the bestseller Real World Java EE - Rethinking Best Practices</a>
	<p></p>
	' ]]></description>
<link>http://www.adam-bien.com/roller/abien/entry/java_se_development_kit_7</link>
<author>admin</author>
<pubDate>Fri, 27 Apr 2012 11:06:48 +0200</pubDate>
</item>
<item>
<title>Are Servlets Thread Safe and What Is The SingleThreadModel?</title>
<description><![CDATA['The <a href="http://jcp.org/en/jsr/summary?id=315">Servlet Specification JSR-315</a> clearly defines the web container behavior in the <code>service</code> (and doGet, doPost, doPut etc.) methods (2.3.3.1 Multithreading Issues, Page 9):
<blockquote>
<p>
"A servlet container may send concurrent requests through the service method of the servlet. To handle the requests, the Servlet Developer must make adequate provisions for concurrent processing with multiple threads in the service method.
</p>
<p>
Although it is not recommended, an alternative for the Developer is to implement the <code>SingleThreadModel</code> interface which requires the container to guarantee that there is only one request thread at a time in the service method. A servlet container may satisfy this requirement by serializing requests on a servlet, or by maintaining a pool of servlet instances. If the servlet is part of a Web application that has been marked as distributable, the container may maintain a pool of servlet instances in each JVM that the application is distributed across.
</p>
<p>
For servlets not implementing the <code>SingleThreadModel</code> interface, if the service method (or methods such as doGet or doPost which are dispatched to the service method of the HttpServlet abstract class) has been defined with the synchronized keyword, the servlet container cannot use the instance pool approach, but must serialize requests through it. It is strongly recommended that Developers not synchronize the service method (or methods dispatched to it) in these circumstances because of detrimental effects on performance".
</p>
</blockquote>
<p>
Servlets are not thread safe and you have to synchronize your code manually what usually leads to <a href="http://www.adam-bien.com/roller/abien/entry/jsf_jpa_ejb_bloat">esoteric implementations</a>.
</p>
	<br/>
	<a href="http://workshops.adam-bien.com/real-world-javaee-bootstrap.htm">Real World Java EE Bootstrap </a> and <a href="http://workshops.adam-bien.com/effective-javaee.htm">Effective Java EE Bootstrap</a> Workshops [Airport Munich]
	<a href="http://press.adam-bien.com" target="_self">Books: Real World Java EE Night Hacks - Dissecting Best Practices ...and the bestseller Real World Java EE - Rethinking Best Practices</a>
	<p></p>
	' ]]></description>
<link>http://www.adam-bien.com/roller/abien/entry/are_servlets_thread_safe_and</link>
<author>admin</author>
<pubDate>Wed, 25 Apr 2012 15:01:59 +0200</pubDate>
</item>
<item>
<title>Slides from JAX 2012</title>
<description><![CDATA['Last week I had the honor to talk at the JAX conference in Mainz, Germany. Here are the slides now:<br /><ul><li><a href="http://www.martinlippert.com/events/JAX2012-SpringUndJavaScript.pdf">Moderne Architektur mit Spring und JavaScript</a> (pdf)</li><li><a href="http://www.martinlippert.com/events/JAX2012-IDEProductivity.pdf">Pimp Your IDE Productivity</a> (pdf)</li></ul>Enjoy!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-6316376380932694?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2012/04/slides-from-jax-2012.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Mon, 23 Apr 2012 16:36:09 +0200</pubDate>
</item>
<item>
<title>The Innovators Patent Agreement</title>
<description><![CDATA['<p>For those of us who work as engineers in the software industry, we may have patented a few things related to software in our careers. Typically, engineers and designers sign an agreement with their company that irrevocably gives that company full control of the patents. The company then can use them however they want, which may include selling them to others who can also use them however they want. These days, there are many non-practicing entities stifling progress, aiming offensive patent lawsuits at software and high-tech companies who are innovating and moving the industry forward. We can do better than this, today at Twitter I&rsquo;m proud we <a href="http://blog.twitter.com/2012/04/introducing-innovators-patent-agreement.html">announced</a> the Innovators Patent Agreement (IPA).</p>
<p>The IPA is a new way to do patent assignment that keeps control in the hands of engineers. It is a commitment from a company to the engineers that patents can only be used for defensive purposes&ndash;that is, only in response to a litigation threat against the company or a recent history of offensive patent use. The company will not use the patents in offensive litigation without the permission of the inventors. With the IPA, employees can be assured that their patents will be used only as a shield rather than as a weapon.</p>
<p>We are still in early stages, and have just started to reach out to other companies to discuss IPA and whether it might make sense for them too. We have posted the <a href="https://github.com/twitter/innovators-patent-agreement">IPA on Github</a>, with the hope that folks improve the IPA in an open source fashion and share it with their respective companies.</p>
<p><a href="https://github.com/twitter/innovators-patent-agreement"><img src="http://aniszczyk.org/wp-content/uploads/2012/04/githubipa-300x219.png" alt="" title="Innovators Patent Agreement" width="300" height="219" class="alignnone size-medium wp-image-3556" /></a></p>
<p>Twitter will implement the IPA later this year, and it will apply to all patents issued to our engineers. If you have comments, feel free to look at the Github repository or join the conversation on Twitter with hashtag <a href="https://twitter.com/#!/search/%23IPA">#IPA</a></p>
' ]]></description>
<link>http://aniszczyk.org/2012/04/17/the-innovators-patent-agreement/</link>
<author>Chris Aniszczyk</author>
<pubDate>Tue, 17 Apr 2012 19:09:40 +0200</pubDate>
</item>
<item>
<title>Some Possible Enhancements for Java and Java EE</title>
<description><![CDATA['The recent discusssion about Java EE and Spring  made me think. Actually I find it odd to fight over the programming model used to develop Java applications. Neither Java EE nor Spring will go away - the market shares of both are just too large. At the end everyone involved in the discussion is trying to sell a platform i.e. an application or web server. That product must offer good support for both programming models - and all the others like Scala, Groovy etc.

IMHO the programming models have a lot in common now. Spring also covers advanced challenges like Social Media, NoSQL etc - see my older blog post <a href="http://jandiandme.blogspot.de/2010/10/spring-vs-java-ee-and-why-i-dont-care.html">Spring vs. Java EE and Why I Don't Care</a>. So it is not in the field of programming models where innovation is laking. Instead we should focus on improving the platform.

So what is it that would really make Java a better platform? Here are some ideas:

<ul>
<li>
Ever since the invention of Java EE roles like the <a href="http://docs.oracle.com/cd/E19798-01/821-1841/bnach/index.html">Application Assember</a> were defined. I never saw a project that followed this workflow. Nowadays there is just an automated process that results in an EAR or even a complete setup including an application server. It is time to face this reality and get rid of these role descriptions. The deployment process is not done that way. Java needs to step away from it.
</li>
<li>
Nowadays application server are seldom used to host more than one application. So maybe that offers some possibilities to improve the deployment processes and also the features. If there is just one application on a server anyway the strict isolation between applications Java EE offers does not make that much sense any more.
</li>
<li>
It would be good to focus more on deployment during the development process. Applications are much more often deployed into testing or development environments than into production. I am wondering how many CPU and I/O cycles are wasted compressing WARs and JARs and then EARs during a build process - and immediately decompressing them on the web or application server so testing can start. Can't the Java EE standard do something about this? Obviously there are exploded WARs and EARs - but they are not used as often as they should be. Obviously there are tools like <a href="http://zeroturnaround.com/jrebel/">JRebel</a> and <a href="http://www.playframework.org/">Play</a> - but what if the complete tool chain including IDEs, build tools, servers etc would support a standard here? What if all of those parties could collaborate to make this work flawlessly? I think we would see quite a boost in developer productivity.
</li>
<li>
Often I see applications modularized in several WARs. These modules need to talk to each other. However, there is no easy way to do this. Usually they end up using Web Services or another HTTP based protocol. Compared to a local method call this adds the overhead of HTTP, sockets and marshalling / demarshalling. A possible solution would be OSGi - but that technology is quite complex. The reason to me seems to be the problems around shared class loading. Classes that might represent parameters or return values can be shared between modules. JBoss includes a solution based on JMX that did not support shared classes - so modules need to have the correct classes available. This is the same as for Web Services or the other HTTP protocols. But there is no standard apart from JMX - which is very low level. Can't we have some communication between WARs that in the standard? Maybe based on JMX? Or at least best practices around it?
</li>
<li>
Concurrency in languages like Erlang is very different from what we are used to in Java. There are <a href="http://en.wikipedia.org/wiki/Actor_model">actors</a> that work on a serial list of messages. Concurrency is achieved by multiple actors working in parallel - while the actors themselves are just working serially. This approach is also used by the Scala library Akka on the JVM. In Erlang this approach leads to lots of actors - far more than the number of threads that can be supported on the JVM. If the JVM wants to stay relevant for this model we need proper support for it.
</li>
<li>
Actors in Erlang and in Google Dart - they are called Isolates have separated heaps. Those heaps can be independently GC'd - so while one actors spends time doing GC the other can continue to work on messages. By design you end up with less stop-the-world-GC. Maybe we could have a similar concept in Java? This is an extension of the previous suggestion but there might be other options as well. For example each WAR file could have a separate heap.</li>
</ul>

Those are just some - possibly crazy - ideas. My intention is to focus on making the Java platform better for all of us. And I believe for that the discussion around the future of Java must focus more on the JVM and the infrastructure like web or application server than on programming models. There is quite some innovation in the area of the programming models anyway. For example there are lots and lots of Open Source projects - frameworks and complete languages. But for infrastructure standards are needed - so any server and environment can work with the solution. So that is what the standardization process should focus on.

What do you think? I am looking forward to your comments!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-8820217940673138173?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/FczL2-tmNxNPTMs0ffB6nZ_aSIE/0/da"><img src="http://feedads.g.doubleclick.net/~a/FczL2-tmNxNPTMs0ffB6nZ_aSIE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FczL2-tmNxNPTMs0ffB6nZ_aSIE/1/da"><img src="http://feedads.g.doubleclick.net/~a/FczL2-tmNxNPTMs0ffB6nZ_aSIE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=YR5c9b61Nn0:7CqLprgLV4A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=YR5c9b61Nn0:7CqLprgLV4A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=YR5c9b61Nn0:7CqLprgLV4A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=YR5c9b61Nn0:7CqLprgLV4A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=YR5c9b61Nn0:7CqLprgLV4A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=YR5c9b61Nn0:7CqLprgLV4A:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/YR5c9b61Nn0" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/YR5c9b61Nn0/some-possible-enhancements-for-java-and.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Tue, 17 Apr 2012 14:56:13 +0200</pubDate>
</item>
<item>
<title>Create Spring Integration Projects using STS</title>
<description><![CDATA['Just days ago, SpringSource Tool Suite&trade; (STS) 2.9.1 was released. Besides many new features, it provides several features that are especially exciting for Spring Integration users. First of all, the latest STS release adds support for Spring Integration 2.1 and improves the visualization capabilities for Spring Integration flows. STS supports now all recently added Spring  <a href="http://blog.springsource.org/2012/04/09/create-spring-integration-projects-using-sts/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/RbecbN8LB6Q" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/RbecbN8LB6Q/</link>
<author>Gunnar Hillert</author>
<pubDate>Mon, 09 Apr 2012 18:46:24 +0200</pubDate>
</item>
<item>
<title>Migrating to Spring 3.1 and Hibernate 4.1</title>
<description><![CDATA['As part of the Core-Spring course, we have a lab application that we use to show how to integrate Spring and JPA/Hibernate together. We have just upgraded it to Spring 3.1 / Hibernate 4.1, and thought we should share a few tips. 1) Maven Dependencies The configuration sample below is based on Maven (but you  <a href="http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/ZxwuW5uqgR8" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/ZxwuW5uqgR8/</link>
<author>Michael Isvy</author>
<pubDate>Fri, 06 Apr 2012 09:59:26 +0200</pubDate>
</item>
<item>
<title>Travis CI</title>
<description><![CDATA['<p>I&rsquo;ve been slightly enamored with <a href="http://travis-ci.org/">Travis CI</a> as of late&hellip;</p>
<p><a href="http://travis-ci.org/"><img class="alignnone size-medium wp-image-3540" title="Travis CI" src="http://aniszczyk.org/wp-content/uploads/2012/04/travisci-300x225.png" alt="" width="300" height="225" /></a></p>
<p>For those who don&rsquo;t know what Travis CI is, it&rsquo;s a hosted continuous integration service for the open source community, still in alpha stages but surprisingly stable from my point of view. It also integrates nicely with your GitHub account so you can easily decide what projects you want to build by logging in using your GitHub credentials. On top of that, the Travis CI code itself is <a href="http://github.com/travis-ci">hosted on GitHub</a> for people to contribute to.</p>
<p>Traditionally, open source projects benefited from having continuous integration service if they were hosted part of an open source foundation, however, Travis CI allows any project to take advantage of the service if they support the language:</p>
<ul>
<li><a href="http://about.travis-ci.org/docs/user/languages/clojure">Clojure</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/erlang">Erlang</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/groovy">Groovy</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/haskell">Haskell</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/java">Java</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/javascript-with-nodejs">JavaScript (with Node.js)</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/perl">Perl</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/php">PHP</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/python">Python</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/ruby">Ruby</a></li>
<li><a href="http://about.travis-ci.org/docs/user/languages/scala">Scala</a></li>
</ul>
<p>For example, I recently decided to <a href="https://github.com/twitter/hogan.js/commit/3f18dbc53ac994b9ea2d792a89d08906f81be216">add</a> Travis CI support to <a href="https://github.com/twitter/hogan.js">hogan.js</a>, which is one of Twitter&rsquo;s open source projects, essentially a compiler for the <a href="https://github.com/mustache/spec">Mustache</a> templating language. You essentially get a nice <a href="http://travis-ci.org/#!/twitter/hogan.js">build status</a> icon that integrates nicely into your GitHub&rsquo;s projects README:</p>
<p><a href="https://github.com/twitter/hogan.js"><img src="http://aniszczyk.org/wp-content/uploads/2012/04/hogantravisci-300x150.png" alt="" title="hogan.js" width="300" height="150" class="alignnone size-medium wp-image-3542" /></a></p>
<p>Adding Travis CI support for the hogan.js Javascript library was fairly trivial, you can take a peak at the <a href="https://github.com/twitter/hogan.js/commit/3f18dbc53ac994b9ea2d792a89d08906f81be216">commit</a> to figure out how it was done or read the Travis CI <a href="http://about.travis-ci.org/docs/user/languages/javascript-with-nodejs">documentation</a>. The only tricky part was ensuring that git submodules were properly initialized and phantomJS was launched so QUnit can successfully run. It&rsquo;s even easier for other languages that Travis CI supports!</p>
<p>In the end, I love what Travis CI is doing for the open source community and how it integrates with GitHub. Continuous integration is something every software project should have and Travis CI makes it really easy to get started. In a future post, I&rsquo;ll considering comparing Travis CI to some of the other CI options out there (e.g., Hudson/Jenkins), but for now, consider trying out or even sponsoring the service.</p>
' ]]></description>
<link>http://aniszczyk.org/2012/04/05/travis-ci/</link>
<author>Chris Aniszczyk</author>
<pubDate>Thu, 05 Apr 2012 17:41:25 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 130 - Newscast for April 2, 2012</title>
<description><![CDATA['Peter and Glen discuss the new Grails 2.0.2 / 1.3.8 fixes around vulnerabilities and also spend some time talking about the new plugin publishing model.&nbsp;<br><div><strong id="internal-source-marker_0.7866969781462103" style="font-family: Times; line-height: normal; font-size: medium; "><p dir="ltr" style="margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><span style="font-size: 13px; font-family: Verdana; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">Show Notes</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt; "><li style="list-style-type: disc; font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://blog.springsource.org/2012/03/28/secure-data-binding-with-grails/"><span style="font-size: 13px; font-family: Verdana; color: #1155cc; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">Jeff Brown's Article on Grails Data Binding</span></a><span style="font-size: 13px; font-family: Verdana; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; "></span></p></li>
<li style="list-style-type: disc; font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://www.anyware.co.uk/2005/2012/03/29/inside-the-grails-dependency-injection-binding-vulnerability/"><span style="font-size: 13px; font-family: Verdana; color: #1155cc; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">Marc Palmer's deep dive on the Vulnerability</span></a><span style="font-size: 13px; font-family: Verdana; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; "></span></p></li>
<li style="list-style-type: disc; font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://www.anyware.co.uk/2005/2012/03/30/grails-platform-core-1-0-m1-plugin-highlights/"><span style="font-size: 13px; font-family: Verdana; color: #1155cc; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">Marc Palmer's article on the new core API</span></a><span style="font-size: 13px; font-family: Verdana; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; "> </span></p></li>
<li style="list-style-type: disc; font-size: 15px; font-family: Arial; background-color: transparent; font-weight: normal; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://gr8conf.org/content/index"><span style="font-size: 13px; font-family: Verdana; color: #1155cc; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; ">GR8Conf</span></a><span style="font-size: 13px; font-family: Verdana; background-color: transparent; vertical-align: baseline; white-space: pre-wrap; "> </span></p></li>
</ul></li>
</strong></div><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WZUIOeDfadk:RX0FVfQ3FU8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WZUIOeDfadk:RX0FVfQ3FU8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=WZUIOeDfadk:RX0FVfQ3FU8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WZUIOeDfadk:RX0FVfQ3FU8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WZUIOeDfadk:RX0FVfQ3FU8:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WZUIOeDfadk:RX0FVfQ3FU8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=WZUIOeDfadk:RX0FVfQ3FU8:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/WZUIOeDfadk" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/WZUIOeDfadk/252</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Mon, 02 Apr 2012 22:59:00 +0200</pubDate>
</item>
<item>
<title>EclipseCon 2012</title>
<description><![CDATA['<p><img src="http://www.eclipsecon.org/2012/sites/all/themes/themes/econ2012/images/logo.png"/></p>
<p>EclipseCon has come and gone again in the blink of an eye!  As usual, it was an outstanding week.  After the annual <a href="http://wiki.eclipse.org/Architecture_Council">Architecture Council</a> meeting on Sunday, I spent Monday morning getting six 8 GB USB sticks prepared for the <a href="http://www.eclipsecon.org/2012/sessions/hands-cc-ide">CDT tutorial</a> that afternoon.  <a href="http://cdtdoug.blogspot.com/">Doug Schaefer</a> kindly stepped up when Bernhard Merkle couldn&rsquo;t make it and I think things went pretty well.  The room was a lot more full than I thought it would be:  18 had pre-registered and after starting with 39 people we probably ended the 3 hours with 25 or so.  Feedback received was very positive which is always nice to hear.  To the person who said you&rsquo;d have liked to see more complex import examples:  we&rsquo;ll try to do add some if we do this again in the future.</p>
<p>Tuesday was the <a href="http://wiki.eclipse.org/CDT/summitecon2012">CDT Summit</a> which featured some great discussions.  I am always impressed by the engagement and growing diversity in the CDT community.  The renewed focus on user experience is heartening and discussions on remote project unification were great.  I know my colleague Jeff Johnston was very happy to hear about the interest of others in the remote area and especially in the suggestions by the PTP project (Greg Watson in particular) of trying to unify the remote project support in the CDT area.  Thanks!</p>
<p>I spent Wednesday in the <a href="http://wiki.eclipse.org/CBI">CBI</a> and <a href="http://wiki.eclipse.org/EclipseLTS">LTS</a> meetings so didn&rsquo;t get to attend any talks.  We&rsquo;re going to continue investigating the feasibility of using CBI for <a href="wiki.eclipse.org/Linux_Tools_Project/Eclipse_Build">eclipse-build</a>-type Eclipse SDK builds and keep talking internally at Red Hat about joining the LTS initiative.</p>
<p>I got to attend talks on Thursday which was nice.  After a great <a href="http://www.eclipsecon.org/2012/sessions/future-alm-developing-social-code-graph">keynote by Mylyn/Tasktop&rsquo;s Mik Kersten</a>, I took in Denis and Wayne&rsquo;s <a href="http://www.eclipsecon.org/2012/sessions/how-i-learned-stop-worrying-and-love-build">roundup of Eclipse build infrastructure</a>.  I already knew the details but it was good to hear it all together.  Next up for me was the <a href="http://www.eclipsecon.org/2012/sessions/news-git-java-land">JGit and EGit update</a> by Matthias Sohn from SAP and Kevin Sawicki from GitHub.  I&rsquo;ve been very impressed with the velocity of the JGit and EGit projects and this talk re-inforced their continued improvements and enhancements.  To round off the morning I attended <a href="http://www.eclipsecon.org/2012/sessions/how-profit-static-analysis">Elena Laskavaia&rsquo;s talk on static analysis</a>.  Elena&rsquo;s <a href="http://wiki.eclipse.org/CDT/designs/StaticAnalysis">Codan</a> framework is a great addition to the CDT and I&rsquo;ll forgive her for not awarding me the Blackberry Playbook (she asked the audience how many bugs on average are found per week by static analysis tools.  Sergey Prirogin from Google guessed 1 and I guessed 3.  The answer was 2 so I guess with <a href="http://www.google.com/search?q=price+is+right+rules">Price is Right rules</a> it was fair that Sergey won <img src='http://overholt.ca/wp/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).  After lunch I checked out the Platform UI team&rsquo;s <a href="http://www.eclipsecon.org/2012/sessions/eclipse-42-tips-api-best-practices-3x-plugin-running-both-platforms">Eclipse 4.2 tips talk</a> which showed some of the great work that&rsquo;s gone on in Eclipse 4.x.  After that I heard <a href="http://www.eclipsecon.org/2012/sessions/automatic-remote-project-synchronization-using-git">Greg Watson discuss the PTP project&rsquo;s git-based remote project synchronization</a>.  It&rsquo;s an excellent idea and I&rsquo;ll have to look into it more.  Finally, I attended <a href="http://www.eclipsecon.org/2012/sessions/c-refactoring-now-real">Sergey&rsquo;s &ldquo;C++ refactoring:  this time for real&rdquo; talk</a> and he showed off the superb work he&rsquo;s done to get the CDT&rsquo;s C++ refactoring tools up to snuff.  After inadvertently showing off a bug in this at FOSDEM, it&rsquo;s nice to know it&rsquo;ll be in so much better shape for Juno.</p>
<p>Today (Friday), John Arthorne, Alex Kurtakov and I went into D.C. with and Dave and Justin from eBay.  It certainly is an impressive capital city!  Eight hours of walking let us take in the Washington Monument, the Lincoln Memorial, the various war memorials, the White House (from afar), the &ldquo;International Spy Museum&rdquo;, and the (free and awesome!) Air & Space Museum.  I&rsquo;ll be sure to come back to D.C. some day to take more in.</p>
<p>It was great seeing everyone this week!</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=371</link>
<author>Andrew Overholt</author>
<pubDate>Mon, 02 Apr 2012 22:50:08 +0200</pubDate>
</item>
<item>
<title>Summer of Code 2012</title>
<description><![CDATA['<p>It&rsquo;s that time of year, where post-secondary students get to apply to their favorite open source organization for Google&nbsp;<a href="http://code.google.com/soc/">Summer of Code</a>&nbsp;(GSOC). Essentially, Google pays students to hack on open source projects over the summer, which is just amazing.</p>
<p><a href="http://www.google-melange.com/gsoc/homepage/google/gsoc2012"><img class="alignnone size-medium wp-image-3531" title="Google Summer of Code 2012 Logo" src="http://aniszczyk.org/wp-content/uploads/2012/04/GSOC12logo-300x152.png" alt="" width="300" height="152" /></a></p>
<p>As a student, you get a stipend of of $5000 USD and the respective mentoring organization gets $500. Students have from March 26th through April 6th to apply to the mentoring organizations that they are interested in. Afterwards, the mentoring organizations rank and review the proposals. Finally, the accepted proposals are announced on April 23rd.</p>
<p>If you qualify (you&rsquo;re a student and older than 18) and have some coding skills, I highly recommend you consider doing GSOC as it&rsquo;s a great way to learn something, get some experience and even get a job potentially. I recommend looking over the list of <a href="http://www.google-melange.com/gsoc/accepted_orgs/google/gsoc2012">mentoring organizations</a>. I&rsquo;m excited this year because <a href="https://github.com/twitter/twitter.github.com/wiki/Google-Summer-of-Code-2012">Twitter is a mentoring organization</a> and we will have some students work on some of our open source projects. Of course, the Eclipse Foundation is participating and has a great list of <a href="http://wiki.eclipse.org/Google_Summer_of_Code_2012_Ideas">project ideas</a>.</p>
<p>In the end, if you&rsquo;re a student, just do it if you don&rsquo;t have anything else crazy lined up. You get to work with quality mentoring organizations that have been vetted as great places to get started on working on open source.</p>
' ]]></description>
<link>http://aniszczyk.org/2012/04/02/summer-of-code-2012/</link>
<author>Chris Aniszczyk</author>
<pubDate>Mon, 02 Apr 2012 20:30:36 +0200</pubDate>
</item>
<item>
<title>Testing: Again</title>
<description><![CDATA['As you have probably noticed, the last blog posting <a href="http://jandiandme.blogspot.de/2012/04/testing-considered-harmful.html">Testing Considered Harmful</a> was actually a April Fool's Joke. I believe Test Driven Development is one of the most important innovations in the last years. I have been infected ever since Kent Beck explained JUnit to me.

Here are some things adesso does to make TDD a reality:

<ul>
<li>
We did an internal <a href="http://coderetreat.org/">Code Retreat</a>
</li>
<li>
We are sponsoring the <a href="http://coderetreat-berlin.de/2012/">Legacy Code Retreat</a> in Berlin.
</li>
<li>
Also adesso Mobile Solutions does internal Katas.
</li>
</ul>

The list could go on. So please program - and drive - safely! If you were caught by the April Fool's Joke: I hope you don't mind. If you do: I apologize.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-3771531700522337183?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/IfuZBF9A8ZUPZ8VlF3iK0zoSakg/0/da"><img src="http://feedads.g.doubleclick.net/~a/IfuZBF9A8ZUPZ8VlF3iK0zoSakg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IfuZBF9A8ZUPZ8VlF3iK0zoSakg/1/da"><img src="http://feedads.g.doubleclick.net/~a/IfuZBF9A8ZUPZ8VlF3iK0zoSakg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=mEB0bX5ql4s:wW9pPZvBoPU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=mEB0bX5ql4s:wW9pPZvBoPU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=mEB0bX5ql4s:wW9pPZvBoPU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=mEB0bX5ql4s:wW9pPZvBoPU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=mEB0bX5ql4s:wW9pPZvBoPU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=mEB0bX5ql4s:wW9pPZvBoPU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/mEB0bX5ql4s" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/mEB0bX5ql4s/testing-again.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Mon, 02 Apr 2012 16:26:54 +0200</pubDate>
</item>
<item>
<title>Testing Considered Harmful</title>
<description><![CDATA['Unit testing started with JUnit - and was infectious. As you can see in <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">JUnit Test Infected: Programmers Love Writing Tests</a> that was the intention from the very beginning. And so the infection spread.<p />

Nowadays almost all programmers do extensive Unit Tests. And therefore we see problems arising. Instead of thinking about a problem and building a reliable solution developers now just write a test and code away. At one point they get a green bar and consider the job done. But can you build proper software that way? Dijkstra stated in 1972: "If you want more effective programmers, you will discover that they should not waste their time debugging, they should not introduce the bugs to start with." - see <a href="http://en.wikiquote.org/wiki/Edsger_W._Dijkstra">Wikiquote</a>. I think the same holds true for testing. So instead of the ever famous code-test-refactor cycle we could use more of the <a href="http://c2.com/cgi/wiki?FeynmanAlgorithm">Feynman Way of Solving Problems</a>. If you really think about the solution first you will find you won't need a test. Instead you will actually write correct code from the beginning. You won't need to rely on tests. They cannot show the absence of bugs anyway - as Dijkstra mentioned. In the end you will end up with cleaner code and less code - as there are no tests to be written. <p />

This principle can be applied to other areas as well. I think one reason why there are so many car accidents are the very effective brakes cars have now. If we had less effective brakes people would think about possible problems beforehand, drive more carefully - and we would have less accidents.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-4737069305036575324?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/LAcu4P2q6ITi47e_R44wXvj87Sc/0/da"><img src="http://feedads.g.doubleclick.net/~a/LAcu4P2q6ITi47e_R44wXvj87Sc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LAcu4P2q6ITi47e_R44wXvj87Sc/1/da"><img src="http://feedads.g.doubleclick.net/~a/LAcu4P2q6ITi47e_R44wXvj87Sc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=fDBsDa6Ejs8:PiOyJQ_r78o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=fDBsDa6Ejs8:PiOyJQ_r78o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=fDBsDa6Ejs8:PiOyJQ_r78o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=fDBsDa6Ejs8:PiOyJQ_r78o:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=fDBsDa6Ejs8:PiOyJQ_r78o:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=fDBsDa6Ejs8:PiOyJQ_r78o:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/fDBsDa6Ejs8" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/fDBsDa6Ejs8/testing-considered-harmful.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Sun, 01 Apr 2012 13:57:38 +0200</pubDate>
</item>
<item>
<title>Secure Data Binding With Grails</title>
<description><![CDATA['Introduction The Grails Framework provides a lot of tools and techniques to web application developers to simplify solving common application development challenges. Among those are a number of things which simplify the complicated and tedious problems often associated with data binding. In general, data binding is made very simple by Grails as it offers several  <a href="http://blog.springsource.org/2012/03/28/secure-data-binding-with-grails/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/uvbKBMTEqXA" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/uvbKBMTEqXA/</link>
<author>Jeff Brown</author>
<pubDate>Wed, 28 Mar 2012 18:43:36 +0200</pubDate>
</item>
<item>
<title>EclipseCon 2012</title>
<description><![CDATA['<p>Next week, I&rsquo;ll be at <a href="http://www.eclipsecon.org/2012">EclipseCon 2012</a>.</p>
<p><a href="http://www.eclipsecon.org/2012/"><img class="alignnone size-medium wp-image-3526" title="EclipseCon 2012" src="http://aniszczyk.org/wp-content/uploads/2012/03/eclipsecon2012-300x85.png" alt="" width="300" height="85" /></a></p>
<p>I look forward to attending the Eclipse Foundation board meeting and also giving the <a href="http://www.eclipsecon.org/2012/sessions/git-tutorial">Git tutorial</a> with colleagues. Over half the projects on eclipse.org have already <a href="http://eclipse.org/projects/scmcountdown.php">moved to Git</a>, if you haven&rsquo;t yet or have hesitations, I highly recommend you attend the tutorial. Also, If you just want to grab a frosty beverage and chat open source let me know. I would love to talk to eclipse.org committers who have some ideas on how to make committer life better at the Eclipse Foundation.</p>
<p>See you there!</p>
' ]]></description>
<link>http://aniszczyk.org/2012/03/24/eclipsecon-2012/</link>
<author>Chris Aniszczyk</author>
<pubDate>Sun, 25 Mar 2012 01:36:33 +0100</pubDate>
</item>
<item>
<title>Early Access: SpringSource Tool Suite for Eclipse Juno (4.2)</title>
<description><![CDATA['Wanna use the SpringSource Tool Suite on the latest Eclipse Juno (4.2) milestone builds? Here you go:&nbsp; How to install Download and install the latest:&nbsp;Eclipse Juno JEE milestone build Download the&nbsp;bookmarks.xml and import that to your list of update sites (Preferences -> Install/Update -> Available Update Sites -> Import). Go to "Install New Software" and  <a href="http://blog.springsource.org/2012/03/14/early-access-springsource-tool-suite-for-eclipse-juno-4-2/"><em>Read more...</em></a><img src="http://feeds.feedburner.com/~r/SpringSourceTeamBlog/~4/c8_c5x5FA14" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/SpringSourceTeamBlog/~3/c8_c5x5FA14/</link>
<author>Martin Lippert</author>
<pubDate>Wed, 14 Mar 2012 12:16:01 +0100</pubDate>
</item>
<item>
<title>Raspberry Pi</title>
<description><![CDATA['<div id="attachment_362" class="wp-caption aligncenter" style="width: 310px"><a href="http://overholt.ca/wp/wp-content/uploads/2012/03/raspberrypitalk.jpg"><img src="http://overholt.ca/wp/wp-content/uploads/2012/03/raspberrypitalk-300x145.jpg" alt="Chris Tyler's Raspberry Pi talk at Red Hat's Toronto office" title="Chris Tyler's Raspberry Pi talk at Red Hat's Toronto office" width="300" height="145" class="size-medium wp-image-362" /></a><p class="wp-caption-text">Chris Tyler speaking about the Raspberry Pi at Red Hat's Toronto office</p></div>
<p><a href="http://blog.chris.tylers.info/">Chris Tyler</a> of <a href="http://senecac.on.ca/">Seneca College</a>, <a href="http://fedoraproject.org/wiki/User:Ctyler">Fedora</a>, and much other fame graciously took some time out of his busy schedule to give a talk about the <a href="http://www.raspberrypi.org/">Raspberry Pi</a> at Red Hat&rsquo;s Toronto office last week.  It was fun to see the pre-production model in action running Fedora 14 (the plan is to have Fedora 17 running on it very soon).  Chris showed off the some of the hardware&rsquo;s capabilities with an OpenGL demo and a very smooth playback of <a href="http://www.bigbuckbunny.org/">&lsquo;Big Buck Bunny&rsquo;</a>.  We discussed some of <a href="http://overholt.ca/wp/?p=355">the recent work</a> getting OpenJDK (specifically <a href="http://en.wikipedia.org/wiki/HotSpot">HotSpot</a>) and Eclipse running on ARM and if that would apply to the Raspberry Pi.  Short answer:  it definitely should, but has yet to be verified on actual Raspberry Pi hardware.</p>
<p><center><a href="http://overholt.ca/wp/wp-content/uploads/2012/03/raspberrypie.jpg"><img src="http://overholt.ca/wp/wp-content/uploads/2012/03/raspberrypie-300x225.jpg" alt="Mmm, raspberry pie" width="300" height="225" class="size-medium wp-image-362" /></a></center></p>
<p>Delicious raspberry pies (my personal favourite!) were procured from <a href="http://www.wandaspieinthesky.com/">Wanda&rsquo;s Pie In The Sky</a>.  Interestingly enough, the person I spoke with at Wanda&rsquo;s told me that raspberry pies were popular in the 1980s but are not very popular these days.  <aghast>Have Ontario&rsquo;s pie tastes changed?</aghast>  Regardless, Wanda&rsquo;s is supposedly doing something with raspberries for <a href="http://www.piday.org/">Pi Day</a> on Wednesday so check it out if you&rsquo;re in the Kensington Market area.</p>
<p>Thanks for the great talk, Chris!</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=358</link>
<author>Andrew Overholt</author>
<pubDate>Mon, 12 Mar 2012 19:53:40 +0100</pubDate>
</item>
<item>
<title>Tip: Use Google Reader synchronization to never loose any news</title>
<description><![CDATA['Since RSSOwl 2.1 you can synchronize your entire list of subscriptions with a Google Reader account. One of the less obvious advantages of doing so is being able to download an unlimited number of news from any feed you are subscribed to, even if the news is old enough to no longer be part of the feed. This is because Google stores all news of the feeds you are subscribed to on their servers and RSSOwl can access them directly from Google.
<br /><br />
To configure this, simply set the number of news to keep per feed (<i>Properties | Clean Up | Maximum number of news to keep</i>) to a high value (up to 1000) and RSSOwl will download all news until the limit is reached. Similar, even when you are on vacation for some weeks, as soon as RSSOwl loads the feed after you are back, you will not loose any article.
<br /><br />
More advantages of using Google Reader synchronization can be found in our <a href="/help">FAQ</a>.<br /><br /><a href="http://www.rssowl.org/node/296">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/296</link>
<author>bpasero</author>
<pubDate>Fri, 09 Mar 2012 08:58:47 +0100</pubDate>
</item>
<item>
<title>Eclipse Board Elections 2012</title>
<description><![CDATA['<p>As Mike Milinkovich recently <a href="https://mmilinkov.wordpress.com/2012/02/27/voting-is-open/">mentioned</a>, voting is now open for the Eclipse Foundation&rsquo;s Board of Directors election&nbsp;until 3:00pm Eastern on March 16, 2012. I highly recommend you take a list of the <a href="http://www.eclipse.org/org/elections/nominees.php">candidates</a>, read their position statements and cast your vote.</p>
<p><a href="http://www.eclipse.org/org/elections/candidate.php?year=2012&id=aniszczyk">I&rsquo;m running this year</a> for one of the committer representative spots and plan to continue to do my best to represent committers if given the opportunity again. I&rsquo;ve had the honor to be on the board for the last few years and have helped push through changes that I thought were important for the committer community. For example, I would like to see our <a href="http://eclipse.org/projects/scmcountdown.php">migration to Git</a> through, we are getting close and I would like to see this happen by the end of 2012&hellip;</p>
<p>&nbsp;</p>
<p><a href="http://eclipse.org/projects/scmcountdown.php"><img class="alignnone size-medium wp-image-3514" title="Eclipse Git Migration" src="http://aniszczyk.org/wp-content/uploads/2012/02/eclipsescm1-300x65.png" alt="" width="300" height="65" /></a></p>
<p>In terms of the future, there are three main things that are important to me:</p>
<p>There are many businesses that adopt Eclipse tools and runtimes, it&rsquo;s important that we find a way to support these&nbsp;existing&nbsp;adopters while moving the eclipse.org mission forward. There are companies with mature products built on Eclipse with long support cycles that need to be&nbsp;accommodated. For example, Airbus has a crazy ~30 year support cycle on the planes that they build using Eclipse software. One way to do this is supporting the <a href="http://wiki.eclipse.org/LTS/Charter">Long Term Support</a> industry working group and ensuring we have the infrastructure (e.g., common build) in place to support these scenarios.</p>
<p>It&rsquo;s great that the eclipse.org community prides itself on clean Intellectual Property, I&rsquo;m proud of what we do and it&rsquo;s crucial for certain types of commercial adopters. However, the downside to the <a href="http://www.eclipse.org/projects/dev_process/ip-process-in-cartoons.php">Eclipse IP process</a> is that it can be a barrier to contribution due to the process and record keeping. Given that the software world has <a href="http://www.wired.com/wiredenterprise/2012/02/github/all/1">changed</a>&nbsp;in recent years with the advent of Git (distributed version control), GitHub and notion of social coding, we should take a <strong>serious look</strong> at improving our IP process to work in this new world. Can we find a ways to simplify the contribution process using Git or Gerrit? Can we find a way to host an eclipse.org project outside the eclipse.org infrastructure, say on GitHub? I know,&nbsp;heresy, right <img src='http://aniszczyk.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ?</p>
<p>Finally, I would like to continue pushing on eclipse.org&rsquo;s foray into web tooling via projects like <a href="http://eclipse.org/orion/">Orion</a>. It&rsquo;s great to see Mozilla Firefox already <a href="http://blog.mozilla.com/blog/2012/01/31/firefox-adds-powerful-new-developer-tools/">adopting</a> Orion in its developer tools, but we can do more in this space.</p>
<p>In the end, I encourage everyone to vote and make your voice heard.</p>
' ]]></description>
<link>http://aniszczyk.org/2012/02/29/eclipse-board-elections-2012/</link>
<author>Chris Aniszczyk</author>
<pubDate>Wed, 29 Feb 2012 19:09:31 +0100</pubDate>
</item>
<item>
<title>Eclipse for ARM-based machines with HotSpot</title>
<description><![CDATA['<p>It&rsquo;s great to see the recent progress on Linux for the ARM architecture.  This is now being matched by a capable OpenJDK JIT and of course Eclipse.  At FOSDEM, <a href="http://labb.zafena.se/">Xerxes R&aring;nby</a> showed me Eclipse running on an ARM laptop-ish device (running Debian).  <a href="http://nullr0ute.com/">Peter Robinson</a> of Fedora fame had a similar machine at the Red Hat Summit last year in Boston.  Now <a href="http://wagiaalla.com">Sami Wagiaalla</a> has gotten things building and running on Fedora:</p>
<p><a href="http://wagiaalla.com/2012/02/21/eclipse-on-arm/"><img src="http://wagiaalla.files.wordpress.com/2012/02/eclipse-on-arm1.png?w=450&h=338" alt="" title="eclipse-on-ARM" width="450" height="338" class="aligncenter size-full wp-image-384" /></a></p>
<p>Of course, it goes without saying that these are both running on OpenJDK with <a href="http://aph.fedorapeople.org/fosdem2012.pdf">Andrew Haley</a> & co.&rsquo;s <a href="http://arm.koji.fedoraproject.org/koji/packageinfo?packageID=3337">work</a> on porting HotSpot to ARM.  Things are quite usable on these low power devices even if Eclipse is a bit slow to start up.  Great work all around!</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=355</link>
<author>Andrew Overholt</author>
<pubDate>Thu, 23 Feb 2012 23:36:30 +0100</pubDate>
</item>
<item>
<title>LH: The Best News Reader Application for Linux</title>
<description><![CDATA['Nice to see <a href="http://lifehacker.com/5886059/the-best-news-reader-application-for-linux" target="_blank" rel="nofollow">this story</a> from lifehacker naming RSSOwl the best news reader for Linux. <br /><br /><a href="http://www.rssowl.org/node/295">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/295</link>
<author>bpasero</author>
<pubDate>Sun, 19 Feb 2012 13:28:42 +0100</pubDate>
</item>
<item>
<title>EGit and JGit 1.3 Released</title>
<description><![CDATA['<p>The <a href="http://eclipse.org/egit">EGit</a> and <a href="http://eclipse.org/jgit">JGit</a> teams are happy to announce the 1.3 release, just in time for Eclipse Indigo SR2.</p>
<p><a href="https://docs.google.com/present/edit?id=0AXi3pDi3yVgNYWprbmgyZnFnZzIzXzc0M2c1eHd4N241&authkey=CJmN6JIP"><img class="alignnone size-medium wp-image-3504" style="border-image: initial; border-width: 1px; border-color: black; border-style: solid;" title="EGit and JGit 1.3" src="http://aniszczyk.org/wp-content/uploads/2012/02/egitjgit13-300x223.png" alt="" width="300" height="223" /></a></p>
<p>The precise release version is&nbsp;<code>1.3.0.201202151440-r</code></p>
<p>It can be downloaded from the&nbsp;<a href="http://marketplace.eclipse.org/content/egit-git-team-provider">Eclipse Marketplace</a>&nbsp;or the&nbsp;<a href="http://download.eclipse.org/egit/updates">p2 repository</a>.</p>
<p>There&rsquo;s a lot of new improvements, the largest being git-submodule support:</p>
<p><a href="http://aniszczyk.org/wp-content/uploads/2012/02/Egit-13-submodules-node.png"><img class="alignnone size-medium wp-image-3505" title="Egit-13-submodules-node" src="http://aniszczyk.org/wp-content/uploads/2012/02/Egit-13-submodules-node-300x252.png" alt="" width="300" height="252" /></a></p>
<p>I&rsquo;m also a huge fan of the branch status decorations:</p>
<p><a href="http://aniszczyk.org/wp-content/uploads/2012/02/Egit-13-branch-decorations.png"><img class="alignnone size-medium wp-image-3506" title="Egit-13-branch-decorations" src="http://aniszczyk.org/wp-content/uploads/2012/02/Egit-13-branch-decorations-300x84.png" alt="" width="300" height="84" /></a></p>
<p>If you&rsquo;re interested in the details of what&rsquo;s new, check out the&nbsp;<a href="http://wiki.eclipse.org/JGit/New_and_Noteworthy/1.3">JGit New and Noteworthy</a>&nbsp;and the&nbsp;<a href="http://wiki.eclipse.org/EGit/New_and_Noteworthy/1.3">EGit New and Noteworthy</a>.</p>
<p><em>Note that this is the last release in the 1.X stream for EGit and JGit, there will be a 2.0 release in June targeting the Eclipse <a href="http://eclipse.org/juno">Juno</a>&nbsp;simultaneous&nbsp;release. When we move to 2.0, there will be some breaking API changes and API cleanup that happens. If there was something you didn&rsquo;t like about the API, now is your chance to speak up and <a href="http://wiki.eclipse.org/EGit/Contributor_Guide">contribute</a>.</em></p>
' ]]></description>
<link>http://aniszczyk.org/2012/02/16/egit-and-jgit-1-3-released/</link>
<author>Chris Aniszczyk</author>
<pubDate>Thu, 16 Feb 2012 17:52:12 +0100</pubDate>
</item>
<item>
<title>Gerrit at the Eclipse Foundation</title>
<description><![CDATA['<p>Good news everyone, the Eclipse Foundation has been git&rsquo;n it done and rolled out <a href="http://code.google.com/p/gerrit/">Gerrit</a> to be used by any eclipse.org project who wishes to do so.</p>
<p><a href="https://git.eclipse.org/r/"><img class="alignnone size-medium wp-image-3498" style="border-image: initial; border-width: 1px; border-color: black; border-style: solid;" title="Gerrit at Eclipse Foundation" src="http://aniszczyk.org/wp-content/uploads/2012/02/gerriteclipse-300x276.png" alt="" width="300" height="276" /></a></p>
<p>If you&rsquo;re interested in using Gerrit for your eclipse.org project, please speak up on this <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283749#c141">bug</a>.</p>
<p>It&rsquo;s satisifying to see this finally be rolled out as a few of us committers have been pushing on this for the past couple of years as a way to modernize the Eclipse&nbsp;infrastructure. We have been piloting Gerrit for quite awhile in the EGit and JGit projects and have been very pleased with it. It&rsquo;s great that Eclipse committers now have a convenient way of doing code reviews using Git if they wish to add that workflow for their project.</p>
<p>On a side note, I&rsquo;m working on improving the way <a href="http://wiki.eclipse.org/Development_Resources/Handling_Git_Contributions">git contributions are handled</a> by the Eclipse Foundation when contributors use Gerrit. I&rsquo;m hoping to simplify the amount of work that needs to be done by committers and the IP team, if you&rsquo;re interested in this effort, please follow and comment on this <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=371412">bug</a>.</p>
' ]]></description>
<link>http://aniszczyk.org/2012/02/13/gerrit-at-the-eclipse-foundation/</link>
<author>Chris Aniszczyk</author>
<pubDate>Mon, 13 Feb 2012 20:47:12 +0100</pubDate>
</item>
<item>
<title>Eclipse at FOSDEM recap</title>
<description><![CDATA['<p>Last weekend was FOSDEM in Brussels, Belgium.  We had a lot of people come by the Eclipse stand to say they were happy users which was great to hear.  It&rsquo;s understandable that many people did not know about the diversity of Eclipse projects so it was great having <a href="http://wagenknecht.org/blog/">Gunnar</a> to show off <a href="http://eclipse.org/rt/">RT</a> stuff, <a href="http://mmilinkov.wordpress.com/">Mike</a> to show <a href="http://eclipse.org/orion/">Orion</a>, and myself to demonstrate some of the CDT and Linux Tools functionality.</p>
<p><center><img src="http://wagenknecht.org/blog/wp-content/uploads/2012/02/2-IMG_1242.jpg" width="400"/><br />
<em>Booth photo, shamelessly stolen from <a href="http://wagenknecht.org">Gunnar</a></em></center></p>
<p>My <a href="http://fosdem.org/2012/schedule/event/cdt">lightning talk</a> (<a href="http://fedorapeople.org/~overholt/FOSDEM2012-Eclipse-CDT.pdf">slides here</a>) was right after <a href="http://fosdem.org/2012/schedule/event/eclipsert">Gunnar&rsquo;s</a> and IMO both did what they set out to do:  to provide an introduction to some parts of Eclipse and hopefully pique people&rsquo;s interest to learn more.  More than one person came up to me afterwards asking for more details or telling me they were going to try things out and report any bugs they find.  I look forward to hearing from those people.</p>
<p><center></p>
<table>
<tr>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120203_192222.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120203_192222.jpg"/></a><br />
<em><a href="http://gbenson.net/">Gary Benson</a> and <a href="http://labb.zafena.se/">Xerxes R&aring;nby</a> looking at Eclipse running on OpenJDK on ARM</em>
</td>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120203_211926.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120203_211926.jpg"/></a><br />
<em>Beer event at <a href="http://www.deliriumcafe.be/">Delirium Cafe</a></em>
</td>
</tr>
<tr>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120203_234500.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120203_234500.jpg"/></a><br />
<em>It&rsquo;s Scientastic!</em>
</td>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120204_120337.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120204_120337.jpg"/></a><br />
<em>View from Eclipse booth.  There was a giant stuffed camel looking the other way.</em>
</td>
</tr>
<tr>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120204_180632.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120204_180632.jpg"/></a><br />
<em>Omair Majid and Jon VanAlten debuting <a href="http://icedtea.classpath.org/thermostat/">Thermostat</a></em>
</td>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120205_095051.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120205_095051.jpg"/></a><br />
<em>Mike&rsquo;s future O&rsquo;Reilly book</em>
</td>
</tr>
<tr>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120205_190023.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120205_190023.jpg"/></a><br />
<em><a href="http://bytemanblog.blogspot.com/2012/02/byteman-talk-at-fosdem.html">Andrew Dinn</a>, Chris Phillips, Jon ValAlten, and <a href="wagenknecht.org">Gunnar Wagenknect</a></em>
</td>
<td>
<a href="http://overholt.ca/blogimages/FOSDEM2012/IMG_20120205_190051.jpg"><img src="http://overholt.ca/blogimages/FOSDEM2012/small/IMG_20120205_190051.jpg"/></a><br />
<em><a href="http://eclipseandlinux.blogspot.com/">Krzysztof Daniel</a>, <a href="http://inputvalidation.blogspot.com/">Stano Ochotnicky</a>, and <a href="http://dbhole.wordpress.com/">Deepak Bhole</a></em>
</td>
</tr>
</table>
<p></center></p>
<p>It was a really awesome experience, living up to <a href="http://robilad.livejournal.com/">Dalibor</a>&lsquo;s description as &ldquo;Oktobefest for Free Software hackers&rdquo;.  Many hands were shook and much delicious beer was consumed.  The organizers and volunteers who keep the conference running smoothly are absolutely amazing; thanks for providing this great service!  I hope I can attend in the future!</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=334</link>
<author>Andrew Overholt</author>
<pubDate>Fri, 10 Feb 2012 23:04:32 +0100</pubDate>
</item>
<item>
<title>Dangerous Code Example in EJB 3.1 Spec</title>
<description><![CDATA['I am currently working on a training concerning Java EE Best
Practices. For that reason I am reading through quite some material
about Java EE and EJB. However, looking at the EJB 3.1 spec I realized
that the code examples are an example of rather bad coding practice.

As an example here is the original code from EJB 3.1 Spec p. 348. It is supposed to
show how <tt>UserTransactions</tt> can be used:

<tt><pre>
@Stateless
@TransactionManagement(BEAN)
public class MySessionBean implements MySession {

  @Resource
  javax.transaction.UserTransaction ut;
  @Resource
  javax.sql.DataSource database1;
  @Resource
  javax.sql.DataSource database2;

  public void someMethod(...) {
      java.sql.Connection con1;
      java.sql.Connection con2;
      java.sql.Statement stmt1;
      java.sql.Statement stmt2;
      // obtain con1 object and set it up for transactions
      con1 = database1.getConnection();
      stmt1 = con1.createStatement();
      // obtain con2 object and set it up for transactions
      con2 = database2.getConnection();
      stmt2 = con2.createStatement();
      //
      // Now do a transaction that involves con1 and con2.
      //
      // start the transaction
      ut.begin();
      // Do some updates to both con1 and con2. The container
      // automatically enlists con1 and con2 with the transaction. stmt1.executeQuery(...);
      stmt1.executeUpdate(...);
      stmt2.executeQuery(...);
      stmt2.executeUpdate(...);
      stmt1.executeUpdate(...);
      stmt2.executeUpdate(...);
      // commit the transaction
      ut.commit();
      // release connections
      stmt1.close();
      stmt2.close();
      con1.close();
      con2.close();
}
... }
</pre></tt>

What is wrong with this code? Well, first of all it does not
compile. Quite honestly I wouldn't really care too much about that - an
example is fine as long as the important point is still brought
across. But in this case it does matter as we will see later on. So here is
what the method should read like:

<tt><pre>
public void someMethod() throws SQLException, NotSupportedException,
  SystemException, SecurityException, IllegalStateException,
  RollbackException, HeuristicMixedException,
  HeuristicRollbackException {
</pre></tt>

In the original example any code concerning Exceptions
has been left out. So what happens if an
Exceptions is thrown? No <tt>close()</tt> is ever called and therefore none of the resources are ever cleaned up. Let's fix this:

<tt><pre>
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MySessionBean {
  @Resource
  javax.transaction.UserTransaction ut;
  @Resource
  javax.sql.DataSource database1;
  @Resource
  javax.sql.DataSource database2;

  public void someMethod() throws SQLException, NotSupportedException,
      SystemException, SecurityException, IllegalStateException,
      RollbackException, HeuristicMixedException,
      HeuristicRollbackException {
    java.sql.Connection con1 = null;
    java.sql.Connection con2 = null;
    java.sql.Statement stmt1 = null;
    java.sql.Statement stmt2 = null;
    try {

      con1 = database1.getConnection();
      stmt1 = con1.createStatement();

      con2 = database2.getConnection();
      stmt2 = con2.createStatement();

      ut.begin();

      stmt1.executeUpdate("");
      stmt2.executeQuery("");
      stmt2.executeUpdate("");
      stmt1.executeUpdate("");
      stmt2.executeUpdate("");

      ut.commit();
    } finally {
      if (stmt2 != null)
        try {
          stmt2.close();
        } catch (SQLException ex) {
        }
      if (con2 != null)
        try {
          con2.close();
        } catch (SQLException ex) {
        }
      if (stmt1 != null)
        try {
          stmt1.close();
        } catch (SQLException ex) {
        }

      if (con1 != null)
        try {
          con1.close();
        } catch (SQLException ex) {
        }

    }
  }
}
</pre></tt>

This is the infamous try-catch-finally-try-catch block. The <tt>null</tt>
checks actually avoid calling <tt>close()</tt> on objects that have not been
created - as the creation might already have failed and and exception might have been thrown. As the <tt>close()</tt> operation might throw an exception this also needs to be handled. IMHO it is OK to swallow the exception - there is not really anything that can be done as the resources are already being closed. Using Spring's
<tt>JdbcTemplate</tt> would have avoided the problem as the resource handling
is done by the template then. I would strongly recommend it in code like this. It can be used independently from the other parts of Spring - e.g. Dependency Injection can still be done by Java EE. See <a href="http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html#jdbc-core">http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html#jdbc-core</a> for details.

Now there is another thing that is still not OK - actually the most
important point. The <tt>UserTransaction</tt> is never committed nor rolled back
if an exception occurs. Let's fix this, too:

<tt><pre>
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MySessionBean {
  @Resource
  javax.transaction.UserTransaction ut;
  @Resource
  javax.sql.DataSource database1;
  @Resource
  javax.sql.DataSource database2;

  public void someMethod() throws Exception {
    java.sql.Connection con1 = null;
    java.sql.Connection con2 = null;
    java.sql.Statement stmt1 = null;
    java.sql.Statement stmt2 = null;
    try {

      con1 = database1.getConnection();
      stmt1 = con1.createStatement();

      con2 = database2.getConnection();
      stmt2 = con2.createStatement();

      ut.begin();

      stmt1.executeUpdate("");
      stmt2.executeQuery("");
      stmt2.executeUpdate("");
      stmt1.executeUpdate("");
      stmt2.executeUpdate("");

    } catch (Exception ex) {
      ut.setRollbackOnly();
      throw ex;
    } finally {
      ut.commit();
      if (stmt2 != null)
        try {
          stmt2.close();
        } catch (SQLException ex) {
        }
      if (con2 != null)
        try {
          con2.close();
        } catch (SQLException ex) {
        }
      if (stmt1 != null)
        try {
          stmt1.close();
        } catch (SQLException ex) {
        }

      if (con1 != null)
        try {
          con1.close();
        } catch (SQLException ex) {
        }

    }
  }
}
</pre></tt>

So when a problem occurs the transaction will now be marked as
rollback only and ultimately rolled back. If there is no exception it will be
committed.

I hope I made no further mistakes in the code - let me know
otherwise. In Spring resource handling is done for you by the
Templates and therefore I might be doing something wrong here. Using
that approach would also have made the code a lot less complex.

So why this blog post? Bad resource handling and transaction
handling is far too common. I have done a lot of reviews and usually
Enterprise Java applications fail to do a good job in this
regard. This is dangerous, because

<ul>
<li>The whole point of transactions
is to provide safety if something goes wrong. If you do not commit nor
  roll back the transaction it will be left in an undefined state and all kinds of things might happen. This is
  compromising the safety of transactions. So the transactions become
  more or less
  useless. You might as well just not use them at all.</li> 
<li>Not closing connections and statements will eventually lead to
resource leaks e.g. connection pools running out of connections. This
  will at one point make the system fail.</li>
<li>These problems are hard to detect - they will only surface if
exceptions are thrown. So finding and eliminating the problem is
  complex. You should rather get it right from the start.</li>
</ul>

Sadly the EJB spec seem to do resource handling constantly wrong. The EJB spec is
not the only document that does resource and transaction handling
wrong. Quite the contrary: I have a read a lot of tutorial and other
documents that get this entirely wrong.  However, IMHO at least the
example in the spec for using the <tt>UserTransaction</tt> should show how to
use it in a bullet proof manner. This document is read by many
developers and other authors. Bad practices in such a document might
end up in a lot of code and other publications.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-986234111334499433?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/8MX5NIfA69_SwtoBDdTlxzPQ1bo/0/da"><img src="http://feedads.g.doubleclick.net/~a/8MX5NIfA69_SwtoBDdTlxzPQ1bo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8MX5NIfA69_SwtoBDdTlxzPQ1bo/1/da"><img src="http://feedads.g.doubleclick.net/~a/8MX5NIfA69_SwtoBDdTlxzPQ1bo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=Ld2A20WTy4A:Xg13KSZnGX8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=Ld2A20WTy4A:Xg13KSZnGX8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=Ld2A20WTy4A:Xg13KSZnGX8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=Ld2A20WTy4A:Xg13KSZnGX8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=Ld2A20WTy4A:Xg13KSZnGX8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=Ld2A20WTy4A:Xg13KSZnGX8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/Ld2A20WTy4A" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/Ld2A20WTy4A/dangerous-code-example-in-ejb-31-spec.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Mon, 06 Feb 2012 16:44:52 +0100</pubDate>
</item>
<item>
<title>Eclipse at FOSDOM 2012</title>
<description><![CDATA['<p>It&rsquo;s my first out of two days at FOSDEM 2012. It took us quite a ride to get from the hotel to the ULB. We tried to order a taxi but the people at the reception told us that it would take at least 1.5 hours till a taxi arrives. Luckily, Mike and Andrew know someone who has been at FOSDEM a couple of times before. He guided us&nbsp;safely&nbsp;to ULB using a combination of walking, metro, tram and more walking.</p>
<p>We&nbsp;quickly&nbsp;setup an Eclipse stand over there and Mike, Andrew and myself are showing demos and talking to people. BTW, thanks to the FOSDEM organizer to have it well prepared so that we just needed to setup our banner and our notebooks for the demos.</p>
<p>So far we have a great mixture of questions from developers using Eclipse for their day-to-day work, programming questions of Eclipse plug-in developers and people interested in Orion. There are also people stepping by that have no questions &ndash; they introduce themselves as happy Eclipse users and appreciate what the committers of the various projects have built over time. Thanks for those kind words folks!</p>

<a href='http://wagenknecht.org/blog/archives/2012/02/eclipse-at-fosdom-2012.html/2-img_1242' title='2-IMG_1242'><img width="150" height="150" src="http://wagenknecht.org/blog/wp-content/uploads/2012/02/2-IMG_1242-150x150.jpg" class="attachment-thumbnail" alt="2-IMG_1242" title="2-IMG_1242" /></a>
<a href='http://wagenknecht.org/blog/archives/2012/02/eclipse-at-fosdom-2012.html/3-img_1243' title='3-IMG_1243'><img width="150" height="150" src="http://wagenknecht.org/blog/wp-content/uploads/2012/02/3-IMG_1243-150x150.jpg" class="attachment-thumbnail" alt="3-IMG_1243" title="3-IMG_1243" /></a>
<a href='http://wagenknecht.org/blog/archives/2012/02/eclipse-at-fosdom-2012.html/4-img_1246' title='4-IMG_1246'><img width="150" height="150" src="http://wagenknecht.org/blog/wp-content/uploads/2012/02/4-IMG_1246-150x150.jpg" class="attachment-thumbnail" alt="4-IMG_1246" title="4-IMG_1246" /></a>
<a href='http://wagenknecht.org/blog/archives/2012/02/eclipse-at-fosdom-2012.html/1-img_1241' title='1-IMG_1241'><img width="150" height="150" src="http://wagenknecht.org/blog/wp-content/uploads/2012/02/1-IMG_1241-150x150.jpg" class="attachment-thumbnail" alt="1-IMG_1241" title="1-IMG_1241" /></a>

<p>&nbsp;</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2012/02/eclipse-at-fosdom-2012.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=3l6ZY3Nzq1Y:SJq5cRQtlKQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=3l6ZY3Nzq1Y:SJq5cRQtlKQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=3l6ZY3Nzq1Y:SJq5cRQtlKQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=3l6ZY3Nzq1Y:SJq5cRQtlKQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=3l6ZY3Nzq1Y:SJq5cRQtlKQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=3l6ZY3Nzq1Y:SJq5cRQtlKQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=3l6ZY3Nzq1Y:SJq5cRQtlKQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=3l6ZY3Nzq1Y:SJq5cRQtlKQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=3l6ZY3Nzq1Y:SJq5cRQtlKQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=3l6ZY3Nzq1Y:SJq5cRQtlKQ:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2012/02/eclipse-at-fosdom-2012.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Sat, 04 Feb 2012 14:35:23 +0100</pubDate>
</item>
<item>
<title>Eclipse at FOSDEM</title>
<description><![CDATA['<p>This coming weekend is <a href="http://fosdem.org/2012/">FOSDEM</a> in Brussels, Belgium.  It will be my first <a href="http://en.wikipedia.org/wiki/Fosdem">FOSDEM</a> and I&rsquo;m really looking forward to it.  Lots of my fellow Red Hat, JBoss, and Fedora colleagues will be there, too (list of talks by Red Hatters as a <a href="http://people.redhat.com/duffy/fosdem/redhat-fosdem_2012.pdf">PDF</a> and as <a href="http://planet.jboss.org/post/jboss_fedora_and_more_from_red_hat_at_fosdem_2012">HTML</a>).  Eclipse content this year includes:</p>
<ul>
<li><a href="http://fosdem.org/2012/stands">an Eclipse stand</a> (K building, first level)</li>
<li><a href="http://www.fosdem.org/2012/schedule/event/how_eclipse_works">a talk by Mike Milinkovich entitled &ldquo;How Eclipse Works&rdquo;</a> (12:00-12:30 Sunday in the <a href="http://www.fosdem.org/2012/schedule/track/free_java_devroom">Free Java Devroom</a>, <a href="http://www.fosdem.org/2012/schedule/room/k4401">K.4.401</a>)</li>
<li><a href="http://fosdem.org/2012/schedule/event/eclipsert">a lightning talk by Gunnar Wagenknect entitled &ldquo;An introduction to EclipseRT&rdquo;</a> (10:40-10:55 Sunday in the <a href="http://fosdem.org/2012/schedule/room/ferrer">Ferrer</a> room)</li>
<li><a href="http://fosdem.org/2012/schedule/event/cdt">a lightning talk by yours truly entitled &ldquo;Powerful tools for Linux C/C++ developers based on Eclipse&rdquo;</a> (11:00-11:15 Sunday in the <a href="http://fosdem.org/2012/schedule/room/ferrer">Ferrer</a> room)</li>
<li><a href="http://fosdem.org/2012/schedule/event/wazaabi">a lightning talk by Gregoire de Hemptinne entitled &ldquo;Wazaabi &ndash; Model your UI &hellip; live&rdquo;</a> (based on <a href="http://eclipse.org/modeling/emf/">EMF</a>) (18:40-18:55 Saturday in the <a href="http://fosdem.org/2012/schedule/room/ferrer">Ferrer</a> room)</li>
</ul>
<p>&ldquo;FOSDEM is the biggest free and non-commercial event organized by and for the community.&rdquo;  There&rsquo;s no registration required, so if you&rsquo;re in the area, swing by!  There are a <strong>lot</strong> of people that I&rsquo;m looking forward to seeing and having a beer with this weekend but I&rsquo;m especially looking forward to seeing the ever-awesome <a href="http://akurtakov.blogspot.com">Alex Kurtakov</a> again and to meeting my new teammate <a href="http://eclipseandlinux.blogspot.com/">Krzysztof Daniel</a> in person for the first time.</p>
<p>Safe travels and see you in Brussels!</p>
<p><a href="http://www.fosdem.org"><img src="http://www.fosdem.org/promo/going-to" alt="I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting" /></a></p>
<p><strong>Update:</strong>  Gregoire de Hemptinne pointed out his talk on an EMF-based declaritive UI system, Wazaabi.</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=332</link>
<author>Andrew Overholt</author>
<pubDate>Tue, 31 Jan 2012 20:59:29 +0100</pubDate>
</item>
<item>
<title>Kepler</title>
<description><![CDATA['<p>Just to let everyone know, some members of the eclipse.org community recently <a href="http://eclipse.org/juno/planning/poll2013.php">voted</a> on naming the next simultaneous release after Juno gets released in June 2012. Taking input from the community, the Eclipse Planning Council <a href="http://dev.eclipse.org/mhonarc/lists/eclipse.org-planning-council/msg01975.html">finalized</a> the name to be <strong>Kepler</strong>.</p>
<p><a href="http://en.wikipedia.org/wiki/Johannes_Kepler"><img class="alignnone size-medium wp-image-3485" title="225px-Johannes_Kepler_1610" src="http://aniszczyk.org/wp-content/uploads/2012/01/225px-Johannes_Kepler_1610-218x300.jpg" alt="" width="218" height="300" /></a></p>
<p>Personally, I think it&rsquo;s a great choice and a nod to&nbsp;<a href="http://en.wikipedia.org/wiki/Johannes_Kepler">Johannes Kepler</a>.</p>
' ]]></description>
<link>http://aniszczyk.org/2012/01/25/kepler/</link>
<author>Chris Aniszczyk</author>
<pubDate>Wed, 25 Jan 2012 20:08:04 +0100</pubDate>
</item>
<item>
<title>Use Target Definition Files in PDE Build</title>
<description><![CDATA['<p>I&rsquo;m not hip when it comes to building Eclipse based products. I still use plain vanilla PDE Build. The cool guys all switched to Tycho. Well, you&rsquo;re allowed to call me dinosaur then. Anyway, I&rsquo;ve been using <code>.target</code> files as a source for dependency management for quite a while now. They are very useful in Eclipse. All dependencies for all the bundles are defined in one place. You simply open one and Eclipse starts downloading one half of the Internet. Maven already did the other half, I&rsquo;ve heard.</p>
<p>I also use them to drive PDE Build. Instead of specifying stuff to fetch for a build again I simply point PDE Build to the same&nbsp;<code>.target</code>&nbsp;file I use in the IDE. Works like a charm as long as you only use &ldquo;Software Sites&rdquo; (p2 repositories) which are accessible via URL by any developers Eclipse instance as well as the build machine.</p>
<p>Previously, this was implemented by transforming the <code>.target</code>&nbsp;file&nbsp;XML using XSL into an Ant script. The Ant script did a bunch of p2 mirror calls to download the bytes. I recently upgrade to a newer version of the builder containing a Juno version of the org.eclipse.pde.core bundle. Starting with 3.8 this bundle defines a nice Ant task that does not require the XSLT magic.</p>
<pre><target name="buildTargetPlatform" unless="skipTargetDefinition">
  <!-- note: this requires pde.core (from Juno) in the base builder -->
  <<strong>pde.provisionTargetDefinition</strong>
      targetFile="/path/to/my.target"
      destinationDirectory="${repoBaseLocation}/target"
      clearDestination="false"/>
</target></pre>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2012/01/use-target-definition-files-in-pde-build.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=a-QvRx2vJ3o:sSDR6CX-BWo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=a-QvRx2vJ3o:sSDR6CX-BWo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=a-QvRx2vJ3o:sSDR6CX-BWo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=a-QvRx2vJ3o:sSDR6CX-BWo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=a-QvRx2vJ3o:sSDR6CX-BWo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=a-QvRx2vJ3o:sSDR6CX-BWo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=a-QvRx2vJ3o:sSDR6CX-BWo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=a-QvRx2vJ3o:sSDR6CX-BWo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=a-QvRx2vJ3o:sSDR6CX-BWo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=a-QvRx2vJ3o:sSDR6CX-BWo:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2012/01/use-target-definition-files-in-pde-build.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Sat, 21 Jan 2012 22:26:14 +0100</pubDate>
</item>
<item>
<title>Upcoming Events</title>
<description><![CDATA['<p>I know some of you already finished planning for the next few months. There are a couple of interesting events I&rsquo;ll&nbsp;attend which might be of interest for you. Thus, I thought sharing won&rsquo;t hurt.</p>
<h3>FOSDEM (Feb. 4 &ndash; 5,&nbsp;Brussels, Belgium)</h3>
<p>I&rsquo;ve never been in&nbsp;Brussels&nbsp;before. I&rsquo;ve also never been at <a title="Open FOSDEM website." href="http://fosdem.org/" target="_blank">FOSDEM</a>&nbsp;before. <a title="Open Andrew's blog" href="http://overholt.ca/wp/" target="_blank">Andrew</a>&nbsp;told me about his plan to generate some nice Eclipse buzz there. Well, it looks like that will turn out great. <a title="Open Mike's blog." href="http://mmilinkov.wordpress.com/" target="_blank">Mike</a> will be there too. We&rsquo;ll have an Eclipse stand for people to show some projects and talks about Eclipse and we&rsquo;ll also give a few talks about Eclipse. Mine will be about <a title="Open EclipseRT website." href="http://www.eclipse.org/rt/" target="_blank">EclipseRT</a>.</p>
<h3>EclipseCon (March 26 &ndash; 29,&nbsp;Reston, Virginia, USA)</h3>
<p>Ok, this one is a classic (for me). I&rsquo;ve been there before. You gotta have to be there! However, this year my flight to <a title="Open EclipseCon website." href="http://www.eclipsecon.org/" target="_blank">EclipseCon</a> will be shorter. The event moved from the west coast to the east coast. Frankly, I always wondered about switching location away from Santa Clara. But I&rsquo;ll also miss San&nbsp;Francisco. It&rsquo;s a beautiful city always worth a visit. Yet it took me three EclipseCons until I finally visited it in 2009 for the first time. I may need to find a new event in that area. <img src='http://wagenknecht.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> &nbsp;Anyway, I&rsquo;ll give one of the <a title="Open EclipseCon tutorial schedule." href="http://www.eclipsecon.org/2012/program/session-schedule/tutorials" target="_blank">many tutorials</a>&nbsp;there (<em><a title="Open tutorial info." href="http://www.eclipsecon.org/2012/sessions/dynamic-server-applications-eclipsert" target="_blank">Dynamic Server Applications with EclipseRT</a></em>).</p>
<h3>JAX (April 16-20, Mainz, Germany)</h3>
<p>Also bit of a classic, I like that event. It&rsquo;s packed with lots of sessions and people. I&rsquo;ll talk about developing cloud applications with Eclipse <a title="Open Gyrex website." href="http://www.eclipse.org/gyrex/" target="_blank">Gyrex</a>. Our first major version (1.0) is only weeks away and that talk will be a great&nbsp;opportunity&nbsp;to learn more about Gyrex and see how we use it to solve some interesting problems.</p>
<p>Hope to see you soon at any of the events!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2012/01/upcoming-events.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=zJnIHbRepso:8z1w1QnDzAI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=zJnIHbRepso:8z1w1QnDzAI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=zJnIHbRepso:8z1w1QnDzAI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=zJnIHbRepso:8z1w1QnDzAI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=zJnIHbRepso:8z1w1QnDzAI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=zJnIHbRepso:8z1w1QnDzAI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=zJnIHbRepso:8z1w1QnDzAI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=zJnIHbRepso:8z1w1QnDzAI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=zJnIHbRepso:8z1w1QnDzAI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=zJnIHbRepso:8z1w1QnDzAI:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2012/01/upcoming-events.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Fri, 20 Jan 2012 09:19:57 +0100</pubDate>
</item>
<item>
<title>Slides from Invited Talk at University of Warwick</title>
<description><![CDATA['Last week I was invited to give a talk at the department seminars at the Warwick University, UK. A former fellow student of mine is now professor for mathematics and computer science there and invited me to talk to students about my personal experiences doing professional software engineering for about more then ten years now. Here are the slides that I used:<div><ul><li><a href="http://www.martinlippert.org/events/InvitedTalkUniversityWarwick-Jan2012.pdf">The daily software engineering life - How to be prepared (pdf)</a></li></ul><div>Thanks again for inviting me!!! It was a pleasure to give the talk!!!</div></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-6183603160398770633?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2012/01/slides-from-invited-talk-at-university.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Wed, 18 Jan 2012 17:55:08 +0100</pubDate>
</item>
<item>
<title>Removing Xcode 3 shared build settings from Xcode 4</title>
<description><![CDATA['This is about me getting a substantial amount of grey hair over the past couple of days, trying to hunt down a setting that would cause the current version of Xcode&nbsp;4 to build my iOS projects to an unexpected, but not unfamiliar, taken over from Xcode&nbsp;3, location, but not presenting any obvious way to revert that. <br /><br />
<a name='more'></a><br />
<h2 id="alittlehistory">A little history</h2><br />
In Xcode3 you could use the preferences dialog to configure custom build output folders. This was necessary when you wanted to organize a somewhat more complex software into several cross-referencing Xcode projects and at the same time retain some sanity when linking and packaging it. <a href="http://www.clintharris.net/2009/iphone-app-shared-libraries/">Clint Harris Tutorial</a> on shared libraries describes it in more detail.<br /><br />
The preferences dialog looked like this (image copied from Clint&rsquo;s site, because I didn&rsquo;t have any Xcode3 installation lying around anymore):<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-4w3gTi03Cng/TwzRPGCz0gI/AAAAAAAACgQ/2z37wg5MS_E/s1600/screenshot_xcode_global_build_dir.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-4w3gTi03Cng/TwzRPGCz0gI/AAAAAAAACgQ/2z37wg5MS_E/s1600/screenshot_xcode_global_build_dir.jpg" /></a></div>In my venerable Xcode&nbsp;3 setup I configured the shared build output to <code>/Users/ds/Documents/cc/SharedBuildOutput</code>.<br /><br />
<br />
<h2 id="introducingxcodenbsp4">Introducing Xcode&nbsp;4</h2><br />
In March of 2011 Apple released Xcode4, a major overhaul of the IDE with many new features and, of course, new configuration. At the time of me writing this in January 2012 the latest Xcode release is 4.2.1 and I installed most releases as upgrades on my MacBook Pro. The settings dialog for build locations looks like this in my current installation:<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-jwrxRz5gsGo/TwzRYafaPJI/AAAAAAAACgc/Nz_235BPaI4/s1600/Xcode4BuildLocations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-jwrxRz5gsGo/TwzRYafaPJI/AAAAAAAACgc/Nz_235BPaI4/s1600/Xcode4BuildLocations.png" /></a></div>As you can see, there is no trace of the previously configured shared build output setting, let alone my custom directory.<br />
Ok, so apparently this is the new way of doing things, and starting with new projects will surely apply.<br /><br />
<br />
<h2 id="notsoquick">Not so quick&hellip;</h2><br />
Despite what (I for) one would expect, nevertheless, this is what a brand new (iOS) project&rsquo;s actual build setting look like (I filtered to just show the relevant parts):<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-n39Wm-vEJy8/TwzRh26kVfI/AAAAAAAACgo/RKWat-eNOSc/s1600/Xcode4NewProjectWithOldBuildSettings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-n39Wm-vEJy8/TwzRh26kVfI/AAAAAAAACgo/RKWat-eNOSc/s1600/Xcode4NewProjectWithOldBuildSettings.png" /></a></div><br />
Switching from the <em>Combined</em> to the <em>Levels</em> view shows that the setting is clearly not coming from the project itself, which explains why even a freshly created project could know about this old folder:<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-bXfjyk0ftIU/TwzRpJaLnBI/AAAAAAAACg0/HmlG-XshB2k/s1600/OldSettingsComeFromDefault.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-bXfjyk0ftIU/TwzRpJaLnBI/AAAAAAAACg0/HmlG-XshB2k/s1600/OldSettingsComeFromDefault.png" /></a></div><br />
This clearly goes against the current Xcode standard of placing build products into so-called &ldquo;Derived Data&rdquo; subfolder folders with (partly) random names. Build scripts can use these by referring to them using the environment variables, but more often than not, leaving the (now already) trodden path of the new defaults will cause more trouble than it&rsquo;s usually worth.<br /><br />
&ldquo;How do I fix this?&rdquo;, you might ask. Well, that&rsquo;s what I asked myself, too, and it took me a few days to finally figure it out. Remember that Xcode&nbsp;4 no longer shows this path in its Build Locations preferences, so this is obviously not getting us any further. <br /><br />
<br />
<h2 id="circumventingtheproblem">Circumventing the problem&hellip;</h2><br />
Changing the folder at the project level works, overriding the default. As soon as you have created a new project, you can change the &ldquo;Build projects path&rdquo; and &ldquo;Intermediate Build Files Path&rdquo; to simply <code>build</code>. This should be the same value that&rsquo;s the default in a fresh Xcode&nbsp;4 installation.<br /><br />
I like to keep my build settings in a separate <code>.xcconfig</code> file that makes it easier to share and change settings with other project contributors using version control. If you do that, you could also use that to override the old default by putting these lines it it:<br /><br />
<pre class="prettyprint"><code>SYMROOT = build
OBJROOT = build
</code></pre>However, that, too, requires you to remember making the change for each and every new project. Surely it would be better to get rid of that now-unwanted setup.<br /><br />
<br />
<h2 id="orsolvingit">&hellip;or solving it</h2><br />
Albeit there is no UI preference setting to modify the <code>SYMROOT</code> and <code>OBJROOT</code> settings in Xcode&nbsp;4 anymore, apparently it still honors them from the previous Xcode&nbsp;3 installation. So in order to reset them, we need to know where they are stored. I did not know anything more than that it must be a user-specific setting, because a newly created account did not use it. So &ndash; after deleting everything from <code>~/Library/Developer/Xcode/DerivedData</code> &ndash; I tried (in this order):<br /><br />
<pre class="prettyprint"><code>$ grep -r SYMROOT ~/Library/Developer 2>/dev/null
$ grep -r SYMROOT ~/Library/Application\ Support/Developer 2>/dev/null
$ grep -r SYMROOT ~/Library/Preferences 2>/dev/null
</code></pre><br />
Well, actually I tried searching for <code>Documents/cc/SharedBuildOutput</code> first, but that also matched several archived applications. The last command revealed this:<br /><br />
<pre class="prettyprint"><code>Binary file ./com.apple.dt.Xcode.plist matches
</code></pre><br />
Converting the first match to XML with <code>plutil -convert xml1 -o tmp.xml com.apple.dt.Xcode.plist</code> and searching inside it I found this:<br /><br />
<pre class="prettyprint"><code><key>IDEApplicationwideBuildSettings</key>
<dict>
    ...
    <key>SYMROOT</key>
    <string>/Users/ds/Documents/cc/SharedBuildOutput</string>
    ...
</dict>
</code></pre><br />
Instead of removing these two lines and converting the file back to its binary format, I deleted that entry with the handy little <a href="http://www.nightproductions.net/prefsetter.html">PrefSetter</a> application by navigating to the <code>com.apple.dt.Xcode</code> domain and searching for <em>SYMROOT</em> in there. That way there is no risk of making any typos, damaging the file. <br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-eKIktI8O80w/TwzR1K_RO-I/AAAAAAAAChA/7_8vrvYe8XI/s1600/PrefSetter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-eKIktI8O80w/TwzR1K_RO-I/AAAAAAAAChA/7_8vrvYe8XI/s1600/PrefSetter.png" /></a></div><br />
Do not forget to save the change!<br /><br />
<br />
<h2 id="success">Success!</h2><br />
Restarting Xcode and looking at the build settings of the very same &ldquo;Test&rdquo; project created earlier proves that the change had the desired effect:<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-GUhXHou_pNg/TwzR8j0JtuI/AAAAAAAAChM/OQEgY97GG4A/s1600/FixedBuildLocations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-GUhXHou_pNg/TwzR8j0JtuI/AAAAAAAAChM/OQEgY97GG4A/s1600/FixedBuildLocations.png" /></a></div><br />
Of course, as a last resort (maybe there are more problems with your Xcode settings?), you could also just delete &ndash; or rename &ndash; the <code>com.apple.dt.Xcode.plist</code> file and have Xcode start afresh, even though I noticed when I tried this, that several settings were left unchanged, e.&nbsp;g. Source Trees. These are apparently stored somewhere else&hellip;<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-9176758546384887167?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/NlBRpt7xPv0" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/NlBRpt7xPv0/removing-xcode-3-shared-build-settings.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Wed, 11 Jan 2012 07:00:06 +0100</pubDate>
</item>
<item>
<title>open and transparent demo camp sponsoring</title>
<description><![CDATA['Its been a while since Peter Friese and I started to organize the Eclipse Demo Camp in Hamburg. And since the early days, we couldn't have done it without companies sponsoring the event so that we could sit in a nice location, have free drinks and quite often even free food for everybody joining us to watch great demos and great speakers.<div><br /></div><div>Since sponsoring was always an important part of organizing that event, we decided to try something new in this area. For the next demo camp (the Juno release camps in the summer of 2012), we try a totally open and transparent sponsoring. <b>Everybody</b> is invited to join us sponsoring this event. All you (as a sponsor) need to do is: <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Juno_2012/Hamburg">register yourself as a sponsor on the demo camp wiki page</a> with your name and the amount of money you would like to spend. And we explicitly invite everybody: from big companies spending several hundreds of Euros to individuals spending only a few bucks. Every single Euro is welcome and highly appreciated.</div><div><br /></div><div>The sponsoring will have absolutely zero effect on the selection of speakers or demos and we continue to have no sponsored talks or company presentations at the beginning (the only exception to this is if the management of the company that is giving us the room for free is asking for a small intro at the beginning, but we try to avoid that as well). And attendance will be free, as usual... :-)</div><div><br /></div><div><b>Ah, one more thing: </b>We will donate 20% of the food/drinks that we order for the event to a local organization that helps homeless people. We think its not fair when we sit inside having more food than we can eat and having other people sitting on the street being hungry. Therefore 20% of all the drinks/food that we order will be delivered directly to that organization on the evening of the demo camp.</div><div><br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-6245263748556457574?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2012/01/open-and-transparent-demo-camp.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Mon, 09 Jan 2012 18:41:43 +0100</pubDate>
</item>
<item>
<title>Invited Talk at the University of Warwick, UK</title>
<description><![CDATA['I am honored to give an invited talk at the University of Warwick this week:<div><ul><li><a href="http://www.dcs.warwick.ac.uk/events/departmentseminars/">Department Seminars: The daily software engineering life - How to be prepared</a></li></ul>Looking very much forward to it!!!</div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-2772223945509848852?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2012/01/invited-talk-at-university-of-warwick.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Mon, 09 Jan 2012 18:16:56 +0100</pubDate>
</item>
<item>
<title>Help Name Eclipse Juno+1</title>
<description><![CDATA['<p>It&rsquo;s that time of year, please help <a href="http://eclipse.org/juno/planning/poll2013.php">choose a name</a> for the next eclipse.org simultaneous release!</p>
<p><a href="http://eclipse.org/juno/planning/poll2013.php"><img class="alignnone size-medium wp-image-3478" title="rock-the-vote" src="http://aniszczyk.org/wp-content/uploads/2012/01/rock-the-vote-227x300.jpg" alt="" width="227" height="300" /></a></p>
<p>There are some interesting options this year, it&rsquo;s even hard for me to vote:</p>
<ul>
<li>Kari:&nbsp;<a title="http://en.wikipedia.org/wiki/Kari_(moon)" href="http://en.wikipedia.org/wiki/Kari_(moon)" rel="nofollow">http://en.wikipedia.org/wiki/Kari_(moon)</a></li>
<li>Kratos:&nbsp;<a title="http://en.wikipedia.org/wiki/Kratos_(mythology)" href="http://en.wikipedia.org/wiki/Kratos_(mythology)" rel="nofollow">http://en.wikipedia.org/wiki/Kratos_(mythology)</a></li>
<li>Kepler:&nbsp;<a title="http://en.wikipedia.org/wiki/Johannes_Kepler" href="http://en.wikipedia.org/wiki/Johannes_Kepler" rel="nofollow">http://en.wikipedia.org/wiki/Johannes_Kepler</a></li>
<li>Ketu:&nbsp;<a title="http://en.wikipedia.org/wiki/Ketu_(mythology)" href="http://en.wikipedia.org/wiki/Ketu_(mythology)" rel="nofollow">http://en.wikipedia.org/wiki/Ketu_(mythology)</a></li>
<li>Koronis:&nbsp;<a title="http://en.wikipedia.org/wiki/Koronis_family" href="http://en.wikipedia.org/wiki/Koronis_family" rel="nofollow">http://en.wikipedia.org/wiki/Koronis_family</a></li>
<li>Kuiper:&nbsp;<a title="http://en.wikipedia.org/wiki/Kuiper_belt" href="http://en.wikipedia.org/wiki/Kuiper_belt" rel="nofollow">http://en.wikipedia.org/wiki/Kuiper_belt</a></li>
</ul>
<p>So, please go&nbsp;<a href="http://eclipse.org/juno/planning/poll2013.php">vote</a> by January 15th, let&rsquo;s get a name in time for <a href="http://www.eclipsecon.org/2012/">EclipseCon 2012</a>.</p>
' ]]></description>
<link>http://aniszczyk.org/2012/01/04/help-name-eclipse-juno1/</link>
<author>Chris Aniszczyk</author>
<pubDate>Thu, 05 Jan 2012 07:11:13 +0100</pubDate>
</item>
<item>
<title>SOAP web services with iOS</title>
<description><![CDATA['<p>Fresh on the&nbsp;<a href="http://blog.codecentric.de/" target="_blank">codecentric blog</a>&nbsp;is my new post about using <a href="http://blog.codecentric.de/en/2012/01/soap-web-services-with-ios/" target="_blank">SOAP web services from an iOS client</a> application.</p>
<p>It features a short comparison of the current state of frameworks and tools with the Java world, and then focusses on the sudzc open source library that takes a very interesting approach in generating web service client artifacts by transforming the service's WSDL into Objective-C classes using XSL transformations.</p>
<p>The post is <a href="http://blog.codecentric.de/2012/01/soap-webservices-mit-ios/" target="_blank">available in German</a> as well.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-4544877604220857365?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/Kkacws2hleI" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/Kkacws2hleI/soap-web-services-with-ios.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Mon, 02 Jan 2012 09:00:06 +0100</pubDate>
</item>
<item>
<title>Why good metrics do not equal good quality</title>
<description><![CDATA['<p>A short while ago I posted an article on the <a href="http://www.codecentric.de">codecentric</a> blog about why good metrics can be, but need not be equal to good software quality. As I wrote earlier, I will add links to this blog whenever I post something of interest to the company site.</p>
<p>The post is available in both English and German at <a href="http://blog.codecentric.de/en/2011/10/why-good-metrics-values-do-not-equal-good-quality/">http://blog.codecentric.de/en/2011/10/why-good-metrics-values-do-not-equal-good-quality</a>.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-9145332053481810838?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/nr6mtlDr_U4" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/nr6mtlDr_U4/why-good-metric-do-not-equal-good.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Fri, 30 Dec 2011 18:25:19 +0100</pubDate>
</item>
<item>
<title>EGit and JGit 1.2 Released</title>
<description><![CDATA['<p>The <a href="http://eclipse.org/egit">EGit</a> and <a href="http://eclipse.org/jgit">JGit</a> teams are happy to <a href="http://dev.eclipse.org/mhonarc/lists/egit-dev/msg02536.html">announce</a> the 1.2 release, just in time for the holidays!</p>
<p><a href="https://docs.google.com/present/edit?id=0AXi3pDi3yVgNYWprbmgyZnFnZzIzXzc0MmRmc3Q3aGhq&authkey=CJ37uOIN"><img class="alignnone size-medium wp-image-3471" style="border-image: initial; border-width: 1px; border-color: black; border-style: solid;" title="EGit and JGit New and Noteworthy 1.2 Documentation" src="http://aniszczyk.org/wp-content/uploads/2011/12/egitnn12-300x225.png" alt="" width="300" height="225" /></a></p>
<p>The precise release version is <code>1.2.0.201112221803-r</code></p>
<p>It can be downloaded from the <a href="http://marketplace.eclipse.org/content/egit-git-team-provider">Eclipse Marketplace</a> or the <a href="http://download.eclipse.org/egit/updates">p2 repository</a>.</p>
<p>There&rsquo;s a lot of new improvements, including better performance and stability. If you&rsquo;re interested in the details of what&rsquo;s new, check out the <a href="http://wiki.eclipse.org/JGit/New_and_Noteworthy/1.2">JGit New and Noteworthy</a> and the <a href="http://wiki.eclipse.org/EGit/New_and_Noteworthy/1.2">EGit New and Noteworthy</a>.</p>
<p>We hope you find the release useful and please enjoy the holidays!</p>
' ]]></description>
<link>http://aniszczyk.org/2011/12/23/egit-and-jgit-1-2-released/</link>
<author>Chris Aniszczyk</author>
<pubDate>Fri, 23 Dec 2011 18:30:03 +0100</pubDate>
</item>
<item>
<title>Analysing the Eclipse SDK build</title>
<description><![CDATA['<p>My friend and co-worker Sami Wagiaalla has been doing lots of builds of the Eclipse SDK recently.  He decided to see where the time was going and wrote up this interesting blog post:<br />
<center><br />
<a href="http://wagiaalla.com/2011/11/29/analysing-eclipse-build/"><br />
<img src="http://overholt.ca/wp/wp-content/uploads/2011/11/eclipsebuild-timing-300x150.png"/></p>
<p>http://wagiaalla.com/2011/11/29/analysing-eclipse-build/</a></p>
<p></center></p>
<p>I encourage you to read it if you&rsquo;re interested in the build of the Eclipse SDK.</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=326</link>
<author>Andrew Overholt</author>
<pubDate>Tue, 29 Nov 2011 19:41:32 +0100</pubDate>
</item>
<item>
<title>Fedora Packager for Eclipse, OEPE, e4 and CSS, m2e, EclipseLink, Orion, and cake</title>
<description><![CDATA['<p>What do all the elements in the title have in common?  They were all present at the <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2011/Toronto">Toronto Eclipse DemoCamp</a> last Wednesday night!  Hosted by Red Hat, this was the first public event in our new office and I think it went pretty well.  We have more space than we did at our old office and since the event wasn&rsquo;t in June, the room didn&rsquo;t get to 35&deg;C <img src='http://overholt.ca/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><center><br />
<img src="http://overholt.ca/TorontoDemoCamp-November2011/montage.png" width="516" height="780" border="0" usemap="#map" /><br />
</center></p>
<p>Thanks to all the presenters, especially those who came from far away, some as far as Ottawa!</p>
<ul>
<li><strong>Andrew Robinson</strong> from <strong>Red Hat</strong> on <a href="https://fedorahosted.org/eclipse-fedorapackager/">Fedora Packager for Eclipse</a></li>
<li><strong>Marcelo Paternostro</strong> from <strong>Oracle</strong> on the <a href="http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html">Oracle Enterprise Pack for Eclipse</a> and <a href="http://www.eclipse.org/sapphire/">Sapphire</a></li>
<li><strong>Brian de Alwis</strong> from <strong>Manumitting Technologies</strong> on <a href="http://eclipse.org/e4/">e4 and CSS</a></li>
<li><strong>Igor Feodorenko</strong> from <strong>Sonatype</strong> on <a href="http://eclipse.org/m2e/">m2e</a></li>
<li><strong>Peter Krogh</strong> from <strong>Oracle</strong> (and <strong>Ottawa</strong>) on <a href="http://eclipse.org/eclipselink/">EclipseLink</a></li>
<li><strong>Wayne Beaton</strong> from the <strong>Eclipse Foundation</strong> (and <strong>Ottawa</strong>) on <a href="http://eclipse.org/orion/">Orion</a></li>
</ul>
<p>This event featured a trivia contest with questions written by the illustrious <a href="http://relengofthenerds.blogspot.com/">Kim Moir</a> and a prize of an Eclipse shirt.  Marcelo won but it was a tight race between him, <a href="http://ebaron.wordpress.com/">Elliott Baron</a>, and <a href="http://jerboaa.wordpress.com/">Severin Gehwolf</a>.  We also had a delicious 10th birthday cake made by one of <a href="http://wagiaalla.com/">Sami Wagiaalla</a>&lsquo;s friends who&rsquo;s starting a cake-making business:</p>
<p><a href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0116.JPG"><img src="http://overholt.ca/blogimages/10thbirthdaycake.jpg" alt="Awesome Eclipse 10th birthday cake" /></a></p>
<p>Thanks to all who attended, representing individuals, a variety of companies, and a number of academic institutions.  As a few of us said at the end of the evening:  see you in six months!</p>
<map name="map">
<!-- #$-:Image map file created by GIMP Image Map plug-in --><br />
<!-- #$-:GIMP Image Map plug-in by Maurits Rijk --><br />
<!-- #$-:Please do not edit lines starting with "#$" --><br />
<!-- #$VERSION:2.3 --><br />
<!-- #$AUTHOR:Andrew Overholt --></p>
<area shape="rect" coords="4,17,124,108" alt="Attendees" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0083.JPG" title="Attendees"/>
<area shape="rect" coords="132,18,252,108" alt="Andrew Robinson on Fedora Packager for Eclipse" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0082.JPG" title="Andrew Robinson on Fedora Packager for Eclipse"/>
<area shape="rect" coords="260,17,380,108" alt="Fedora Packager for Eclipse" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0084.JPG" title="Fedora Packager for Eclipse"/>
<area shape="rect" coords="387,18,509,108" alt="Marcelo Paternostro on Oracle Enterprise Pack for Eclipse " href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0089.JPG" title="Marcelo Paternostro on Oracle Enterprise Pack for Eclipse "/>
<area shape="rect" coords="4,148,124,238" alt="Brian de Alwis from Manumitting Technologies" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0090.JPG" title="Brian de Alwis from Manumitting Technologies"/>
<area shape="rect" coords="131,148,252,238" alt="Brian&apos;s new "CSS Spy" tool" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0095.JPG" title="Brian&apos;s new "CSS Spy" tool"/>
<area shape="rect" coords="259,148,381,238" alt="Igor Feodorenko of Sonatype" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0096.JPG" title="Igor Feodorenko of Sonatype"/>
<area shape="rect" coords="388,147,509,240" alt="m2e" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0098.JPG" title="m2e"/>
<area shape="rect" coords="388,278,508,368" alt="Orion" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0107.JPG" title="Orion"/>
<area shape="rect" coords="260,277,380,368" alt="Wayne Beaton of the Eclipse Foundation" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0110.JPG" title="Wayne Beaton of the Eclipse Foundation"/>
<area shape="rect" coords="132,277,252,368" alt="Peter demonstrating EclipseLink" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0103.JPG" title="Peter demonstrating EclipseLink"/>
<area shape="rect" coords="3,278,124,368" alt="Peter Krogh of Oracle" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0104.JPG" title="Peter Krogh of Oracle"/>
<area shape="rect" coords="4,408,124,498" alt="Trivia contestants Elliott Baron, Marcelo Paternostro, and Severin Gehwolf" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0112.JPG" title="Trivia contestants Elliott Baron, Marcelo Paternostro, and Severin Gehwolf"/>
<area shape="rect" coords="131,407,253,501" alt="Wayne the trivia master" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0114.JPG" title="Wayne the trivia master"/>
<area shape="rect" coords="275,393,366,513" alt="Marcelo the trivia winner and his amazing prize!" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0115.JPG" title="Marcelo the trivia winner and his amazing prize!"/>
<area shape="rect" coords="389,408,510,500" alt="Awesome 10th birthday cake" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0116.JPG" title="Awesome 10th birthday cake"/>
<area shape="rect" coords="4,668,124,758" alt="Don&apos;t thank me, thank the knife!" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0123.JPG" title="Don&apos;t thank me, thank the knife!"/>
<area shape="rect" coords="19,523,109,642" alt="Cake on the street" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0117.JPG" title="Cake on the street"/>
<area shape="rect" coords="132,537,253,630" alt="At the bar" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0118.JPG" title="At the bar"/>
<area shape="rect" coords="260,536,383,630" alt="At the Fox & Firkin" href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0119.JPG" title="At the Fox & Firkin"/>
<area shape="rect" coords="388,538,508,628" alt="Industry, academia, Waterloo, Toronto, etc." href="http://overholt.ca/TorontoDemoCamp-November2011/IMG_0122.JPG" title="Industry, academia, Waterloo, Toronto, etc."/>
</map>
' ]]></description>
<link>http://overholt.ca/wp/?p=299</link>
<author>Andrew Overholt</author>
<pubDate>Thu, 24 Nov 2011 22:09:48 +0100</pubDate>
</item>
<item>
<title>Fall conferences:  FSOSS and ECE</title>
<description><![CDATA['<p>Over the past few weeks I&rsquo;ve been lucky enough to present at two conferences:  Seneca College&rsquo;s 10th Anniversary <a href="http://fsoss.ca">FSOSS</a> (Free Software and Open Source Symposium) and <a href="http://www.eclipsecon.org/europe2011/">EclipseCon Europe</a>.  It&rsquo;s fun to see the differences in conferences like these.  One is free to attend, largely volunteer-driven, and uses space provided by an academic institution with some corporate and other sponsorship for other costs including lunches.  The other is put on by professionals, has an attendance fee, and is sponsored by a number of corporations.  As an Eclipse and open source community member, I believe both types of conferences are important to the continued success of the FOSS and Eclipse ecosystems.</p>
<p><center><br />
<a href="http://overholt.ca/blogimages/fsoss-systemtap.jpg"><img src="http://overholt.ca/blogimages/fsoss-systemtap-sm.jpg" alt="" /></a><br /><em>Here&rsquo;s Frank and Chris speaking about SystemTap</em><br />
</center></p>
<p>But enough blathering.  At FSOSS I presented about <a href="http://fsoss.senecac.on.ca/2011/node/88">using Eclipse for C and C++ development</a>.  This wasn&rsquo;t anything showing groundbreakingly new but a number of attendees told me that they learned something so that&rsquo;s good.  I was unfortunately only able to attend one half day of FSOSS due to work and travel so I only got to see the <a href="http://fsoss.senecac.on.ca/2011/node/67">SystemTap for the cloud talk</a>.  SystemTap has tonnes of potential so it&rsquo;s good to see it being demonstrated to many audiences.  It was also great to catch up with <a href="https://scs.senecac.on.ca/~john.selmys/">John Selmys</a> and hear about his cool work making a Fedora-based live image for Android development.  I hope I helped him get onto the right track with using the headless <a href="http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_director.html">p2 director</a> <img src='http://overholt.ca/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><center><br />
<a href="http://overholt.ca/blogimages/eclipse10th-thankyou.jpg"><img src="http://overholt.ca/blogimages/eclipse10th-thankyou-sm.jpg" alt="" /></a><br />
</center></p>
<p>The week after FSOSS I was at EclipseCon Europe in Ludwigsburg, Germany.  It was my first EclipseCon outside of North America and was an excellent conference as expected.  The quality of the talks was great as usual.  I gave a few talks:</p>
<ul>
<li>a 3.5 hour <a href="http://www.eclipsecon.org/europe2011/sessions/hands-cc-ide">C/C++ with Eclipse tutorial</a> with Bernhard Merkle</li>
<li>an <a href="http://www.eclipsecon.org/europe2011/sessions/eclipse-linux-tools-project-update">update on the Linux Tools project</a> and our short-term plans</li>
<li>an <a href="http://www.eclipsecon.org/europe2011/sessions/icedtea-and-icedtea-web">overview of the IcedTea and IcedTea-Web projects</a> on behalf of my co-worker <a href="http://dbhole.wordpress.com">Deepak Bhole</a> who couldn&rsquo;t make it</li>
</ul>
<p>There were some good questions in all three so I hope people gained some knowledge out of attending.  As for other sessions, it&rsquo;s hard to pick highlights but a few I enjoyed were:</p>
<ul>
<li>David Cuartielles&rsquo; <a href="http://www.eclipsecon.org/europe2011/sessions/arduino-open-source-hardware-platform">Arduino keynote</a></li>
<li>Igor Fedorenko&rsquo;s <a href="http://www.eclipsecon.org/europe2011/sessions/tycho-next-generation-build-system-eclipse">Tycho talk</a></li>
<li>Volker Simonis&rsquo; <a href="http://www.eclipsecon.org/europe2011/sessions/how-contribute-openjdk">&ldquo;How to Contribute to OpenJDK&rdquo;</a> talk</li>
<li>Eric Moffatt and Tom Schindl&rsquo;s <a href="http://www.eclipsecon.org/europe2011/sessions/state-eclipse-4-what-happened-41-and-whats-cooking-42">Eclipse 4.x talk</a></li>
<li>Kim Moir and John Kellerman&rsquo;s <a href="http://www.eclipsecon.org/europe2011/sessions/has-it-really-been-10-years">10 year Eclipse retrospective</a></li>
<li>Brian Selic&rsquo;s <a href="http://www.eclipsecon.org/europe2011/sessions/model-based-software-engineering-industry-revolution-evolution-or-smoke">Model-Based Software keynote</a></li>
<li>Steffen Pingel and Benjamin Muskalla&rsquo;s <a href="http://www.eclipsecon.org/europe2011/sessions/pimp-your-productivity-git-gerrit-hudson-and-mylyn">Git/Gerrit/Hudson/Mylyn showcase</a></li>
<li>Andrew Ross&rsquo; <a href="http://www.eclipsecon.org/europe2011/sessions/eclipse-ancient-style">Eclipse Long-term Support Initiative</a> discussion</li>
<li>Simon Kaegi&rsquo;s <a href="http://www.eclipsecon.org/europe2011/sessions/orion-coding-web">Orion</a> and <a href="http://www.eclipsecon.org/europe2011/sessions/javascript-eclipse">JavaScript at Eclipse</a> talks</li>
</ul>
<p>The <a href="https://market.android.com/details?id=de.peterfriese.conferenceapp">EclipseCon mobile application</a> was very handy so thanks to <a href="http://mobile.itemis.com/">itemis Mobile</a> and Peter Friese for that.  One thing about EclipseCon Europe that&rsquo;s better than EclipseCon North America is the food.  Especially for vegetarians, I found the options to be much better so thanks!</p>
<p>As could have been expected, the biggest impressions I&rsquo;m left with after attending EclipseCon Europe are a) Eclipse is huge in Europe and b) Europeans love software modelling!  By the end of the conference I felt like I was an idiot for not using the powerful modelling tools we have at Eclipse <img src='http://overholt.ca/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   I&rsquo;ll try to get myself beyond my sticks and stones tools over the next year and if I am lucky enough to attend EclipseCon Europe 2012 maybe I&rsquo;ll be a member of the cool crowd.</p>
' ]]></description>
<link>http://overholt.ca/wp/?p=305</link>
<author>Andrew Overholt</author>
<pubDate>Mon, 21 Nov 2011 13:48:50 +0100</pubDate>
</item>
<item>
<title>Conference Slide Updates</title>
<description><![CDATA['I went to four conferences over the past weeks, talking about various topics around the Spring and Eclipse tooling universe. All the  talks included a number of live demos, so just looking at the slides doesn't give you the full experience and content of the talk. But anyway, I uploaded the slides for those who want to take a look:<br /><div><ul><li>SpringOne 2011: Spring Tooling Update - New and Noteworthy (<a href="http://www.martinlippert.org/events/SpringOne2011-SpringToolingUpdate.pdf">pdf</a>, <a href="http://www.slideshare.net/martinlippert/spring-tooling-update-new-noteworty-at-springone-2011">slideshare</a>)</li><li>JAX London 2011: WaveMaker - Spring Roo - SpringSource Tool Suite - Choosing the right tool for the right job (<a href="http://www.martinlippert.org/events/JAXLondon2011-STS-Roo-Wavemaker.pdf">pdf</a>, <a href="http://www.slideshare.net/martinlippert/wavemaker-spring-roo-springsource-tool-suite-choosing-the-right-tool-for-the-right-job-10120313">slideshare</a>)</li><li>EclipseCon Europe 2011: All about Virgo (<a href="http://www.martinlippert.org/events/EclipseConEurope2011-AllAboutVirgo.pdf">pdf</a>, <a href="http://www.slideshare.net/cgfrost/eclipsecon-europe-2011-virgo-30">slideshare</a>)</li><li>WJAX 2011:  WaveMaker - Spring Roo - SpringSource Tool Suite - Choosing the right tool for the right job (<a href="http://www.martinlippert.org/events/WJAX2011-STS-Roo-Wavemaker.pdf">pdf</a>, <a href="http://www.slideshare.net/martinlippert/wavemaker-spring-roo-springsource-tool-suite-choosing-the-right-tool-for-the-right-job-10120313">slideshare</a>)</li></ul>Enjoy!</div><div><br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-2845273892043762323?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/11/conference-slide-updates.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Fri, 11 Nov 2011 16:33:52 +0100</pubDate>
</item>
<item>
<title>Random Thought about Google Dart</title>
<description><![CDATA['Here are some thoughts about Google Dart and its possible usages. They are just wild ideas, I have no information whether they will actually be implemented or whether they are shared by anyone at Google:

<ul>
<li>Compiling Dart into JavaScript is a good idea. It means Dart is immediately usable on any platform. There is no other way to quickly get it out to so many developers. Users are not quickly to switch to new browser - think about IE6.</li>
<li>I originally expected that a Plug In and VM for Dart on Chrome would be released quickly. Now I think that would have been a bad idea. Chrome would have had a good support for Dart while the rest of the browsers would have been left in the cold. They would probably not use the Google VM - remember that they also have their own JavaScript VMs. It is also unlikely that they would create their own Dart VM. So the current approach create a level playing field and makes it more likely for Dart to succeed.</li>
<li>I think the Dart VM might be an option for Android - maybe not in the near term but probably in the long run. Also it might be enough for Google to have an alternative VM. It just means it has a stronger position if a deal with Oracle must be closed.</li>
<li>Dart is a good fit for Google App Engine (GAE). Isolates have just one thread - that is also what Google App Engine enforces. That has the advantage that GAE can restart isolates. Isolates can be snapshotted and migrated to other VMs - which is great if you want to react to different load by offloading work from a machine. Isolates can only communicate via ports - that allows you to minimize dependencies to the outside. Again that is great if you want to restart or migrate Isolates. It might also be a way around the limitation that GAE won't allow you to open sockets. Java without Multithreading and without the possibility to open sockets is hard and no fun - and that is why I believe Java on GAE ist not that great. This changes dramatically if you use Dart.
</ul>

So we will see where this is headed. Remember the first days of Java: It was seemingly all about Applets. Now it is all about the server. Technologies might succeed in other areas than originally planned.

If you are new to Dart - here is a presentation about Dart:

<div style="width:425px" id="__ss_9681955"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ewolff/google-dart" title="Google Dart" target="_blank">Google Dart</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9681955" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/ewolff" target="_blank">Eberhard Wolff</a> </div> </div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-4863539498149261333?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/NVsFFKkkq_AoeEI_eOTqtkuTcZM/0/da"><img src="http://feedads.g.doubleclick.net/~a/NVsFFKkkq_AoeEI_eOTqtkuTcZM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/NVsFFKkkq_AoeEI_eOTqtkuTcZM/1/da"><img src="http://feedads.g.doubleclick.net/~a/NVsFFKkkq_AoeEI_eOTqtkuTcZM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=1uBdOrpHrnw:TBMcm2gddFQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=1uBdOrpHrnw:TBMcm2gddFQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=1uBdOrpHrnw:TBMcm2gddFQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=1uBdOrpHrnw:TBMcm2gddFQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=1uBdOrpHrnw:TBMcm2gddFQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=1uBdOrpHrnw:TBMcm2gddFQ:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/1uBdOrpHrnw" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/1uBdOrpHrnw/random-thought-about-google-dart.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Tue, 08 Nov 2011 09:31:55 +0100</pubDate>
</item>
<item>
<title>Welcome to EclipseCon Europe 2011</title>
<description><![CDATA['<p>Today is the first day of EclipseCon Europe and I&rsquo;m really looking forward to a short but packed week full of great talks, a birthday party, receptions, hacking sessions and chats with the Eclipse family.</p>
<p>In case you are interested, I&rsquo;ll give to talks this week. The first one is today in the afternoon and the second one tomorrow.</p>
<ul>
<li><strong><a title="Open EclipseCon session schedule." href="http://www.eclipsecon.org/sessions/managing-large-and-distributed-eclipse-server-applications" target="_blank">Managing large and distributed Eclipse Server Applications</a></strong><br />
Wednesday, <strong>17:00</strong>, Willhelm-Krämer-Zimmer</li>
</ul>
<ul>
<li><strong><a title="Open EclipseCon session schedule." href="http://www.eclipsecon.org/sessions/developing-runtime-applications-eclipse-gyrex-presented-ageto" target="_blank">Developing Runtime Applications with Eclipse Gyrex</a></strong><br />
Thursday,<strong> 15:30</strong>, Seminarräume 5</li>
</ul>
<div>Oh and if you have any questions or just want to chat, feel free to talk to me at EclipseCon!</div>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2011/11/welcome-to-eclipsecon-europe-2011.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=hAEJ5rIeP3Y:gde8d2Yse-0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=hAEJ5rIeP3Y:gde8d2Yse-0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=hAEJ5rIeP3Y:gde8d2Yse-0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=hAEJ5rIeP3Y:gde8d2Yse-0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=hAEJ5rIeP3Y:gde8d2Yse-0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=hAEJ5rIeP3Y:gde8d2Yse-0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=hAEJ5rIeP3Y:gde8d2Yse-0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=hAEJ5rIeP3Y:gde8d2Yse-0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=hAEJ5rIeP3Y:gde8d2Yse-0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=hAEJ5rIeP3Y:gde8d2Yse-0:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2011/11/welcome-to-eclipsecon-europe-2011.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Wed, 02 Nov 2011 08:51:51 +0100</pubDate>
</item>
<item>
<title>Spring and Scala</title>
<description><![CDATA['Scala is an interesting language that appeals to a lot of Java developers as it is statically typed - just like Java. However, Scala focuses on concurrent processing. The choice of frameworks for typically bread and butter issues that you see in Enterprise applications is rather limited. For that reason it makes sense to look at Spring as a very mature and established Java Enterprise technology and whether it can be used with Scala. So here is a presentation and some sample code:

<div style="width:425px" id="__ss_9958551"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ewolff/scala-and-spring" title="Scala and Spring" target="_blank">Scala and Spring</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9958551" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/ewolff" target="_blank">Eberhard Wolff</a> </div> </div>

<a href="https://github.com/ewolff/scala-spring">https://github.com/ewolff/scala-spring</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-293888624442186217?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/Tq9MBOIgSEzeULSvUCy5lofU6i4/0/da"><img src="http://feedads.g.doubleclick.net/~a/Tq9MBOIgSEzeULSvUCy5lofU6i4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Tq9MBOIgSEzeULSvUCy5lofU6i4/1/da"><img src="http://feedads.g.doubleclick.net/~a/Tq9MBOIgSEzeULSvUCy5lofU6i4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=XuW0HiA_fF4:IUbUvkw6SrI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=XuW0HiA_fF4:IUbUvkw6SrI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=XuW0HiA_fF4:IUbUvkw6SrI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=XuW0HiA_fF4:IUbUvkw6SrI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=XuW0HiA_fF4:IUbUvkw6SrI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=XuW0HiA_fF4:IUbUvkw6SrI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/XuW0HiA_fF4" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/XuW0HiA_fF4/spring-and-scala.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Tue, 01 Nov 2011 11:15:35 +0100</pubDate>
</item>
<item>
<title>Grails Podcast Episode 128: Groovy Grails BOF at SpringOne2GX</title>
<description><![CDATA['<strong><span style="font-size: 17px; ">Show Notes</span></strong><br><div>This episode is a live recording from the Groovy and Grails BOF at SpringOne2GX 2011 in Chicago. Hear from the project leads on the Grails, Groovy and Griffon roadmaps as well as lots of interesting discussion the the Groovy ecosystem and community.</div><br><div>Thanks to all the guys who came out late at night to participate!</div><br><div>Enjoy!</div><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=nzIUWQfzePE:t80GTpP5uUw:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=nzIUWQfzePE:t80GTpP5uUw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=nzIUWQfzePE:t80GTpP5uUw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=nzIUWQfzePE:t80GTpP5uUw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=nzIUWQfzePE:t80GTpP5uUw:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=nzIUWQfzePE:t80GTpP5uUw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=nzIUWQfzePE:t80GTpP5uUw:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/nzIUWQfzePE" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/nzIUWQfzePE/250</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Mon, 31 Oct 2011 07:04:00 +0100</pubDate>
</item>
<item>
<title>Help spread the word about RSSOwl!</title>
<description><![CDATA['We think more people should know about RSSOwl. If you are the maintainer of a website or know someone that is, you can do us a favour and add one of our promotional buttons to your website, e.g.:
<br/><br/>
<a href="http://www.rssowl.org/" title="Get RSSOwl - Powerful RSS / RDF / Atom News Feed Reader."><img src="http://www.rssowl.org/images/contribute/getrssowl_small" style="border:0; "width="80" height="15" alt="Get RSSOwl"></a>
<br/><br/>
You can find instructions on our <a href="http://www.rssowl.org/contribute">Contribute</a> page. Thanks in advance!<br /><br /><a href="http://www.rssowl.org/node/294">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/294</link>
<author>bpasero</author>
<pubDate>Sat, 01 Oct 2011 10:25:23 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 127 - Discussion about Grails Best Practices</title>
<description><![CDATA['<span style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><div style="background-color: transparent; "><p dir="ltr" id="internal-source-marker_0.9709787375759333" style="margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Show Notes</span></p><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span><ul>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Great StackOverflow thread on </span><a href="http://stackoverflow.com/questions/6226759/best-practices-to-be-followed-while-developing-grails-application"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">Best Practices</span></a><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></p></li>
</ul></li>
<ul>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://weblog.dangertree.net/2008/11/22/grails-package-naming/"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">Grails Package Naming</span></a><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "> (Oldy but a Goody)</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://www.springone2gx.com/conference/chicago/2011/10/home"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">SpringOne 2GX</span></a><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "> (Oct 25-28)</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://dalts.net/post/9695448113/gr8confau"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">GR8Conf </span></a><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">in Canberra (Nov 15) and </span><a href="http://osdc.com.au/"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">OSDC</span></a><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "> (Nov 16-18)</span></p></li>
</ul></li>
<ul>
<li style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://skillsmatter.com/event/groovy-grails/groovy-grails-exchange-2011"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">Groovy & Grails Exchange 2011 </span></a><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">(Dec 8-9)</span></p></li>
<li style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="https://github.com/Grailsrocks/grails-plugin-platform"><span style="font-size: 10pt; font-family: Verdana; color: #000099; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; ">Grails Plugin Platform</span></a></p></li>
</ul></li>
</div></span><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WVu2oPD2Xxg:7MC2BudhH6Y:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WVu2oPD2Xxg:7MC2BudhH6Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=WVu2oPD2Xxg:7MC2BudhH6Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WVu2oPD2Xxg:7MC2BudhH6Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WVu2oPD2Xxg:7MC2BudhH6Y:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=WVu2oPD2Xxg:7MC2BudhH6Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=WVu2oPD2Xxg:7MC2BudhH6Y:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/WVu2oPD2Xxg" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/WVu2oPD2Xxg/249</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Thu, 29 Sep 2011 01:56:00 +0200</pubDate>
</item>
<item>
<title>adesso Now On slideshare</title>
<description><![CDATA['My employer adesso AG is now on slideshare: <a href="http://www.slideshare.net/adessoAG/">http://www.slideshare.net/adessoAG/</a> . 

Most of the presentations are in German. There are quite a few already and of course there are more to come. I thought I would show three presentations here on the blog.

The most popular so far is about security and JSF (German):

<div style="width:425px" id="__ss_9389874"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/adessoAG/owasp-top-10-scanning-jsf" title="OWASP Top 10 : Scanning JSF" target="_blank">OWASP Top 10 : Scanning JSF</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9389874" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/adessoAG" target="_blank">adessoAG</a> </div> </div>

Then there is this one about memory and performance analysis in Java - something I think every Java developer should understand (German) :

<div style="width:425px" id="__ss_9390208"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/adessoAG/mist-gemssen-java-performance-und-memory-analyse" title="Mist gemessen? Java Performance und Memory Analyse " target="_blank">Mist gemessen? Java Performance und Memory Analyse </a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9390208" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/adessoAG" target="_blank">adessoAG</a> </div> </div>

And this one about Requirements Engineering (German) :

<div style="width:425px" id="__ss_9375879"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/adessoAG/eine-kleine-praktische-philosophie-ber-das-requirements-engineering-final-mitbildnachweis" title="Eine kleine praktische Philosophie über das Requirements Engineering" target="_blank">Eine kleine praktische Philosophie über das Requirements Engineering</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9375879" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/adessoAG" target="_blank">adessoAG</a> </div> </div>



PS: Of course there is still my personal slideshare account with English presentations at <a href="http://www.slideshare.net/ewolff/">http://www.slideshare.net/ewolff/</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-4853913562214406824?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/AHhvPWPD1dN9NZWYz7sEG_Zoj8s/0/da"><img src="http://feedads.g.doubleclick.net/~a/AHhvPWPD1dN9NZWYz7sEG_Zoj8s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/AHhvPWPD1dN9NZWYz7sEG_Zoj8s/1/da"><img src="http://feedads.g.doubleclick.net/~a/AHhvPWPD1dN9NZWYz7sEG_Zoj8s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=P1RfAgbewAE:OzMtd6GDfJU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=P1RfAgbewAE:OzMtd6GDfJU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=P1RfAgbewAE:OzMtd6GDfJU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=P1RfAgbewAE:OzMtd6GDfJU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=P1RfAgbewAE:OzMtd6GDfJU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=P1RfAgbewAE:OzMtd6GDfJU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/P1RfAgbewAE" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/P1RfAgbewAE/adesso-now-on-slideshare.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Mon, 26 Sep 2011 11:26:00 +0200</pubDate>
</item>
<item>
<title>Book on Agile Development Practices using Scrum</title>
<description><![CDATA['<a href="http://2.bp.blogspot.com/-bAqZF6tIZAY/TnIjyLyxA1I/AAAAAAAAAKc/vU-P1TWUdlk/s1600/IMG_0459.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://2.bp.blogspot.com/-bAqZF6tIZAY/TnIjyLyxA1I/AAAAAAAAAKc/vU-P1TWUdlk/s400/IMG_0459.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5652619827369542482" /></a><br />Quite some time ago I was invited to contribute a book chapter to a new German book on development practices and techniques for Scrum, edited by Roman Pichler and Stefan Roock. What an honor to join them on this book project, so I wrote a chapter on agile software development using the automated refactorings that modern IDEs provide. Meanwhile the book is already out since a few month and contains a collection of really cool chapters from all kind of different authors from the agile universe. Take a look if you are interested in agile software development and willing to read a book in German... :-)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-1727923616561691496?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/09/book-on-agile-development-practices.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Thu, 15 Sep 2011 18:12:26 +0200</pubDate>
</item>
<item>
<title>Do you know about Add-Ons?</title>
<description><![CDATA['RSSOwl is based on a platform that can easily be extended with additional functionality. We provide some add-ons that are worth mentioning here. If you open <i>Tools | Add-ons | Find Add-ons</i> you see a list of available add-ons for your platform. The most popular one is likely the <b>Newsgroup reader</b> that turns RSSOwl into a nntp-client (find out more <a href="http://www.rssowl.org/help#item_11ba">here</a>). Another useful add-on that was recently added is the <b>Offline Mode</b> that allows to stop all network access from RSSOwl as long as the offline mode is active.<br  /><br />
With the same mechanism, you can even install additional languages into RSSOwl. Find the list of additional languages from <b>Tools | Language | Download Additional Languages</b>.<br /><br /><a href="http://www.rssowl.org/node/293">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/293</link>
<author>bpasero</author>
<pubDate>Sun, 11 Sep 2011 15:34:57 +0200</pubDate>
</item>
<item>
<title>Cloud PowerWorkshop at WJAX</title>
<description><![CDATA['This year at WJAX me and my colleagues Halil-Cem Gürsoy, Andreas Hartmann and Stephan Müller from adesso will present the Cloud Power Workshop for the first time. It will cover everything you need to know to implement application with Java for the Cloud.

We will cover <a href="http://code.google.com/appengine/">Google App Engine</a> (GAE). It pioneered the PaaS Cloud approach and is quite broadly used nowadays. At the same time GAE has some limitations that you need to know about to successfully build application on the platform - in particular if you use Java.

Then <a href="http://cloudfoundry.org/">Cloud Foundry</a> will be shown - it provides a very interesting approach to PaaS - because it supports relational databases and Tomcat which is quite a familiar platform for most Java developers.

To develop Cloud applications successful you need to use novel architectures. We will cover principles like BASE and the CAP theorem. And we will show how to implement Cloud system with good scalability using RabbitMQ and a NoSQL database. Also Map/Reduce using Apache Hadoop will be demoed.

Of course there will be lot of live coding and material to take away so you can try it at home.

Take a look at the <a href="http://jax.de/wjax2011/workshops/?tid=2110#session-18959">official announcement (German)</a> - looking forward to see you there!
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-9144655742874067706?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/1Jdp_Xva6qSRbCDjq8c8x2FICuc/0/da"><img src="http://feedads.g.doubleclick.net/~a/1Jdp_Xva6qSRbCDjq8c8x2FICuc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/1Jdp_Xva6qSRbCDjq8c8x2FICuc/1/da"><img src="http://feedads.g.doubleclick.net/~a/1Jdp_Xva6qSRbCDjq8c8x2FICuc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=q3_LDDU4-_8:TkmDpOVH4qc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=q3_LDDU4-_8:TkmDpOVH4qc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=q3_LDDU4-_8:TkmDpOVH4qc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=q3_LDDU4-_8:TkmDpOVH4qc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=q3_LDDU4-_8:TkmDpOVH4qc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=q3_LDDU4-_8:TkmDpOVH4qc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/q3_LDDU4-_8" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/q3_LDDU4-_8/cloud-powerworkshop-at-wjax.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Thu, 08 Sep 2011 10:30:01 +0200</pubDate>
</item>
<item>
<title>RSSOwl now available in 8 languages</title>
<description><![CDATA['Thanks to the work of our translators, RSSOwl is now available in English, German, Polish, Serbian, Italian, Spanish, Chinese (Traditional) and Chinese (Simplified). Stay tuned for upcoming Portuguese and French translations. If your language is missing, you can <a href="http://www.rssowl.org/node/287">help out</a>.<br /><br /><a href="http://www.rssowl.org/node/292">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/292</link>
<author>bpasero</author>
<pubDate>Fri, 02 Sep 2011 20:27:03 +0200</pubDate>
</item>
<item>
<title>More translations please...</title>
<description><![CDATA['We are still looking for native speakers to translate RSSOwl into their language, this time we especially look for <b>Chinese Simplified</b>, <b>Dutch</b>, <b>Japanese</b> or <b>Bengali</b> as these languages are commonly spoken by many people around the world. Please <a href="http://www.rssowl.org/node/287">read on here</a> if you can help out, thanks.<br /><br /><a href="http://www.rssowl.org/node/291">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/291</link>
<author>bpasero</author>
<pubDate>Fri, 19 Aug 2011 20:59:37 +0200</pubDate>
</item>
<item>
<title>More languages, native Mac Disk Image, new Linux Repositories</title>
<description><![CDATA['We added <b>Italian</b> and <b>Polish</b> versions of RSSOwl and there is still more languages to come soon. If you are missing your spoken language in RSSOwl, you can <a href="http://www.rssowl.org/node/287">help out in translating</a>.
<br /><br /> 
Mac users will be happy to hear that RSSOwl for Mac is now provided as disk image. In addition to this new deployment format, the application is now a single executable application bundle that can easily be moved to the applications folder and started from there.
<br /><br />
Finally I would like to point out our new repositories for Ubuntu provided by getdeb.net. More details are available from our <a href="http://www.rssowl.org/download"downloads</a> page. Note that <i>packages.rssowl.org</i> is no longer actively maintained.<br /><br /><a href="http://www.rssowl.org/node/290">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/290</link>
<author>bpasero</author>
<pubDate>Wed, 17 Aug 2011 08:41:28 +0200</pubDate>
</item>
<item>
<title>RSSOwl 2.1.2 released with first translations *update*</title>
<description><![CDATA['We are happy to announce the release of RSSOwl 2.1.2. This release enables the installation of additional languages into RSSOwl (from <i>Tools | Language</i>). Thanks to our team of translators, as of today we can provide translations to German, Spanish and Chinese Traditional.<br /><br />
We are still looking for more people helping out with translations. If you can help us, please <a href="http://www.rssowl.org/node/287">click here</a> for further instructions. <br /><br />
Update: Localized versions of RSSOwl are now available from our <a href="http://www.rssowl.org/download">downloads page</a>.<br /><br /><a href="http://www.rssowl.org/node/289">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/289</link>
<author>bpasero</author>
<pubDate>Sun, 14 Aug 2011 14:12:08 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 126 - Newscast for August 10, 2011</title>
<description><![CDATA['<span style="line-height: normal; "><div style="background-color: transparent; "><p dir="ltr" id="internal-source-marker_0.3852350083179772" style="font-family: 'Times New Roman'; font-size: medium; margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; ">Catch up on all the latest news around Grails 2.0!</span></p><p dir="ltr" id="internal-source-marker_0.3852350083179772" style="font-family: 'Times New Roman'; font-size: medium; margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "><br></span></p></div></span><span style="font-family: Verdana; line-height: normal; "><strong><span style="font-family: 'Times New Roman'; font-weight: normal; font-size: medium; "><div style="background-color: transparent; display: inline !important; "><p dir="ltr" id="internal-source-marker_0.3852350083179772" style="white-space: normal; margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt; margin-bottom: 0pt; "><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Show Notes</span></p><font size="2"><span style="font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></font><ul style="white-space: normal; ">
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; ">Grails 2.0.0.M1 </span><a href="http://grails.org/2.0.0.M1+Release+Notes">release notes</span></a></span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; ">STS: </span><a href="http://static.springsource.org/sts/docs/latest/reference/html/grails/grails20.html">Using Grails 2.0 with STS</span></a></span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; ">Parallel Grails installations on Ubuntu</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://grails-contributors.cloudfoundry.com/%20">Grails Contributors</span></a> - on Cloud Foundry!</span></p></li>
</ul>
<font size="2"></span></font><ul style="white-space: normal; ">
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; ">Spring Social plugin for Grails</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; ">Spring Security Core 1.2</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://www.grails.org/plugin/burning-image">Burning Image Grails Plugin</span></a></span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://rosenfeld.heroku.com/en/articles/programming/2011-08-07-why-i-prefer-rails-over-grails">Rails vs Grails blog</span></a></span></p></li>
</ul>
<font size="2"></span></font><ul style="white-space: normal; ">
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://glaforge.appspot.com/article/gaelyk-1-0-is-out">Gaelyk 1.0</span></a></span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; ">Static type-checking in Groovy</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://code.google.com/p/gbench/">GBench</span></a> - Groovy benchmarks</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://www.youtube.com/watch?v=gl83-80Qq94">Tuning Grails Application Webinar</span></a> (SpringSource Dev Channel)</span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="http://www.grails.org/Profiler+Plugin">Profiling Plugin</span></a></span></p></li>
<li style="list-style-type: disc; font-size: 10pt; font-family: Verdana; color: #000000; background-color: #ffffff; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; "><p dir="ltr" style="margin-right: 9pt; margin-top: 0pt; margin-bottom: 0pt; "><a href="https://github.com/webdevwilson/graffiti">Grafitti</a></span></p></li>
</ul>
</div></span></strong></span><span style="line-height: normal; "><div style="background-color: transparent; ">
<ul style="font-family: 'Times New Roman'; font-size: medium; ">
</ul>
</div></span><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=2p5P0L_DyM8:t5XGnVBEXoo:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=2p5P0L_DyM8:t5XGnVBEXoo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=2p5P0L_DyM8:t5XGnVBEXoo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=2p5P0L_DyM8:t5XGnVBEXoo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=2p5P0L_DyM8:t5XGnVBEXoo:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=2p5P0L_DyM8:t5XGnVBEXoo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=2p5P0L_DyM8:t5XGnVBEXoo:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/2p5P0L_DyM8" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/2p5P0L_DyM8/248</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Thu, 11 Aug 2011 02:43:00 +0200</pubDate>
</item>
<item>
<title>com.apple.dock.extra.xpc needs to take control</title>
<description><![CDATA['After my recent Mac OS X 10.7 Lion upgrade I was greeted with a dialog box after reboot telling me that<br />
<blockquote>
com.apple.dock.extra.xpc needs to take control of another process for debugging to continue. Type the name and password of a user in the "Developer Tools" group to allow this.</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-oB5zmf6Gato/Ti6NFXlzchI/AAAAAAAACe8/4ugSwIHzvdg/s1600/Screen+Shot+2011-07-25+at+08.33.27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-oB5zmf6Gato/Ti6NFXlzchI/AAAAAAAACe8/4ugSwIHzvdg/s1600/Screen+Shot+2011-07-25+at+08.33.27.png" /></a></div>
<br />
No problem, I thought, and entered my credentials. Alas, to no avail. My name and password were rejected, which had me a little panicked at first, because I thought the OS upgrade might somehow have botched my account, potentially locking me out of my Mac later.<br />
<br />
Hitting cancel would only get rid of the message for a few seconds, then it would reappear, again and again.<br />
Turns out the solution was quite easy: Go the Mac App Store and download Xcode 4.1. Once the installer has finished downloading, run it to replace the Snow Leopard version of Xcode 4.0 with a Lion compatible one. Once that is done, the message will not appear again.<br />
<br />
<em>Please note: Maybe I could somehow have fiddled with my accounts privileges and group memberships, but as I needed Xcode anyhow, installing the correct version seemed the logical thing to do.</em><br />
And by the way: Should the Xcode 4.1 installer seem to take forever, make sure there not this little popup hidden behind some of the other Windows on screen:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-8vS_9T-d5oQ/Ti6PmWPXYcI/AAAAAAAACfA/igBbFyRzVqc/s1600/Screen+Shot+2011-07-25+at+10.06.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-8vS_9T-d5oQ/Ti6PmWPXYcI/AAAAAAAACfA/igBbFyRzVqc/s1600/Screen+Shot+2011-07-25+at+10.06.15.png" /></a></div>
<br />
The installer will stall, until you close iTunes and the iTunesHelper (which may be running, even if iTunes is not. Use Activity Monitor to quit iTunesHelper if needed.)<br />
<br />
<strong>Update:</strong> Apple has released an update to the Xcode 4.1 installer (4.1.1), which will fix this (iTunes) problem. As the release notes say, if you have already installed it, there is no need to update, as the included software is the same as before:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-syuQOdB-K-Q/Tjz_c12pfJI/AAAAAAAACfo/dxWcgzbbvfI/s1600/Screen%2BShot%2B2011-08-06%2Bat%2B10.43.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-syuQOdB-K-Q/Tjz_c12pfJI/AAAAAAAACfo/dxWcgzbbvfI/s1600/Screen%2BShot%2B2011-08-06%2Bat%2B10.43.54.png" /></a></div>
<br /><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-2887856100348288645?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/AH8IqSiz13I" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/AH8IqSiz13I/comappledockextraxpc-needs-to-take.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Sat, 06 Aug 2011 10:47:28 +0200</pubDate>
</item>
<item>
<title>Keynoting ECSA 2011</title>
<description><![CDATA['I feel honored to keynote with the subject "What Does it Really Mean to be an Architect?" the 5th European Conference on Software Architecture (ECSA 2011) in Essen, Germany. The conference takes place from 13-16 September 2011 to discuss the latest research and experiences in software architecture.<br />
<br />
The range of topics includes service and component architectures, quality attributes of software architectures, product line architectures, management of architectural decisions, and enterprise architecture. Workshops on traceability and dependencies in software architecture, as well as software architecture variability, provide further opportunities for in-depth discussion.<br />
<br />
Each day, keynote speakers from academic and industrial backgrounds will discuss perspectives on current trends and challenges in software architecture. The other keynotes are:<br />
<br />
<ul><li>Interactive Ubiquitous Computing Systems (Albrecht Schmidt, University of Stuttgart)</li>
<li>Software Analysis as a Service (Harald Gall, University of Zurich)</li>
<li>Enterprise Architecture (Jörg Koletzki, E.ON IT GmbH)</li>
<li>Software Performance Engineering in Dynamic Environments (Raffela Mirandola, Politecnico di Milano)</li>
<li>Balancing Long-Term Research with Industrial Applicability (Magnus Larsson, ABB Corporate Research)</li>
</ul><br />
The detailed program and registration information can be found at <a href="http://www.ecsa2011.org">http://www.ecsa2011.org</a> - register online before August 14th to take advantage of the early registration rates!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-2106978174628662272?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/tTze1LWEotHKHVk_EA4k_eGeviU/0/da"><img src="http://feedads.g.doubleclick.net/~a/tTze1LWEotHKHVk_EA4k_eGeviU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tTze1LWEotHKHVk_EA4k_eGeviU/1/da"><img src="http://feedads.g.doubleclick.net/~a/tTze1LWEotHKHVk_EA4k_eGeviU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=hlat6oXpgYE:QMb6oAI1k1A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=hlat6oXpgYE:QMb6oAI1k1A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=hlat6oXpgYE:QMb6oAI1k1A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=hlat6oXpgYE:QMb6oAI1k1A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=hlat6oXpgYE:QMb6oAI1k1A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=hlat6oXpgYE:QMb6oAI1k1A:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/hlat6oXpgYE" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/hlat6oXpgYE/keynoting-ecsa-2011.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Thu, 04 Aug 2011 18:57:00 +0200</pubDate>
</item>
<item>
<title>List all open Safari tabs across windows</title>
<description><![CDATA['Over the course of a workday I tend to accumulate lots of browser windows, and even more tabs inside them. &nbsp;Up to now, I would often lose track of what which tabs were open in which window and in which space. In the end, I would often just open a page again in a new tab of the window I happened to be in at the moment, increasing the overall clutter.<br />
With the advent of persistent application state across reboots or application restarts as well as fullscreen apps in Mac OS X Lion that situation has gotten even worse.<br />
<br />
The "Window" menu in Safari does not help too much, because it only shows the tabs of the currently focussed window. Today, while wondering why a website was not displaying correctly, I accidentally found a remarkably simple (and built-in!) way of showing all open tabs across all open Safari windows.<br />
<br />
Just hit Cmd-Alt-A or pick "Activity" from the Window menu in any Safari window to open or focus the Activity overlay window.<br />
<br />
It is usually used to determine what servers different parts of any given website are loaded from. However, even if you are not interested in that, this little popup contains a list of all currently open tabs, regardless of the window they are in.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/--BTjbiN3Pxc/TjgW0dSbysI/AAAAAAAACfE/_pZZsfLVHqg/s1600/Screen+Shot+2011-08-02+at+17.14.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/--BTjbiN3Pxc/TjgW0dSbysI/AAAAAAAACfE/_pZZsfLVHqg/s1600/Screen+Shot+2011-08-02+at+17.14.33.png" /></a></div>
<br />
Double clicking any entry in there will take you to the correct window and focus the desired tab. Nice and easy, not even an extension needs to be installed :) The only drawback I see is that you cannot sort that list, clicking the "Address" column header has no effect.<br />
<br />
A final tip: When you open the window, it might have one or more of the entries expanded, making the list overly long. Even though there is no collapse-all feature I could find, you can rather quickly do so manually by selecting the top entry in the list and then repeatedly hit the left and down arrow keys. Left arrow will close the currently selected item, down arrow move to the next entry. Even with lots of tabs listed, within a few seconds you should make your way all the way down, leaving a nice clean list of tabs.<br />
<br />
<br /><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-210033358597640700?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/gziLiTC54SA" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/gziLiTC54SA/list-all-open-safari-tabs-across.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Tue, 02 Aug 2011 17:50:00 +0200</pubDate>
</item>
<item>
<title>Lion Finder Source List Icon Size</title>
<description><![CDATA['<p><strong>[Update]</strong>As can be read on Mac OS X Hints <a href="http://hints.macworld.com/article.php?story=20110720153625822">here</a>, this setting also applies to the side bar in Mail.<strong>[/Update]</strong></p><p>Apple has - as was to be expected - slightly modified the appearance of many Mac OS X controls in 10.7 "Lion". Some of those changes have caused protest and debate around the net, but I believe this is just the same as it is with face-lifted car designs, which means in a few weeks everyone will have gotten used to the new style and consider the previous version old-fashioned.</p><p>However, there is one particular little issue that I could tell I would not come to like immediately: The icons - and more importantly the font-size - in the Finder's left hand sidebar is way bigger than it was in Snow Leopard. This makes the source list look much more cluttered in my opinion.</p><p>At first, I headed for the Finder's <em>View Options</em> context menu, but there's nothing there to change the sidebars appearance. A little more digging then brought me to the <strong>General</strong> preference panel in System Preferences (previously called Appearance). There you can make the desired change:</p><p><a href="http://1.bp.blogspot.com/-gRTTM2J33hY/TihXB7iOrDI/AAAAAAAACeY/Ntl0W3b_9Xs/s1600/General+Preferences.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-bfs6YICIBaI/TihaF-zE79I/AAAAAAAACe4/0gpdfVHijvg/s1600/15381763824_5M7zk.jpg" /></a></p><p>The following pictures show the three choices (Small, Medium, Large) with Medium being the default. Set to Small the Finder looks much friendlier again.</p><p><a href="http://1.bp.blogspot.com/-6qlDXHu0_gM/TihXCq2QzqI/AAAAAAAACeg/KGKlQhf3kJg/s1600/Small+Source+List+Icons.png" imageanchor="1" style="margin: 1em;"><img border="0" src="http://1.bp.blogspot.com/-6qlDXHu0_gM/TihXCq2QzqI/AAAAAAAACeg/KGKlQhf3kJg/s1600/Small+Source+List+Icons.png" /></a>&nbsp;<a href="http://2.bp.blogspot.com/-wq9m6cWpkYg/TihW_44uYSI/AAAAAAAACeU/5SH0Ap99fZg/s1600/Medium+Smart+List+Icons.png" imageanchor="1" style="margin: 1em;"><img border="0" src="http://2.bp.blogspot.com/-wq9m6cWpkYg/TihW_44uYSI/AAAAAAAACeU/5SH0Ap99fZg/s1600/Medium+Smart+List+Icons.png" /></a>&nbsp;<a href="http://4.bp.blogspot.com/-gVpaOqioUUk/TihXCOzBJzI/AAAAAAAACec/wuPiRxouqVQ/s1600/Large+Source+List+Icons.png" imageanchor="1" style="margin: 1em;"><img border="0" src="http://4.bp.blogspot.com/-gVpaOqioUUk/TihXCOzBJzI/AAAAAAAACec/wuPiRxouqVQ/s1600/Large+Source+List+Icons.png" /></a></p><p>Oh, and while you're at it, you might also want to change <strong>Show Scroll Bars</strong> setting to <em>When scrolling</em>, instead of <em>Always</em> or <em>Automatically based on input device</em> if you like me sometimes use an older mouse.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-7850322716928717547?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/2Yf01izZPVM" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/2Yf01izZPVM/lion-finder-source-list-icon-size.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Fri, 22 Jul 2011 23:34:02 +0200</pubDate>
</item>
<item>
<title>Help translate RSSOwl into your language</title>
<description><![CDATA['Since <a href="http://www.rssowl.org/node/286">RSSOwl 2.1</a> has been released, more and more people ask for a translated version of RSSOwl. Currently, English is the only language supported and we would like to change that. We are now asking our fellow users to help translate RSSOwl into their language.<br /><br />
If you are willing to help out or know someone that could, please check out our <a href="http://wiki.rssowl.org/index.php/Translation">translation wiki</a> that lists all the details.<br /><br />
Upon submission of your completed translation you will get an exclusive free RSSOwl T-Shirt from <a href="http://www.ooshirts.com/" target="_blank">ooshirts.com</a>.<br /><br /><a href="http://www.rssowl.org/node/287">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/287</link>
<author>bpasero</author>
<pubDate>Fri, 22 Jul 2011 15:11:49 +0200</pubDate>
</item>
<item>
<title>RSSOwl 2.1 released</title>
<description><![CDATA['We are happy to announce that RSSOwl 2.1 is now available for download. 
The 2.1 release comes with some exciting cool new features:
<ul>
<li><a href="http://wiki.rssowl.org/index.php/2.1_Changelog#Google_Reader_Synchronization" target="_blank">google reader articles synchronization</a></li>
<li>new <a href="images/rssowl_2_1_headlines.jpg" target="_blank">headlines</a> and <a href="images/rssowl_2_1_list.jpg" target="_blank">list</a> layout</li>
<li>redesigned <a href="images/rssowl_2_1_newspaper.jpg" target="_blank">newspaper</a> view</li>
<li>news archiving</li>
<li>readability support</li>
<li>instant folder aggregation</li>
<li>improved performance and reliability</li>
<li>full <a href="http://wiki.rssowl.org/index.php/2.1_Changelog" target="_blank">changelog</a></li>
</ul>
Existing users of RSSOwl will see this new version showing up as update. New users should visit our <a href="http://www.rssowl.org/download">downloads page</a> to download RSSOwl 2.1 for your operating system.
<br /><br />
PS: If you like RSSOwl, please leave a positive review at our <a href="https://sourceforge.net/projects/rssowl/reviews/" target="_blank">SourceForge project page</a>. Thanks!
<br /><br /><br /><br /><a href="http://www.rssowl.org/node/286">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/286</link>
<author>bpasero</author>
<pubDate>Fri, 15 Jul 2011 13:01:58 +0200</pubDate>
</item>
<item>
<title>A Short Story on a Waste Of Time</title>
<description><![CDATA['<p>This is about wasting a lot of time, effort and some energy on an unfortunately not so successful transition from smaller to bigger disks. Actors include a few external drives, Time Machine, an iMac with a dying system disk and me, being a little stupid. Fortunately there were no really serious consequences, however if I ever face a similar situation again, I might come here and read up on how to migrate systems and backups more sensibly.</p><a name='more'></a><br />
<h2 id="previouslyonlostdanielsmachine">Previously on <span style="text-decoration: line-through;">Lost</span> Daniel&rsquo;s machine</h2><p>To understand the situation fully, this is what my drive and partition layout used to be:</p><ul><li>320GB internal hard drive called &ldquo;Snow Leopard internal&rdquo;</li>
<li>2TB external USB drive<br />
<ul><li>500GB partition called &ldquo;TM500&rdquo; for Time Machine</li>
<li>1.5TB partition called &ldquo;TMRest&rdquo; for media, disk images etc.</li></ul></li>
<li>2x1TB in a Firewire 800 Western Digital MyBook II enclosure, configured as a 1TB RAID1, used for media and VMware instances</li>
</ul><p>The partitioning on the USB drive came about by migrating (cloning) a Time Machine backup from an earlier 500GB ATA drive in an external Firewire enclosure. The enclosure had failed, and as I did not feel like buying a new one for an elderly PATA hard drive, I replaced it with a new USB model, including a 2TB drive. However, I did not want to &ldquo;waste&rdquo; the whole new thing for Time Machine. Even with the 500GB drive I had had well over 6 months of backup to go back through, which was more than enough for me. So after transferring the Time Machine data from the old drive to the new bigger one, I set up the remaining 1.5TB as a media partition.</p><h2 id="earlysignsoftrouble">Early signs of trouble</h2><p>A few weeks ago my iMac&rsquo;s internal hard disk started failing. It manifested itself a spurious beachballing during random operations, even ones that would not obviously encompass intense disk activity like surfing the web or writing emails. At first I suspected a recent Flash or Adobe Reader updater to be the culprit, because I had had headaches over these before. Only after a few days did I realize that the system was logging disk read errors into the kernel log:</p><pre><code>kernel[0]: disk0s2: I/O error.</code></pre><p>Googling for that message quickly confirmed my suspicion and revealed that the disk was failing, making it impossible for the OS to function reliably. Fortunately the drive was kind enough to fail slowly, instead of a big bang, with this early warning I could make sure Time Machine had a very recent backup of my data, before shutting down the computer and taking it in for repair.</p><p>The old 320GB disk that came with the computer had been working since 2008, and while I would not have minded it living a little longer, this turned out to be a fine opportunity to get some more room to breathe on the internal disk, without having to resort to putting the Movies folder and the iTunes library to an external Firewire drive. So I had the shop install a replacement 2TB disk in place of the faulty stock one.</p><h2 id="roomtobreathe">Room to breathe</h2><p>Upon return I booted from the Snow Leopard DVD and let the Time Machine restore run. A few hours later I was happy to boot up the Mac as if nothing had changed. Well, almost nothing. For one, applications that had been downloaded from the Internet caused the &ldquo;This is potentially harmful, because it&rsquo;s from the Intarweb&rdquo; confirmation dialog to appear, even though I had run these apps for ages before the restore, but more importantly, the available disk space was about 1.800GB more than before. So far so good.</p><p>Happy about the newly won capacity I started moving back the iTunes library from the external drive to the internal one. After that, I began moving several hundred gigs of iMove projects, too.</p><h2 id="rememberthebackups">Remember the backups</h2><p>When finished copying lots of data - which had taken several hours - it occurred to me that now the 500GB Time Machine partition on the USB drive would be way too small now, even though the system drive was only about half full. I thought about my options for a moment and came up with the idea to reset the Firewire enclosure to work in RAID0 mode, effectively giving me 2TB capacity instead of 1TB with the former RAID1 configuration, and let Time Machine use that volume for backups. Sure, RAID0 increases the chance of fatal failure, but as I also back up my data to Carbonite, I figured this would be an acceptable risk.</p><p>I would then reformat the 2TB USB attached drive as a single large partition for miscellaneous use.</p><h2 id="lotsofcopyingandmoving">Lots of copying and moving</h2><p>Because of the upcoming repartitioning and reformatting I had to do a lot of shuffling around the remaining 1.000GB of data that was still lying partially on any of the three external drive partitions. This is when I realized that hard drives may have grown in size, but they have not grown in speed nearly as much. Even without the bottlenecks of Firewire 800 and USB2.0 copying around a TB of data will take an uncomfortable amount of time, even with directly attached SATA drives and sequential access. For example, assuming a (very optimistic) average speed of 60MB/s which I could get from the FW800 drive to the internal volume, moving 1TB (which is approximately  1.000.000MB will still take at least 4.5 hours. With USB 2.0 you can feel lucky if you get half the speed on average, easily doubling that time.</p><p>So over the course of three days I moved several TBs of data between the drives, partitioning and formatting in between. At last I ended up with this setup:</p><ul><li>2TB internal hard drive called &ldquo;Snow Leopard internal&rdquo;</li>
<li>2TB external USB drive, called &ldquo;USB2MEDIA&rdquo;</li>
<li>2x1TB in FW 800 MyBook II enclosure, configured as 2TB RAID0, called &ldquo;TM2TBR0&rdquo;</li>
</ul><p>It would have been easier, had I not wanted to keep my 6 months of Time Machine backup history intact. Even though I have rarely needed it, I tend to rather err on the side of caution. Without that and the accompanying limitations with regards to what could be moved where and repartitioned how and when, I could probably have saved one or two large copy jobs.</p><h2 id="caughtmymistake">Caught my mistake?</h2><p>As I said earlier, after a few days and nights of shifting large amounts of data over way to narrow bandwidth channels, I was now sitting in front of my target configuration. Extra points to anyone who has caught my little oversight that made all this was somewhat in vain. The rest of you would probably have been just a confused as I have when I entered Time Machine for the first time after that, just to see that my backup history had shrunk down to only 2 weeks after all.</p><p>Turns out, I was a little too happy about all the space I had won on the internal drive - so I did not remember to <em>turn off</em> Time Machine after the first boot into the new system. Instead, I started importing all sorts of large media files from the external disks to the internal one. While I was doing so, Time Machine dutifully kicked in, noticed a lot of new material and started backing that up to the still 500GB volume. And because of all the new data and the much too small target drive, it did the only thing it could, remove old backups to make room for the new stuff.</p><p>In essence, I had lost my 6 months worth of history even before I came up with my elaborate (?) data moving and migration scheme&hellip; </p><h2 id="sowhat">So what?</h2><p>Well, in the end I did not really lose anything very important - all my current files and some history are still there. Should I find out a day from now that I need to get back a version of a  file from 6 months ago, I may be out of luck, but that&rsquo;s about it. However, I am fairly sure this will not happen to me again, <span style="text-decoration: line-through">should</span>when the next hard drive failure strikes. And now that you have made it through this text desert, maybe it won&rsquo;t happen to you, at all :)</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-2749420328525372633?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/xvvPqenYyIE" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/xvvPqenYyIE/short-story-on-waste-of-time.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Mon, 11 Jul 2011 20:16:41 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 125 - Interview with Hamlet D'Arcy</title>
<description><![CDATA['This week we speak with Hamlet D'Arcy form Canoo. In a broad ranging discussion, we cover topics like Codenarc, Hackergartens, Testing, Lean and IntelliJ -- all with a Groovy focus! Something here for everyone!<br><span style="font-family: Verdana; font-size: 14px; line-height: normal; "><br><br><div style="margin-top: 0px; margin-bottom: 0px; background-color: #ffffff; margin-left: 6px; margin-right: 6px; "><strong style="font-family: Verdana; ">Show Notes</strong><br><ul style="margin-top: 0px; margin-bottom: 0px; font-family: Verdana; "><li style="margin-top: 0px; margin-bottom: 0px; ">Hamlet (<a href="http://twitter.com/#!/hamletdrc" id="polh" title="@HamletDRC">@HamletDRC</a>) on twitter</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">Hamlet's&nbsp;<a href="http://hamletdarcy.blogspot.com/" id="w4ye" title="Blog">Blog</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; ">The&nbsp;<a href="http://codenarc.sourceforge.net/" id="jf-:" title="CodeNarc">CodeNarc</a>&nbsp;project</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">The Spock project and Hamlet's&nbsp;<a href="http://tv.jetbrains.net/videocontent/ffff" id="x8fl" title="Screencast on Spock and Intellij">Screencast on Spock and Intellij</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://www.canoo.com/blog/2011/05/12/what-to-expect-at-hackergarten/" id="wzla" title="What to expect at a Hackergarten">What to expect at a Hackergarten</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://www.jetbrains.com/idea/" id="a6o9" title="IntelliJ IDEA">IntelliJ IDEA</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://www.infoq.com/presentations/Lean-Groovy" id="nqzp" title="Slimmed Down Software">Slimmed Down Software</a>&nbsp;Video on Lean Groovy</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">Hamlet's&nbsp;<a href="http://hamletdarcy.blogspot.com/search?q=lean" id="rs65" title="blog posts on lean">blog posts on lean</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://www.canoo.com/blog/2011/03/08/waste/" id="dgbx" title="Waste!">Waste!</a>&nbsp;a summary of lean ideas on the Canoo Blog</li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://www.youtube.com/watch?v=4XL42u7vtJ4" id="gwmx" title="Metaprogramming in Groovy">Metaprogramming in Groovy</a>&nbsp;video:&nbsp;</li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://pragprog.com/book/dlret/agile-retrospectives" id="jmid" title="agile retrospectives">agile retrospectives</a>: Book from PragPress</li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://uberconf.com/" id="wrtr" title="Uberconf">Uberconf</a>&nbsp;</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">Hamlet D'Arcy&nbsp;<a href="http://tv.jetbrains.net/tags/hamlet" id="mvj2" title="jetbrains.tv video stream">jetbrains.tv video stream</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://www.manning.com/koenig2/" id="xazm" title="Groovy in Action">Groovy in Action</a>&nbsp;2nd Edition&nbsp;</li>
<li style="margin-top: 0px; margin-bottom: 0px; "><div style="margin-top: 0px; margin-bottom: 0px; ">For JUG talks: email&nbsp;<a id="zybd" href="mailto:hamlet.darcy@canoo.com" title="hamlet.darcy@canoo.com">hamlet.darcy@canoo.com</a></div></li>
</ul></li>
</div></span><div>&nbsp;</div><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=eaTDVacJkXI:ttRYkP6nn7c:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=eaTDVacJkXI:ttRYkP6nn7c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=eaTDVacJkXI:ttRYkP6nn7c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=eaTDVacJkXI:ttRYkP6nn7c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=eaTDVacJkXI:ttRYkP6nn7c:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=eaTDVacJkXI:ttRYkP6nn7c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=eaTDVacJkXI:ttRYkP6nn7c:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/eaTDVacJkXI" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/eaTDVacJkXI/247</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Thu, 07 Jul 2011 00:29:00 +0200</pubDate>
</item>
<item>
<title>Slides "Cloud Architecture" Online Seacon 2011</title>
<description><![CDATA['The slides for the talk "Cloud Architecture" from Seacon 2011 are online:<br />
<br />
<div style="width:425px" id="__ss_8461865"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ewolff/architectures-for-the-cloud" title="Architectures For The Cloud" target="_blank">Architectures For The Cloud</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8461865" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/ewolff" target="_blank">Eberhard Wolff</a> </div></div><br />
You can also <a href="http://www.slideshare.net/ewolff/architectures-for-the-cloud/download">download</a> them.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14001982-7219122047782069150?l=jandiandme.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/U20mbcz_XUTAZoeSWOEJGJI110c/0/da"><img src="http://feedads.g.doubleclick.net/~a/U20mbcz_XUTAZoeSWOEJGJI110c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/U20mbcz_XUTAZoeSWOEJGJI110c/1/da"><img src="http://feedads.g.doubleclick.net/~a/U20mbcz_XUTAZoeSWOEJGJI110c/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jandiandme2?a=6eZSQe95p2I:uW3276QEu00:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=6eZSQe95p2I:uW3276QEu00:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/jandiandme2?i=6eZSQe95p2I:uW3276QEu00:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=6eZSQe95p2I:uW3276QEu00:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=6eZSQe95p2I:uW3276QEu00:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jandiandme2?a=6eZSQe95p2I:uW3276QEu00:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/jandiandme2?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jandiandme2/~4/6eZSQe95p2I" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/jandiandme2/~3/6eZSQe95p2I/slides-cloud-architecture-online-seacon.html</link>
<author>noreply@blogger.com (Eberhard Wolff)</author>
<pubDate>Thu, 30 Jun 2011 14:15:50 +0200</pubDate>
</item>
<item>
<title>FAQ updated on Google Reader Article Synchronization</title>
<description><![CDATA['Based on a lot of feedback we got from users testing the new Google Reader article synchronization, the <a href="http://www.rssowl.org/help">FAQ</a> is now updated with the top questions and answers.<br /><br /><a href="http://www.rssowl.org/node/281">Read the full article</a>' ]]></description>
<link>http://www.rssowl.org/node/281</link>
<author>bpasero</author>
<pubDate>Tue, 28 Jun 2011 10:29:41 +0200</pubDate>
</item>
<item>
<title>Video podcast from the OSGi Users Forum UK meeting on OSGi Tooling</title>
<description><![CDATA['Last week I went to the OSGi Users Forum UK meeting in London to join a panel on OSGi Development Tooling. I was invited as one of the people working on the Virgo IDE, the Eclipse-based developer tooling for the Virgo runtime at Eclipse (which we recently contributed from vmware to Eclipse and made the first milestone build available to the public).<div><br /></div><div>The idea of the panel was to tell the panelists (all somewhat related to OSGi tooling) what you wanna get from those tools, what you are missing and what you would like to have in the future. Obviously we touched the old discussion whether manifest-first or manifest-generation is the better or more natural way of doing OSGi development, but this was not the only topic.<br /><div><br /></div><div>Now there is a video podcast available online:<div><div><ul><li><a href="http://skillsmatter.com/podcast/java-jee/osgi-development-tooling-panel-2320/js-2154">OSGi Users' Forum UK: OSGi Development Tooling Panel</a></li></ul></div><div>It was fun having a part of the panel sitting in front of the audience in person while the other part of the panel joined the session via Skype video. Thanks again to the organizers for making this panel happen!!! And enjoy the video!!!</div><div><br /></div></div></div></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-8516114735717216336?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/06/video-podcast-from-osgi-users-forum-uk.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Mon, 27 Jun 2011 17:46:22 +0200</pubDate>
</item>
<item>
<title>Interview with InfoQ</title>
<description><![CDATA['<div>I gave an interview for InfoQ talking about the latest release of the SpringSource Tool Suite, upcoming features and a little bit about things behind the scenes, like the distributed agile development we are doing here for building STS. You can read the full interview here:</div><div><ul><li><a href="http://www.infoq.com/news/2011/06/martin-lippert-sstoolsuite-2-6">InfoQ: Martin Lippert on the newly released SpringSource Tool Suite 2.6</a></li></ul></div><div>Enjoy!</div><div><br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-312109812111841600?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/06/interview-with-infoq.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Fri, 17 Jun 2011 23:08:28 +0200</pubDate>
</item>
<item>
<title>Jena Demo Camp will be in Hamburg</title>
<description><![CDATA['<p>Well, the room is called Hamburg. The city is still Jena (<a title="Read more about Jena." href="http://en.wikipedia.org/wiki/Jena" target="_blank">more about Jena</a>). We&rsquo;ll start at 5pm and it looks like that there&rsquo;ll be some awesome demos. It also seems that Runtimes is the hot topic. Together with modeling and tooling demos this looks like an interesting mix. Personally, I can&rsquo;t wait for the Stammtisch.</p>
<p style="text-align: center;">Eclipse Demo Camp Jena<br />
<strong><em>June 22nd, 5pm</em></strong><br />
JenTower, floor 27, room Hamburg</p>
<p style="text-align: center;"><em>Yes, on the day of <a title="Indigo" href="http://wiki.eclipse.org/Indigo" target="_blank">Indigo</a> GA!</em></p>
<p>Interested? <a title="Eclipse Demo Camp Jena registration page" href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Jena" target="_blank">Register today</a> and we&rsquo;ll see us next Wednesday. I think there is still room for one or two interesting demos. Thus, if you are developing some cool Eclipse technology or product that you&rsquo;d like to showcase just add it to the list on the registration page.</p>
<p>See you there!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2011/06/jena-demo-camp-will-be-in-hamburg.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=-c7_YpOL5yU:QiSmchjv-0U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=-c7_YpOL5yU:QiSmchjv-0U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=-c7_YpOL5yU:QiSmchjv-0U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=-c7_YpOL5yU:QiSmchjv-0U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=-c7_YpOL5yU:QiSmchjv-0U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=-c7_YpOL5yU:QiSmchjv-0U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=-c7_YpOL5yU:QiSmchjv-0U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=-c7_YpOL5yU:QiSmchjv-0U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=-c7_YpOL5yU:QiSmchjv-0U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=-c7_YpOL5yU:QiSmchjv-0U:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2011/06/jena-demo-camp-will-be-in-hamburg.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Thu, 16 Jun 2011 16:37:24 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 124 - Grails 1.4M1 Discussion</title>
<description><![CDATA['This month Peter and Glen have a long look at the new Grails 1.4 M1 release. If you haven't had a chance to kick the tyres, this is a fantastic chance to get up to speed on what's new.<br><div><div><span style="font-family: Verdana; font-size: 14px; line-height: normal; "><strong style="font-family: Verdana; ">Show Notes</strong><br><br><ul style="margin-top: 0px; margin-bottom: 0px; "><li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://grails.org/1.4.0.M1+Release+Notes" id="pq8s" title="Grails 1.4 Release Notes">Grails 1.4 Release Notes</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a id="ilhn" href="http://www.jtict.com/blog/tag/performance/" title="Grails 1.3 vs 1.4 Performance Comparison">Grails 1.3 vs 1.4 Performance Comparison</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a id="vjux" href="http://www.slideshare.net/gr8conf/slideshows" title="GR8 Conference Slides">GR8 Conference Slides</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a id="q0b9" href="http://www.slideshare.net/gr8conf/building-progressiveu-iswithgrailsrobfletcher2011" title="Robert Fletcher's presentation on Progressive Enhancement">Robert Fletcher's presentation on Progressive Enhancement</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a id="sxji" href="http://filamentgroup.com/dwpe/" title="That Progressive Enhancement Book">That Progressive Enhancement Book</a></li>
</ul></li>
</span></div></div><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=4b9DjwWF98w:BRO8vlPjeWU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=4b9DjwWF98w:BRO8vlPjeWU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=4b9DjwWF98w:BRO8vlPjeWU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=4b9DjwWF98w:BRO8vlPjeWU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=4b9DjwWF98w:BRO8vlPjeWU:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=4b9DjwWF98w:BRO8vlPjeWU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=4b9DjwWF98w:BRO8vlPjeWU:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/4b9DjwWF98w" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/4b9DjwWF98w/246</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Tue, 07 Jun 2011 01:27:00 +0200</pubDate>
</item>
<item>
<title>OSGi Development Tooling Panel at the OSGi Users Forum UK</title>
<description><![CDATA['I will be at the <a href="http://uk.osgiusers.org/Main/HomePage">OSGi Users Forum UK</a> in London on June 23rd to participate in a <a href="http://uk.osgiusers.org/Main/MeetingsandEventsCalendar">panel on OSGi Tooling Development</a> as a committer for the Virgo tooling, together with Neil Bartlett (BndTools), Peter Kriens (Bnd / OSGi Director of Technology), Simon Maple (RAD / IBM), Stuart McCulloch (Maven / Sonatype) and Kaloyan Raev (Libra / SAP), who will join us via Skype Video. So join us in London to talk about latest OSGi tooling efforts and discuss what is needed for the future.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-4198965081426631996?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/06/osgi-development-tooling-panel-at-osgi.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Wed, 01 Jun 2011 16:17:11 +0200</pubDate>
</item>
<item>
<title>"Spring Tooling &ndash; What&rsquo;s Cooking" - Article in German Eclipse Magazin</title>
<description><![CDATA['<div>Based on my short "New and Noteworthy" kind of talk at the JAX conference I wrote an article for the German <a href="http://it-republik.de/jaxenter/eclipse-magazin-ausgaben/Eclipse-meets-SPRING-000450.html">Eclipse Magazin</a> about what is cooking in the Spring tooling world. And the article made it for the top cover story:</div><div><br /></div><a href="http://4.bp.blogspot.com/-C6I5Lx_VnFI/TeZBIijh4iI/AAAAAAAAAIg/wJkZL2HMtK0/s1600/IMG_0326.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/-C6I5Lx_VnFI/TeZBIijh4iI/AAAAAAAAAIg/wJkZL2HMtK0/s400/IMG_0326.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5613245600534487586" /></a><div>So if you wanna know more about the latest news from the Spring tooling world, take a look at this. Aside of my quick walkthrough, Eberhard Wolff added a nice feature about the Cloud Foundry PaaS, which provides a great introduction to this platform. Enjoy!</div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-4620588357375832584?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/06/spring-tooling-whats-cooking-article-in.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Wed, 01 Jun 2011 15:45:34 +0200</pubDate>
</item>
<item>
<title>My personal highlights from JAX 2011</title>
<description><![CDATA['<div>I spent the past few days visiting the JAX 2011 conference in Mainz. And again, like the past years, it was great to meet a lot of interesting and nice people there. Aside of that, I wrote up some short notes about <a href="http://it-republik.de/jaxenter/artikel/Karate-Kata-Spring-3.1-JavaScript-und-HTML5-%28aka-die-Zukunft-des-Webs%29-3788.html">my personal highlights of JAX 2011</a> for jaxenter (in German), so if you are interested, take a look. I especially recommend to watch the Kata video with Arne Roock demoing a real Karate Kata. Enjoy!</div><div><br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18490491-4209943854269161680?l=martinlippert.blogspot.com' alt='' /></div>' ]]></description>
<link>http://martinlippert.blogspot.com/2011/05/my-personal-highlights-from-jax-2011.html</link>
<author>noreply@blogger.com (Martin Lippert)</author>
<pubDate>Wed, 01 Jun 2011 15:37:29 +0200</pubDate>
</item>
<item>
<title>Using JMeter to measure binary protocols</title>
<description><![CDATA['<p>This is just a short post linking to an entry I recently posted on <a href="http://www.codecentric.de">my company's</a> blog. It is about <a href="http://blog.codecentric.de/en/2011/05/using-jmeter-to-measure-binary-protocols/">Using JMeter to measure binary protocols</a>, which I recently had to do in a customer project.
</p>
<p>
It is very well possible that in the future there might be more posts there than here, but I will make sure there are links posted to this blog. Please note, that the JMeter article is available in both English and German.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-1530289302124391411?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/FXRJA_H2hqY" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/FXRJA_H2hqY/using-jmeter-to-measure-binary.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Wed, 11 May 2011 23:26:27 +0200</pubDate>
</item>
<item>
<title>Eclipse Indigo Demo Camp Jena</title>
<description><![CDATA['<p>&nbsp;</p>
<p>Once again we are organizing an <a title="Eclipse Demo Camp Jena" href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Jena" target="_blank">Eclipse Demo Camp in Jena</a>.</p>
<p style="text-align: center;"><img class="alignnone" title="Eclipse Indigo DemoCamp Logo" src="http://wiki.eclipse.org/images/b/b7/Eclipse_DemoCamp_New.jpg" alt="" width="100" height="81" /><br />
<strong>Jena, June 22nd, 2011</strong></p>
<p>If you&rsquo;d like to&nbsp;attend&nbsp;or present please don&rsquo;t hesitate to <a title="Send mail to Gunnar!" href="mailto:gunnar@ageto.net?subject=Eclipse%20Demo%20Camp%20Jena">contact me</a> or add yourself to the <a title="Open Demo Camp wiki page!" href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Jena" target="_blank">wiki page</a>!</p>
<p>&nbsp;</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2011/05/eclipse-indigo-demo-camp-jena.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=2Wb5q9MCCvk:N7yUasbHzUk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=2Wb5q9MCCvk:N7yUasbHzUk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=2Wb5q9MCCvk:N7yUasbHzUk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=2Wb5q9MCCvk:N7yUasbHzUk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=2Wb5q9MCCvk:N7yUasbHzUk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=2Wb5q9MCCvk:N7yUasbHzUk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=2Wb5q9MCCvk:N7yUasbHzUk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=2Wb5q9MCCvk:N7yUasbHzUk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=2Wb5q9MCCvk:N7yUasbHzUk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=2Wb5q9MCCvk:N7yUasbHzUk:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2011/05/eclipse-indigo-demo-camp-jena.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Mon, 09 May 2011 12:26:20 +0200</pubDate>
</item>
<item>
<title>iOS Feature creep hurts usability</title>
<description><![CDATA['<p>I have been a user of the iPod Touch from day one. With the iPhones being tied to unreasonably expensive mobile phone contracts it was never an option for me to buy one just for fun. But when the iPod Touch was announced I knew this was my device. I have been updating iOS whenever there was an update available, and usually I was pleased with what Apple had refined and added.</p>

<p>However, one thing has been bothering me for some time now, and I did not know if it was me getting older, or if really something had changed with the OS.</p>

<a name='more'></a>

<h2 id="longaudiofiles">Long Audio Files</h2>

<p>One of the main purposes the iPod has for me is listening to podcasts and audio books. With these I tend to almost enjoy my commutes. But also when doing chores around the house or at the gym my (now 4th gen) iPod Touch is a trusty companion.</p>

<p>Nevertheless, in recent times I got annoyed regularly when trying to pause playback and resume later from the lock screen. I am not sure if this was possible with the first versions of iOS - when it was still called iPhone OS - but it feels that this feature has been there forever: Double click the Home button when the lock screen is up, and you get playback controls in the upper third of the screen. This always worked perfectly for me, but in the past couple of months I have regularly hit the skip back or forward buttons by accident. When you are in the middle of a 3 hour podcast or a 12 hour audio book, jumping back to the beginning and having no idea how far exactly you had already got into it, this can be rather unnerving. </p>

<h2 id="gettingoldandclumsy">Getting old and clumsy?</h2>

<p>I did not know what caused this. At first, I thought I was just a little more clumsy than usual, but this happened time and again. So finally I asked my <a href="/p/my-book.html">book writing partner in crime</a> Udo to please take a screenshot of the playback controls on his 2G model which still had iOS 3.1.3 on it. This is his screenshot:</p>

<p><img src="http://2.bp.blogspot.com/-W0fXSxJ9qJA/TVmy44ur_rI/AAAAAAAACdY/sG529x-l780/s1600/ios313.jpeg" id="" alt="iOS 3.1.3 playback in lockscreen" title="iOS 3.1.3 playback controls on iPod Touch 2G" /></p>

<p>Looks normal, doesn&rsquo;t it? But somehow different than 4.2.1:</p>

<p><img src="http://3.bp.blogspot.com/-RV9n-ViCpnI/TVmyCFAzKSI/AAAAAAAACdI/iEFLM-sfTPI/s1600/ios421controls.jpg" id="" alt="iOS 4.2.1 playback in lockscreen" title="iOS 4.2.1 playback controls on iPod Touch 4G" /></p>

<p>As is clearly visible in the direct comparison, the skip buttons have been moved much closer to the center button for play and pause, apparently to make room for additional controls, as can be seen here:</p>

<p><img src="http://3.bp.blogspot.com/-aBSZmioB-9U/TVmyX2h8SFI/AAAAAAAACdQ/fkR76z5aA7c/s1600/ios421withairplay.jpg" id="" alt="iOS 4.2.1 playback and AirPlay controls" title="iOS 4.2.1 playback controls with additional AirPlay button" /></p>

<h2 id="smallchange-bigimpact">Small change - big impact</h2>

<p>This seemingly minor change has proven to be a real pain in the neck for me. I have heard from other people complaining about their accidental hitting the skip buttons, too. In my opinion this is a classic case of feature creep: Over time more and more options get added to what was initially a well designed and carefully layed out design, effectively making it more feature rich, but also less usable. I am sure the people at Apple who designed this were aware of the implications, but probably they thought it was still just usable enough to do it this way instead of adding another row for the additional buttons.</p>

<p>So now I know it is not me somehow losing precision with my tapping on the screen, but an actual software change that works against me in this case. </p>

<h2 id="featurecreep">Feature creep</h2>

<p>There are other instances where adding new features to an already polished system adversely affects its ease of use and works against the proverbial magic like simplicity in handling Apple devices. One example would be the multi-tasking on recent iOS versions. Its quick task switcher is brought up by double-clicking the home button. This is a completely counterintuitive gesture in my opinion, not even mentioning the fine differences between switching and closing apps by &ldquo;deleting&rdquo; them from the switcher bar.</p>

<p>Another case of increasingly bad UI is the much criticized notification system. Originally it was just used for very few types of alerts and informational popups. Nowadays every app is free to push modal popups right in your face. When it was initially designed I am sure one of the key assumptions was that there would be a very limited number of these very disruptive alert boxes. Over time it became (ab)used for a lot more, which turned its simplicity from a strength to a weakness. </p>

<h2 id="whatsnext">What&rsquo;s next?</h2>

<p>In my opinion Apple has to rethink a lot of aspects in iOS. When it first came out Steve Jobs said it was &ldquo;at least 5 years ahead of the competition&rdquo;. It is 2011 now, almost 4 years into iOS&rsquo; life, and Android, Windows Phone 7 and most recently webOS are coming on strong, running circles around iOS in some areas. While I am still not yet sold on my company Android phone I have to admit the platform has its strong points, and iOS could definitely use some of its features. However, I would rather not have them if Apple&rsquo;s adding them to one of the next versions of their mobile OS meant they would be bolted on to the existing UI concepts without some serious rethinking. </p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-5468140509696658247?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/gNy5x4fj3Wc" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/gNy5x4fj3Wc/ios-feature-creep-hurts-usability.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Fri, 06 May 2011 21:34:21 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 123: CloudFoundry &  Groovy 1.8</title>
<description><![CDATA['<meta charset="utf-8"><span style="font-family: Verdana; line-height: normal; "><span style="font-family: Verdana; "><div>Here we go with another newscast, mainly about VMWare's CloudFoundry and the recent Groovy 1.8 release. The end of the podcast is a fun chat about Sven's new Android book and an NFC App for the Nexus S he released to the Android Market.&nbsp;</div><br><strong>Show Notes</strong></span><br><br><ul style="margin-top: 0px; margin-bottom: 0px; "><li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://blog.springsource.com/2011/04/12/one-step-deployment-with-grails-and-cloud-foundry/">One-step deployment with Grails and Cloud Foundry</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://blog.springsource.com/2011/04/21/deeper-into-grails-cloud-foundry/">Deeper into Grails & Cloud Foundry</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; "><a href="http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes">Groovy 1.8 release notes</a></li>
<li style="margin-top: 0px; margin-bottom: 0px; ">Sven's&nbsp;<a href="http://entwickler-press.de/ep/psecom,id,2,buchid,229.html" id="b3wg" title="New Book">New Book</a>&nbsp;and&nbsp;<a href="https://market.android.com/details?id=de.flavor.fsnfc" id="mx:2" title="App">App</a></li>
</ul></li>
</span><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=pJ5Ic6hU9xc:Rf8bhuJ-hRM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=pJ5Ic6hU9xc:Rf8bhuJ-hRM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=pJ5Ic6hU9xc:Rf8bhuJ-hRM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=pJ5Ic6hU9xc:Rf8bhuJ-hRM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=pJ5Ic6hU9xc:Rf8bhuJ-hRM:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=pJ5Ic6hU9xc:Rf8bhuJ-hRM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=pJ5Ic6hU9xc:Rf8bhuJ-hRM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/pJ5Ic6hU9xc" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/pJ5Ic6hU9xc/245</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Tue, 03 May 2011 10:34:00 +0200</pubDate>
</item>
<item>
<title>Grails Podcast Episode 122: Interview with Carl Quinn and Joe Sondow from Netflix</title>
<description><![CDATA['<div>In this episode we find out about Groovy and Grails usage at Netflix. JavaPosse legend Carl Quinn and Netflix Grails guy Joe Sondow talk about what Netflix is doing with Groovy, Grails, and the Cloud. Lots of cool hardcore tech in this interview!</div><br><div>Apologies for some dodgy echo in the audio at Glen's end. Fortunately Glen doesn't speak much so there's not much cause to complain!</div><br><div><span style="font-family: Verdana; line-height: normal; "><strong style="font-family: Verdana; ">Show Notes</strong><br><ul style="margin-top: 0px; margin-bottom: 0px; font-family: Verdana; "><li style="margin-top: 0px; margin-bottom: 0px; ">Carl Quinn (<a href="http://twitter.com/#!/cquinn" id="ljkn" title="cquinn">cquinn</a>) on twitter</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">Joe Sondow (<a href="http://twitter.com/#!/joesondow" id="ccby" title="joesondow">joesondow</a>) on twitter</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">The&nbsp;<a href="http://javaposse.com/" id="a3_p" title="JavaPosse">JavaPosse</a>&nbsp;Podcast</li>
<li style="margin-top: 0px; margin-bottom: 0px; ">The NetFlix&nbsp;<a href="http://techblog.netflix.com/" id="sdq8" title="tech blog">tech blog</a></li>
</ul></li>
<br><ul style="margin-top: 0px; margin-bottom: 0px; font-family: Verdana; "></ul></li>
</span></div><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=XxETEDMJz-M:oh3h2HhwOFA:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=XxETEDMJz-M:oh3h2HhwOFA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=XxETEDMJz-M:oh3h2HhwOFA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=XxETEDMJz-M:oh3h2HhwOFA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=XxETEDMJz-M:oh3h2HhwOFA:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=XxETEDMJz-M:oh3h2HhwOFA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=XxETEDMJz-M:oh3h2HhwOFA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/XxETEDMJz-M" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/XxETEDMJz-M/244</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Wed, 23 Mar 2011 10:31:00 +0100</pubDate>
</item>
<item>
<title>Grails Podcast Episode 121: GR8Conf interview with S&oslash;ren Berg Glasius and Guillaume Laforge</title>
<description><![CDATA['<span style="font-family: Verdana; line-height: normal; "><span style="font-family: Verdana; "><div>Glen sat down with&nbsp;S&oslash;ren Berg Glasius and Guillaume Laforge to find out more about GR8Conf - a Groovy and Grails conference which runs in Europe and the US (and sometime soon in Australia!)</div><div style="font-weight: bold; "><span style="font-family: Verdana; line-height: normal; "><strong style="font-family: Verdana; "><br></strong></span></div><strong>Show Notes</strong></span><br><ul style="margin-top: 0px; margin-bottom: 0px; font-family: Verdana; "><li style="margin-top: 0px; margin-bottom: 0px; ">The&nbsp;<a href="http://www.gr8conf.org/" id="wchn" title="GR8Conference">GR8Conference</a>&nbsp;home page&nbsp;</li>
</ul></li>
<ul style="margin-top: 0px; margin-bottom: 0px; font-family: Verdana; "></ul></li>
<ul style="margin-top: 0px; margin-bottom: 0px; font-family: Verdana; "></ul></li>
<div><span style="font-family: Verdana; line-height: normal; "><br></span></div><div><span style="font-family: Verdana; line-height: normal; "><br></span></div><div><span style="font-family: Verdana; line-height: normal; "><br></span></div><br>New Podcast Feed: http://feeds.grailspodcast.com/grailspodcast<br><br>grailspodcast.com<br>http://feeds.grailspodcast.com/grailspodcast<br>twitter: grailspodcast<br>flickr: grailspodcast</span><div class="feedflare">
<a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=z-Nt5umXzHE:kHdWzvb7Fng:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=z-Nt5umXzHE:kHdWzvb7Fng:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=z-Nt5umXzHE:kHdWzvb7Fng:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=z-Nt5umXzHE:kHdWzvb7Fng:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=z-Nt5umXzHE:kHdWzvb7Fng:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/grailspodcast?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.grailspodcast.com/~ff/grailspodcast?a=z-Nt5umXzHE:kHdWzvb7Fng:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/grailspodcast?i=z-Nt5umXzHE:kHdWzvb7Fng:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/grailspodcast/~4/z-Nt5umXzHE" height="1" width="1"/>' ]]></description>
<link>http://feeds.grailspodcast.com/~r/grailspodcast/~3/z-Nt5umXzHE/243</link>
<author>Glen Smith,Sven Haiges</author>
<pubDate>Wed, 09 Mar 2011 21:00:00 +0100</pubDate>
</item>
<item>
<title>Building web applications with EclipseRT</title>
<description><![CDATA['<p>No plans for Monday morning? Interested in learning building web apps with EclipseRT? If you are around Santa Clara on Monday March 21st then please join us at EclipseCon!</p>
<p>Our <a title="Open session info" Building web applications with EclipseRT"!" href="http://www.eclipsecon.org/2011/sessions/?page=sessions&id=1999" target="_blank">three hours tutorial</a> will introduce you to the key concepts for developing web applications with the OSGi HttpService, the Equinox ServletBridge and Virgo. Virgo is new this year and we are happy to have Glynn and Christopher joining us and talking a bit about Virgo.</p>
<p>We&rsquo;ll also have a great set of exercises. Thus, please bring your laptops with you and make sure its battery is loaded. All you need is a vanilla Eclipse SDK 3.7 M6 and a JDK on your system. But don&rsquo;t worry we&rsquo;ll also have a way to distribute the necessary pieces on site.</p>
<p style="text-align: center;"><strong>Monday</strong>, March 21st, <strong>9am</strong><br />
EclipseCon 2011, <strong>Ballroom A</strong></p>
<p style="text-align: center;"><strong><a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&id=1999"><img class="aligncenter size-full wp-image-368" title="EclipseRT" src="http://wagenknecht.org/blog/wp-content/uploads/2011/03/EclipseRT.png" alt="" width="120" height="89" /></a><br />
</strong></p>
<p>See you there!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2011/03/building-web-applications-with-eclipsert.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=J0LmobRxKeA:pzQgPIChL9Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=J0LmobRxKeA:pzQgPIChL9Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=J0LmobRxKeA:pzQgPIChL9Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=J0LmobRxKeA:pzQgPIChL9Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=J0LmobRxKeA:pzQgPIChL9Y:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=J0LmobRxKeA:pzQgPIChL9Y:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=J0LmobRxKeA:pzQgPIChL9Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=J0LmobRxKeA:pzQgPIChL9Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=J0LmobRxKeA:pzQgPIChL9Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=J0LmobRxKeA:pzQgPIChL9Y:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2011/03/building-web-applications-with-eclipsert.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Fri, 04 Mar 2011 23:50:18 +0100</pubDate>
</item>
<item>
<title>Eclipse Board Elections &ndash; Please Vote!</title>
<description><![CDATA['<p>Voting is now open for the Eclipse Board of Directors. I was thrilled when I got the mail that I&rsquo;ve been nominated. I&rsquo;ve been involved with Eclipse for a long time and as I stated in my <a title="Open Eclipse Board Candidate page" href="http://www.eclipse.org/org/elections/candidate.php?year=2011&id=wagenknecht" target="_blank">position paper</a> it&rsquo;s an amazing community. You can browse the <a title="Open list of candidates." href="http://www.eclipse.org/org/elections/nominees.php" target="_blank">list of candidates</a> and read more about each candidate on the Eclipse.org website.</p>
<p><em>If you are a committer you are able to vote!</em> If you haven&rsquo;t received a mail with your voting password yet please have a <a title="Eclipse Board Member Elections mail to Eclipse committers." href="http://dev.eclipse.org/mhonarc/lists/eclipse.org-committers/msg00848.html" target="_blank">look at this mail</a> which was sent to the committer mailing list. It explains how to register as a full member with a few steps. Basically you need to <a title="Open Eclipse Membership Agreement" href="http://eclipse.org/go/MEMBER_AGREEMENT" target="_blank">sign the membership agreement</a> and fax it to the Foundation&rsquo;s office. There is still time!&nbsp;Voting ends on <a title="Open world clock." href="http://www.timeanddate.com/worldclock/fixedtime.html?day=11&month=3&year=2011&hour=15&min=0&sec=0&p1=188" target="_blank">March 11, 2011 at 3pm Eastern time</a>.</p>
<p>I think the most interesting&nbsp;challenges&nbsp;for the upcoming term are Git and Gerrit. There is still a significant amount of code in CVS and quite a few projects are planning to switch after the Indigo release. Now Gerrit is interesting. There&rsquo;s a really good <a title="Open AlBlue's blog." href="http://alblue.bandlem.com/2011/02/someday.html" target="_blank">description</a> and <a title="Open AlBlue's blog." href="http://alblue.bandlem.com/2011/02/gerrit-git-review-with-jenkins-ci.html" target="_blank">a screencast</a> written/created by Alex available. Very good read and watch. It really has some benefits and potential for an important role in managing source contributions to Eclipse projects. I think it&rsquo;s clear that with Git the current way of handling patches through Eclipse Bugzilla doesn&rsquo;t scale. So we have to <a title="Investigate Gerrit usage at Eclipse with GIT" href="https://bugs.eclipse.org/283749" target="_blank">find a good story</a> for integrating Gerrit into the Eclipse IP process. But frankly, I don&rsquo;t see IPzilla go away anytime soon. There is still the whole management of 3rd party dependencies which is well implemented there. Of course, there is always <a title="Third Party Library Policy" href="https://bugs.eclipse.org/336874" target="_blank">room</a> for <a title="Simplify CQ Submission Process for Library Updates" href="https://bugs.eclipse.org/300717" target="_blank">improvement</a> (even <a title="Make "Organize Manifest" wizard run with Orbit projects" href="https://bugs.eclipse.org/330256" target="_blank">outside</a> of IPzilla).</p>
<p>On the other hand, Gerrit is a new tool that needs to be dealt with by the Eclipse webmasters. Once it is an essential part of the Eclipse development infrastructure it needs to be governed with <a title="Eclipse IT SLA" href="http://wiki.eclipse.org/IT_SLA" target="_blank">SLAs</a> (which basically translates to manpower). Thus, this effort must be supported by the Board which I hope to drive forward when I&rsquo;m elected as one of your&nbsp;representatives.</p>
<p><img class="alignnone size-full wp-image-349" title="Rock the Vote" src="http://wagenknecht.org/blog/wp-content/uploads/2011/02/rockthevote.jpg" alt="" width="253" height="228" /></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2011/02/eclipse-board-elections-please-vote.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Wj5cn2dXeeE:cSGBQ_pu0f8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Wj5cn2dXeeE:cSGBQ_pu0f8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Wj5cn2dXeeE:cSGBQ_pu0f8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Wj5cn2dXeeE:cSGBQ_pu0f8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Wj5cn2dXeeE:cSGBQ_pu0f8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Wj5cn2dXeeE:cSGBQ_pu0f8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Wj5cn2dXeeE:cSGBQ_pu0f8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Wj5cn2dXeeE:cSGBQ_pu0f8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Wj5cn2dXeeE:cSGBQ_pu0f8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Wj5cn2dXeeE:cSGBQ_pu0f8:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2011/02/eclipse-board-elections-please-vote.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Thu, 24 Feb 2011 15:25:06 +0100</pubDate>
</item>
<item>
<title>On Writing a Book, Pt. 5 - The Contract</title>
<description><![CDATA['<p><em>This is part five of an ongoing series about my experiences while writing the <a href="http://www.amazon.de/gp/product/1847197965?ie=UTF8&tag=wwwdanielschn-21&linkCode=as2&camp=1638&creative=6742&creativeASIN=1847197965">MySQL Admin Cookbook</a><img style="border-bottom-style: none !important; border-right-style: none !important; margin: 0px; border-top-style: none !important; border-left-style: none !important" border="0" alt="" src="http://www.assoc-amazon.de/e/ir?t=wwwdanielschn-21&l=as2&o=3&a=1847197965" width="1" height="1"> for Packt Publishing. All previous parts can be found under the <a href="/search/label/mysql-admin-cookbook">mysql-admin-cookbook</a> label.</em></p>

<p>After the initial discussions about the book&rsquo;s outline which I described in <a href="/2010/04/on-writing-book-pt-2-outline-and.html">part  2 of this series</a> were underway, talks about the actual writing contract started. Naturally, neither Udo nor I had any experience with publishing companies and the contracts between them and their authors. Add to that the fact that we are both from Germany and had had little to no experience with English legal stuff of any kind - apart from the usual 5000 pages EULAs you just &ldquo;agree to&rdquo; by clicking the &ldquo;go away&rdquo; button as quickly as possible - and you will probably understand that we were a little nervous about what we should expect. </p>
<a name='more'></a>
<h2 id="contractoutline">Contract outline</h2>

<p>On Feb, 27th 2009 we were sent the first draft of our contracts as PDFs via email. It was twelve pages long and was structured as follows.</p>

<p>First, there was a definition of terms to be used throughout the document, clarifying what terms like &ldquo;Editors&rdquo;, &ldquo;Electronic Form&rdquo;, &ldquo;Program&rdquo;, &ldquo;Rights&rdquo; and so on were supposed to be understood as in context of the contract.</p>

<p>After that followed a series of paragraphs covering different aspects of the relationship between author and the publishing company. Contained therein were regulations about the writing schedule, copyright, what would happen in case the schedule was not met, about the process of editing, corrections and proofreading, the distribution of the finished book, warranties and payment terms. Moreover there were items about revised later editions of the book, marketing and support, regulations concerning what rights the author would have regarding using materials from the book and in which contexts and how many copies the author would receive for free after publication.</p>

<p>These descriptions were about 7 pages long. All this text seemed to be very much a standard template used for every book of that publisher.</p>

<p>After that followed a more individual part, detailing the exact names and addresses of the contract partners, amount and schedule of advance payments and later royalties depending on book sales and the terms of payment. Moreover the schedule for all the chapters was laid down with due dates for each of them. Since we were writing as co-authors, my contract mentioned only the chapters Udo and I had agreed on to be written by me, his contract naturally covered the other half. </p>

<p>Finally the format we would send our chapters in would be defined as either Microsoft Word Format or Open Office ODT. Graphics were expected in either TIFF or EPS as line drawing, screenshots as PNG or JPG.</p>

<h2 id="contractdetails">Contract Details</h2>

<p>Udo and I went through our respective PDFs on our own at first. Once we were through we sat together and compared notes and questions. There were quite a few points we were immediately sure and in agreement about - even though it was our first publishing contract - that could not be accepted from our side. Not yet knowing how much of a problem changing those would be for the publisher we agreed unanimously that should they not be possible to change we would not go ahead and abandon the whole project.</p>

<p>I will not go into extensive detail here, but let me just mention some parts we were not willing to sign as they were:</p>

<ul>
<li>a phrase about liability in case the author(s) were to miss the schedule</li>
<li>a phrase which would make the author(s) responsible for anything in the book being &ldquo;unlawful&rdquo;, or &ldquo;infringing on the copyrights of any third party&rdquo;</li>
<li>a phrase coming down to a guarantee that nothing written in the book would cause any data loss or other damage to users&rsquo; data as a result of following instructions in the book.</li>
<li>a phrase that would require the author(s) to fully indemnify the Publisher fully against all losses, damages and costs, including any sums paid to settle claims, arising out of the breach of one of those warranties.</li>
</ul>

<p>These terms would have - in the worst case - meant an incalculable legal risk to us. We suggested adding &ldquo;to the best of the authors&rsquo; knowledge&rdquo; as a limiting clause to all of the above items.</p>

<p>The only other &ldquo;major&rdquo; issue for us was an early termination clause from the authors&rsquo; side. The original contract proposal only had a provision for the publishing company to terminate the contract for certain reasons before the book would be finished. No such regulations was contained in the contract, for example in case of a severe illness or other personal events that would prohibit us from finishing up the writing.</p>

<p>All other terms were mostly fine with us, even though we, of course, had several detail questions about individual pieces. Those were all answered comprehensively and mostly met what we already had expected.</p>

<p>We offered to waive any advance payments in return for the addition of an early termination option from our side, assuming that this might be a problem for the publisher otherwise. Moreover we were looking at the whole project mostly from a curiosity and &ldquo;new experience&rdquo; type of view. None of us had any expectations or hopes to earn a lot of money, so we were quite ready to be paid on after actual copies of the finished book had been sold.</p>

<h2 id="publishersreaction">Publisher&rsquo;s reaction</h2>

<p>We had feared that we would be getting into some sort of lenghty discussion with the publisher about the changes we wanted to make to the contract, assuming that the initial version they had sent us was something that had been carefully designed and worked out by their legal team and was not subject to change very much.</p>

<p>Much to our surprise, however, all the changes we requested were applied without any further ado. We received a new version of the contract some time after we had sent out our feedback. In that new revision the first issue mentioned in the list above (liabilities in case of schedule missed) was deleted completely - we had merely asked for a clarification about what would be considered a &ldquo;miss&rdquo;.</p>

<p>The &ldquo;to the best of the author&rsquo;s knowledge&rdquo; clause was added without further discussion to all the paragraphs we had asked for. Only in one case had there been a little misunderstanding as to how we wanted a particular sentence to be phrased, but that was fixed very quickly, too.</p>

<p>Once we had the proposed final contract in our hands, we let Udo&rsquo;s sister, who is a lawyer, have another look at it and make sure we had not missed anything important. Once she gave her ok, we could sign the paper copies and send them back to the UK, starting the actual writing.</p>

<h2 id="afterthefact">After the fact</h2>

<p>Apparently the first contract draft was not as binding from the publisher&rsquo;s side, as we had initially expected. We were somewhat nervous about the amount of discussion we would get ourselved into when proposing changes to it, that is why we were willing to give up the advance payments. Turns out that would not have been necessary at all. Some time after we had finished the book I heard - by pure coincidence - several people in podcasts and on the net claiming that one should never ever accept the first draft of any author contract. Judging from the very first and only one I read and having statements like this from experienced authors, I tend to agree :)</p>

<p>So if you are currently - or in the future - in contact with a publisher, I suggest you take a close look at their proposed contract and contact them about anything that is unclear. Ask questions and do not hesitate to demand changes whereever you do not like something about it or consider it too one-sided. I do not mean you should be needlessly aggressive, but in the end this is about what you will be investing a considerable amount of time and work into for the next several months, if not more, so I recommend being frank and not shy when it comes to the legal document covering that.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-1058202654725238564?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/n3b1ZXDMhho" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/n3b1ZXDMhho/on-writing-book-pt-5-contract.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Fri, 11 Feb 2011 10:30:59 +0100</pubDate>
</item>
<item>
<title>TotalFinder - A must have addition to Mac OS X</title>
<description><![CDATA['<p>As a former long time Windows user I have quite successfully (and since Steam has arrived completely) transitioned to the Mac platform. It took some time, but over the past two and a half years I have found replacements and substitutes for most programs I used regularly on Windows for everyday tasks and must say I don&rsquo;t look back.</p>

<p>Ok, there are some things I installed to make the base system a little more comfortable, e. g. by installing <a href="http://blog.boastr.net/">Better Touch Tool</a> or <a href="http://bjango.com/mac/istatmenus/">iStat Menus</a> which allow for better leveraging of available hardware features. But other than that - I haven&rsquo;t made up my mind about <a href="http://smilesoftware.com/TextExpander/">TextExpander</a> yet - there is little left to be desired.</p>

<p><em>Except</em>: File and window management&hellip; Say what you will about Windows, but one are where it still runs circles around stock Snow Leopard is window and file management. Aero Peek - docking Windows to the screen edges and having them become exactly half the screen size - is a welcome addition to <a href="http://blog.boastr.net/">BTT</a>, and Expos&eacute; is also usable. But still, the Windows explorer IMHO is still a better file manager than the Finder.</p>

<p>I cannot even tell you the exact details of what I am missing, but the fact alone that there is no default system shortcut like Win+E which brings up a new Explorer/Finder window is a major downside of the Mac OS. </p>

<p>Quite recently, however, I came across <a href="http://totalfinder.binaryage.com/">TotalFinder</a> in some podcast (sorry, cannot really remember, might have been <a href="http://www.bitsundso.de">Bits und so</a>) and gave it a try. It&rsquo;s author Antonin Hildebrand took the open source code that is used in Google&rsquo;s Chrome browser to implement the tabs and put together a nice little piece of software that pimps your Goold-Ole-Finder. </p>

<p>There are lots of features, the primary one being the addition of said tabs to regular Finder windows, which itself already helps to tame the window clutter you normally end up with when using the Finder. Basically, when TotalFinder is installed, instead of opening a new window for each directory you want to use, a new tab is added to the last Finder window that was opened. Of course, you can still have multiple windows, and you can even tear off existing tabs and spawn them into new windows that way, just as you can do with websites in Chrome.</p>

<p>But my favorite feature of all is what Antonin calls the <a href="http://totalfinder.binaryage.com/visor">Visor</a>: A configurable hot key slides up a (optionally multi-tabbed) Finder window from the bottom of your screen - similar to the way the iPhone brings up the keyboard. It works just like any other (Total)Finder window and automatically disappears once it loses focus or you hit the escape key (also configurable). IMHO this is insanely useful, because you never have to worry about filling up your desktop with countless Finder instances - they are all nicely kept in tabs, out of sight by default but just a single keystroke away and all at your disposal at the same time. This alone would be a great tool already.</p>

<p>But there&rsquo;s still more&hellip; If you are like me, you like the classic two-column file manager paradigm of <a href="http://en.wikipedia.org/wiki/Directory_Opus">Directory Opus</a> or <a href="http://en.wikipedia.org/wiki/Norton_Commander">Norton Commander</a> fame, depending on which platform you grew up on. TotalFinder has that, too. Although it does not always work perfectly, probably because it has to be a rather hacky way to integrate this into the OS, I still find the &ldquo;Dual Mode&rdquo; a cool feature. It just splits a Finder window, including the Visor, in half vertically and mirrors the source list on both sides. That way you can easily choose two directories to be visible at the same time and move or copy files between them without switching windows or tabs. This, too, is just a shortcut away.</p>

<p>All in all, after two weeks of trying it for 8 to 10 hours a day on my MacBook Pro without a single crash, I can wholeheartedly recommend total finder. And prices between $10 and $15 should not really cause you much trouble, either. Depending on what you like, this is less than one or two iPad games - but TotalFinder is just so much more useful :)</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32710003-4031643488068000000?l=www.danielschneller.com' alt='' /></div><img src="http://feeds.feedburner.com/~r/DanielSchnellers2ndBlog/~4/63RLKWy1mU4" height="1" width="1"/>' ]]></description>
<link>http://feedproxy.google.com/~r/DanielSchnellers2ndBlog/~3/63RLKWy1mU4/totalfinder-must-have-addition-to-mac.html</link>
<author>noreply@blogger.com (Daniel Schneller)</author>
<pubDate>Tue, 18 Jan 2011 01:29:37 +0100</pubDate>
</item>
<item>
<title>True Product Based Launches</title>
<description><![CDATA['<p>I like Eclipse product configurations. Did I say that before? I use them a lot. They are a great way to assemble your final bits. PDE Build, Buckminster and soon Tycho are able to take them and put the stuff together. You&rsquo;ll get a final zip that&rsquo;s ready to hand out to consumers.</p>
<p>There is also a way to <em>launch </em>them. However, what always bothered me was that this was just a fake application launch. You had to use the product editor all the time to keep the launch configs in sync. But over time I noticed some issues. Sometimes, when updating target platforms, something gets out of sync, features will be missing, whatever. Your launch is broken and the guys start to line up next to my desk.</p>
<p>Hmm, wouldn&rsquo;t it be nice to just <em>launch </em>products all the time and have them 100% like they should be all the time including automatic validation of missing features (even included once) and plug-ins?</p>
<p><a href="http://wagenknecht.org/blog/wp-content/uploads/2010/09/product-launch.png"><img class="alignnone size-medium wp-image-329" title="True Product Launch" src="http://wagenknecht.org/blog/wp-content/uploads/2010/09/product-launch-382x300.png" alt="" width="382" height="300" /></a></p>
<p>Oh yes! If you need this, just install my Patches for PDE (via <em>Help -> Install New Software&hellip;</em>). I published a new version in my repository (<a title="p2 Repository" href="http://eclipseguru.org/" target="_blank">http://eclipseguru.org/</a>). The relevant patch is attached to <a title="Open Eclipse Bug 326059." href="http://bugs.eclipse.org/326059" target="_blank">bug 326059</a>.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2010/09/true-product-based-launches.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=_4RqjD1VItA:Sl3I15GVG1Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=_4RqjD1VItA:Sl3I15GVG1Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=_4RqjD1VItA:Sl3I15GVG1Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=_4RqjD1VItA:Sl3I15GVG1Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=_4RqjD1VItA:Sl3I15GVG1Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=_4RqjD1VItA:Sl3I15GVG1Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=_4RqjD1VItA:Sl3I15GVG1Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=_4RqjD1VItA:Sl3I15GVG1Q:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=_4RqjD1VItA:Sl3I15GVG1Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=_4RqjD1VItA:Sl3I15GVG1Q:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2010/09/true-product-based-launches.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Thu, 23 Sep 2010 18:03:43 +0200</pubDate>
</item>
<item>
<title>Better Than Open Source</title>
<description><![CDATA['<p>Yes, there are things that are better than Open Source. Way better sometimes. Very often you have to look outside of work. But they exist. For example, Ed&rsquo;s pictures are one of those things. They always remind me of life and how close we connect it with work. Even though I&rsquo;ll start a two weeks vacation on Monday, I&rsquo;m pretty sure I&rsquo;ll continue to participate in a community I got connected to through work that expanded well into my life. And&nbsp;there <em>is </em>a really good reason for this vacation &nbsp;I&rsquo;m so excited about.</p>
<p>Julius Wagenknecht<br />
2010-09-04 03:40 UTC<br />
49cm, 3090g</p>
<p>At 5:40am local time my wife gave birth two our second child. It&rsquo;s one of those few things that are way better than Open Source. They are both healthy. We spent most of the day together and began enjoying our new life as &ldquo;party of four&rdquo;.</p>
<p>Picture below. <img src='http://wagenknecht.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://wagenknecht.org/blog/wp-content/uploads/2010/09/julius_wagenknecht.jpg"><img class="alignnone" title="Julius Wagenknecht" src="http://wagenknecht.org/blog/wp-content/uploads/2010/09/julius_wagenknecht.jpg" alt="" width="480" height="480" /></a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://wagenknecht.org/blog/archives/2010/09/better-than-open-source.html" target="_blank"><img src="http://wagenknecht.org/blog/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:gIN9vFwOqvQ" border="0"></img></a>
</div>' ]]></description>
<link>http://wagenknecht.org/blog/archives/2010/09/better-than-open-source.html</link>
<author>Gunnar Wagenknecht</author>
<pubDate>Sat, 04 Sep 2010 21:02:59 +0200</pubDate>
</item>
<item>
<title>Exception transparency in Java</title>
<description><![CDATA['Recently posted on my Oracle blog: <a href="http://blogs.sun.com/briangoetz/entry/exception_transparency_in_java">http://blogs.sun.com/briangoetz/entry/exception_transparency_in_java</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-1785644442233397084?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/06/exception-transparency-in-java.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Tue, 08 Jun 2010 00:32:30 +0200</pubDate>
</item>
<item>
<title>Memtest86+ rules!</title>
<description><![CDATA['About two months ago I upgraded my system from Windows XP to Windows 7 64-bit, and at the same time from 4G to 8G RAM.&nbsp; As always happens, I was amazed how much faster a new Windows installation was than the old one on the same hardware -- it is insidious how "Windows Decay" chips away at performance.&nbsp;<br /><br />About a week ago, the system started behaving badly -- IE crashing, Thunderbird crashing, and starting yesterday, the whole thing blue-screening.&nbsp; After wasting a lot of time trying to figure out "what software was updated recently", I started to suspect memory errors.&nbsp; So I ran the Windows memory test program that shows up on the boot screen -- nothing.&nbsp;<br /><br />After more dorking around, I downloaded and ran MemTest86+ (www.memtest.org), burned it to a USB drive, and ran it.&nbsp; It immediately found thousands of memory errors; by trying various combinations and moving modules from slot to slot, I was able to identify the bad modules.&nbsp; I had bought Crucial's top of the line (Ballistix Tracer LED) from Newegg; the Crucial folks immediately shipped out a replacement.&nbsp;<br /><br />Given how many errors&nbsp; MemTest found, its amazing that the Windows test found nothing.&nbsp; <br /><br />Thumbs up for MemTest86+ and Crucial customer service.&nbsp; Thumbs down for Windows Memory Test.&nbsp;<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-616793551956263345?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/05/memtest86-rules.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Thu, 20 May 2010 23:01:11 +0200</pubDate>
</item>
<item>
<title>Registration is open for the 2010 JVM Language Summit</title>
<description><![CDATA['We've just opened registration for the 3rd annual JVM Language Summit, to be held at Oracle's facility in Santa Clara CA on July 26-28.&nbsp; See <a href="http://www.jvmlangsummit.com/">http://www.jvmlangsummit.com/</a> for details.&nbsp;<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-9170306030003434564?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/05/registration-is-open-for-2010-jvm.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Tue, 18 May 2010 18:52:59 +0200</pubDate>
</item>
<item>
<title>e-mail packrat</title>
<description><![CDATA['<p>I've long tried to keep all the e-mail I've ever sent or received; I've got an archive going back to 1985 or so, when I first realized that keeping e-mail might be a good idea.  Trouble is, keeping such an archive in one place requires a fair amount of maintenance, because formats and protocols change.  Is it worth the effort? </p><ul><li>Until 1987, I primarily used a VMS system.  </li><li>In 1987, I switched to a Unix machine at MIT.  I was able to import my old VMS mail into whatever the mailbox format of the day was (mbox, probably) by a script I found somewhere.  </li><li>In 1992, I switched to using POP through the client program Eudora.  Eudora stored the mail locally, in a folder format that was something like 'mbox', but not exactly.  (For example, attachments were not stored inlined, but instead in external files.)  I managed to import my old Unix mbox files into folders.  </li><li>In 2004, I switched from POP to IMAP.  I went through an extensive process to convert my existing mail base into real mbox files that my IMAP server could read.  I spent several days writing scripts to convert the Eudora pseudo-mbox files to something imapd could handle.</li><li>In 2006, I left Quiotix, and switched my primary mail over to Tuffmail.  I took my mail archive (in mbox file format) and put it up on my server machine, and serve that up with imapd.  So I now have my mail split between two servers, but Thunderbird can deal with multiple servers just fine.  I tried to move the archived mail to Tuffmail as well with several different tools (imapsync, offlineimap, Thunderbird bulk-copy) but I could never get a clean copy -- I suspect that the combination of crappy old multiply-converted mbox files and the old UW-IMAPD server is to blame.  </li></ul><p>Right now its still fragmented across a number of formats and servers.  Yuck.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-6350520341723461753?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/01/e-mail-packrat.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:22:32 +0200</pubDate>
</item>
<item>
<title>Book review: Fermat's Enigma</title>
<description><![CDATA['<iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=none0b69&o=1&p=8&l=as1&m=amazon&f=ifr&md=10FE9736YVPPT7A0FBG2&asins=0385493622" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br/><p>This is a nice little book about the history of mathematics and the 350-year quest for the proof to Fermat's Last Theorem.&nbsp; It was written by the fellow who wrote the BBC / Nova TV special on Andrew Wiles, but includes a lot more information than a one-hour show could.&nbsp; It does a nice job at hitting many of the high points of mathematical development from Pythagoras to modern day, including the "discovery" of zero, then negative numbers, then imaginary numbers, techniques for grappling with infinity, Turing-computability, and Godel's incompleteness theorem.&nbsp; It doesn't attack any of these in great depth, but it does provide a nice historical perspective while remaining about as accurate as a lay book can do.&nbsp; It also does a nice job of illustrating the near-hubris required for Wiles to lock himself in a closet for eight years in order to solve a problem that had eluded mathematicians for centuries.&nbsp; Mathematicians will enjoy the panorama; non-mathematicians will likely find the introduction to some of these obscure concepts accessible and enjoyable.&nbsp;&nbsp; Also by this author: <a href="http://www.amazon.com/gp/product/0385495323?ie=UTF8&tag=none0b69&linkCode=as2&camp=1789&creative=390957&creativeASIN=0385495323">The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=none0b69&l=as2&o=1&a=0385495323" border="0" alt="" width="1" height="1" /> .</p><p>(Recommended to me by: Stuart Marks.)</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-1753640002971023482?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/01/book-review-fermat-enigma.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>Our government, protecting us</title>
<description><![CDATA['<p>We've recently gone on an "energy efficiency" rampage at the house, replacing bulbs with CFLs, identifying devices that are unnecessarily left on all the time, wrestling with Windows to stay asleep during periods of inactivity, etc.&nbsp; We also recently just installed a "continuous" or "on demand" hot water heater, replacing the 50G direct-vent tank heater we had (it was getting to the end of its lifetime and it was easier to replace it preemptively.)&nbsp;</p><p>Unfortunately, the state requires all newly install water heaters to have a thermostatic mixing valve that limits the water temperature to 120 degrees.&nbsp; (For tank systems, it is recommended to keep the tank water at 140, to prevent the bacteria that causes Legionnaire's disease, but 140 is hot enough to scald.&nbsp; But continuous systems have a control system for the output temperature, so can be safely kept at whatever temperature you program in.)&nbsp; And its probably not even working right, since the output temperature is even less than 120.&nbsp; The valve adds cost to the system and to the installation (probably a dozen additional welds in addition to the valve), and while we now have an infinite supply of hot water, generated more efficiently, its not as hot as we like it.&nbsp;</p><p>Reputable plumbers are not able to remove or bypass the valve, which means we need to either find a disreputable plumber or I need to do it myself (read: find an incompetent plumber.)&nbsp;</p><p>Note to lawmakers: in my many years of successful shower use, I've learned a secret trick to avoid getting scalded: put your hand under the water first -- if its too hot, turn down the water temperature before getting in!</p><p>Thanks, elected officials, for making my house systems both more expensive and less useful.&nbsp;</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-3706320997467030173?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/01/our-government-protecting-us.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>zTunes released</title>
<description><![CDATA['<p>As promised in yesterday's entry, I'm releasing my digital media management software (ztunes) to the world.&nbsp; It's hosted at github: <a href="http://github.com/briangoetz/ztunes">http://github.com/briangoetz/ztunes</a>.&nbsp; It is written in Ruby and based on "rake", the Ruby equivalent of "make".&nbsp; It currently has a long way to go but already does a lot.&nbsp;</p><p>You can download the Ruby gem here: <a href="http://github.com/briangoetz/ztunes/downloads">http://github.com/briangoetz/ztunes/downloads</a>.&nbsp; (It is not currently in any sort of gem repository.)&nbsp; It defines its gem dependencies, but you'll also need the Unix tools ffmpeg, flac, and lame.&nbsp; It will run on Linux and Mac but currently has some trouble on Windows since it is dependent on symbolic links for some of its functionality, which Windows doesn't support.</p><p>My motivation for writing this was that iTunes is really inadequate for managing a media library unless (a) you only want to play on iPod (or other Apple) devices and (b) you are willing to let iTunes be in control of ripping and encoding.&nbsp; This didn't work for us for two reasons: we have Squeezeboxes on all the stereos, and I want to rip my CDs to&nbsp;a non-proprietary, lossless format (that means flac, which iTunew doesn't support.)&nbsp; We also have music that has been aquired in various other forms (MP3s from Amazon, AAC from iTunes, WMA from Rhapsody) and want to be able to play all the music on all the devices, without transcoding it all down to a least-common-denominator.&nbsp; (In other words, if Squeezebox supports WMA but iPod doesn't, let Squeezebox play off the original WMA but let iPod play the transcoded version.)&nbsp; And this should be transparent to the rest of the family.</p><p>There are several basic tasks in managing the media library that zTunes automates:</p><ul><li>Content ingestion.&nbsp; I've got a "drop" folder, into which I want to drop the originals of my media, in whatever form, and have them be analyzed, metadata extracted, and filed into a unified library based on its metadata.&nbsp; My metaphor here is the gas tank of an M1 tank: you can pour anything combustible (gasoline, jet fuel, diesel, used cooking oil) into the tank and it figures out how to burn it.&nbsp; Currently it maps a media file to a filename by using the author/album/title tags for audio or the title tag for video; audio files are named like "The Who/Who Are You/Squeezebox.flac".&nbsp; </li><li>Transcoding.&nbsp; Not all devices play all device types.&nbsp; So ingested content also needs to be transcoded into alternate formats, which are maintained as parallel directory trees.&nbsp; The transcoded trees are transient; they are merely shadows of the "authoritative" tree.&nbsp; Some files may need be transcoded to multiple formats; for example, video files ripped from DVD or transferred from TiVo might be transcoded to 480 x 320 video for iPhone but 320 x 240 for the older video iPods.&nbsp; </li><li>Syncing.&nbsp; I use the Windows program "Tag&Rename" to edit the metadata tags on my media files, to normalize genres, naming details like "The Cars" vs "Cars, The", "Vol 1" vs "Disk Two", etc.&nbsp; When I edit the metadata on an "original" file, I'd like the file to be renamed accordingly, and metadata changes to be reflected in the transcoded copies.&nbsp; When I delete an original, I want the transcoded copy to go away.&nbsp; Etc.</li><li>Device management.&nbsp; I would like to have a single directory for each device type, that I can point device-specific library management software&nbsp;(iTunes, Squeezecenter, Creative Explorer) at, and it will see the right view of the media library for that device (will only see files it can play; will see them in the "best" format available for that device.)&nbsp; </li></ul><p>One thing it does not do yet is manage the integration of your external media library into iTunes (iTunes is particularly bad at dealing with files you didn't acquire through iTunes.)&nbsp;</p><p>See more in the README file here: <a href="http://github.com/briangoetz/ztunes/blob/master/README">http://github.com/briangoetz/ztunes/blob/master/README</a></p><p>I'm currently using this to manage a library of ~8,000 media files in half a dozen formats.&nbsp; I'd love to get some more users -- drop me a note if you're interested!&nbsp;</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-5758472055797344271?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/01/ztunes-released.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>A busman's holiday</title>
<description><![CDATA['<p>Since I've been working way too hard, of course I decided to spend my XMas break...programming.&nbsp; (<a href="http://www.answers.com/topic/busman-s-holiday">http://www.answers.com/topic/busman-s-holiday</a>).&nbsp; I had two goals: rewrite my digital-media handling software, and learn Ruby.&nbsp; I'm pretty happy with what I accomplished on both counts.</p><p>The motivation to rewrite my digital-media scripts came from having too many conversations like the one below with Stuart Marks:</p><p>SM: Hey, you wrote a bunch of scripts to manage audio and video files, are you willing to share them?<br />BG: Well, in theory, yes.&nbsp; But I'm kind of embarassed to show them to anyone...<br />SM: Let me guess.&nbsp; Perl?<br />BG: Yep.<br />SM: I have a Perl story...<br />BG: Don't bother -- all Perl stories end the same way.</p><p>I'll post the full details soon -- including links to the software on github -- but for now I'll just outline the problem I was trying to solve:</p><ul><li>Ingest digital media files in any format (MP3, AAC, WMA, WAV, FLAC, M4A, M4V, WMV, MP4, etc)</li><li>File them into a library based on their metadata</li><li>Additionally transcode them down to one or more "compressed" formats (MP3 for audio, iPhone-sized Mp4 for video) for memory-constrained devices, without letting go of the original</li><li>Organize them so that each device (iPod, Squeezebox, non-iPod MP3 player) can play all the media, in the best format that the device can recognize natively (Squeezebox supports MP3, WMA, and FLAC; iPod supports MP3 and AAC; Zen supports MP3 and WMA) or a transcoded form if it can't.&nbsp; For example, for a given track whose source form is WMA, Squeezebox and Zen should see the WMA but iPod should see the MP3; for a track in FLAC, Squeezebox should see the FLAC but iPod/Zen should see the transcoded MP3.&nbsp; </li></ul><p>&nbsp;</p><p>&nbsp;</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-5953813617901400345?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2010/01/busman-holiday.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>Is this a joke?</title>
<description><![CDATA['We decided to upgrade the hard drive on our Tivo Series3, since the stock 250G drive only holds about 30 hours of HD video.&nbsp; I studied the various Tivo upgrade boards and selected a hard drive that had been recommended by some, the WD 1.5TB "EADS" Green drive.&nbsp; The upgrade process is simple: crack the tivo, extract the drive, move the data from the old drive to the new, "expand" the new drive (updating the partition table so it uses the extra space), and replace the drive.<br/><br/>Attempt 1: 1.5TB drive, using trusty Unix tools -- put the drives into a Unix box, copy data with dd, then do the expansion with 'mfstools'.&nbsp; This is the approach I've used several times in the past, with good results.&nbsp; Put the new drive in, turn it on, and it gets stuck forever in the "Wecome, powering up" screen.&nbsp; Back to Google.&nbsp;<br/><br/>&nbsp;Turns out that the S3 can't see a partition bigger than 1TB, and mfstools expands the partition to the whole rest of the drive, yielding a too-big partition.&nbsp; Turns out mfstools doesn't support limiting the size of the partition, but the Windows version (winmfs) does, so I'll use that instead.&nbsp; (Its good to have lots of spare computers around when attempting any sort of upgrade.)<br/><br/>Attempt 2: 1.5TB drive, using winmfs.&nbsp; Put the drives in the windows box, run winmfs to copy the data, and let winmfs expand the partition.&nbsp; It asks me "should I limit the partition to 1TB", I say yes, good.&nbsp; Put the drives back -- same problem.&nbsp; More Googling.<br/><br/>So I discover that "some versions of the drive I was using (WD15EADS) are 'not compatible' with Tivo Series3."&nbsp; Its been years since I've heard about incompatible (system, disk) pairs, and this is a standard SATA drive, but OK, I guess I bought the wrong drive.&nbsp;&nbsp; RMA time.&nbsp; Sorry, NewEgg.&nbsp; The Tivo Upgrade FAQ (<a href="http://www.tivocommunity.com/tivo-vb/showthread.php?t=370784">http://www.tivocommunity.com/tivo-vb/showthread.php?t=370784</a>) is telling me I should favor the WD EVVS drives instead, so I buy a 1TB drive (WD10EVVS) from Amazon.&nbsp;<br/><br/>Attempt 3: 1TB drive, winmfs.&nbsp; I repeat the process, copying the 250G drive to the new 1TB drive, and put the drive back in the Tivo.&nbsp; (At this point I've learned to try it before&nbsp;I fasten all the screws.)&nbsp; Same deal -- stuck on the "Welcome, Powering Up" screen.&nbsp; More Googling.<br/><br/>I found this update, which was added after I'd bought my drive:<br/><br/>The WD10EVVS was removed from the list on October 10, because there is a new<br/>batch of that drive, manufactured on September 20, that is not compatible<br/>with the TiVo.&nbsp;&nbsp; These incompatible drives are labeled as follows:<br/><br/>MDL: WD10EVVS - 63M5B0<br/>Product of Thailand<br/>DATE: 20 SEP 2009<br/>DCM: [b]HAxxxxxxxx<br/>R/N: 701640<br/>LBA: 1953525168<br/><br/>I looked at my drive, and sure enough, I had one.&nbsp;<br/><br/>Is this an elaborate joke?&nbsp;<br/><br/>Next up: RMA redux, ordered a WD 10EVDS drive.&nbsp; Stay tuned.<br/><br/>&nbsp;<br/><br/>Update: installed the WD10EVDS, worked fine.&nbsp; Fourth time's the charm!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-7018388800361466911?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2009/10/is-this-joke.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>You've been scammed!</title>
<description><![CDATA['I got an odd e-mail from PayPal the other day, telling me I'd paid EU250 to something called "Skype Business Panel."&nbsp; My first thought was that it was a phish, but careful examination suggested it was real.&nbsp; I logged on to my PayPal account and indeed I'd been charged EU250.&nbsp; What the hell is "Skype Business Panel", anyway?&nbsp; Turns out it is a skype feature where businesses can allocate credit to the skype accounts of their employees and thereby manage their telephone spending.&nbsp;<br/><br/>I have spent about $10 with skype per year, recharging my skype account from PayPal when it ran low.&nbsp; Somehow (don't remember) I had authorized skype to charge my PayPal account when my balance got low.&nbsp; And this was the vector through which I was scammed.&nbsp; Someone must have gotten a hold of my skype password (don't know how), logged on, and billed EU250 to my PP account (which didn't require a PayPal webflow), and then allocated it to some bogus accounts.&nbsp;<br/><br/>First stop: dispute the charge with PayPal.&nbsp; They were completely unhelpful, pointing me to the authorization and told me to work it out with skype.&nbsp; Fortunately skype was more helpful, and they reversed the charge immediately.&nbsp;<br/><br/>I then logged on to my Skype Business Control Panel (now that I know such a thing exists), and found several bogus accounts linked to mine, which I deleted.&nbsp; After all was said and done, including the refund, I still somehow had a EU100 balance on my BCP, meaning somehow the scammers gave me&nbsp;&nbsp;EU100.&nbsp;<br/><br/>To see if you have any such preapprovals on file: login into your paypal account, click "Profile", and click "Preapproved Payments."&nbsp; You can delete them from there.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-7171683246002270431?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2009/10/you-been-scammed.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>Laptop upgrade annoyances</title>
<description><![CDATA['We've got an old Dell C400 laptop. Its seven or eight years old, but its still going strong, and it just fine for an around-the-house laptop (similar in performance to a modern netbook, but with bigger screen/keyboard, and still nice and light). The limiting performance&nbsp;factor right now seems to be the hard drive; many Windows operations (booting, shutdown, sleep, wake) are disk-seek-bound, so I bought an IDE SSD to replace the existing IDE drive. Hopefully that will also improve battery life and thermal characteristics.&nbsp;<br/><br/>What I'd like is a simple way to move all the data from the existing drive to the new drive, and then just toss the old drive. But this isn't as simple as it might appear. Laptop IDE cables generally only support one drive, so I can't use (say) PartitionMagic to do a partition copy the way I would on a desktop system.<br/><br/>A lot of people have suggested various tricks, like:<br/><ul><br/>	<li>Get an IDE-USB adapter, put the old disk on that, put the new disk in the machine,&nbsp;boot from a Linux CD, and use dd to copy the data;</li><br/>	<li>Get a pair of 40 pin to 44 pin IDE adapters, put them in a desktop system, and copy using PartitionMagic (Windows) or dd (Linux);</li><br/>	<li>Find a dual-drive 44 pin IDE cable, plug both drives in, and hope that the OS / BIOS recognizes both disks;</li><br/>	<li>Just reinstall Windows and whatever apps I have on the new drive (including chasing down all the device drivers, such as the touch pad, speakers, etc)</li><br/></ul><br/>Why is this so difficult?&nbsp; A hard-drive-swap should be a simple, common upgrade operation, that shouldn't require using tools from another operating system, transplanting the drives into another system, or rebuilding the world from scratch.&nbsp;<br/><br/>On a similar note, I just bought a Samsung NC10 netbook, and was going to wipe the disk and reinstall OSes.&nbsp; I have all the software I want ripped to ISO images, many of them bootable.&nbsp; Why is it so hard to take a bootable ISO and turn it into a bootable USB key?&nbsp; (I tried "unetbootin" but it didn't work on the PartitionMagic ISO, which is usually my first step in installing onto a new PC.)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8803652895687747114-5180701364175255155?l=briangoetz.blogspot.com' alt='' /></div>' ]]></description>
<link>http://briangoetz.blogspot.com/2009/08/laptop-upgrade-annoyances.html</link>
<author>noreply@blogger.com (Brian)</author>
<pubDate>Sun, 16 May 2010 04:18:55 +0200</pubDate>
</item>
<item>
<title>Contradicting myself with my eclipsecon submissions....</title>
<description><![CDATA['If you look at my EclipseCon 2010 submissions:<br /><ul><br /><li> <a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1443">1443</a> Declarative UI sucks? Create your own!<br /><li> <a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1480">1480</a> Extensible EMF Switches<br /><li> <a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1483">1483</a> Annoyed by all those similar looking interfaces: IMemento, IConfigurationElement, IPreferenceStore, IDialogSettings, ILaunchConfiguration...<br /><li> <a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1484">1484</a> JFace/SWT Tables turned upside down<br /></ul><br />It seems that I am contradicting myself, because in <a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1443">1443</a> I propose to create your own (copy) of a declarative UI and in <a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1483">1483</a> I whine about all those similar looking interfaces. How does this go together? <br /><br />Well, in the case of all the different property stores, they all do the same and having 10 different classes/interfaces is indeed annoying. On the other hand. I simply do not believe that there is "the" declarative UI that solves everybody's problems. <b>Whenever you try to create the ultimate declarative UI you are doomed to fail because it is either simple but too restrictive or powerful but too complicated</b> (I'd be very happy if someone could prove me wrong).<br /><br />The idea of a domains specific language is to be Domain Specific! One could argue that UI is a domain and a (e.g. xml based) declarative UI is a domain specific language for creating UI. But, in reality UI is not UI. It's like creating a domain specific language for programming. You end up creating a Turing complete general purpose language. OTOH, if you want to create a domain specific language for form based UI on top of EMF you have a good chance it becomes a good abstractions. But do not expect this language to be used to create something like JDT or PDE. <br /><br />I do not believe there is the ultimate declarative UI language. But I believe that saving properties is so universal (and simple) that one 'language' should be sufficient.<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-801343787487272782?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/12/contradicting-myself-with-my-eclipsecon.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Sun, 20 Dec 2009 22:24:35 +0100</pubDate>
</item>
<item>
<title>Future of eclipse: The Road Construction Analogy</title>
<description><![CDATA['<a href="http://www.gerhardtinformatics.com/">Frank Gerhard</a> will host a session at ESE called <a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=1037">Symposium on Eclipse Foundation 2.0</a>. Half a year ago I burned my fingers with my <a href="http://michaelscharf.blogspot.com/2009/04/eclipse-freeloader-award.html">"Eclipse Freeloader Award"</a> blog entry. I got lots of negative comments and mails. I also got a few positive reactions. I decided not to continue talking about the future of eclipse.<br /><br />Today, half a year later I look back and one interesting mail I wrote at that time is an email press interview. I decided to post it as I wrote it and I use it as my position paper for the symposium. <br /><br /><b>If this blog is to long just read the <a href="#RC">"The road construction analogy"</a> section.</b> This is the part of the interview I am most proud of....<br /><br />The last months I have been heavily involved in an internal Wind River project based on eclipse and modeling, especially <a href="http://www.eclipse.org/Xtext/">Xtext</a> and I have not had too much time to work on eclipse except bug reporting and asking stupid questions on the tmf newsgroup. <br /><br />I have no idea how the community will react on that (very long) post. <br /><br /><b>Disclaimer</b>: The text below was written half a year ago. It expresses my personal opinion at that time. I have not followed the recent developments and I might change my mind at any time... ;-)<br /><br /><br /><b>My reply to an e-mail interview on April 18. 2009:</b><br /><br /><b>Q:</b><i> If you were ready to give the freeloader award, who would be the three finalists for the "honor." Why these guys?</i><br /><br /><b>A:</b> I had no particular company in mind. However, it is the general mentality of the industry that frustrates me: the attitude to take advantage of something like open source and not give back anything to the system. This is also known as the <a href="http://en.wikipedia.org/wiki/Tragedy_of_the_commons">"Tragedy of the Commons"</a>: Scott Lewis pointed out that the bigger a community is the less people participate: <a href="http://eclipsesource.com/blogs/2009/04/07/the-logic-of-collective-action/">"The Logic of Collective Action"</a><br /><br />From an architectural perspective, there are things to be done in eclipse that should not been driven by direct interests of some companies but in the common interest of the community. IBM somehow took this role for a while, when they put some of their best people on the core of eclipse. At that time they were interested in the overall success of eclipse. Since some years they started removing quite some developers from eclipse (and put them on the Jazz/RTC project).<br /><br />I believe there should be an independent group of developers driving eclipse. In my opinion it would be best if they would be paid by the community but act independently in the best interest of eclipse.<br /><br />Now the questions is: why should companies put money into something that is free? If they put money in the system and their competitors do not, they have a competitive disadvantage. They support the community but they have no direct advantage. And in fact the company I work for (Wind River) just ended their membership (which is a sponsorship of the foundation) just recently.<br /><br />That is why I was brainstorming about ideas how to stimulate companies to contribute. I am really afraid that eclipse will suffer in the future because the architecture degenerates over time and there is not enough manpower to keep modernize the architecture. Yes, there is e4 (the next generation of eclipse), but I am not 100% convinced that this is the solution.<br /><br />To stimulate companies to give money/resources to support the <a href="http://en.wikipedia.org/wiki/Commons">commons</a> there has to be a benefit. If there is no positive benefit why would a company do that? So, my idea was to create peer pressure. One way to create peer pressure for companies to make them avoid negative press. A freeloader award would create negative pressure. No company would like to win the freeloader award.<br /><br /><b>Q:</b><i> Other people I've spoken to, include Mike M. at Eclipse are much less concerned about the problem. Why do you see it as so serious?</i><br /><br /><b>A:</b> Well, I probably have a different perspective than Mike. Mike sees the eco system and the new companies joining eclipse. My focus is more on the architecture of eclipse. So, the irony is that although eclipse is widely successful the underlying architecture ages and dissolves slowly. Partly because eclipse is stretched into so many different directions. It is never good for an architecture to go into too many directions at the same time. When eclipse started it was a platform for IDE like applications. It was later retro fitted to be the basis for rich client applications. The people ported eclipse to embedded systems. Then the it was used for the web and for servers.... All this is good for the short term success but I am afraid that the long term impact on the architecture could be disastrous. The architecture council is not really focusing on architecture. Partly because the members have never been the ones that created and drove the original architecture. And partly because architecture by committee is doomed to fail. <br /><br /><a name="RC"><b>The road construction analogy</b></a><br /><br />One analogy for the general eclipse community problem I have been thinking about recently is road infrastructure in a country. Suppose a big company (=IBM) created a basic road infrastructure and decided to make this available to the public for free (=original eclipse).<br /><br />In the beginning, the big company somehow drove the journey and continued building the free infrastructure. They also had some interest in this infrastructure because they wanted to have a well accepted public road system to deliver their products. But over time they gave the roads to the public and let the other companies continue building the roads. The hope is that the market is self regulating and it would continue maintaining the road infrastructure and new roads would be build by other companies.<br /><br />In the beginning the companies understood the plan of the big company and continued building in that spirit. But some companies realized that it is not in their interest to build roads for their competitors. And it makes no sense for them to maintain the highways in general. They might build junctions to their private road network but hope that others maintain the net of highways created by the big company long ago. Sure they would fix some obvious holes on the roads. One could argue that roads build like that really reflect the needs of the community. But some of companies make sure the competitors do not get access to their key roads. What happens is: many private roads are be build in parallel, instead of some new highways. Companies would build "public roads" that connect their private roads. If the companies would understand that they all would benefit form good public roads, then they could come together and hire an independent road building organization and give them money (a kind of tax) to build the roads that are in the interest of the entire eco system. But at the moment there is no authority to enforce the tax payment. Lots of the roads are public and some companies donate "public roads" to the system. Who could blame those companies? They give something free to the community but also act in their own interest. They are much better than companies that use the public roads without contributing back. But something is wrong here. The nicely designed infrastructure degenerates over time. Can we blame the ones who contribute for that? That is the key to the problem: companies are contributing, but the contributions are not really in the best interest of the eco system.<br /><br />How to solve the problem? How to make sure that roads are build that are in the common interest? Would it make sense to have a "tax paid" independent organization build and maintain the infra structure? How can we motivate the community to pay the taxes? Can we blame the companies that fix the roads and add now ones?<br /><br /><br /><b>Q:</b><i> Any suggestions, besides public disgrace, to ease the problem?</i><br /><br /><b>A:</b> The questions boils down to: how can we motivate companies to maintain and enhance the common infra structure?<br /><br />Positive motivation: all participants understand that they have to invest into the system beyond direct interests. But do all participants understand that? And how to deal with community members that do not want to pay their taxes? If someone can get away not paying the taxes the others who pay the taxes are the stupid ones. So, positive motivation works if all participants understand that they depend on the system. It essentially requires a certain level of moral. The bigger the community (and the more anonymous) the easier it is to get away without paying the tax. And in a capitalist world companies act in their own interest. Who can blame them for doing so? How else can they survive?<br /><br />Negative motivation: have a police, a pillory, public opinion (press), a freeloader award. Something that puts pressure on members that do not want to pay their "taxes"...<br /><br /><b>Q:</b><i> I always prefer to quote people by name, but if you like, I can withhold yours.</i><br /><br /><b>A:</b> You can quote me. Those who know me know that I can change my mind very quickly. Partly because I simply forget what I say and partly because I like to look at problems from very different angles. Therefore, I could never ever become a politician because you could find lots of statements where I contradict myself.<br /><br />If I look into the eclipse world, I see that the number of people warning about the future problems is underrepresented. That is why I raised my voice. If everybody would scream and warn about the future of eclipse, I would certainly find a lot of good arguments why eclipse has a bright future and why the current eclipse eco system works so exceptionally well and why eclipse is a great example of a successful open source project. <br /><br />But at the moment I think there is not enough awareness of the problems of the tragedy of the commons. And that companies think they act in their own interest, but in the long term and from an higher level, they do not act in their own interest because they "ultimately destroy a shared limited resource".<br /><br />[sorry for the long reply, but this is a topic that upsets me at the moment because I can see the disaster coming]<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-3130553693105827912?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/10/future-of-eclipse-road-construction.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Sat, 24 Oct 2009 15:15:56 +0200</pubDate>
</item>
<item>
<title>Never put things above a user specified path</title>
<description><![CDATA['If you tell a program to use a path to store something you normally expect that the program puts its data <span style="font-weight:bold;">inside</span> that path and not into the parent. Sounds simple, but in the last 24 hours I ran two times into violations of this basic principle.<br /><br /><br />1. For the next release of our Wind River Workbench product we will use p2. We have thought our customers to use the <a href="http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.user/tasks/running_eclipse.htm"><code>-configuration</code> option</a> to redirect the place where eclipse puts its "stuff" if they use a shared installation. If they have different installations or different versions installed, that worked nicely (before p2): for version 3.0 they would use <code>-configuration /someplace/wrwb3.0</code> and for version 3.1 they would use <code>-configuration /someplace/wrwb3.1</code>. Unfortunately since version 3.4 eclipse violates the principle "<span style="font-weight:bold;">never put things above a user specified path</span>" (<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=230384">bug 230384</a>) and puts things like artifacts.xml and the p2 directory above the directory specified. If customers mix different versions of our product the old way, then they get a mess because two configurations that are supposed to live side by side suddenly share the potentially incompatible information in the parent. We are thinking to change the behavior of -configuration to add implicitly one more directory (to turn a user specified <code>-configuration /someplace/wrwb3.0</code> into <code>-configuration /someplace/wrwb3.0<b>/configuration</b></code>) so that the two configurations <code>-configuration /someplace/wrwb3.0</code> and <code>-configuration /someplace/wrwb3.1</code> do not infer with each other.<br /><br /><br />2. I am really excited about <a href="http://www.eclipse.org/Xtext">Xtext</a>! Yesterday I created a new Xtext language project (let's call it  <code>gr.scharf.mylanguage</code>). The wizard suggests to call my language <code>gr.scharf.MyLanguage</code>. Sounds good, but it puts its files into the package <code>gr.scharf</code> which is not such a good idea, because it pollutes the parent name space (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289780">bug 289780</a>) and therefore violates the principle "<span style="font-weight:bold;">never put things above a user specified path</span>".<br /><br /><span style="font-weight:bold;">Conclusion: if the user gives you a path put things underneath the path and do not touch the parent!</span><br /><br />...think twice to make sure not to violate this simple principle....<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-4105882749636744253?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/09/never-put-things-above-user-specified.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Thu, 17 Sep 2009 22:09:42 +0200</pubDate>
</item>
<item>
<title>cross-browser-window-communication</title>
<description><![CDATA['<a href="http://bit.ly/48hHIv">Helps to avoid some shortcuts for current comet solutions...</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/cross_browser_window_communication</link>
<author>Matthias Wessendorf</author>
<pubDate>Wed, 08 Jul 2009 21:40:34 +0200</pubDate>
</item>
<item>
<title>Every pixel counts! The new eclipse fullscreen plugin...</title>
<description><![CDATA['A few days ago <a href="http://dev.eclipse.org/blogs/kevinmcguire/">Kevin McGuire</a> blogged with the title <a href="http://dev.eclipse.org/blogs/kevinmcguire/2009/06/05/every-pixel-is-sacred-not-any-more/">Every pixel is sacred (not any more!)</a> and a follow up <a href="http://dev.eclipse.org/blogs/kevinmcguire/2009/06/12/eclipse-ui-real-estate-wasters/">Eclipse UI Real Estate Wasters!</a>. I still believe that every pixel counts and I often wanted to have eclipse in full screen mode to save a few pixel. I use full screen mode in the browser and with pdf files a lot and I really love it. I remembered that there is a new <a href="http://help.eclipse.org/stable/nftopic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Shell.html#setFullScreen(boolean)">Shell.setFullScreen</a> method in SWT. During a boring meeting, I decided to create a small plugin that would add a toolbar button and a menu entry to toggle eclipse in to fullscreen. I started with the "New Plugin wizard" and choose the <i>Hello, World Command</i> example and replace the handleCommand line with one line:<code><br />window.getShell().setFullScreen(!window.getShell().getFullScreen());<br /></code><br />I changed the labels in the <code>plugin.xml</code> and <b>I was done, in less than 10 munites.....</b><br /><br />I should know that <a href="http://michaelscharf.blogspot.com/2009/05/why-is-rcp-emf-p2-databinding-so-hard.html">even "simple" things can be quite complicated</a>.<br /><b>I wanted to make the plugin nice and share it but that was the start of a nightmare.....</b>  but that is another story. <br /><br /><br /><h2>Download/update</h2><br />You can use <a href="http://www.scharf.gr/eclipse/fullscreen/update/">this site as update site</a> or download the plugin from here: <a href="http://www.scharf.gr/eclipse/fullscreen/update/gr.scharf.fullscreen.zip">gr.scharf.fullscreen.zip</a><br /><br /><br /><h2>Functionality</h2><br />The plugin has been written for eclipse 3.5 but it works also for eclipse 3.4 although there are some problems with the handling of the toggle state of the commands...<br /><br />The plugin adds a <i>Fullscreen</i> command to the <i>Windows</i> menu and a Keybinding <i>M3+F11</i> which translates on windows to <i>Alt+F11</i>:<br /><br /><img src="http://scharf.gr/eclipse/fullscreen/update/images/WindowNotFullscreen.gif"><br /><br />When fullscreen mode is active all (main) windows are in full screen mode:<br /><br /><img src="http://scharf.gr/eclipse/fullscreen/update/images/WindowFullscreen.gif"><br /><br />There is also a Toolbar button that can be enabled. Because the plugin uses the <a href="http://wiki.eclipse.org/Platform_Command_Framework">Commands Framework</a> there are some unfortunate restrictions (<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280033">bug 280033</a>):<br /><ul><br />  <li>When you go to <i>Window->Customize Perspective->Tool Bar Visibility</i>, you will <b>not</b> find the Fullscreen tool bar unless you have enabled it in <i>Window->Customize Perspective->Command Groups Availability</i><br /><br /> <li>The <i>Toolbar details</i> are empty, although the toolbar contains a command:<br /></ul><br />  <img src="http://scharf.gr/eclipse/fullscreen/update/images/FullscreenCustomizePerspective.gif"><br /><br />Once you have succeeded enabling the toolbar button, it will look like this:<br /><br />  <img src="http://scharf.gr/eclipse/fullscreen/update/images/ToolbarButtonNoFullscreen.gif"> and <img src="http://scharf.gr/eclipse/fullscreen/update/images/ToolbarButtonFullscreen.gif"><br /><br />I decided to hide the button by default, because in most cases the shortcut and the windows menu command should be enough.<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-2879527076994813712?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/06/every-pixel-counts-new-eclipse.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Sun, 14 Jun 2009 03:41:18 +0200</pubDate>
</item>
<item>
<title>Why is RCP, EMF, p2, databinding... so hard to learn?</title>
<description><![CDATA['There are some interesting discussions on my recent blog entry on "<i><a href="http://michaelscharf.blogspot.com/2009/04/how-to-explain-emf.html">How to explain EMF?</a></i>". The debate is between those who find it hard to learn EMF and those who have a hard time seeing the difficulty. I think there is a general pattern behind this debate. The same arguments could be made for almost any non trivial technology/framework inside and outside eclipse (EMF, RCP, p2, databinding, [<i>your "favorite" hard to learn technology</i>],...). <br /><br /><b>Why do many people really suffer form the steep learning curve and others master the same technology easily</b>?<br /><br />I think we have to step back for a moment from any concrete technology and we should to look at how the technology gets created and how learning and applying of the technology works. <br /><br /><b>The creators of the technology/framework have a deep knowledge in the particular domain the framework solves.</b> They have created several software systems where they saw some reoccurring patterns. They realize by putting the common parts into a framework they can dramatically increase their productivity, because the work is then reduced to assemble the pieces and write some "glue code" (in some sense they create a kind of domain specific language for that problem). As long as the creator(s) of the abstraction are the only users of the system, there is no real problem and they can show dramatic increase of productivity, because they can focus on the business relevant part of the system.<br /><br />Now comes the next phase, where others adopt the technology. Those early adopters are usually people with a similar experience background as the original authors of the framework. They have typically written such systems by hand or created their own framework and they see the value of the technology. For them, learning the system is almost effortless because they understand the underlying problems and the solution provided by the cool technology. <b>Good candidates of successful adopters are typically consultants using the technology in multiple projects.</b> They report impressive increase of productivity. Let's call them <i>expert users</i>.<br /><br />Now another category of users, the <i>normal users</i> wants to use the technology. They see the impressive results created by the expert users. The expert users tell them how effortless this is and how quickly you can create solutions.<b>This is where the problem starts!</b> The expert users understood the problem before they started, they understand the solution in depth and they reapply the technology to many projects. <b>The normal users typically have a single project where they want to apply the technology.</b> They might have a vague understanding that the new technology fits to their problem. The "documentation" build from expert users for expert users make no sense, because there is a lot of background knowledge and experience missing. Normal users have to put a lot of effort into learning and understanding a complicated system just to apply it once. <br /><br />If the <i>normal user</i> manages to use the technology to solve his problem, his solution is often "suboptimal", because he might be happy to have found just <i>one</i> solution. The expert would see that it is by far not the best possible solution, because he has a much deeper understanding of the solution space. OTOH, the normal user might have a much better understanding of his specific problem domain and the expert might propose a bad solution, because his limited understanding of the problem domain.<br /><br />Let me give you an analogy: Some weeks ago, my mother told me that she has a serious problem, because her old typewriter broke. She explained me how they do their tax-declaration: my father hand-writes tables with income and expenses and my mother types them with the typewriter. Well, they have a computer (which they use to read email and browsing). The solution is clear: a spreadsheet is all the technology they need to optimize the process. Me "the expert", could just tell them that they can be much more productive by using this "new and cool" technology. All, they'd have to do is to enter the numbers directly into a spreadsheet and with a few more mouse-clicks and a bit of excel programming he would even get some cool graphics and analysis.... Do you think I did that? No way. They are in their mid 70ies, they have done it "their way" all their life. How steep would their learning curve be? Does that mean they are stupid? My father is extremely good with his hand written tables, he uses colors and creates cool graphs by hand. He has an extremely good understanding of the money flow. He even knows exactly how much money they spend on me and my brothers from our birth to now. I wish I would have 10% of his knowledge on where my money flows. <br /><br />In this example we see very well the difference between "expert users" and "normal users" of the technology. This technology would work really well for me and would not work at all for my parents. And even if I would try to teach them, I would have to use a very different language to explain it to them than I would use it explaining it to you. I would have to explain them what a spreadsheet is and so on. Then I could ask them if they prefer open-office or Microsoft office. Because they have absolutely no idea, even this simple this choice would stress them a lot.... Once they would start with an empty spreadsheet, there would be so much choices and decisions to make that they would be totally paralyzed. Would examples or documentation help? Well somehow, if an example does exactly what they want to do, but then it is almost the solution. Does that mean that spreadsheets are complicated technology? Well, it depends on your background. I think it would be more efficient for me to help them doing their tax declaration and prepare a spreadsheet and every time they do it, sit with them and help them. But I think the way they do it is OK for them, all I need to do is to fix my mothers typewriter.... If they were young and they had a lot of numbers for their tax declaration, it would make sense for them to learn the technology....<br /><br />OK, I stressed this example enough... What does this mean for the "complicated" technologies around eclipse? <br /><ul><br /><li>There is a big danger that a great technology gets a "bad reputation", just because "normal users" want to apply it and they find it the technology incredibly hard to learn and to apply. <br /><li>As expert user, you can cause a lot of damage it you tell some unexperienced users to use a technology without guiding them. And in some cases <b>it might be better to tell them <i>not</i> to use the technology if they are not "ready"</b>. For you it might be the right choice, for them it would cause disasters at all levels.<br /><li>Learning "complicated" technologies might not be worth the effort if you want to apply it once. <br /><li>Ask yourself if it is more efficient to hire an expert than to learn the technology. Especially if you want to apply the technology only once in a relatively simple way. In this case the expert can be 10-100 times more efficient than you.<br /><li>If you are a <i>normal user</i> and you still want to learn the technology, be prepared that is takes time and it is a painful process. In order to make educated decisions you have to become at least "Competent" (see <a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition">the Dreyfus model of skill acquisition</a>) or needs "Conscious competence" (see <a href="http://en.wikipedia.org/wiki/Four_stages_of_competence">Four stages of competence</a>).<br /><li>Maybe <i>expert user</i> and <i>normal user</i> should team up to write documentation and create example. For experts it is often very difficult to understand the problems of normal users and for normal users it is impossible to come up with good examples and documentation.<br /></ul><br /><br /><i>This post is a bit longer than my normal posts and I kept is as draft for a while but I decided to post it. It is a bit like with complicated technology: you can't explain it in two sentences ;-)....</i><div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-890961488084298865?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/05/why-is-rcp-emf-p2-databinding-so-hard.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Tue, 12 May 2009 03:30:37 +0200</pubDate>
</item>
<item>
<title>What the Bayeux ? No portable (java) code !</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2009/04/30/what-the-bayeux-no-portable-java-code/">What the Bayeux ? No portable (java) code !</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/what_the_bayeux_no_portable</link>
<author>Matthias Wessendorf</author>
<pubDate>Fri, 01 May 2009 12:11:38 +0200</pubDate>
</item>
<item>
<title>How to explain EMF?</title>
<description><![CDATA['Have you ever tried to explain EMF to <i>nonbelievers</i>? I find it difficult to explain what EMF is and why it makes sense to use it. I had this a few times in my career: <br /><ul><br /><li>In the mid 80ies when I started with object oriented programming. For procedural programmers (modula2/pascal/C/Fortran) it sounded like a lot of buzzwords and seemed to add no real value...<br /><li> End of 80ies and in the beginning of the 90ies (before the <a href="http://en.wikipedia.org/wiki/Gang_of_Four_(software)">GOF book</a> was out), patterns seemed to be quite fuzzy and it was hard to explain what the value of describing "patterns" is.<br /><li>Around the same time I discovered scripting languages (starting with (g)awk->TCL->perl and ending with python, which I used for a decade). It was hard to motivate why those "slow" languages are in any way useful.<br /><li>Aspect oriented programming is still in the "hard to explain/motivate" phase.<br /></ul><br />The common pattern with those "hard to explain" new technologies is that they are incremental changes to existing stuff but once you understand and use them, they change the way you are thinking. If you adopt the "new technology" you feel a boost in productivity and you see better ways to solve old problems. The level of abstraction raises and you can focus more on the problem instead of dealing with low level implementation details (or reinventing the wheel). And then comes the time when you think all problems can be solved with the new "hammer"....<br /><br />It is similar to converting to a new <i>religion</i>. For the <i>believers</i> it changes their life. It changes the way they see, experience and interact with the world. For the <i>nonbelievers</i> it looks like a stupid set of paradigms that make no sense. They learn how to block the arguments of missioners of the <i>new religion</i> and the more missionary the believers are the more skeptical the <i>nonbelievers</i> get.<br /><br /><b>So, how do you explain the benefit of EMF?</b> <br />What is the best strategy to <i>evangelize nonbelievers</i>?<br />What is the best way to get the <i>converts</i> over the initial pain of change?<br /><br /><b>What are the typical questions and problems with EMF?</b> <br />Here is a list of things I hear often:<br />Why to use EMF for my DSLs instead of some hand-written well tuned Java?<br />It generates lots of code and bloats my project.<br />EMF is so complicated, it takes a long time to learn -- in that time I have solved my problem twice without EMF.<br /><br /><b>What are scenarios where EMF increases productivity and where is it the wrong tool?</b><br /><br />I have seen <a href="https://www.eclipsecon.org/submissions/2009/view_talk.php?id=358">Peter Frieses talk at eclipsecon</a>. I really liked it but I am not sure it helps <i>nonbelievers</i> to understand what EMF (and modeling in general) is. I think what is needed is a hands-on way with some real examples that show step by step how modeling and EMF can be applied to real problems.  <br /><br />I will post some of my experience with EMF in this blog in the next weeks and months.<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-5995843669684290882?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/04/how-to-explain-emf.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Thu, 23 Apr 2009 05:36:18 +0200</pubDate>
</item>
<item>
<title>Good versus evil diversity - why the foundation must hire developers</title>
<description><![CDATA['In German we have two contradiction proverbs: <span style="font-style: italic;">"Gleich und Gleich gesellt sich gern"</span> (<span style="font-style: italic;">"birds of a feather flock together"<a href="http://herzeleid.com/en/lyrics/rosenrot/mann_gegen_mann"> *</a></span>) and <span style="font-style: italic;">"Gegensätze ziehen sich an</span>" (<span style="font-style: italic;">"opposites attract"<a href="http://www.dict.cc/german-english/Gegens%C3%A4tze+ziehen+sich+an.html"> *</a></span>). <br /><br />When applied to couples, I think both are true but for different aspects: for social status, education, religion etc, coming form similar background makes things easy. But when it comes to character, being of different kind is good because my partner might have something I don't have and together we are more "complete".<br /><br />Diversity in open source is similar. There are areas where diversity is absolutely vital and other areas where diversity has a very negative impact.<br /><br />Bjorn criticized the "<a href="http://eclipse-projects.blogspot.com/2009/03/diversity.html">lack of diversity</a>" in the eclipse community because <span style="font-weight:bold;">most projects are "mono-vendor"</span>. He is right, <span style="font-weight:bold;">we need more diversity here!</span><br /><br />But there is another kind of <span style="font-weight:bold;">diversity that is bad: if there are many ways of doing the same thing</span>. Excellent system are not designed by committee, but by a few people (often a single person) with strong ideas about architecture, design and the "right way of doing things" (<a href="http://en.wikipedia.org/wiki/Fred_Brooks">Frederick Brooks</a> calls this "<a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month#Conceptual_Integrity">Conceptual Integrity</a>"). This leads to excellent systems. From my experience I learned that it does not matter much, which set of rules are applied, as long as the rules are consistent and everybody in the team believes in them and follows them.<br /><br />Startup companies often get this kind of consistency "for free", because they grow form a small set of people and they hire only new people that fit into the "mind set" of the team. Open source projects, created by some enthusiasts, get it, because they attract people who believe in the system. The (original) eclipse platform is an example of such a consistent system. <br /><br /><span style="font-weight:bold;">I am afraid that the future of eclipse is in danger if this wrong type of diversity (I call it chaos) increases</span>. (I wish the architecture council could help to defeat this kind of diversity, but I am afraid that the council is already way too diverse when it comes to "architecture")<br /><br />It would help a lot if there would be a set of developers paid by the foundation coming form different backgrounds but with a common mind set when it comes to technology. <span style="font-weight:bold;">If the foundation would hire people, I am sure we could find a great team of people that would be able make eclipse ready for the future.</span> <br /><br />Having a "vendor neutral" team of developers dedicated to the future of eclipse would give eclipse a boost. Else, I am afraid, eclipse is <span style="font-style:italic;">"auf dem absteigenden Ast"</span> (<span style="font-style:italic;">"heading south"</span><a href="http://www.dict.cc/?s=auf+dem+absteigenden+ast"> *</a>)<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-75167705210737025?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/04/good-versus-evil-diversity-why.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Wed, 08 Apr 2009 02:54:28 +0200</pubDate>
</item>
<item>
<title>The Eclipse Freeloader Award</title>
<description><![CDATA['<span style="font-weight:bold;">The future of eclipse in in danger</span>: The problem is that there is no real pressure for companies to contribute back to the community and it is easy to use the eclipse "for free" for the own products. There are some interesting blogs on this topic by <a href="http://cdtdoug.blogspot.com/2009/04/another-great-post-by-bjorn-on-life-at.html">Doug Schaefer on the future of eclipse</a> and <a href="http://eclipse-projects.blogspot.com/2009/04/its-new-world.html">Bjorn on life at Eclipse in the new world</a>.  <br /><br />According to wikipedia, this is called <a href="http://en.wikipedia.org/wiki/Freeloader">free loading</a>: <span style="font-style:italic;">"choosing not to do work and letting others do it"</span>. <br /><br />Eclipse is open source and companies can take advantage of the open source work. There is nothing legally that can prevent them from doing so. But <span style="font-weight:bold;">the eclipse community should create peer pressure to prevent the freeloaders and parasites from getting away without punishment.</span> <br /><br />A few ideas to increase the pressure for freeloaders:<ul><li> Create an eclipse freeloader award<br /><li> Have an "eclipse supporter" logo<br /><li> Have a list of of freeloaders prominently on the eclipse page<br /><li> Create an eclipse <a href="http://en.wikipedia.org/wiki/Pillory">pillroy</a></ul><br />Is this too harsh? Well, it is less harsh than to take advantage of the work of others and letting eclipse die. It seems that positive stimulus is not enough. I want eclipse to succeed in the future. But if everybody is only thinking about his own agenda the entire system will die. Eclipse has to defend itself. The eclipse foundation is to polite to upset some companies. That has to change. It has to be an honor being part of eclipse, and is has to be crystal clear that eclipse is not for free! <br /><br /><span style="font-weight:bold;">Disclaimer </span>(not sure if this helps, but it seems common to add a disclaimer to anything that could potentially upset an employer): <span style="font-style:italic;">This is my personal opinion and not the opinion of my employer</span>.<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-1302279719165988019?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/04/eclipse-freeloader-award.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Tue, 07 Apr 2009 22:36:30 +0200</pubDate>
</item>
<item>
<title>New Book: Eclipse für C/C++-Programmierer</title>
<description><![CDATA['I just got a copy of <a href="http://www.dpunkt.de/buecher/2828.html">Eclipse für C/C++-Programmierer</a> by <a href="http://www.sebastianbauer.info">Sebastian Bauer</a>, the first German CDT book. The first impression is very good. This book is ideal for C/C++ developers who are new to eclipse and new to CDT, but it also has a few gems for more experienced users. It covers a wide range of topics (see the <a href="http://www.dpunkt.de/leseproben/2828/Inhaltsverzeichnis.pdf">table of contents</a>), it is well written and takes a very good route to get started with CDT. Although it has a lot of screen shots, I don't have the impression there are too many, because they complement the written text in a very good way. It has a very good balance between practical tips and explaining the concepts and ideas behind CDT.<br /><br /><span style="font-weight:bold;">This book is the missing manual for CDT!</span> It should be delivered with each copy of CDT. I wish it would be available in English because it deserves a wide audience.<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-7977112597894442339?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/03/new-book-eclipse-fur-cc-programmierer.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Sun, 29 Mar 2009 19:14:01 +0200</pubDate>
</item>
<item>
<title>eclipse 3.5M6: linked extension locations now require a .eclipseextenison file</title>
<description><![CDATA['<b>UPDATE: the problems have been solved/explained (see below)</b><br /><br />There is a <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=224145">hot debate</a> between the community and the p2 team on supporting extension locations. A few weeks ago I described <a href="http://michaelscharf.blogspot.com/2009/02/p2-how-i-install-plugins-in-extension.html">a simple procedure to use and maintain extension locations with p2</a>. <br /><br /><b>In eclipse 3.5M6 links file do not work anymore, unless you add a <code>.eclipseextension</code> marker file next to the <code>plugins</code> and <code>features</code> directories of the extensions location</b> (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268673">bug 268673</a>).<br /><br />This marker file was required by the classical update manager in order to be able to add a directory as <a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/product_extension.htm">product extension</a>  from the UI. Until 3.5M6 link files just worked when pointing to a directory containing a <code>plugins</code> directory (or a <code>eclipse</code> directory containing a <code>plugins</code> directory). No <code>.eclipseextension</code> file was needed.<br /><br />Ironically, the classical update manager in M6 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268674">cannot be used to add extension locations anymore</a>. (To enable the classical update manager: <i>Preferences...->General->Capabilities->Classical Update</i>) <br /><br />Is this a sign that the p2 team wants to discourage extension locations and link files? Or am I believing in a stupid conspiracy theory?<br /><br />-------------------<br /><b>Update! Both problems have been solved</b><br />1. <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268673">bug 268673</a>: p2 tries to be clever: when it detects a <code>artifacts.xml</code> in the extension location it needs a <code>.eclipseextension</code> marker file to believe that this is really an extension location. Normal extension locations are not affected by this bug.<br /><br />2. <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268674">bug 268674</a>: This happens only if you <b>never</b> have started eclipse from the installation location (and always start with the <code>-configuration</code> option.<br /><br />==> <span style="font-weight:bold;">no conspiracy :-)</span><div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-1590298851289199132?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/03/eclipse-35m6-linked-extension-locations.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Mon, 16 Mar 2009 17:13:44 +0100</pubDate>
</item>
<item>
<title>p2: how I install plugins in extension locations...</title>
<description><![CDATA['The following procedure explains how I <b>install plugins into different extension locations and share those extension locations</b> between different eclipse installations <b>using the p2 update manager and link files</b>. For a lengthly discussion see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=224145"> bug 224145</a><br /><br />I keep a set of different extensions locations in <code>C:\eclipse\extensions</code> (each extension location is in a subdirectory of that directory). Suppose I want to install <i>foo</i> into the new extension location <code>C:\eclipse\extensions<b>\foo</b></code>. <br /><OL><br /><LI>I start eclipse with: <pre>-configuration C:\eclipse\extensions<b>\foo\eclipse\configuration</b></pre><br /><LI>I install <i>foo</i> using the update manager.<br /><br /><LI>Now I can use the extension by creating a <code>foo.link</code> file inside the <code>links</code> directory of an eclipse installation (you might have to create the <code>links</code> directory) containing: <pre>path=C:/eclipse/extensions/foobar</pre> <br /></OL><b>That's it :-)</b><br /><br /><br /><b>Note:</b> You have to the forward slashes on windows in the links file.<br /><br /><b>Note:</b> This procedure works for eclipse 3.4 and 3.5.<br /><br /><b>Note:</b> You don't have to create any directory specified by the <code>-configuration</code> parameter. Eclipse will do that for you.<br /><br /><b>Note:</b> It is important to follow the pattern <code>EXTENSION_NAME/eclipse/configuration</code> for the <code>-configuration</code> parameter because p2 will put the plugins one directory above the <code>configuration</code> directory and link files require that the directory that contains the plugins is called <code>eclipse</code>.<br /><br /><b>Note:</b> With this structure I can update plugins into the extension locations by running eclipse with the <code>-configuration</code> and then do the update.<br /><br /><b>Advanced use</b>: If I want to install <i>bar</i> based on my <i>foo</i> extension, I create a link file to <i>foo</i> in the <i>bar</i> extension location <code>links</code> directory:<pre>C:\eclipse\extensions\<b>bar</b>\eclipse\links\<b>foo.link</b></pre> and follow my standard procedure described above (the links directory can be populated before the first run of eclipse)...<br /><br /><b>Note for eclipse 3.4:</b> If you are using eclipse 3.4 and you want to use the eclipse default update sites, you have to run eclipse without <code>-configuration</code> and export them (Help->Software Updates->Available Software (tab)->Manage Sites->Export), so you can import them into the <code>-configuration</code> eclipse.<br /><br /><b>Note for eclipse 3.5M6:</b> You have to add an (empty) <code>.eclipseextension</code> file <a href="http://michaelscharf.blogspot.com/2009/03/eclipse-35m6-linked-extension-locations.html">next to the plugins and features directory</a> of the extension location.<div class="blogger-post-footer">Michael Scharfs Eclipse and Java Blog http://MichaelScharf.blogspot.com/<img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17681521-2620160996527649216?l=michaelscharf.blogspot.com' alt='' /></div>' ]]></description>
<link>http://michaelscharf.blogspot.com/2009/02/p2-how-i-install-plugins-in-extension.html</link>
<author>noreply@blogger.com (Michael Scharf)</author>
<pubDate>Sun, 15 Mar 2009 17:54:56 +0100</pubDate>
</item>
<item>
<title>Blogging elsewhere and mobile widgets</title>
<description><![CDATA['<p>
Just to remind people still coming to this site that I am now blogging my thoughts around Open Source and mobile <a href="http://silentpenguin.wordpress.com">here</a>. You may also want to check out today's article on <a href="http://silentpenguin.wordpress.com/2009/02/25/mobile-widgets-more-than-just-old-content/">mobile widgets</a>.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2009/02/blogging_elsewh.html</link>
<author>Matthew Langham</author>
<pubDate>Wed, 25 Feb 2009 10:46:48 +0100</pubDate>
</item>
<item>
<title>Neue Blog-Adressen</title>
<description><![CDATA['Ich bin mit meinem Blog nach Wordpress umgezogen. Die Site-Adresse bleibt bei <a href="http://www.stefanroock.de">http://www.stefanroock.de</a><br /><br />RSS-Feed findet sich unter: <a href="http://stefanroock.wordpress.com/feed/">http://stefanroock.wordpress.com/feed/</a><br /><br />RSS-Feed für die Kommentare findet sich unter: <a href="http://stefanroock.wordpress.com/comments/feed/">http://stefanroock.wordpress.com/comments/feed/</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-9184632749527181094?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/neue-blog-adressen.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Tue, 17 Feb 2009 20:04:40 +0100</pubDate>
</item>
<item>
<title>Das Commitment des Product Owners</title>
<description><![CDATA['In Scrum committet sich das Entwicklungsteam auf das Sprintziel. Und der Product Owner? Der committet sich auch auf die Sprint-Planung! Genauso wie das Entwicklungsteam darf er das Ergebnis der Sprint-Planung nur dann akzeptieren, wenn er es für sinnvoll hält. Das bedeutet insbesondere auch: Der Product Onwer committet sich nur dann auf das Ergebnis der Sprint-Planung, wenn aus seiner Sicht die Entwicklungsgeschwindigkeit des Teams zufriedenstellend ist. Wenn der Product Owner meint, die Geschwindigkeit sei zu niedrig und das Projekt nicht ökonomisch sinnvoll durchführbar, muss er sein Commitment verweigern. Das Ergebnis: es gibt kein Commitment und damit keinen nächsten Sprint.<br />Und dann? Dann spricht man über die Situation: Ist das Team unpassend zusammengesetzt? Fehlt es an Aus-/Weiterbildung? Gibt es ein anderes Team, dass den Anforderungen des Product Owner besser genügen kann? Etc. Und wenn die Antwort immer "Nein" lautet, dann muss sich der Product Owner die Frage stellen, ob sein Projekt überhaupt ökonomisch sinnvoll ist.<br />Und bei allem sollten wir ganz gelassen bleiben. Wenn der Product Owner sein Commitment nicht geben kann, ist das keine Krise. Es ist das Ende einer Illusion.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-6995176669802782679?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/das-commitment-des-product-owners.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Mon, 16 Feb 2009 21:43:38 +0100</pubDate>
</item>
<item>
<title>Pair-Programming-BOT für TDD</title>
<description><![CDATA['<a href="http://sanitz.net/sebastian/index.html">Sebastian</a> hat dieses Kleinod gefunden: Den <a href="http://pairprogrammingbot.com/">virtuellen Pair-Partner</a>. Das ist lustig.<br /><br />Aber es ist nicht nur lustig. Ich glaube, das Ding kann in der Tat ganz gute Dienste leisten, wenn man TDD erlernen möchte. Dann ist es nämlich tatsächlich sehr nützlich, genauso dogmatisch vorzugehen, wie der BOT das tut.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-2999206484959923566?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/pair-programming-bot-fur-tdd.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 05 Feb 2009 11:30:59 +0100</pubDate>
</item>
<item>
<title>Ubuntu für No-Details-Charaktere: Schritt 12 (externe Displays)</title>
<description><![CDATA['Es ist unter Linux bekanntlich <a href="http://rz.koepke.net/?p=24">ein Horrorthema einen Beamer anzusteuern</a>. Also hatte ich auf der OOP Power-Point unter Windows verwendet. Jetzt sitze ich hier gerade neben einem externen Monitor. Den kann ich doch mal anschließen. Dann drücke ich auf Fn+F7 um die Bildschirmausgabe auf das externe Gerät umzuschalten und siehe da, es klappt. OK, ich muss ein paar mal Fn+F7 drücken, bis das gewünschte Ergebnis da ist, aber sowas passiert mir unter Windows auch gerne mal.<br />Ubuntu passt die Bildschirmauflösung auf meinem Notebook an das externe Gerät an. So sieht es bei mir auf dem Notebook etwas eigenartig aus, aber auf dem Monitor mit geringerer Maximalauflösung ist alles prächtig. Cool.<br />Als ich den Monitor wieder abziehe, merkt Ubuntu das aber anscheinend nicht richtig. Auch mehrfaches Fn+F7 bringt mir nicht meine Original-Auflösung zurück. Ich muss als über System->Einstellungen->Bildschirmauflösung die Auflösung wieder hochstellen, aber das ist kein großer Akt.<br />Jetzt müsste es eigentlich auch auf dem Beamer funktionieren, oder? Das werde ich bei der nächsten Konferenz mal ausprobieren.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-2467981666240985072?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/ubuntu-fur-no-details-charaktere_05.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 05 Feb 2009 09:09:09 +0100</pubDate>
</item>
<item>
<title>Replacing Woodstock&rsquo;s JSF components with ADF Faces</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2009/02/04/replacing-woodstocks-jsf-components-with-adf-faces">Replacing Woodstock&rsquo;s JSF components with ADF Faces</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/replacing_woodstock_s_jsf_components</link>
<author>Matthias Wessendorf</author>
<pubDate>Wed, 04 Feb 2009 12:37:56 +0100</pubDate>
</item>
<item>
<title>Ubuntu für No-Details-Charaktere: Schritt 11 (UMTS-Karte)</title>
<description><![CDATA['Ich habe für mein Notebook eine UMTS-Karte von Vodafone. Die Installation der zugehörigen Software gestaltete sich unter Windows als ziemlich umständlich. Also hatte ich auch für die Installation unter Ubuntu mit Problemen gerechnet. Und tatsächlich finde ich erst nach einigem Suchen eine Seite, wo man Treiber herunterladen kann. Dort gibt es zwei Versionen, bei denen mir schon nicht klar ist, welche ich nehmen soll. Also lade ich mal beide herunter. Nützen tut das aber wenig. Keine der beiden Versionen lässt sich installieren. Mist.<br /><br />Also stecke ich die UMTS-Karte rein und starte Windows. Halt, stop. Was ist das? Ubuntu erkennt die Karte von selbst. Ich muss nur den Provider auswählen und ich bin Online. Und dafür mich ich nicht mal die aufdringliche Vodafone-Software ertragen. Wow!<br /><br />Also immer bedenken: Wenn man irgendein Gerät unter Ubuntu nutzen will, erstmal anschließen und gucken, was passiert.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-3213775035184248727?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/ubuntu-fur-no-details-charaktere.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Tue, 03 Feb 2009 22:21:02 +0100</pubDate>
</item>
<item>
<title>Pecha Kucha auf der JAX 2009</title>
<description><![CDATA['Auf der diesjährigen JAX wird es auf dem <a href="http://it-republik.de/jaxenter/jax/sessions/?tid=1214">Agile Day eine Pecha <span class="nfakPe">Kucha</span><br />Session geben</a>. Pecha <span class="nfakPe">Kucha</span> ist eine spezielle Form der Präsentation.<br />Es werden mehrere Präsentationen verschiedener Autoren zu agilen<br />Vorgehensweisen in Folge gezeigt. Jede Präsentation besteht aus genau<br />20 Folien, die jeweils genau 20 Sekunden angezeigt werden.<br /><br />Dafür suche ich Referenten. Wer Interesse hat (und möglichst sowieso<br />auf der JAX oder mind. der Gegend ist), möge sich bei mir melden.<br /><br />Mehr Infos zu Pecha <span class="nfakPe">Kucha</span>:<br /><ul><li><a href="http://de.wikipedia.org/wiki/Pecha_Kucha" target="_blank">http://de.wikipedia.org/wiki/<wbr>Pecha_Kucha</a></li><li><a href="http://www.wired.com/techbiz/media/magazine/15-09/st_pechakucha" target="_blank">http://www.wired.com/techbiz/<wbr>media/magazine/15-09/st_<wbr>pechakucha</a><br /></li></ul><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-5502624999801056915?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/pecha-kucha-auf-der-jax-2009.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Mon, 02 Feb 2009 10:12:35 +0100</pubDate>
</item>
<item>
<title>Noch mehr Spaß mit Internationalisierung</title>
<description><![CDATA['Gerade habe ich versucht, die Webseite der Hertz-Autovermietung zu öffnen. Die war nicht erreichbar - das kann ja mal passieren. Als Meldung habe ich bekommen:<br /><pre><br />We're sorry bur we are unable to process your request at this time<br /> A general application failure has been detected.<br /></pre><br />Bis auf den peinlichen Tippfehler bei "bur/but" scheint mir das OK zu sein. Und freundlicherweise findet sich darunter gleich die deutsche Übersetzung:<br /><pre><br />   wir sind, die aber traurig sind, wir sind nicht imstande, Ihren Antrag diesmal zu verarbeiten.<br /> Ein allgemeiner Anwendung Ausfall ist ermittelt worden.<br /></pre><br />Na, da sind wir aber traurig...<br /><br />Ich kann nur hoffen, dass diese Übersetzung von einer Maschine stammt...<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-7189247880269505483?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/02/noch-mehr-spa-mit-internationalisierung.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Sun, 01 Feb 2009 20:01:40 +0100</pubDate>
</item>
<item>
<title>Wenn einer eine Reise tut...</title>
<description><![CDATA['Donnerstag musste ich morgens von Berlin nach Mannheim. Ich hatte meinen Flug im Internet mit der Lufthansa gebucht und elektronisches Ticket über Kreditkarte geordert.<br /><br />Also stecke ich meine Kreditkarte in den Quick-Checkin-Automaten. Dieser begrüßt mich freundlich mit meinem Namen. Ich muss auswählen, ob ich alleine oder in der Gruppe reise. Alleine. Dann muss ich angeben, ob ich nur Handgepäck habe oder Gepäck aufgeben möchte. Nur Handgepäck. Und dann sagt der Automat mir, dass kein Ticket für mich gebucht ist. Sch... Habe ich den Flug für den falschen Tag gebucht? (Und selbst wenn, was ist das für Usability, dass Fragen beantworten muss, die sich am Ende als Unsinnig herausstellen?)<br /><br />Ich gucke auf die Übersichtsanzeige der Abflüge. Es geht ein Flug nach Mannheim zu der angegebenen Zeit. Aber die Flugnummer ist anders. Oh, oh. Also schnell zum Checkin-Schalten, um das zu klären.<br /><br />Mit schnell ist aber nichts, weil ich mich erstmal im Flughafen Berlin Tegel verlaufe. Das ist bei so einem kleinen Flughafen schon eine gewisse Kunst. Einige Hinweisschilder sind aber auch echt eigenartig platziert.<br /><br />Schließ&#314;ich finde ich den Checkin-Schalter. Da ist aber niemand. Nanu? Es sind nicht mal mehr 60 Minuten bis zum Abflug. Jetzt gesellen sich andere verwirrte Passagiere dazu. So falsch kann ich also nicht sein. Tatsächlich öffnet der Schalter nach wenigen Minuten, ca. 45 Minuten vor Abflug. Jetzt sehe ich auch, warum ich kein elektronisches Ticket bekommen konnte und warum die Flugnummer abweicht. Der Flug wird nicht von Lufthanse durchgeführt, sondern von Cirrus Airlines. Also liegt das Ticket wohl im System von Cirrus und der Lufthansa-Automat kommt da nicht dran. Da wäre ein Hinweis bei der Buchung und auch am Quick-Checkin-Automaten hilfreich gewesen - soviel Adrenalin am frühen Morgen muss nun wirklich nicht sein.<br /><br />Tatsächlich bekomme ich am Cirrus-Schalter mein Ticket. Bei der Sicherheitskontrolle falle ich unangenehm auf. In meinem Notebook-Rucksack haben sich soviele Kabel angesammelt, dass er nicht mehr richtig durchleuchtet werden kann. Letztes Mal musste ich daher alle Kabel rausnehmen und den Rucksack nochmal durchleuchten lassen. So leicht komme ich diesmal nicht davon. Ich werde in einen separaten Raum gebeten. Dort wird eine Art Staubsauger mit Filter in alle Rucksack-Fächer gehalten und der Filter anschließend in eine wirklich große Maschine gesteckt. Die sagt erwartungsgemäß, dass ich keine Bomben dabei habe. Hätte sie das auch gesagt, wenn ich Sylvester Böller in dem Rucksack transportiert hätte? Wenn ich mal zuviel Zeit habe, reibe ich mal eine Tasche mit übriggebliebenen Böllern ein und gehe extra früh zur Sicherheitskontrolle...<br /><br />Danach warte ich noch kurz am Gate und rein geht's in Flugzeug. Naja, erstmal in den Flughafenbus - zusammen mit einem dutzend anderer Leute. Zwei davon stehen im Bus und machen die Business-Kasper - die waren wirklich sehr nah dran am Sketch!<br /><br />Nach 5 Minuten steigen wir wieder aus- Der Bus hat sich keinen Zentimeter bewegt. Wir werden wieder zurück in die Wartehalle geholt. In Mannheim kann wg. schlechtem Wetter (Nebel und Eisregen) nicht gelandet werden. 45 Minuten nach geplantem Abflug beschließt man: Wir fliegen nach Saarbrücken und fahren dann 90 Minuten mit dem Bus nach Mannheim. Es gäbe auch noch eine geringe Chance, dass wir in Mannheim landen könnten. Aber das würde sich erst kurz vor Mannheim entscheiden.<br /><br />Einige Passagiere weisen darauf hin, dass bereits Flüge nach Saarbrücken umgeleitet wurden nach Stuttgart, weil der Flughafen auch schlechtes Wetter hätte. Die Cirrus-Frau fragt nochmal nach bei ihren Leuten. Aber es bleibt dabei: Wenn Mannheim nicht geht, nehmen wir Saarbrücken. Also alle wieder rein in den Bus und los geht's.<br /><br />Das Flugzeug hat gut 30 Sitze, so dass die meisten Sitze frei bleiben. Wir dürfen uns aber nicht in die ersten 5 Reihen setzen, weil dann die Gewichtsverteilung nicht mehr stimmt. Wer hätte gedacht, dass Flugzeuge so anfällig sind.<br /><br />Während wir auf die Startbahn rollen, hält die Flugbegleiterin ihre obligatorische Rede: "Im Namen des Piloten, des Copiloten und der restlichen Crew - das bin ich - heiße ich Sie herzlich willkommen beim Cirrus-Flug nach Mannheim ... oder Saarbrücken."<br /><br />Nach dem Start meldet sich der Pilot: "Auch ich möchte Sie herzlich willkommen heißen auf unserem Flug nach Westen. Auf mehr möchte ich mich erstmal nicht festlegen." Um uns etwas Unterhaltung zukommen zu lassen, erzählt er lange Geschichten über die Orte, an denen wir vorbeifliegen. Seine Ausführungen beschließt er mit den Worten: "Und wenn Ihnen jetzt der Sinn nach etwas seichterer Unterhaltung ist, fragen Sie die Stewardess. Die kann klassischen Ausdruckstanz. Die kann sogar ihren Namen tanzen."<br /><br />Kurz vor Mannheim meldet sich der Pilot: "In Mannheim ist immer noch schlechtes Wetter und wir können dort nicht landen. In Saarbrücken sieht es genauso aus. Und da es egal ist, wo wir nicht landen, fliege ich jetzt einfach mal Schleifen über Mannheim. Vielleicht tut sich ja noch was."<br /><br />Nach 30 Minuten kommt die Durchsage: "Es wird sich nichts mehr tun. Wir fliegen zurück nach Frankfurt." Das dauert immerhin nur 12 Minuten, aber als wir da sind: "Dass der Himmel heute nicht voller Geigen hängt, haben Sie ja bereits bemerkt. Hier hängt er voller Flugzeuge, so dass wir auch hier ein paar Warterunden drehen werden."<br /><br />Ich frage mich langsam, wieviel Sprit in so einer Maschine eigentlich drin ist.<br /><br />Aber letztlich landen wir dann doch. Lufthansa hat einen Bus organisiert, der uns an Ausgang B6 erwartet. Also wir da ankommen, finden wir da zwei Dinge nicht vor: einen Bus und jemand von Lufthansa, der uns Infos gibt. Gut organisiert ist das nicht.<br />Stehen wir vielleicht am falschen Ausgang? Nach ca. 30 Minuten taucht jemand auf und nimmt uns zum Bus mit. Dort warten wir noch ziemlich lange, weil die Anzahl der Leute im Bus unter der Anzahl der Passagiere im Flugzeug liegt. Vielleicht haben die ein anderes Transportmittel genommen? Irgendwann fährt der Bus aber doch los und es dauert noch eine Stunde, bis wir in Mannheim ankommen sind.<br /><br />Summa Summarum: Statt einer Stunde dauerte die Reise Berlin->Mannheim 5,5 Stunden (dass der Pilot einen gewissen Unterhaltungswert hatte, entschädigt da wenig). Und da ich meinem Kunden nicht zumuten kann, um 15 Uhr zu kommen und um 17 Uhr wieder zu gehen, harre ich dort bis 18:15 Uhr aus und komme daher erst gegen 1:00 Uhr morgends wieder zu Hause an - für den Rückweg nehme ich die Bahn. Die ist in Relation zum Flugverkehr dann doch verlässlich und auch bequemer.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-8351246989050312806?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/01/wenn-einer-eine-reise-tut.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Mon, 19 Jan 2009 20:10:35 +0100</pubDate>
</item>
<item>
<title>Perlen der Internationalisierung</title>
<description><![CDATA['Eine große Internetanwendung hat rechts oben zwei Links stehen: "Einloggen" und "Anmelden". Da kann man schon mal eine Weile drüber nachdenken.<br /><br />Und ein bekanntes Internetsystem, mit dem man VOIP machen kann, sagt ständig "XYZ kam online". So begeistert sind also die Benutzer dieses Systems...<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-2288161888452152502?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/01/perlen-der-internationalisierung.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Mon, 12 Jan 2009 20:27:10 +0100</pubDate>
</item>
<item>
<title>Ubuntu für No-Details-Charaktere: Schritt 10 (Wine statt Windows)</title>
<description><![CDATA['Freitag hatte ich jetzt tatsächlich mal eine Situation, in der ich ein Programm benutzen musste, dass es nur unter Windows gibt. Man muss dazu aber Windows gar nicht starten. Man kann viele Windows-Programme mit Hilfe von <a href="http://www.winehq.org/">Wine</a> direkt unter Ubuntu laufen lassen.<br /><br />Cool!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-2103763624871459534?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/01/ubuntu-fr-no-details-charaktere-schritt_12.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Mon, 12 Jan 2009 16:53:15 +0100</pubDate>
</item>
<item>
<title>Ubuntu für No-Details-Charaktere: Schritt 9 (Skype)</title>
<description><![CDATA['Jetzt kommt Skype dran. Es gibt eine Ubuntu-Version als Debian-Package. Leider steht Skype nur als 32-Bit-Version zur Verfügung und mein 64-Bit-Ubuntu will das nicht installieren.<br />Es gibt aber eine <a href="http://wiki.ubuntuusers.de/Skype">gute Doku</a>, wie man es trotzdem hinkriegt im deutschsprachigen Ubuntu-Wiki. Soweit läuft auch alles. Aber beim Audio-Testpassiert nichts. Mal in die Skype-Optionen gucken. Und tatsächlich kann man dort zwischen verschiedenen Audio-Treibern wählen, die mir alle nichts sagen. Zum Glück sind es nur drei. Ich probiere einfach alle aus und der letzte (das war ja klar) funktioniert auch.<br />Jetzt habe ich nur noch das Problem, dass mein Mikro nicht funktioniert. Nach etwas Suchen stelle ich fest, dass in Ubuntu das Mikro ausgeschaltet ist. Das kann man einfach beheben im Ubuntu-Desktop. Hey, was ist das denn? Man kann dort einen Mikro-Boost einstellen. Was der wohl macht? Wenn man ihn zu hoch aufdreht, auf jeden Fall Rückkopplungen :-) Aber wenn man es nur etwas aufdreht, wird die Mikro-Aufnahme lauter. Das ist cool. Wenn ich das Mikro des Notebooks benutzt habe, war das unter Windows eigentlich immer zu leise. Jetzt hört es sich schon viel besser an.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6599870-5263389315805592256?l=stefanroock.blogspot.com' alt='' /></div>' ]]></description>
<link>http://stefanroock.blogspot.com/2009/01/ubuntu-fr-no-details-charaktere-schritt_8368.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Tue, 06 Jan 2009 19:54:44 +0100</pubDate>
</item>
<item>
<title>Blogging again - update your links</title>
<description><![CDATA['<p>
The Silent Penguin is blogging again - but he's found a new home to do so.
</p><p>
Update your links (if so inclined) to the new <a href="http://silentpenguin.wordpress.com/">site</a> and we'll see you over there!
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2009/01/blogging_again.html</link>
<author>Matthew Langham</author>
<pubDate>Mon, 05 Jan 2009 13:08:30 +0100</pubDate>
</item>
<item>
<title>Apache MyFaces 2.0 - A community driven JSF 2.0 implementation</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/12/03/myfaces-20-a-community-driven-jsf-20-implementation/">Apache MyFaces 2.0 </a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/apache_myfaces_2_0_a</link>
<author>Matthias Wessendorf</author>
<pubDate>Wed, 03 Dec 2008 09:15:57 +0100</pubDate>
</item>
<item>
<title>Avoiding &ldquo;Open Source&rdquo; with JSF and Facelets</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/11/28/avoiding-open-source-with-jsf-and-facelets/">Avoiding &ldquo;Open Source&rdquo; with JSF and Facelets</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/avoiding_open_source_with_jsf</link>
<author>Matthias Wessendorf</author>
<pubDate>Fri, 28 Nov 2008 14:36:18 +0100</pubDate>
</item>
<item>
<title>Mobile Application Development with JSF (Trinidad)</title>
<description><![CDATA['Check out the <a href="http://matthiaswessendorf.wordpress.com/2008/11/20/mobile-application-development-with-jsf-trinidad/">Mobile Application Development with JSF (Trinidad)</a>!' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/mobile_application_development_with_jsf</link>
<author>Matthias Wessendorf</author>
<pubDate>Thu, 20 Nov 2008 19:08:50 +0100</pubDate>
</item>
<item>
<title>Conversation Scope and JSF (or your favorite web framework)</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/11/19/conversation-scope-and-jsf-or-your-favorite-web-framework/">here it is</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/conversation_scope_and_jsf_or</link>
<author>Matthias Wessendorf</author>
<pubDate>Thu, 20 Nov 2008 10:46:04 +0100</pubDate>
</item>
<item>
<title>Article series on Apache Trinidad</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/11/03/article-series-on-trinidad">Article series on Apache Trinidad</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/article_series_on_apache_trinidad</link>
<author>Matthias Wessendorf</author>
<pubDate>Tue, 04 Nov 2008 21:21:59 +0100</pubDate>
</item>
<item>
<title>JSF: client-side validation done wrong with spring-faces</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/10/27/client-side-validation-done-wrong-with-spring-faces/">client-side validation done wrong with spring-faces</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/jsf_client_side_validation_done</link>
<author>Matthias Wessendorf</author>
<pubDate>Mon, 27 Oct 2008 17:37:21 +0100</pubDate>
</item>
<item>
<title>REST and JSF</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/10/27/rest-and-jsf/">REST and JSF</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/rest_and_jsf</link>
<author>Matthias Wessendorf</author>
<pubDate>Mon, 27 Oct 2008 10:31:05 +0100</pubDate>
</item>
<item>
<title>Eclipse in the Banking Industry</title>
<description><![CDATA['<p>
Despite all the troubles in financial sector, I still would like to remind about <a href="https://www.eclipsecon.org/submissions/ese2008/view_talk.php?id=191">Eclipse in the Banking Industry</a> symposia (at Eclipse Summit Europe 2008). I definitely welcome everyone who sees a point in using great open source Eclipse technologies in financial world. See you in Ludwigsburg - a beautiful small town that should not be missed.
</p>
<p>
<img src="http://download.service-cloud.com/misc/weihnachtsmarkt-ludwigsburg.jpg" alt="Christmas market in Ludwigsburg">
</p>' ]]></description>
<link>http://www.jroller.com/aav/entry/eclipse_in_the_banking_industry</link>
<author>Aleksey Aristov</author>
<pubDate>Tue, 14 Oct 2008 18:53:48 +0200</pubDate>
</item>
<item>
<title>Oracle ADF Faces 11g release, demos and autoPPR</title>
<description><![CDATA['<a href="http://matthiaswessendorf.wordpress.com/2008/10/14/adf-faces-11g-release-demos-and-autoppr-ajax/">Oracle ADF Faces 11g release, demos and autoPPR</a>' ]]></description>
<link>http://www.jroller.com/mwessendorf/entry/oracle_adf_faces_11g_release</link>
<author>Matthias Wessendorf</author>
<pubDate>Tue, 14 Oct 2008 12:55:57 +0200</pubDate>
</item>
<item>
<title>OSGi on Amazon EC2 is available</title>
<description><![CDATA['<p>
<a href="http://www.service-cloud.com">Cloud Studio with OSGi support</a> is finally out. Now it is possible to upload your bundles into S3 based bundle repository and create an instance profile (similiar to "Run Configuration" in Eclipse). After profile is created, an EC2 instance that hosts OSGi framework with required bundles can be launched. 
</p>

<p>
Bundles in S3 based bundle repository:
</p>
<p>
<a href="http://download.service-cloud.com/studio/images/10b4/bundle_repository.jpg">
<img src="http://download.service-cloud.com/studio/images/10b4/bundle_repository_small.jpg" alt="Bundles in S3 based bundle repository">
</a>
</p>

<p>
OSGi profile editor:
</p>

<p>
<a href="http://download.service-cloud.com/studio/images/10b4/osgi_profile_editor.jpg">
<img src="http://download.service-cloud.com/studio/images/10b4/osgi_profile_editor_small.jpg" alt="OSGi profile editor">
</a>
</p>

<p>
There are two short <a href="http://www.service-cloud.com/node/18">screencasts</a> that show how <a href="http://www.eclipse.org/rap/">RAP (Reach Ajax Platform)</a>, plain old <a href="http://www.eclipse.org/equinox/server/jsp_support.php">JSP example</a>, and Spring based remote service (Spring + Spring DM for OSGi) can be deployed to EC2.
</p>




' ]]></description>
<link>http://www.jroller.com/aav/entry/osgi_on_amazon_ec2</link>
<author>Aleksey Aristov</author>
<pubDate>Tue, 14 Oct 2008 06:21:45 +0200</pubDate>
</item>
<item>
<title>Recruiting you, the angel investor</title>
<description><![CDATA['<p>
I've just started a new project here at <a href="http://www.indiginox.com">Indiginox</a> castle. The goal being to find one or several business angels interested in investing in a media related venture we've been working on (on our internal back-burner) for the past 8 months or so and we now want to release into the wild.
</p><p>
The products are ready, the demo-versions online and the business-plan written. We are already talking to media partners and customers here in Germany (although world-domination has been written into the business plan).
</p><p>
Our ideal partner will have an online-mobile-media-publishing background and understand both online and traditional print and broadcasting markets.
</p><p>
Sounds like something you may be interested in hearing more about - then tell <a href="mailto:matthew.langham@indiginox.com">me</a> why we should be sending you the details and letting you take a look at what we've been cooking!
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/09/recruiting_you.html</link>
<author>Matthew Langham</author>
<pubDate>Thu, 04 Sep 2008 15:28:54 +0200</pubDate>
</item>
<item>
<title>Lifefeed.com up for sale</title>
<description><![CDATA['<p>
In the end I decided to put the <a href="http://www.lifefeed.com">lifefeed.com</a> domain up for sale on <a href="https://sedo.com/search/details.php4?domain=lifefeed.com">sedo.com</a>. Not sure if this is the best way or not. We'll see how it goes.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/08/lifefeedcom_up.html</link>
<author>Matthew Langham</author>
<pubDate>Tue, 05 Aug 2008 18:36:18 +0200</pubDate>
</item>
<item>
<title>The history of Lifefeed.com</title>
<description><![CDATA['<p>
A few people have asked me about the lifefeed.com domain, so I set up a little <a href="http://www.lifefeed.com/">site</a> that gives a bit of background.
</p><p>
Apart from selling the domain - I'd also be open to discussing any ideas you may have around what a lifefeed application should look like today. I guess the original idea is now somewhat pass&eacute; as things like <a href="http://www.friendfeed.com">FriendFeed</a> gain traction.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/07/the_history_of.html</link>
<author>Matthew Langham</author>
<pubDate>Thu, 24 Jul 2008 11:58:42 +0200</pubDate>
</item>
<item>
<title>Getting rid of domains</title>
<description><![CDATA['<p>
Over the years, I've "collected" some domains that may or may not be interesting to you. If you see one you like then feel free to make me a serious offer.
</p><ul>
<li>Build that Life Feed - Now that <a href="http://www.friendfeed.com">FriendFeed</a> is all the rage and you're building the next killer feed application - how about owning the "feed of your life" or <a href="http://lifefeed.com">lifefeed.com</a></li>
<li>Open Source fans out there may be interested in<a href="http://sourcecrossing.com"> sourcecrossing.com</a> or <a href="http://sourcexing.com">sourcexing.com</a> or <a href="http://opensourcecast.com">opensourcecast.com</a></li>
<li>Cooking geeks may be interested in <a href="http://geekskitchen.com">geekskitchen.com</a></li>
</ul><p>
Actually, what is the best way to sell a domain nowadays? Any recommendations?
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/07/getting_rid_of.html</link>
<author>Matthew Langham</author>
<pubDate>Tue, 22 Jul 2008 15:52:26 +0200</pubDate>
</item>
<item>
<title>OSGi running on Amazon EC2</title>
<description><![CDATA['<p>Server side OSGi applications now can also be easily deployed on computing clouds implemented by Amazon (<a href="http://aws.amazon.com/ec2">EC2</a>).  With several mouse clicks your exported bundles can be uploaded to remote  storage (<a href="http://aws.amazon.com/s3">S3</a>) and added to profile (Launch Configuration). Now virtual servers (EC2 instances) containing OSGi framework provisioned with selected bundles can easily be started.</p>

<p>
<a href="http://www.service-cloud.com"><img src="http://www.service-cloud.com/studio/snapshots/OSGi_Cloud_sm.jpg"/></a>
</p>
<p>

<a target="_blank" href="http://www.service-cloud.com/studio/presentation_osgi/">OSGi on EC2 video presentation</a>
</p>

<p>
For those who do not know what EC2 is: it is a very cool service coming from Amazon. It allows users to start virtual servers within it's "Elastic Compute Cloud". Compared to traditional server hosting, Compute Cloud allows you to scale your capacity according to your demands. By running servers in the cloud, you can avoid initial expenses of buying new hardware and such. Another attractive feature - you do not have to sign up for any long term contracts (which is usually almost always the case in Germany).
</p>

<p>
Amazon will charge you on "pay for what you use" basis. Their current prices start from 10 cents per instance hour plus some additional traffic fees.
</p>

<p>
In my opinion, this is a very good option to host Java based services. What makes it even better option is that hosting services with high quality Java support are usually expensive hard to find.
</p>
' ]]></description>
<link>http://www.jroller.com/aav/entry/osgi_running_on_amazon_ec2</link>
<author>Aleksey Aristov</author>
<pubDate>Tue, 22 Jul 2008 08:08:17 +0200</pubDate>
</item>
<item>
<title>Holger and the joys of island life</title>
<description><![CDATA['<p>
We spent a relaxing long weekend on the small island of <a href="http://maps.google.de/maps?hl=de&q=baltrum&um=1&ie=UTF-8&sa=X&oi=geocode_result&resnum=1&ct=title">Baltrum</a> - just off the German North Sea coast. Baltrum is very small and special in that there are no motorized vehicles on the island - except for emergency ones. Because of this, it takes a while to get used to the absence of motorized noise. Actually that isn't quite true as there is a little airfield, so you do hear the occasional sound of a motor.
</p><p>
One evening we were relaxing in the sun when we saw someone pushing a very large John Deere tractor-lawnmower (like one of <a href="http://www.deere.com/en_US/homeowners/riding_mowers/index.html?link=res_homepage">these</a>) along the main road between the two villages on the island. I jokingly asked if he had run out of petrol - and that is how we came to meet Holger.
</p><p>
Holger was born on the island of Baltrum and works half-days delivering crates of drinks to the various holiday homes and flats on Baltrum. Because there are no motorized vehicles, Holger rides round on his bike towing a  trailer with the crates perched on the trailer. A common form of heavy-goods transport on the island.
</p><p>
Holger spends the other half of the day (during the Summer) mowing lawns and the larger grassy areas with his petrol powered John Deere lawnmower. Once on the lawn, Holger is in his element - he fires up the tractor-lawnmower and off he goes. 
</p><p>
However, whenever Holger "meets" a road or other public path, he has to turn off the lawnmower and push it over the road to the next piece of grass. He is not allowed to drive over or along any public path without first getting a permit. Getting a permit means ringing up the police and requesting explicit permission to drive over (or up) the path he wants to take. So, due to this hassle, Holger resorts to pushing his John Deere over the island or hitching a tow from one of the many horse carriages.
</p><p>
Holger also introduced us to the concept of "extreme shopping" whereby a group of people from the island will catch the ferry over to the mainland, make a rush for the nearest town, split up to access different shops in parallel and then make a speedy dash back for the next ferry back to the island. Because the ferry only runs 2-3 times a day, there isn't much room for timing mistakes.
</p><p>
During the hour we chatted, Holger gave us some really good insight into the life on an island. Strangely attractive actually.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/07/holger_and_the.html</link>
<author>Matthew Langham</author>
<pubDate>Thu, 03 Jul 2008 13:06:26 +0200</pubDate>
</item>
<item>
<title>Looking for Enterprise Open Source consulting</title>
<description><![CDATA['<p>
Due to a current project running out, I'm currently looking for new consulting opportunities in the Open Source space. <a href="http://www.indiginox.com">We</a> specialize in consulting enterprises in all aspects of an Open Source engagement and have worked for companies in the UK, Germany and the Netherlands (so far). Contact <a href="mailto:matthew.langham@indiginox.com">me</a> for additional details and references.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/06/looking_for_ent.html</link>
<author>Matthew Langham</author>
<pubDate>Wed, 25 Jun 2008 11:55:25 +0200</pubDate>
</item>
<item>
<title>Open Source consulting and the large enterprise</title>
<description><![CDATA['<p>
Quite a bit of my time is currently taking up consulting large enterprises around Open Source. As part of the consulting - I try to arrange some presentations by different sorts of Open Source "people" so that the corporation can understand just how varied the Open Source world is. 
</p><p>
Recently, I arranged for <a href="http://www.alfresco.com">Alfresco</a> to do a presentation and it went really well. <a href="http://robinshould.blogspot.com">Robin Yellow</a> attended and gives his <a href="http://robinshould.blogspot.com/2008/06/meeting-alfresco-management-team.html">impressions</a>. John Powell CEO of Alfresco did the talk and gives some <a href="http://advice.cio.com/esther_schindler/evaluating_an_open_source_projects_business_model?page=1">feedback</a> (and a plug for yours truly).
</p><blockquote>
I recently attended a meeting with a major oil company and they had engaged the services of <a href="http://www.indiginox..com">Indiginox</a>, an OS consulting company, who focus on advising large enterprise on the viability and pros and cons of different OS projects.
</blockquote><p>
We actually do quite a bit more than that (e.g. authoring and establishing policies and guidance, researching and authoring specific enterprise relevant topics around Open Source, establishing and management of internal Open Source communities and much more).  If you're interested in just what we do - then take a look at the <a href="http://www.indiginox.com/downloads/Indiginox_Open_Source_Enterprise_Offering.pdf">Indiginox Enterprise Open Source offer</a>.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/06/open_source_con_2.html</link>
<author>Matthew Langham</author>
<pubDate>Mon, 09 Jun 2008 10:13:52 +0200</pubDate>
</item>
<item>
<title>Cloud Studio plugin with S3 Browser</title>
<description><![CDATA['<p>
Next version of <a href="http://www.service-cloud.com">Cloud Studio</a> plugin is released. The main addition is a S3 browser. Now it is possible to browse S3 buckets directly from Eclipse. In the future, deeper integration with IDE will be added. 
</p>

<p>
<a href="http://www.service-cloud.com"><img src="http://www.service-cloud.com/studio/snapshots/s3_browser_small.jpg"></a>
</p>

' ]]></description>
<link>http://www.jroller.com/aav/entry/cloud_studio_release</link>
<author>Aleksey Aristov</author>
<pubDate>Wed, 04 Jun 2008 18:29:39 +0200</pubDate>
</item>
<item>
<title>Cloud Studio</title>
<description><![CDATA['<p>
I am glad to announce <a href="http://www.service-cloud.com">Cloud Studio</a>. 
</p>

<p>
It is a Eclipse plugin (can also work as a standalone application), that makes work with Amazon Elastic Compute Cloud (EC2) a bit more comfortable. This is a first beta, but we will keep on working to extend and improve the software. 
</p>

<p>
It is free for any kind of use. You can downloaded it from the Cloud Services <a href="http://www.service-cloud.com">site</a>, or install it with Eclipse update manager from <i>http://www.service-cloud.com/studio/update/</i>
</p>


<p>
Here is a screenshot (click to see more): 
</p>

<p>
<a href="http://www.service-cloud.com/?page_id=15" target="_blank"><img src="http://www.service-cloud.com/studio/snapshots/studio_eclips_sm.jpg"></a>
</p>' ]]></description>
<link>http://www.jroller.com/aav/entry/cloud_studio</link>
<author>Aleksey Aristov</author>
<pubDate>Fri, 16 May 2008 20:41:35 +0200</pubDate>
</item>
<item>
<title>JavaOne 2008 Handson Lab Material available</title>
<description><![CDATA['Last week was a busy week in San Francisco. On Sunday we had the GlassFish unconference which was real fun. Monday the C1 event in Moscone Center and of course tuesday to friday JavaOne. I was proctoring all the Open ESB related labs and helped people succeeding in the labs. 

For those interested the material is now available online for all SDN members. 

The Open-ESB labs have been:
<ul><li>Lab 5500:<a href="http://developers.sun.com/learning/javaoneonline/sessions/hol2008/5500/5500_OpenESB.zip"> Dynamic Service Composition with OpenESB</a></li><li>Lab 5510: <a href="http://developers.sun.com/learning/javaoneonline/sessions/hol2008/5510/5510_bpel.zip">Orchestration of Web Services, Using WS-BPEL</a></li><li>Lab 5530: <a href="http://developers.sun.com/learning/javaoneonline/sessions/hol2008/5530/5530_SecuredSOA.zip">Building Secure, Reliable, Transactional SOA Applications Using Open ESB</a></li><li>Lab 5540: <a href="http://developers.sun.com/learning/javaoneonline/sessions/hol2008/5540/5540_IEP.zip">Query Continuous Data streams Using OpenESB's Intelligent Event Processor</a></li></ul><div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div><!-- technorati tags begin --><p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/OpenESB" rel="tag">OpenESB</a></p><!-- technorati tags end -->' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/javaone_2008_handson_lab_material</link>
<author>Daniel Adelhardt</author>
<pubDate>Tue, 13 May 2008 01:48:33 +0200</pubDate>
</item>
<item>
<title>Refactoring FitNesse Tests</title>
<description><![CDATA['Have you ever had a Fit(Nesse) test suite of more than just a few pages? Have you ever tried to consistently change the names of test pages, fixtures, columns, commands or anything that is being used a few dozen or a few hundred times across the whole suite? Have you ever wanted to get rid of the 14 setup tables that were copied from your first test page into all others? Have you ever wished you could reorder columns, arguments or parameters in your fixtures?

You get my point. Doing "refactoring"...' ]]></description>
<link>http://jlink.blogger.de/stories/1064918/</link>
<author>john.link@gmx.net</author>
<pubDate>Sat, 03 May 2008 03:35:02 +0200</pubDate>
</item>
<item>
<title>Domain Synchronisation in GlassFish</title>
<description><![CDATA['Wer schon immer mal wissen wollte wie in einer GlassFish v2 Domäne (gilt auch für Application Server 8.x) der Sync Vorgang zwischen Domain Admin Server, Node Agents und Instanzen läuft: Auf dem Blog von Kedar gibt es eine gute kurze Zusammenfassung <a href="http://blogs.sun.com/bloggerkedar/entry/how_das_communicates_with_node">hier .</a>

Wer sich informieren möchte, was für v3 in Bereich Admin Features geplant ist sollte im <a href="http://wiki.glassfish.java.net/Wiki.jsp?page=V3CoreInfrastructureImprovements">Wiki </a>nachsehen.
   <div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div><!-- technorati tags begin --><p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/glassfish_de" rel="tag">glassfish_de</a></p><!-- technorati tags end -->' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/dom%C3%A4nensynchronisation_in_glassfish</link>
<author>Daniel Adelhardt</author>
<pubDate>Wed, 30 Apr 2008 02:08:25 +0200</pubDate>
</item>
<item>
<title>Jacquie Langham - painting again</title>
<description><![CDATA['<p>
My Mum started painting again in earnest recently and her <a href="http://www.bigemptywall.com/jacquie-langham-fine-art-33-c.asp">paintings</a> are now up for sale as prints at <a href="http://www.bigemptywall.com">The  Big Empty Wall Gallery</a>. I'm blatantly going to copy the blurb on the Web site - because I couldn't have written it any better.
</p><blockquote>
Jacquie Langham qualified as a teacher of Art and Craft at Bretton Hall. Alongside her teaching career here and in Germany, she developed as a mural and portrait artist. She and her late husband held exhibitions and opened a Gallery in Germany, showing their paintings, ceramics and jewellery. They lived and worked there for 17 years and their paintings can be seen in private collections, worldwide.
<br />
<br />Since returning to this country, Jacquie has continued to paint portraits on commission, until quite recently, when she started to work with acrylics for the first time and became excited by the medium, producing unusual and vivid images of chillis, peppers and other vegetables. She is, at present, exploring dramatic and colourful aspects of other familiar images.
</blockquote><p>
<img src="http://www.bigemptywall.com/ekmps/shops/photoart/images/butterfly-1-2nd-pass-[ekm]92x140[ekm].jpg"> <img src="http://www.bigemptywall.com/ekmps/shops/photoart/images/chilepair2[ekm]101x140[ekm].jpg"><img src="http://www.bigemptywall.com/ekmps/shops/photoart/images/lastbutt2[ekm]99x140[ekm].jpg"/>
</p><p>
Makes me really proud to be able to point to her work and I hope you'll check out the the <a href="http://www.bigemptywall.com/jacquie-langham-fine-art-33-c.asp">site</a> for more - and larger pictures!
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/04/jacquie_langham.html</link>
<author>Matthew Langham</author>
<pubDate>Sun, 27 Apr 2008 20:55:49 +0200</pubDate>
</item>
<item>
<title>GlassFish Präsentation von der JAX2008</title>
<description><![CDATA['Long time no blogging...

Die letzten Tage war ich auf der <a href="http://www.jax.de">JAX Konferenz</a> in Wiesbaden.&nbsp; Am Dienstag hatte ich dort eine sehr gut besuchte Session zum Thema "Advanced GlassFish". In der Session habe ich ein paar weiterführende Themen wie Monitoring, Comet, OpenSSO und Scripting mit GlassFish diskutiert. Für Interessierte - hier ist der Link auf die <a href="http://mediacast.sun.com/users/adelhardt/media/glassfish_jax08">Praesentation</a>.

Heute läuft dort die <a href="http://entwickler.de/zonen/portale/psecom,id,99,news,42811,p,0.html">Keynote</a> unseres neuen Kollegen Dalibor Topic zum Thema OpenJDK.

  <div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div>' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/glassfish_pr%C3%A4sentation_von_der_jax2008</link>
<author>Daniel Adelhardt</author>
<pubDate>Thu, 24 Apr 2008 04:12:54 +0200</pubDate>
</item>
<item>
<title>BigCo Open Source consulting</title>
<description><![CDATA['<p>
For the past year I've been doing some major Open Source strategy consulting for a global BigCo. It has been (and still is) a fascinating and extremely fulfilling experience.
</p><p>
My focus hasn't been on implementing a software project but on authoring an internal Open Source strategy whitepaper and establishing things like an Open Source policy and Open Source guidance or setting up an Open Source internal community within said BigCo.
</p><p>
Seeing the growing interest for Open Source within the corporation gives me some real satisfaction and in a way it shows that jumping into the - then - icy cold Open Source business "water" back in 2000 was one of the best decisions I ever made.
</p><p>
Another blog post - I'm sure this is just a fad.
</p>' ]]></description>
<link>http://www.silentpenguin.com/archives/2008/04/bigco_open_sour.html</link>
<author>Matthew Langham</author>
<pubDate>Thu, 10 Apr 2008 18:10:47 +0200</pubDate>
</item>
<item>
<title>Weblog Moved</title>
<description><![CDATA['I eventually managed to move my weblog over to http://blog.johanneslink.net. The new feed is http://blog.johanneslink.net/feed/

UPDATE:
The URL has changend once more, sorry.' ]]></description>
<link>http://jlink.blogger.de/stories/1084296/</link>
<author>john.link@gmx.net</author>
<pubDate>Thu, 27 Mar 2008 02:35:02 +0100</pubDate>
</item>
<item>
<title>Is C++ Suited for Agile Development?</title>
<description><![CDATA['My personal opinion on this is "only barely - if at all". If you can read German then Jens Coldewey's very good summary of the problems you run into if you try is just for you. Here is my adhoc translation of a section in which he characterizes his experience with refactoring large C++ legacy systems:

To rework and refactor a whole system like this can take years. Languages that enforce such big rework should not be used anymore except in very special circumstances. Would you buy a new car the engine...' ]]></description>
<link>http://jlink.blogger.de/stories/980877/</link>
<author>john.link@gmx.net</author>
<pubDate>Thu, 29 Nov 2007 02:35:02 +0100</pubDate>
</item>
<item>
<title>C# is not Java is not C# is not Java</title>
<description><![CDATA['Switching regularly between .NET and Java definitely does not facilitate remembering the details of one platform or the other. For me, however, it made me see how similar both platforms are and consider C# to be a (slightly) improved version of Java. 

For the most part, I still think that´s true. Explicit properties, delegates and events make coding certain programming idioms somewhat smoother and more readable than using bean conventions and anonymous inner classes. That said, I still shy...' ]]></description>
<link>http://jlink.blogger.de/stories/977302/</link>
<author>john.link@gmx.net</author>
<pubDate>Sun, 25 Nov 2007 02:35:02 +0100</pubDate>
</item>
<item>
<title>13949712720901ForOSX</title>
<description><![CDATA['Apple, don't be a kill-joy!' ]]></description>
<link>http://jlink.blogger.de/stories/966798/</link>
<author>john.link@gmx.net</author>
<pubDate>Tue, 13 Nov 2007 02:35:02 +0100</pubDate>
</item>
<item>
<title>GlassFish v2 released today!</title>
<description><![CDATA['
<p>I have been busy over the past months and didn't find the time to blog. But today is an important day for the <a href="http://glassfish.dev.java.net" title="GlassFish Project">GlassFish</a> community which forced me to blog again: </p>


<p><b> <a href="http://glassfish.dev.java.net" title="GlassFish Project">GlassFish</a> v2 - also known officially as Sun Java System Application Server 9.1 - is finally released today!</b></p>


<p>You can get from <a href="http://sun.com/appserver">here</a> or <a href="https://glassfish.dev.java.net">here</a></p>


<p>If you are new to <a href="http://glassfish.dev.java.net" title="GlassFish Project">GlassFish</a> here are some of the feature highlights:<br/>
<ul><br/>
<li>Full Java EE 5 Support</li><br/>
<li>Profile support: Developer, Cluster and Enterprise Profiles</li><br/>
<li>Clustering and failover support </li><br/>
<li>New in memory replication for failover <a href="http://blogs.sun.com/memrep/">more</a></li><br/>
<li>Java Business Integration support</li><br/>
<li>Easy to use intuitive admin console</li><br/>
<li>Performance!</li><br/>
<li>and much more - See Eduardo's <a href="http://blogs.sun.com/pelegri/entry/overview_of_glassfish_v2">writeup</a> </li><br/>
</ul></p>


<p>You can read more about this exciting release as usually on the <br/>
<a href="http://blogs.sun.com/theaquarium">aquarium</a></p>

' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/glassfish_v2_released_today</link>
<author>Daniel Adelhardt</author>
<pubDate>Mon, 17 Sep 2007 04:13:48 +0200</pubDate>
</item>
<item>
<title>ClasspathSuite: Searching for a New Home</title>
<description><![CDATA['It's time again to ditch some dear but no longer needed weight: A couple of month ago I developed ClasspathSuite, a little JUnit4 extension to run test suites which are distributed among several (Eclipse) projects and/or several jar files. At that time I was in need of such a tool and I have enhanced it slightly over the last few months.

Now that JUnit 4.4 is available, some internals of ClasspathSuite do not work any longer, and I just don't find the time to delve sufficiently deep into JUnit 4.4...' ]]></description>
<link>http://jlink.blogger.de/stories/933105/</link>
<author>john.link@gmx.net</author>
<pubDate>Mon, 10 Sep 2007 03:35:02 +0200</pubDate>
</item>
<item>
<title>OFMP Project is proposed to Eclipse</title>
<description><![CDATA['The software that I worked on for almost one year has a chance to become a Eclipse technology project. The details of the proposal can be found at: <a href="http://www.eclipse.org/proposals/ofmp/">http://www.eclipse.org/proposals/ofmp/</a>

If anyone has questions or comments -  welcome to eclipse.technology.ofmp newsgroup.' ]]></description>
<link>http://www.jroller.com/aav/entry/ofmp_project_is_proposed_to</link>
<author>Aleksey Aristov</author>
<pubDate>Fri, 24 Aug 2007 15:10:21 +0200</pubDate>
</item>
<item>
<title>Software Design Creationism</title>
<description><![CDATA['In case you have known me or this web log for a while you probably know that I am all into the evolutionary style of software development. In other words, I am a strong believer in the theory that software design - and software architecture as well - should be tackled step by step, from very easy to (maybe) a little bit more complex, from one requirement to the next. My experience so far has been that almost anything which had to be designed or "architected" could be - or could have been - done in...' ]]></description>
<link>http://jlink.blogger.de/stories/859567/</link>
<author>john.link@gmx.net</author>
<pubDate>Thu, 19 Jul 2007 03:35:02 +0200</pubDate>
</item>
<item>
<title>Moving over to Eclipse Blogs</title>
<description><![CDATA['I'm moving this blog over to the new <a href="http://dev.eclipse.org/blogs/wayne/">Eclipse Blogs site</a>. I've managed to import my old blog into the site, so I should be good to go. I'll apologise in advance for the likely duplication that will occur when the new blog is aggregated into Planet Eclipse.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16553373-8297282813355498378?l=wbeaton.blogspot.com' alt='' /></div>' ]]></description>
<link>http://wbeaton.blogspot.com/2007/06/moving-over-to-eclipse-blogs.html</link>
<author>noreply@blogger.com (Wayne)</author>
<pubDate>Wed, 27 Jun 2007 22:16:35 +0200</pubDate>
</item>
<item>
<title>Moving over to Eclipse Blogs</title>
<description><![CDATA['I'm moving this blog over to the new <a href="http://dev.eclipse.org/blogs/wayne/">Eclipse Blogs site</a>. I've managed to import my old blog into the site, so I should be good to go. I'll apologise in advance for the likely duplication that will occur when the new blog is aggregated into Planet Eclipse.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16553373-8297282813355498378?l=wbeaton.blogspot.com' alt='' /></div>' ]]></description>
<link>http://wbeaton.blogspot.com/2007/06/moving-over-to-eclipse-blogs.html</link>
<author>noreply@blogger.com (Wayne)</author>
<pubDate>Wed, 27 Jun 2007 22:16:35 +0200</pubDate>
</item>
<item>
<title>Wer sind wir?</title>
<description><![CDATA['Vielleicht nicht ganz so offensichtlich: Die Autoren dieses Blogs gehören zu <a href="http://www.it-agile.de">it-agile</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-3465546493911896730?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/05/wer-sind-wir.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Wed, 02 May 2007 20:19:23 +0200</pubDate>
</item>
<item>
<title>Wer sind wir?</title>
<description><![CDATA['Vielleicht nicht ganz so offensichtlich: Die Autoren dieses Blogs gehören zu <a href="http://www.it-agile.de">it-agile</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-3465546493911896730?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/05/wer-sind-wir.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Wed, 02 May 2007 20:19:23 +0200</pubDate>
</item>
<item>
<title>Spontanvortrag Model-View-Presenter von Johannes Link</title>
<description><![CDATA['<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZiI/AAAAAAAAAAM/LUycoM4kjqw/s1600-h/PICT1342.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZiI/AAAAAAAAAAM/LUycoM4kjqw/s320/PICT1342.jpg" alt="" id="BLOGGER_PHOTO_ID_5058004801528817186" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZjI/AAAAAAAAAAU/V7J-pYg5_38/s1600-h/PICT1344.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZjI/AAAAAAAAAAU/V7J-pYg5_38/s320/PICT1344.jpg" alt="" id="BLOGGER_PHOTO_ID_5058004801528817202" border="0" /></a><br />Nachdem Johannes am Montag krank war und den Powerworkshop nicht mit Informationen zum Model-View-Presenter versorgen konnte (und dann am Dienstag in seiner Session auch nicht genug Zeit dafür war), habe ich ihn genötigt, uns doch mal an unserem Flipchart am Stand einen Model-View-Presenter-Vortrag zu halten.<br />Das war sehr interessant, denn mittels Model-View-Presenter schafft man genau die richtigen Abstraktionen, um möglichst große Anteile auch der Oberfläche testbar zu halten und die eigentliche View mit technischen Abhängigkeiten sehr klein und ohne Fachlogik zu gestalten.<br />Nähere Infos zu Model-View-Presenter bei Martin Fowler:<br /><a href="http://www.martinfowler.com/eaaDev/ModelViewPresenter.html">http://www.martinfowler.com/eaaDev/ModelViewPresenter.html</a><br />(Nicht erschrecken, er hat da jetzt 2 Pattern draus gemacht, Johannes hat das vorgestellt, das Fowler jetzt Passive View nennt: <a href="http://www.martinfowler.com/eaaDev/PassiveScreen.html">http://www.martinfowler.com/eaaDev/PassiveScreen.html</a>)<br /><br />Vielen Dank, Johannes!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-2636253845164546355?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/spontanvortrag-model-view-presenter-von.html</link>
<author>noreply@blogger.com (Henning Wolf)</author>
<pubDate>Fri, 27 Apr 2007 09:29:57 +0200</pubDate>
</item>
<item>
<title>Spontanvortrag Model-View-Presenter von Johannes Link</title>
<description><![CDATA['<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZiI/AAAAAAAAAAM/LUycoM4kjqw/s1600-h/PICT1342.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZiI/AAAAAAAAAAM/LUycoM4kjqw/s320/PICT1342.jpg" alt="" id="BLOGGER_PHOTO_ID_5058004801528817186" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZjI/AAAAAAAAAAU/V7J-pYg5_38/s1600-h/PICT1344.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_Em6VzAIssbQ/RjGkkYtYZjI/AAAAAAAAAAU/V7J-pYg5_38/s320/PICT1344.jpg" alt="" id="BLOGGER_PHOTO_ID_5058004801528817202" border="0" /></a><br />Nachdem Johannes am Montag krank war und den Powerworkshop nicht mit Informationen zum Model-View-Presenter versorgen konnte (und dann am Dienstag in seiner Session auch nicht genug Zeit dafür war), habe ich ihn genötigt, uns doch mal an unserem Flipchart am Stand einen Model-View-Presenter-Vortrag zu halten.<br />Das war sehr interessant, denn mittels Model-View-Presenter schafft man genau die richtigen Abstraktionen, um möglichst große Anteile auch der Oberfläche testbar zu halten und die eigentliche View mit technischen Abhängigkeiten sehr klein und ohne Fachlogik zu gestalten.<br />Nähere Infos zu Model-View-Presenter bei Martin Fowler:<br /><a href="http://www.martinfowler.com/eaaDev/ModelViewPresenter.html">http://www.martinfowler.com/eaaDev/ModelViewPresenter.html</a><br />(Nicht erschrecken, er hat da jetzt 2 Pattern draus gemacht, Johannes hat das vorgestellt, das Fowler jetzt Passive View nennt: <a href="http://www.martinfowler.com/eaaDev/PassiveScreen.html">http://www.martinfowler.com/eaaDev/PassiveScreen.html</a>)<br /><br />Vielen Dank, Johannes!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-2636253845164546355?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/spontanvortrag-model-view-presenter-von.html</link>
<author>noreply@blogger.com (Henning Wolf)</author>
<pubDate>Fri, 27 Apr 2007 09:29:57 +0200</pubDate>
</item>
<item>
<title>Selenium</title>
<description><![CDATA['Der Vortragende Neal Ford ist von ThoughtWorks, der Vortrag auf englisch.<br /><br />Selenium ist ein funktionales Open-Source Testtool für Webanwendungen, geschrieben in JavaScript.<br /><br />Man schreibt die Tests ähnlich wie bei FIT-Action-Fixtures auf. Ausgeführt wird der Test im Browser. Dabei wird alles mögliche unterstützt, z.B. auch Popup-Fenster.<br /><br />Im Test muss man natürlich die Elemente auf der HTML-Seite adressieren. Das geht über IDs und Namen und den DOM. Letzteres braucht man vor allem für Elemente, denen man keine IDs gibt, wie z.B. Ausgabetabellen.<br /><br />Es gibt ein Firefox-Plugin namens XPather: Damit clickt man auf ein Element auf der Seite und bekommt den DOM-Pfad angezeigt, den man dann in den Test einpasten kann.<br /><br />Bei der String-Prüfung werden auch Wildcards und Regexps unterstützt.<br /><br />Das Adressieren der Elemente und die Prüfung der Seiteninhalte ist also sehr flexibel. <br />AJAX geht auch.<br /><br />Es gibt ein paar Geschichten, die doch nicht gehen: z.B. wenn man in Java-Script als Reaktion auf onload einen Dialog öffnet. File-Upload funktioniert nur in Firefox.<br /><br />Variablen werden unterstützt. So kann man einen Wert, den die Anwendung generiert, in einer Variablen starten und woanders wieder einfügen. Variablenwerte kann man auch durch JavaScript berechnen lassen.<br /><br />Der Referent rät dazu, hart-codierte Werte in Akzeptanztests zu vermeiden. Ich habe aber nicht verstanden, wie er die umgeht.<br /><br />Selenium lässt sich in automatic-builds integrieren. Dazu muss man anscheinend nur den Browser mit der URL des Tests aufrufen. Ich bin nicht ganz sicher, aber es scheint so, dass Selenium das Ergebnis dann an den Integration-Server POSTet.<br /><br />Normalerweise muss man die Anwendung zum Testen serverseitig mit dem Browser-Bot starten. Mit Remote-Control-Selenium braucht man das nicht und kann so Seiten testen, die dafür nicht vorbereitet sind (z.B. Google). Das läuft über einen Proxy-Server. Damit kann man nicht nur die Tests ausführen, sondern auch über die Kommdozeile die Web-Anwendung fernzusteuern. Also kann man die Selenium-Tests auch als JUnit-Tests oder in Ruby oder sonstwas schreiben. Jetzt zeigt er einen Selenium-Test in JUnit. Das sieht eher unübersichtlich aus - die HTML-Version des Tests ist übersichtlicher. Vielleicht helfen beim JUnit-Test auch ein paar Extract-Methods.<br /><br />"Web Developer Toolbar"-Plugin für Firefox und Internet-Explorer ist nützlich.<br /><br />Es gibt eine Selenium-IDE als Firefox-Plugin. Damit kann man Tests aufzeichnen und wieder ausführen. In dem Test gibt es natürlich kaum Asserts. Die fehlenden Asserts kann man direkt in der IDE ergänzen. Da gibt es auch Auto-Completion. Den aufgezeichneten Test kann man als HTML-Test oder JUnit-Test oder, oder, oder exportieren.<br /><br />Jetzt wird gezeigt, wie man eine Google-Maps-artige AJAX-Anwendung testet - Selenium kann alles testen, wo man draufclicken kann. Beeindruckend!<br /><br />So gehen sie bei Thought-Works vor: Wenn eine Story implementiert ist, zeichnet der Business-Expert den Durchlauf durch die Anwendung auf und die Entwickler ergänzen fehlende Asserts. <br /><br />In Kürze soll eine Integration mit FIT kommen.<br /><br />Es wird gefragt, wie es mit der Wartbarkeit der Tests steht: Neal exportiert die Tests nach Java bzw. Ruby und bearbeitet sie dort weiter. Ohne diese "Aufarbeitung" sind die Tests sehr fragil.<br /><br />Man kann HTML und JavaScript testen, aber kein Flash, ActiveX etc. iFrames gehen aber. Für HTTPS muss man das Zertifikat einmalig importieren.<br /><br />Load-Testing geht (noch) nicht. "We kill only one Mercury product at a time."<br /><br />(Der Referent benutzt nicht nur einen Mac, sondern auch IntelliJ - sonst sieht man ja immer nur Eclipse.)<br /><br /><span style="font-weight:bold;">Fazit</span><br />Selenium ist sehr mächtig. Das bezahlt man mit Komplexität. Die Tests, die man als Web-Seiten beschreibt wirken fast wie eine eigene Programmiersprache. Ich kann mir nicht vorstellen, dass Anwender solche Tests selber schreiben. Sie können sie aufzeichnen, aber anschließend nicht mehr warten / verstehen. <br /><br />Für Tests, die die Entwickler schreiben, ist Selenium sicher interessant.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-7271183699659329516?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/selenium.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 16:55:05 +0200</pubDate>
</item>
<item>
<title>Selenium</title>
<description><![CDATA['Der Vortragende Neal Ford ist von ThoughtWorks, der Vortrag auf englisch.<br /><br />Selenium ist ein funktionales Open-Source Testtool für Webanwendungen, geschrieben in JavaScript.<br /><br />Man schreibt die Tests ähnlich wie bei FIT-Action-Fixtures auf. Ausgeführt wird der Test im Browser. Dabei wird alles mögliche unterstützt, z.B. auch Popup-Fenster.<br /><br />Im Test muss man natürlich die Elemente auf der HTML-Seite adressieren. Das geht über IDs und Namen und den DOM. Letzteres braucht man vor allem für Elemente, denen man keine IDs gibt, wie z.B. Ausgabetabellen.<br /><br />Es gibt ein Firefox-Plugin namens XPather: Damit clickt man auf ein Element auf der Seite und bekommt den DOM-Pfad angezeigt, den man dann in den Test einpasten kann.<br /><br />Bei der String-Prüfung werden auch Wildcards und Regexps unterstützt.<br /><br />Das Adressieren der Elemente und die Prüfung der Seiteninhalte ist also sehr flexibel. <br />AJAX geht auch.<br /><br />Es gibt ein paar Geschichten, die doch nicht gehen: z.B. wenn man in Java-Script als Reaktion auf onload einen Dialog öffnet. File-Upload funktioniert nur in Firefox.<br /><br />Variablen werden unterstützt. So kann man einen Wert, den die Anwendung generiert, in einer Variablen starten und woanders wieder einfügen. Variablenwerte kann man auch durch JavaScript berechnen lassen.<br /><br />Der Referent rät dazu, hart-codierte Werte in Akzeptanztests zu vermeiden. Ich habe aber nicht verstanden, wie er die umgeht.<br /><br />Selenium lässt sich in automatic-builds integrieren. Dazu muss man anscheinend nur den Browser mit der URL des Tests aufrufen. Ich bin nicht ganz sicher, aber es scheint so, dass Selenium das Ergebnis dann an den Integration-Server POSTet.<br /><br />Normalerweise muss man die Anwendung zum Testen serverseitig mit dem Browser-Bot starten. Mit Remote-Control-Selenium braucht man das nicht und kann so Seiten testen, die dafür nicht vorbereitet sind (z.B. Google). Das läuft über einen Proxy-Server. Damit kann man nicht nur die Tests ausführen, sondern auch über die Kommdozeile die Web-Anwendung fernzusteuern. Also kann man die Selenium-Tests auch als JUnit-Tests oder in Ruby oder sonstwas schreiben. Jetzt zeigt er einen Selenium-Test in JUnit. Das sieht eher unübersichtlich aus - die HTML-Version des Tests ist übersichtlicher. Vielleicht helfen beim JUnit-Test auch ein paar Extract-Methods.<br /><br />"Web Developer Toolbar"-Plugin für Firefox und Internet-Explorer ist nützlich.<br /><br />Es gibt eine Selenium-IDE als Firefox-Plugin. Damit kann man Tests aufzeichnen und wieder ausführen. In dem Test gibt es natürlich kaum Asserts. Die fehlenden Asserts kann man direkt in der IDE ergänzen. Da gibt es auch Auto-Completion. Den aufgezeichneten Test kann man als HTML-Test oder JUnit-Test oder, oder, oder exportieren.<br /><br />Jetzt wird gezeigt, wie man eine Google-Maps-artige AJAX-Anwendung testet - Selenium kann alles testen, wo man draufclicken kann. Beeindruckend!<br /><br />So gehen sie bei Thought-Works vor: Wenn eine Story implementiert ist, zeichnet der Business-Expert den Durchlauf durch die Anwendung auf und die Entwickler ergänzen fehlende Asserts. <br /><br />In Kürze soll eine Integration mit FIT kommen.<br /><br />Es wird gefragt, wie es mit der Wartbarkeit der Tests steht: Neal exportiert die Tests nach Java bzw. Ruby und bearbeitet sie dort weiter. Ohne diese "Aufarbeitung" sind die Tests sehr fragil.<br /><br />Man kann HTML und JavaScript testen, aber kein Flash, ActiveX etc. iFrames gehen aber. Für HTTPS muss man das Zertifikat einmalig importieren.<br /><br />Load-Testing geht (noch) nicht. "We kill only one Mercury product at a time."<br /><br />(Der Referent benutzt nicht nur einen Mac, sondern auch IntelliJ - sonst sieht man ja immer nur Eclipse.)<br /><br /><span style="font-weight:bold;">Fazit</span><br />Selenium ist sehr mächtig. Das bezahlt man mit Komplexität. Die Tests, die man als Web-Seiten beschreibt wirken fast wie eine eigene Programmiersprache. Ich kann mir nicht vorstellen, dass Anwender solche Tests selber schreiben. Sie können sie aufzeichnen, aber anschließend nicht mehr warten / verstehen. <br /><br />Für Tests, die die Entwickler schreiben, ist Selenium sicher interessant.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-7271183699659329516?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/selenium.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 16:55:05 +0200</pubDate>
</item>
<item>
<title>Angriffe auf Webanwendungen</title>
<description><![CDATA['Jetzt mache ich mal Werbung für die Konkurrenz: Unserem Stand gegenüber steht "Optima bit". Die machen mehrfach am Tag Live-Vorführungen, wie man Web-Anwendungen angreifen kann mit SQL-Injection und Cross-Site-Scripting. Die Vorführung ist kurz, knackig, leicht verständlich und etwas beunruhigend.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-725302480288310799?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/angriffe-auf-webanwendungen.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 13:26:19 +0200</pubDate>
</item>
<item>
<title>Angriffe auf Webanwendungen</title>
<description><![CDATA['Jetzt mache ich mal Werbung für die Konkurrenz: Unserem Stand gegenüber steht "Optima bit". Die machen mehrfach am Tag Live-Vorführungen, wie man Web-Anwendungen angreifen kann mit SQL-Injection und Cross-Site-Scripting. Die Vorführung ist kurz, knackig, leicht verständlich und etwas beunruhigend.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-725302480288310799?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/angriffe-auf-webanwendungen.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 13:26:19 +0200</pubDate>
</item>
<item>
<title>XP-Live-Demo</title>
<description><![CDATA['it-agile hat in der XP-Live-Demo in einer Mischung aus Vortrag und "Theater" ca. 100 Teilnehmern vorgeführt, wie XP funktioniert. Matthias Lübken spielte den Kunden, Robert Beeger und Sebastian Sanitz die testinfizierten pair-programmierenden Entwickler. Stefan Roock moderierte.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-431544803966757379?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/xp-live-demo_26.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 10:54:52 +0200</pubDate>
</item>
<item>
<title>XP-Live-Demo</title>
<description><![CDATA['it-agile hat in der XP-Live-Demo in einer Mischung aus Vortrag und "Theater" ca. 100 Teilnehmern vorgeführt, wie XP funktioniert. Matthias Lübken spielte den Kunden, Robert Beeger und Sebastian Sanitz die testinfizierten pair-programmierenden Entwickler. Stefan Roock moderierte.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-431544803966757379?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/xp-live-demo_26.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 10:54:52 +0200</pubDate>
</item>
<item>
<title>XP-Live-Demo</title>
<description><![CDATA['it-agile hat in der XP-Live-Demo in einer Mischung aus Vortrag und "Theater" ca. 100 Teilnehmern vorgeführt, wie XP funktioniert. Matthias Lübken spielte den Kunden, Robert Beeger und Sebastian Sanitz die testinfizierten pair-programmierenden Entwickler. Stefan Roock moderierte.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-5823094115376091093?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/xp-live-demo.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 10:54:45 +0200</pubDate>
</item>
<item>
<title>XP-Live-Demo</title>
<description><![CDATA['it-agile hat in der XP-Live-Demo in einer Mischung aus Vortrag und "Theater" ca. 100 Teilnehmern vorgeführt, wie XP funktioniert. Matthias Lübken spielte den Kunden, Robert Beeger und Sebastian Sanitz die testinfizierten pair-programmierenden Entwickler. Stefan Roock moderierte.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-5823094115376091093?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/xp-live-demo.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 10:54:45 +0200</pubDate>
</item>
<item>
<title>BOF. Die Zukunft der Programmiersprachen</title>
<description><![CDATA['Der Raum war ausgerichtet auf eine Art Panel-Diskussion - vorne Stühle für die Speaker und hinten Stühle für die Zuschauer. Markus Völter meinte, ein BOF sei anders. Mehr so, dass Speaker und Teilnehmer zusammen im Kreis sitzen und miteinander diskutieren.<br />Dazu waren aber definitiv zu viele Leute (100?) da. Also hat Markus vorne Zettel mit Thesen hingelegt. Wir sind dann einmal nach vorne gegangen, haben uns ein Thesenpapier genommen und das dann "vertreten". Natürlich waren die Zettel nur die Startpunkte für die Diskussion. <br />Die Diskussion selbst war lebhaft, aber dann doch auf wenige beschränkt. Manchmal driftete sie vom eigentlichen Thema ab, aber das haben die Speaker dann wieder eingefangen.<br />Zuerst ging es um das Thema AOP. Ca. die Hälfte der Anwesenden nutzt AOP. Die meisten aber nur dadurch, dass sie Spring einsetzen. Nur ein kleiner Teil benutzt AspectJ. Niemand benutzt AOP für was anderes als die üblichen rein technischen Beispiele Logging, Tracing, Transaktionshandling und Security. Die meisten finden AOP eine interessante Technologie, hatten aber im Ansatz eine Vorstellung davon, wie man funktionale Aspekte definieren soll. Ein Teil der Teilnehmer fand AOP in Gesamtgröße a la AspectJ auch viel zu kompliziert.<br />Bei der Komplexität fanden einige, dass Java zu kompliziert wird. Dierk König (sinngemäß): "Für mich hat JDK 1.4 gereicht. Java 5 ist für mich zu kompliziert." Es gab eine ziemliche Einigkeit darüber, dass die Zukunft der Programmiersprachen in Einfachheit liegen müsste. Dabei gingen die Meinungen auseinander, ob man ein einfacheres Java braucht, eher was Dynamisches a la Ruby oder Groovy oder gar etwas Funktionales a la Scala. Dabei gab es ein erstaunliches Interesse an funktionaler Programmierung. Das rekursive Programmieren sei vielleicht am Anfang gewöhnungsbedürftig, aber das sei OO auch. Außerdem bieten funktionale Programmierung den Vorteil, dass man das Programm transparent parallel ausführen kann. Das ist vor der Diskussion um Multi-Core-Prozessoren und ihre Auswirkungen auf die Programmierung natürlich ein echtes Argument - jedenfalls, wenn man glaubt, dass man in seinen Programmen die Multi-Core-Fähigkeit ausnutzen muss und nicht sowieso durch die Datenbank ausgebremst wird.<br />Dann gab es noch eine Diskussion um Closures. Alle wollen Closures. Dierk sagt, dass noch nicht raus ist, ob und wenn ja in welcher Form Closures in Java 7 enthalten werden. Er glaubt, dass man in Java über anonyme Inner-Classes letztlich nicht herauskommen wird.<br />Insgesamt war es eine interessante Session.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-2543519994823177313?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/bof-die-zukunft-der-programmiersprachen.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 09:27:15 +0200</pubDate>
</item>
<item>
<title>BOF. Die Zukunft der Programmiersprachen</title>
<description><![CDATA['Der Raum war ausgerichtet auf eine Art Panel-Diskussion - vorne Stühle für die Speaker und hinten Stühle für die Zuschauer. Markus Völter meinte, ein BOF sei anders. Mehr so, dass Speaker und Teilnehmer zusammen im Kreis sitzen und miteinander diskutieren.<br />Dazu waren aber definitiv zu viele Leute (100?) da. Also hat Markus vorne Zettel mit Thesen hingelegt. Wir sind dann einmal nach vorne gegangen, haben uns ein Thesenpapier genommen und das dann "vertreten". Natürlich waren die Zettel nur die Startpunkte für die Diskussion. <br />Die Diskussion selbst war lebhaft, aber dann doch auf wenige beschränkt. Manchmal driftete sie vom eigentlichen Thema ab, aber das haben die Speaker dann wieder eingefangen.<br />Zuerst ging es um das Thema AOP. Ca. die Hälfte der Anwesenden nutzt AOP. Die meisten aber nur dadurch, dass sie Spring einsetzen. Nur ein kleiner Teil benutzt AspectJ. Niemand benutzt AOP für was anderes als die üblichen rein technischen Beispiele Logging, Tracing, Transaktionshandling und Security. Die meisten finden AOP eine interessante Technologie, hatten aber im Ansatz eine Vorstellung davon, wie man funktionale Aspekte definieren soll. Ein Teil der Teilnehmer fand AOP in Gesamtgröße a la AspectJ auch viel zu kompliziert.<br />Bei der Komplexität fanden einige, dass Java zu kompliziert wird. Dierk König (sinngemäß): "Für mich hat JDK 1.4 gereicht. Java 5 ist für mich zu kompliziert." Es gab eine ziemliche Einigkeit darüber, dass die Zukunft der Programmiersprachen in Einfachheit liegen müsste. Dabei gingen die Meinungen auseinander, ob man ein einfacheres Java braucht, eher was Dynamisches a la Ruby oder Groovy oder gar etwas Funktionales a la Scala. Dabei gab es ein erstaunliches Interesse an funktionaler Programmierung. Das rekursive Programmieren sei vielleicht am Anfang gewöhnungsbedürftig, aber das sei OO auch. Außerdem bieten funktionale Programmierung den Vorteil, dass man das Programm transparent parallel ausführen kann. Das ist vor der Diskussion um Multi-Core-Prozessoren und ihre Auswirkungen auf die Programmierung natürlich ein echtes Argument - jedenfalls, wenn man glaubt, dass man in seinen Programmen die Multi-Core-Fähigkeit ausnutzen muss und nicht sowieso durch die Datenbank ausgebremst wird.<br />Dann gab es noch eine Diskussion um Closures. Alle wollen Closures. Dierk sagt, dass noch nicht raus ist, ob und wenn ja in welcher Form Closures in Java 7 enthalten werden. Er glaubt, dass man in Java über anonyme Inner-Classes letztlich nicht herauskommen wird.<br />Insgesamt war es eine interessante Session.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-2543519994823177313?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/bof-die-zukunft-der-programmiersprachen.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Thu, 26 Apr 2007 09:27:15 +0200</pubDate>
</item>
<item>
<title>Being at JAX07</title>
<description><![CDATA['I have been at <a href="http://www.jax.de">JAX </a>conference this week giving a session about GlassFish v2 (slides to be posted soon) and doing booth duty. It was fun staffing the booth together with <a href="http://blogs.sun.com/roumen/">Roman Strobl</a> and demoing NetBeans as well as GlassFish. We were really surprised by the positive feedback we got from visitors and many adoption statements for both NB and GF. NetBeans also was honoured with the JAX innovation award  from the audience for its Matisse GUI Builder!<br /><br />&nbsp;<br /><br /><br /><br /><br /><br /><br /><br /><p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/being_at_jax07</link>
<author>Daniel Adelhardt</author>
<pubDate>Thu, 26 Apr 2007 05:48:44 +0200</pubDate>
</item>
<item>
<title>BOF: Rubik`s Wuerfel - Marketing fuer Softwareunternehmen</title>
<description><![CDATA['Der Speaker, Ashley Steele, kündigt an, er will seine Session wirklich als BOF gestalten, also nicht frontal, sondern interaktiv mit vielen Nachfragen und Erfahrungsaustausch.<br /><br />So wie der Rubik&acute;s-Würfel drei Dimensionen hat, hat auch das Marketing drei Dimensionen:<ol><li>Zielgruppe: Wem möchte ich etwas sagen?<br /></li><li>Inhalt: Was möchte ich den Leuten sagen?</li><li>Methode: Wie möchte ich den Leuten das sagen?    </li></ol>Zu 1): Man muss die Probleme der Zielgruppe verstehen, nicht seine eigenen Leistungen in den Vordergrund stellen. Die Zielgruppe lässt sich segmentieren nach a) business - technisch, b) Größe des Unternehmens, c) Marktsegment - was stellt der Kunde her?<br /><br />Zu 2): Es gibt 4 Phasen, um den Kunden zu gewinnen: a) Generate awareness (blogs, events, news), b) Engage (read a whitepaper), c) Try, d) Convince User. Man muss den Kunden an die Hand nehmen und ihn von Schritt zu Schritt führen. Es muss klar sein, was der Kunde tun soll, und was man ihm verspricht, muss man auch einhalten können.<br /><br />Zu 3): Man muss die richtigen Kanäle für seine Zielgruppe aussuchen: Blogs für Entwickler, aber nicht für Manager. Man muss Mechanismen haben, um zu messen, ob meine Bemühungen Erfolg haben: Wie viele Downloads habe ich, wie viele Lizenzen verkauft usw. Diese Messungen müssen *vorher* in die Planung einbezogen werden.<br /><br />Als Fazit wird gezogen: Marketing muss RELEVANT, RELEVANT, RELEVANT sein. Wenn ein CEO auf eine Entwicklerseite gelangt, dann ist er innerhalb von Sekunden wieder weg. Man sollte aber nicht versuchen, alle potenziellen Kunden auf einmal anzusprechen, sondern sich lieber auf die wichtigsten beschränken.<br /><br />Bei der Fragerunde ergibt sich ein interessanter Punkt: Alle auf der JAX wissen, warum Techologie A besser ist als Technologie B. Aber deswegen darf man auf keinen Fall darauf schließen, dass das für andere Gruppen (z.B. CEOs) auch relevant ist. Unter Umständen muss man denen Sachen erklären, die man für völlig selbstverständlich hält.<br /><br />Inhaltlich war es für mich nichts relolutionär Neues, aber es schadet natürlich nichts, die wichtigen Dinge immer wieder zu hören. Warum das Ding BOF hierß und was der Unterschied zu einer normalen Session war, bleibt mir verborgen. Aber macht ja nichts.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-6217551613181509475?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/bof-rubiks-wuerfel-marketing-fuer.html</link>
<author>noreply@blogger.com (Arne)</author>
<pubDate>Wed, 25 Apr 2007 21:22:28 +0200</pubDate>
</item>
<item>
<title>BOF: Rubik`s Wuerfel - Marketing fuer Softwareunternehmen</title>
<description><![CDATA['Der Speaker, Ashley Steele, kündigt an, er will seine Session wirklich als BOF gestalten, also nicht frontal, sondern interaktiv mit vielen Nachfragen und Erfahrungsaustausch.<br /><br />So wie der Rubik&acute;s-Würfel drei Dimensionen hat, hat auch das Marketing drei Dimensionen:<ol><li>Zielgruppe: Wem möchte ich etwas sagen?<br /></li><li>Inhalt: Was möchte ich den Leuten sagen?</li><li>Methode: Wie möchte ich den Leuten das sagen?    </li></ol>Zu 1): Man muss die Probleme der Zielgruppe verstehen, nicht seine eigenen Leistungen in den Vordergrund stellen. Die Zielgruppe lässt sich segmentieren nach a) business - technisch, b) Größe des Unternehmens, c) Marktsegment - was stellt der Kunde her?<br /><br />Zu 2): Es gibt 4 Phasen, um den Kunden zu gewinnen: a) Generate awareness (blogs, events, news), b) Engage (read a whitepaper), c) Try, d) Convince User. Man muss den Kunden an die Hand nehmen und ihn von Schritt zu Schritt führen. Es muss klar sein, was der Kunde tun soll, und was man ihm verspricht, muss man auch einhalten können.<br /><br />Zu 3): Man muss die richtigen Kanäle für seine Zielgruppe aussuchen: Blogs für Entwickler, aber nicht für Manager. Man muss Mechanismen haben, um zu messen, ob meine Bemühungen Erfolg haben: Wie viele Downloads habe ich, wie viele Lizenzen verkauft usw. Diese Messungen müssen *vorher* in die Planung einbezogen werden.<br /><br />Als Fazit wird gezogen: Marketing muss RELEVANT, RELEVANT, RELEVANT sein. Wenn ein CEO auf eine Entwicklerseite gelangt, dann ist er innerhalb von Sekunden wieder weg. Man sollte aber nicht versuchen, alle potenziellen Kunden auf einmal anzusprechen, sondern sich lieber auf die wichtigsten beschränken.<br /><br />Bei der Fragerunde ergibt sich ein interessanter Punkt: Alle auf der JAX wissen, warum Techologie A besser ist als Technologie B. Aber deswegen darf man auf keinen Fall darauf schließen, dass das für andere Gruppen (z.B. CEOs) auch relevant ist. Unter Umständen muss man denen Sachen erklären, die man für völlig selbstverständlich hält.<br /><br />Inhaltlich war es für mich nichts relolutionär Neues, aber es schadet natürlich nichts, die wichtigen Dinge immer wieder zu hören. Warum das Ding BOF hierß und was der Unterschied zu einer normalen Session war, bleibt mir verborgen. Aber macht ja nichts.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-6217551613181509475?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/bof-rubiks-wuerfel-marketing-fuer.html</link>
<author>noreply@blogger.com (Arne)</author>
<pubDate>Wed, 25 Apr 2007 21:22:28 +0200</pubDate>
</item>
<item>
<title>Concurrency, past and present</title>
<description><![CDATA['Ein paar Gedanken zu <a href="http://jax.de/konferenzen/jax07/overview_keynotes.php#session-5414">Concurrency, past and present</a> von <a href="http://jax.de/konferenzen/jax07/overview_speaker.php#2359-goetz-brian">Brian Goetz</a>:<br />Auf der JAX höre ich das nun zum zweiten mal: Als Java-Entwickler muss man sich in Zukunft auf Nebenläufigkeit einstellen. Auch wenn einige Kollegen noch nicht so richtig davon überzeugt sind ("So lange mich die Datenbank ausbremst, brauche ich mir um Threads keine Gedanken zu machen"), glaube ich dass das Thema sehr wichtig wird. In zwei Jahren wird JEDER mehrere Prozessoren in seinem Rechner haben. Und wenn dann  Anwendungen anfangen diese Prozessoren zu nutzen, werden wir uns sehr schnell an die Geschwindigkeit gewöhnen. Single-Threaded Java-Anwendungen werden sich anfühlen wie die ersten Java-Anwendungen auf dem Desktop: Laaaaaangsam.<br /><br />Brian hat zum Schluss noch ein paar Tipps zu Nebenläufigkeit gegeben:<br /><ul><li>Minimize ammout of code that has to deal with concurrency</li><li>use immutable objects wherever you can</li><li>sometimes it's cheaper to share</li></ul>Hmm. Das wird sicherlich noch die ein oder andere Architektur-Diskussion nach sich ziehen.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-7176858084035899323?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/concurrency-past-and-present.html</link>
<author>noreply@blogger.com (Matthias Luebken)</author>
<pubDate>Wed, 25 Apr 2007 20:32:41 +0200</pubDate>
</item>
<item>
<title>Concurrency, past and present</title>
<description><![CDATA['Ein paar Gedanken zu <a href="http://jax.de/konferenzen/jax07/overview_keynotes.php#session-5414">Concurrency, past and present</a> von <a href="http://jax.de/konferenzen/jax07/overview_speaker.php#2359-goetz-brian">Brian Goetz</a>:<br />Auf der JAX höre ich das nun zum zweiten mal: Als Java-Entwickler muss man sich in Zukunft auf Nebenläufigkeit einstellen. Auch wenn einige Kollegen noch nicht so richtig davon überzeugt sind ("So lange mich die Datenbank ausbremst, brauche ich mir um Threads keine Gedanken zu machen"), glaube ich dass das Thema sehr wichtig wird. In zwei Jahren wird JEDER mehrere Prozessoren in seinem Rechner haben. Und wenn dann  Anwendungen anfangen diese Prozessoren zu nutzen, werden wir uns sehr schnell an die Geschwindigkeit gewöhnen. Single-Threaded Java-Anwendungen werden sich anfühlen wie die ersten Java-Anwendungen auf dem Desktop: Laaaaaangsam.<br /><br />Brian hat zum Schluss noch ein paar Tipps zu Nebenläufigkeit gegeben:<br /><ul><li>Minimize ammout of code that has to deal with concurrency</li><li>use immutable objects wherever you can</li><li>sometimes it's cheaper to share</li></ul>Hmm. Das wird sicherlich noch die ein oder andere Architektur-Diskussion nach sich ziehen.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-7176858084035899323?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/concurrency-past-and-present.html</link>
<author>noreply@blogger.com (Matthias Luebken)</author>
<pubDate>Wed, 25 Apr 2007 20:32:41 +0200</pubDate>
</item>
<item>
<title>Der Jax-Innovation-Award...</title>
<description><![CDATA['...geht an Groovy!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-8267789431340206850?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/der-jax-innovation-award.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Wed, 25 Apr 2007 19:35:18 +0200</pubDate>
</item>
<item>
<title>Der Jax-Innovation-Award...</title>
<description><![CDATA['...geht an Groovy!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-8267789431340206850?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/der-jax-innovation-award.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Wed, 25 Apr 2007 19:35:18 +0200</pubDate>
</item>
<item>
<title>RSS-Feed für die Kommentare dieses Blogs...</title>
<description><![CDATA['findet sich hier: <a href="http://jax2007blog.it-agile.de/feeds/comments/default">http://jax2007blog.it-agile.de/feeds/comments/default</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-7045217323245862955?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/rss-feed-fr-die-kommentare-dieses-blogs_25.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Wed, 25 Apr 2007 18:24:41 +0200</pubDate>
</item>
<item>
<title>RSS-Feed für die Kommentare dieses Blogs...</title>
<description><![CDATA['findet sich hier: <a href="http://jax2007blog.it-agile.de/feeds/comments/default">http://jax2007blog.it-agile.de/feeds/comments/default</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343437381734212642-7045217323245862955?l=jax2007blog.it-agile.de' alt='' /></div>' ]]></description>
<link>http://jax2007blog.it-agile.de/2007/04/rss-feed-fr-die-kommentare-dieses-blogs_25.html</link>
<author>noreply@blogger.com (Stefan Roock)</author>
<pubDate>Wed, 25 Apr 2007 18:24:41 +0200</pubDate>
</item>
<item>
<title>Clustering Web Applications with GlassFish V2</title>
<description><![CDATA['Here is a short tutorial on how to make your web apps highly available with <a href="http://glassfish.dev.java.net">GlassFish </a>V2 and it's new <a href="http://wiki.glassfish.java.net/gfwiki/attach/OnePagersOrFunctionalSpecs/memory-replication-one-pager.html">in memory replication</a> features.<br /><br /><b>Step 1: Setup a GlassFish V2 domain:</b><br /><ul><li>Download GlassFish V2 beta2 (eg build 41c) from <a href="http://glassfish.dev.java.net/downloads">here</a><br /></li><li>Execute java -jar glassfish-installer-v2-<buildnumber>.jar</li><li>As we will have to use the cluster profile edit setup-cluster.xml as needed. If the default ports and passwords are ok for you there is no need to change anything. (I assume default settings for the next steps)<br /></li><li>Execute ant -f setup-cluster.xml and a GlassFish domain with its domain administration server is created for you.</li><li>Start your domain admin server by executing asadmin start-domain --user admin and verify that its up and running by accessing the admin gui at http:<servername>:4848</li><li>Next you have to create a node-agent. Node agents are responsible for communication between you domain admin server and server instances or clusters. You create a node agent be executing asadmin create-node-agent <nodeagentname>. If you don't specify a node agent name the hostname if your system will be used. If you create your node agent on a different server you also have to specify host/port information for your domain admin server by giving --host <hostname> --port <portnumber> to asadmin</li><li>Fire up your node agent by asadmin start-node-agent <nodeagentname></li><li>Next look at your admin console. Your node agent should show up as <i>running</i>.</li></ul><div align="center"><img src="https://blogs.oracle.com/dadelhardt/resource/gfnodeagent.png" height="329" width="580" /><br /><div align="left"><br /><b>Step 2: Setup a GlassFish V2 cluster<br /></b><br />Setting up a cluster means that we are going to define a cluster configuration that is shared among multiple instances. To create a cluster proceed this way in the admin gui:<br /><ul><li>Select Clusters in the navigation tree</li><li>Click on new to create a cluster, give your cluster a name, select default config and add cluster nodes (at least 2 for now). For each cluster node select your node agents representing the machines where your cluster instances shall run. The following picture shows my test setup.<br /> <img src="https://blogs.oracle.com/dadelhardt/resource/cluster.png" height="506" width="754" /><br /></li></ul><ul><li>Click on OK and your cluster and its instances will be created (will take some time depending on your machine).</li><li>On the next page that will show up in the admin gui you can select the checkbox left to the clustername and click on the <i>Start Cluster</i> button to start up your cluster.</li><li>Now your cluster should be up and running and ready for application deployment!</li></ul>If you prefer cluster creation using command line tools you can do it with asadmin this way:<br /><ul><li><glassfish-install-dir>/bin/asadmin create-cluster --user admin <clustername></li><li><glassfish-install-dir>/bin/asadmin create-instance --user admin --nodeagent <nodeagentname> --cluster <clustername> <instancename1></li><li><glassfish-install-dir>/bin/asadmin create-instance --user admin --nodeagent <nodeagentname> --cluster <clustername> <instancename2></li><li><glassfish-install-dir>/bin/asadmin start-cluster <clustername><br /></li></ul><br /><b>Step 3: Deploy an application to your cluster</b><br /><br />Now we can finally deploy an application to our new cluster environment. In order for a web application to make use of session failover in a cluster some preconditions must be met:<br /><ul><li>The group membership service in your cluster must be running as it provides some hearbeat information about the health of your instances. Normally this service is enabled by default. You can doublecheck by selecting your cluster and look at the general tab - the checkbox Heartbeat should show enabled.</li><li>  The deployment descriptor of your web app - web-inf/web.xml must contain the <distributable/> element: <br /><pre><span id="propertyForm:propertyContentPage:descriptorText">  <web-app version="2.5" ....... >  <br />  <display-name>myclusterable webapp</display-name><br />  <distributable/></span></pre></li><li><span id="propertyForm:propertyContentPage:descriptorText">And also your application must provide a web-inf/sun-web.xml that contains properties for the session manager: </span><br /><pre><span id="propertyForm:propertyContentPage:descriptorText"><?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 <br />Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd"><br /><br /><br /><sun-web-app><br />  <session-config><br />    <session-manager persistence-type="<b>replicated</b>"><br />      <manager-properties><br />        <property name="persistenceFrequency" value="<b>web-method</b>"/><br />      </manager-properties><br />      <store-properties><br />        <property name="persistenceScope" value="<b>session</b>"/><br />      </store-properties><br />    </session-manager><br />    <session-properties/><br />    <cookie-properties/><br />  </session-config></span></pre></li><li>In aboves extract of a sun-web.xml the session manager has to specify persistence-type="replicated" to use the in memory replication of your cluster. The persistenceFrequency property with value web-method means that after each request the session gets replicated. A different setting would be time-based replication. The persistenceScope property with a value of session means that on each request the whole HTTPSession gets replicated. Other potential settings are modified-session and modified-attribute.</li><li>If you have changed your apps web.xml and sun-web.xml you are ready to deploy to your cluster. In the admin gui you can simply select your cluster as target. Usually only "server" is shown as selected Target which means that its deployed to the domain admin server. Just select your cluster and add it to the targets list.</li><li>Before you click on the OK button for deployment make sure to select the <b>Availability Enabled</b> checkbox for your application!<br /> </li><pre></pre><img src="https://blogs.oracle.com/dadelhardt/resource/wardeploy.png" /><pre></pre><li>If things went fine the server.log of your instances should have an entry like this: <pre>[#|2007-04-17T10:31:11.255+0200|INFO|sun-appserver9.1|javax.enterprise.system.container.web|<br />_ThreadID=24;_ThreadName=RMI TCP connection(19)-<ip-address>/clusterjsp;replicated; <br />web-method;session;|WEB0130: Enabling ha-based persistence for web module [/clusterjsp]'s  <br />sessions: persistence-type = [replicated] / persistenceFrequency = [web-method] / <br />persistenceScope = [session]|#]</pre></li></ul>Now you can access your application on both of your cluster instances by directly pointing your browser to each server instances. (eg <host1>:<httpport> and <host2>:<httpport>). If your application changes attributes in the HTTPSession you should see those changes getting replicated to the other server in your cluster. <br /><br />Thats all for now about clustering with session failover for GlassFish V2. Of course you also want to use load balancing in front of your cluster. Do do this you can use either the <a href="https://glassfish.dev.java.net/javaee5/build/GlassFish_LB_Cluster.html">Sun Web Server with GlassFish</a> or use <a href="http://blogs.sun.com/dadelhardt/entry/loadbalancing_with_mod_jk_and_glassfish">Apache+mod_jk with GlassFish V2</a>.<br /><br />

Update:  Shreedhar (check his excellent blog about <a href="http://blogs.sun.com/shreedhar/entry/shoal_clustering_101">Shoal</a>) pointed out that 2 things should be considered when using in memory replication: 
<ul>
<li>The cluster instances should be located on the same subnet</li>
<li>Clock times on all machines in the cluster should be time syncd to be as close as possible</li>
</ul>
<br /></div></div><br /><br /><p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/clustering_web_applications_with_glassfish1</link>
<author>Daniel Adelhardt</author>
<pubDate>Tue, 17 Apr 2007 03:45:51 +0200</pubDate>
</item>
<item>
<title>Standalone IIOP Clients with GlassFish</title>
<description><![CDATA['I often get asked how a standalone client can be used to connect to EJBs deployed on GlassFish or Sun Appserver 8.x. Here are the choices: <p>

<li> Set system properties org.omg.CORBA\*
<br>
You can do this either in your application code or as jvm start parameters<br>
  System.setProperty("org.omg.CORBA.ORBInitialPort","<port>");
  System.setProperty("org.omg.CORBA.ORBInitialHost","<host>");
<br>
  or set it as JVM property like this: <i>java -Dorg.omg.CORBA.ORBInitialHost=host -Dorg.omg.CORBA.ORBInitialPort=3700</i><p>

<li> Set System property com.sun.appserv.iiop.endpoints: <br>
You can also use the JVM system property com.sun.appserv.iiop.endpoint=host:port to specify the endpoint address. Also this property supports multiple endpoints to support load balancing. For example setting <i>java -Dcom.sun.appserv.iiop.endpoints=host1:port1,host2:port2 ... </i> specifies host2 as failover endpoint if host1 crashes.<p>

<li> Set InitialContext Properties<br>
The last approach that may be used is to set ORBInitialHost/ORBInitialPort as properties for the InitialContext like this:
<pre>
Properties p = new Properties();
p.put("org.omg.CORBA.ORBInitialHost","localhost");
p.put("org.omg.CORBA.ORBInitialPort","33700");
InitialContext ctx = new InitialContext(p);
//... do the lookups...
</pre>

To make the standalone client run you also have to setup your classpath correct. You have to put appserv-rt.jar, appserv-admin.jar and javaee.jar in your client classpath in addition to the EJB interfaces.  Additional parameters are not needed as more properties are picked from the jndi.properties file that is contained in above jars.
More information can also be found in the GlassFish EJB FAQ: https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html



  ' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/standalone_iiop_clients_with_glassfish</link>
<author>Daniel Adelhardt</author>
<pubDate>Fri, 09 Feb 2007 06:40:45 +0100</pubDate>
</item>
<item>
<title>IActionBars for editors</title>
<description><![CDATA['<p>
It is important to remember, that <i>IActionBars</i> instance is shared between all instances of editors of same type. It means, for example, that if you will call <i>setGlobalActionHandler()</i> form editor's <i>createPartControl()</i> method (as i did today) - every new editor instance will overwrite global action handler. Usually, it is not what what you really want. </p>
<p>
For creating actions, that are shared by different instance of of same editor - <i>org.eclipse.ui.editors.IEditorActionBarContributor</i> should be used.
</p>' ]]></description>
<link>http://www.jroller.com/aav/entry/iactionbars_for_editors</link>
<author>Aleksey Aristov</author>
<pubDate>Mon, 04 Dec 2006 17:58:46 +0100</pubDate>
</item>
<item>
<title>Loadbalancing with mod_jk and GlassFish</title>
<description><![CDATA['
<p>In addition to jfarcands <a href="http://weblogs.java.net/blog/jfarcand/archive/2006/03/running_glassfi_1.html">blog</a>  about mod_jk and GlassFish I also wanted to try out mod_jk loadbalancing with GlassFish. Here is the cookbook on how to get a simple load balancing scenario set up:<br/>
<p><br/>
Software needed:<br/>
<li> Apache 2.0.x <br/>
<li> Apache Tomcat Connectors <a href="http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/">link</a><br/>
<li> Apache Tomcat <a href="http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.16/bin/apache-tomcat-5.5.16.tar.gz">5.5.16</a> (needed for just one jar File)<br/>
<li> Apache Commons Logging 1.0.4 <a href="http://archive.apache.org/dist/jakarta/commons/logging/binaries/commons-logging-1.0.4.tar.gz">link</a><br/>
<li> Apache Commons Modeler 1.1 <a href="http://archive.apache.org/dist/jakarta/commons/modeler/binaries/modeler-1.1.tar.gz">link</a><br/>
<li> And of course you need at least two running installations of GlassFish V1/V2.</p>


<p><p><br/>
Steps to setup load balancing:<br/>
<li> Install mod_jk into your Apache config (copy mod_jk.so to your Apache modules directory)<br/>
<li> Configure your Apache httpd to include mod_jk.so by editing your httpd.conf to include the following:<br/>
<pre><br/>
LoadModule jk_module modules/mod_jk.so<br/>
JkWorkersFile path_to_your_config/conf/workers.properties<br/>
JkLogFile path_to_your_log_dir/mod_jk.log<br/>
JkLogLevel info<br/>
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br/>
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories<br/>
JkRequestLogFormat "%w %V %T"<br/>
#Mount your webapps eg WebApplication1 using JkMount<br/>
JkMount /WebApplication1/\* loadbalancer <br/>
</pre></p>


<p><li> Create a worker.properties File for the mod_jk connector. In the example shown below a load balancing worker for two local GlassFish instances (listening on jk port 8009/8010) is provided.<br/>
<pre><br/>
worker.list=loadbalancer<br/>
worker.worker1.type=ajp13<br/>
worker.worker1.host=localhost<br/>
worker.worker1.port=8009<br/>
worker.worker1.lbfactor=1<br/>
worker.worker1.socket_keepalive=1<br/>
worker.worker1.socket_timeout=300<br/>
worker.worker2.type=ajp13<br/>
worker.worker2.host=localhost<br/>
worker.worker2.port=8010<br/>
worker.worker2.lbfactor=1<br/>
worker.worker2.socket_keepalive=1<br/>
worker.worker2.socket_timeout=300<br/>
worker.loadbalancer.type=lb<br/>
worker.loadbalancer.balance_workers=worker1,worker2 <br/>
</pre><br/>
<p><br/>
<li>Enable the jk connector in each GlassFish instance by adding a JVM Option with asadmin. If your instances run on the same box you have to choose different JK ports. The ports must also match your worker.workerX.port definitions in your worker.properties files. <br/>
<pre>$GLASSFISH_HOME/bin/asadmin create-jvm-options <br/>
-Dcom.sun.enterprise.web.connector.enableJK=8009</pre><br/>
<li> Copy the following jar archives to your GlassFish Installations lib directory ($GLASSFISH_HOME/lib): tomcat-ajp.jar (from Tomcat 5.5.16 /server/lib dir), commons-logging.jar and commons-modeler.jar. <br/>
<li> Next restart your apache httpd and your glassfish instances. <br/>
<li> If JK connector was enabled successfully in glassfish you should see a log entry in your server log as for example: <br/>
<pre>[#|2006-12-01T11:33:14.667+0100|INFO|sun-appserver-pe9.0|<br/>
org.apache.jk.common.ChannelSocket|_ThreadID=11;_ThreadName=Thread-5;|JK: ajp13 listening on /0.0.0.0:8009|#]</pre></p>


<p>Now all web applications that are deployed to your GlassFish instances and that are mounted in your httpd.conf through JkMount commands should be loadbalanced equally.</p>


<p>More advanced jk configuration properties may be found in the Tomcat connectors <a href="http://tomcat.apache.org/connectors-doc/config/workers.html">documentation</a></p>

' ]]></description>
<link>https://blogs.oracle.com/dadelhardt/entry/loadbalancing_with_mod_jk_and_glassfish</link>
<author>Daniel Adelhardt</author>
<pubDate>Mon, 04 Dec 2006 02:19:30 +0100</pubDate>
</item>
<item>
<title>RCP & Spring</title>
<description><![CDATA['<p>
If you use Spring libraries inside RCP application don't forget to export META-INF "package" (by adding it to Export-Package statement in MANIFEST.MF file).
</p>

<p>
<pre>
...
Export-Package: .,
 META-INF,
 org.xxxx.yyyy.zzzz
</pre>
</p>

<p>
This will make resources (META-INF/spring.handlers and META-INF/spring.schemas) available to classloader. Without doing it spring will not work without internet connection. It will try to load xml schema's or DTD's from the internet and fail.
</p>' ]]></description>
<link>http://www.jroller.com/aav/entry/rcp_spring</link>
<author>Aleksey Aristov</author>
<pubDate>Tue, 28 Nov 2006 00:04:53 +0100</pubDate>
</item>
<item>
<title>Executable extension factory</title>
<description><![CDATA['<p>
It is also possible to provide a class, implementing <i>IExecutableExtensionFactory</i> factory instead of executable extension itself.  In addition, such factory can be a good place to apply various aspects on extension instances. 
</p>
<p>
For more details check <i>org.eclipse.core.runtime.IExecutableExtensionFactory</i>
</p>' ]]></description>
<link>http://www.jroller.com/aav/entry/executable_extension_factory</link>
<author>Aleksey Aristov</author>
<pubDate>Sat, 25 Nov 2006 14:12:31 +0100</pubDate>
</item>
<item>
<title>Additional parameters for executable extensions</title>
<description><![CDATA['If you want to pass some additional data to an executable extension, you can do it by specifying some value after a semicolon. For example, you can make the following contribution in <i>plugin.xml</i> file:
<pre><code>
 <extension point="org.eclipse.ui.views"<
    <view 
	id="com.xyz.views.XYZView"
     	name="XYZ View"
     	class="com.xyz.views.XYZView:<font color="blue">some_parameter</font>"
     	icon="icons/XYZ.gif"
	/>
</extension>

</code></pre>

<p>
This value will be available as a <i>data</i> parameter of <i>IExecutableExtension.setInitializationData(IconfigurationElement, String, Object data)</i>. Every executable extension can implement this interface.
</p>

<p>
Such feature is very useful when you want to create a reusable executable extension implementation that has to be parameterized by users. Of course, if you define your own extension point, it?s no problem to define additional attributes. However, sometimes it?s feasible, to use one of the standard extension points.
</p>

<p>
In <a href="http://www.rcml.net">RCML</a>, we are defining <i>RCMLApplication</i>, <i>RCMLPerspective</i>, <i>RCMLView </i>classes. These classes have to be used in contributions made to standard extension points (<i>org.core.runtime.applications</i>, <i>org.eclipse.ui.perspectives</i>, <i>org.eclipse.ui.views</i>). But, of course users will have to parameterize these contributions with actual RCML files. This is done in the following way:
</p>
<pre><code>
<extension  point="org.eclipse.ui.perspectives">
    <perspective 
            id="net.rcml.examples.MyApplication.MyPerspective"
            name="My Perspective "
            class="net.rcml.rcp.perspective.RCMLPerspective:<font color="blue">perspective/MyPerspective.xml</font>"
            icon="icons/MyIcon.gif"/>
</extension>

</code></pre>

For more details read javadoc on org.eclipse.core.runtime.IExecutableExtension
 ' ]]></description>
<link>http://www.jroller.com/aav/entry/additional_parameters_for_executable_extensions</link>
<author>Aleksey Aristov</author>
<pubDate>Sat, 25 Nov 2006 13:38:35 +0100</pubDate>
</item>
<item>
<title>Simplifying Enterprise Applications with Spring 2.0 and AspectJ</title>
<description><![CDATA['
<p>Some of you may not have caught up with <a href="http://www.infoq.com">InfoQ</a> yet :- it's a great site for community news and articles concerning enterprise development (it's not restricted to just Java: I like seeing ideas from other communities too). Anyway, I wrote an article for the site which has just gone live:  <a href="http://www.infoq.com/news/Spring-AspectJ-AOP">Simplifying Enterprise Applications With Spring 2.0 and AspectJ</a>. So far the feedback has been very positive so thanks to all who have responded.</p>

<p>I've heard a number of people saying that "AOP is too hard", or "AOP makes things too complex". In a way this article was written as a rebuttal of those views (hence the title, "<b>Simplifying</b> Enterprise Application Development"). I mean, the whole point of AOP is that you take software that was getting complex and tangled up, and you simplify the implementation by giving each module a single responsiblity again by introducing aspects. And then of course for some requirements that are naturally expressed in a crosscutting way, it's much simpler and easier just to implement them with an aspect in the first place. The article shows how this process works, and lays out an adoption roadmap that counters the "AOP is too hard" argument - at each step along the way you can get a lot of value without having to become an AOP guru.</p> 

<p>It's also a good introduction to the facilities offered by Spring AOP in the Spring 2.0 release.</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/08/simplifying_ent.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Thu, 10 Aug 2006 10:24:53 +0200</pubDate>
</item>
<item>
<title>When false==true : JVM bugs and (byte)code generation strategies</title>
<description><![CDATA['
<p><i>Update: the JRockit team gave outstanding service on this issue, and found and fixed the bug in their VM within 24 hours of it being
reported. The code generated by AspectJ has also been tweaked so that it does not trigger the bug on VMs that do not have the patch.</i></p>

<p>We had a bug reported on the aspectj mailing list this week, in which a simple program returning a boolean value would return "true" when the code clearly said to return "false". Oh, and this only happens when running on the JRockit VM.  
</p>

<p>They say variety is the spice of life. This time last week I was just about to deliver a keynote at the SpringOne conference on the vision for the future directions of the Spring framework. One week on, and I've just finished an in-depth investigation into our bytecode generation strategies and their effect on the JRockit VM. A detailed write-up of the issue, my investigations into the situation, and the eventual resolution are documented in the AspectJ bug report that you can read here: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=148007">148007</a>. The episode raises a number of interesting discussion points.</p>

<p>Firstly, it's interesting to see how different compilers generate code for the same or very similar Java program. In the bug report you'll see the difference between javac and the jdt compiler in compiling a very simple method (the jdt compiler varies again if you don't pass the -inlineJSR flag). There are many valid strategies for compiling program instructions into bytecode.</p>

<p>Secondly, VMs can have bugs in them (and so can compilers!). It sounds so obvious when stated, and you should certainly always be 
suspicious of your own code when something is not behaving as expected, but many people don't realize just how sophisticated (and hence complex) a modern JVM is.</p>

<p>Often the bugs are in corner cases. For example, I found and fixed a bug in the AspectJ compiler earlier this week in which an abstract generic aspect with a type parameter or paremeters that specify upper bounds, extended by an abstract generic sub-aspect that also specifies a type parameter with an upper bound and binds the super-aspect type parameter to it, could trigger a compiler message saying that the sub-aspect's type parameter did not satisfy the bounds of the super-aspect parameter, when in fact it did. The bug I'm discussing in this blog entry is significant because it's so near the mainline code path.</p>

<p>In essence, some perfectly legal and simple code strategies for compiling a method that looks like this:</p>

<blockquote>
<pre>
private boolean invert() {
  try {
     return !isTrue();
  }
  finally {
     SomeType.doSomething(); 
  }
}

private boolean isTrue() {
  return true;
}
</pre>
</blockquote>

<p>cause the JRockit VM (1.4.2_08, as used in WLS 8, I haven't tried in the 1.5 JRockit VMs) to return "true" from the invert method - when
clearly it should return "false". This is one of those horrible category of bugs that just silently do the wrong thing (if the JVM were to crash, it would be much better in this case). Note that the set of circumstances needed to reproduce the bug are still relatively narrow :- must return boolean not Boolean, the negation is needed, the finally or some similar block is also needed.<p>

<p>The situation is not quite as simple as the code I've shown above, because the real bug report involved an aspect. So the program code was:</p>

<blockquote>
<pre>
// in some class

private boolean invert() {
   return !isTrue();
}

private boolean isTrue() {
  return true;
}

// compiled with aspect
public aspect AnAspect {

  after() : execution(* invert()) {}

}
</pre>
</blockquote>

<p>which the weaver translates into a program that looks like the first example I gave (note that I'm discussing implementation details here, not language semantics).</p>

<p>So the third interesting point - and the key lesson for any of the many projects springing up that use class file transformers, asm, cglib, or any other bytecode transforming tool. You always want to generate code that looks as close as possible to the code that javac would generate in the same situation. Even if you are generating perfectly legal bytecodes, straying too far from the javac path can uncover bugs in VMs. This is what was happening in the case under discussion - AspectJ was generating a bytecode sequence (perfectly legal) that looked subtly different from what javac would do. Enough to trigger what seems to be some kind of stack corruption bug in JRockit. (Remember that the same code works perfectly on every other VM we've tried). If you're writing, say, an ORM tool, you need to know  
not just the SQL dialects and semantics of the various databases, but also all of the undocumented bugs and quirks that you need to work around. It's the same if you're doing any compilation or bytecode generation for the JVM - you need to know and work around all the little quirks and bugs in the various VMs. Coder beware!</p>

<p>So finally, let me finish up with a plug for AspectJ. If you need to advise types in some way, AspectJ offers a programming model with a much better level of abstraction than writing your own transformers at the bytecode level. You're not restricted to forcing users to work with AspectJ directly - we offer classloader and class file transformer integration too. You'll be more productive using the AspectJ programming model, and you'll benefit from a compiler/weaver that's being widely used and works around known VM bugs etc.. (The bug  report that triggered me to write this entry was very exceptional, and the AspectJ compiler now generates code that avoids the JRockit bug (good news for those using WebLogic Server)).</p>
<p>There's one more good reason for building on AspectJ - AspectJ has  well-defined semantics for what happens when you weave types with one set of aspects, and then weave again with a second set. This mirrors for example the scenario where two class file transformers from different third parties are used in conjunction. If you don't build on top of something that offers this kind of semantic guarantee, what exactly is supposed to happen when your class file transformer is used in conjunction with someone elses? The semantics can only be "undefined" - which doesn't seem a good deal for users or for vendors...</p> 

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/06/when_falsetrue.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Sat, 24 Jun 2006 11:25:27 +0200</pubDate>
</item>
<item>
<title>Teaching AOP</title>
<description><![CDATA['
<p>For the past 2 months I've been working extremely hard putting together a course on AOP with AspectJ and Spring 2.0. One thing I've learnt is just how much effort goes into such a venture: each teaching module, with it's associated hands-on labs, samples, and presentation material takes between 1.5 - 2 days to prepare, and there are four modules on each day of the course. However hard I tried, I couldn't develop the material any faster than that.</p>

<p>Last week was the first public running of the course, in Oslo, Norway. I ran a two-day training (a nice way to verify a subset of the material - the full course is four days long). I had a really good bunch of students - most with little AOP experience but one or two who had done quite a lot with AspectJ. They all seemed to enjoy it, and everyone said they learnt lots (even those who had worked a lot with AspectJ before). I was really pleased with the learning from the students: it's my style to fire out lots of questions and get people to think and interact - they were producing correct answers to questions that I know have stumped many users on the aspectj lists, and this after only 1 day of training! The course had a lot of hands-on labs too: (a), it gives me a little respite from talking all day, but the real reason is (b) I believe that doing it for yourself really reinforces the learning. Labs are a potential nightmare for running a course, but this time everything passed off smoothly: the students had running web apps with AspectJ load-time weaving and Spring AOP all working together after no time at all. Kaare did his best to persuade me that maven 2 could make that set-up even easier. Maven 2 is definitely something I need to look into more...</p>

<p>As if giving 5 talks on the first day of the course wasn't enough, I also gave a talk to the Norwegian JUG in the evening. Lots of people gave up their evening to come and hear it, which was really nice to see. I thought I'd be tired after a whole days' teaching (and I was), but the atmosphere in the room lifted me and I had a really good time. There's a great crowd over in Oslo and if you get a chance to go to one of their JUG meetings you should take it.</p>

<p>This week I'll be giving a keynote at the SoftDev 2.0 conference in Stockholm, and then I'm speaking at the JAX conference shortly after that, so maybe I'll get to meet some of you at one of those two events.</p>

<p>If you like the sound of the AOP course, the next offering is in London on the 31st May. Contact me for details if you are interested.</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/04/teaching_aop.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Mon, 24 Apr 2006 20:30:37 +0200</pubDate>
</item>
<item>
<title>Graham Hamilton on AOP</title>
<description><![CDATA['

<p>Graham Hamilton posted a <a href="http://weblogs.java.net/blog/kgh/archive/2006/03/aop_madness_and.html">blog entry on AOP this week</a>. It's attracted a good deal of criticism in the responding comments - probably because of the provocative writing style. Graham's certainly been in the game long enough to know the difference between technical discussion and political positioning - and how to blur the two. Graham divides his criticism into "the good", "the bad" and "the new".  "The good" includes container based AOP, "the bad" includes just about everything else. "The new" is apparently annotations. Comments on Graham's blog can't be linked directly - but crazybob and "bigcheeese" do a good job of setting the record straight there. In short, Annotations != AOP, but annotations can certainly facilitate AOP (see Ramnivas' articles <a href="http://www-128.ibm.com/developerworks/java/library/j-aopwork3/">AOP and metadata: A perfect match, Part 1</a> and <a href="http://www-128.ibm.com/developerworks/java/library/j-aopwork4/">Part 2</a> for a much more detailed analysis.</p>

<p>So... let's take a step back here. Graham is positioning for container-based "AOP", which he appears to interpret as use of annotations that your container understands, in order to provide interception. Hmmm. What annotation-based container have Sun been working on recently I wonder? EJB 3 perhaps?? I predict that Graham will soon be telling us that Sun have solved all of our AOP needs within the safety of the JSR process, and all we need is EJB 3 with its @AroundInvoke and friends. Sorry Graham, @AroundInvoke != AOP either, by a very long chalk.</p>

<p>If you want container-based AOP, check out Spring AOP. What we had in Spring 1.x was way ahead of any @AroundInvoke style mechanism. What we've got in Spring 2.0 is two generations of technology ahead, and quite simply the best container based AOP there is (IMHO of course). I'll be talking about some of this in my TSS Java Symposium presentation later this month for those who are interested and will be in Vegas.</p>

<p>In "the bad" Graham takes a line of argument that "side files" and "runtime mechanisms" modify the semantics of the JLS. "Arbitrary intervention" with "arbitrary side effects" is a "quick race across the boundary line to insanity". Provocative wording indeed.  AspectJ is a language. It's program constructs have semantics. There is no "arbitrary intervention" or "arbitrary side effect".  The "side files" are source files written in the AspectJ language (it's kind-of normal for a language to have source files). AspectJ does support load-time weaving, which can link aspects with compiled classes at load time, but this has exactly the same well-defined semantics as the most common way of using AspectJ: compiling source files using a compiler that honours the semantics of the language by translating source code into a lower-level representation that is then interpreted by the JVM. If Graham doesn't like that idea, I guess he doesn't like javac either?? I think the underlying point that Graham was really trying to make underneath all the sensationalist language is the oft-heard assertion that aspect-oriented programs make it harder to understand what the program does. See the developerWorks article <a href="http://www-128.ibm.com/developerworks/java/library/j-aopwork15/index.html">AOP myths and realities</a> for a response to that point. Readers should also check out Gregor Kiczales' comment on Graham's blog. The truth is, as Wes Isberg recently reminded me "<a href="http://www.sdmagazine.com/documents/s=843/sdm0107i/0107i.htm">it's *all* an illusion</a> anyway. Even the beloved JLS semantics.</p>

<p>Any technology, any language, can be used in an inappropriate manner and thus cause problems. The question is, does a technology or language make it easy to do the right thing, and in so doing give benefit to its users? I thought I'd let some of the posters to TSS over the last month have the last word on this...</p>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200714">On JBoss Cache</a>:
</p>

<blockquote>
<pre>
JBossCache is a good example. We use AOP to implement the following cross-cutting concerns:
- Locking, depending on whether we use pessimistic or
  optimistic, we use a different interceptor
- Replication. If the cache is local, the
  ReplicationInterceptor is not present
- Invalidation. simply replace the ReplicationInterceptor with
  an InvalidationInterceptor (of course all interceptors are
  assembled by the cache at startup time, this does not have
  to be done by the user)
- Cache loading and cache storing
- Statistics. If disabled, the interceptor is not present
- Transactions

We even open the chain of interceptors up, so devs can insert their own
 (auditing, security etc).

The first version of JBossCache did *not* use AOP, and it became hard to maintain code that 
have to cover all permutations of 'aspects', e.g.
- transactional asynchronously replicated cache
- non-transactional local cache
- non-transactional synchronously replicated cache
etc etc etc

We already reaped the benefits of the refactoring: when we added optimistic locking, 
we simply replaced 1 interceptor.
JBossCache would today be unmaintainable without AOP.
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200717">On AOP in enterprise systems</a>:
</p>

<blockquote>
<pre>
I've used AOP for several functions in enterprise systems:

- performance monitoring 
(see http://www.ibm.com/developerworks/java/library/j-aopwork10/ for my article 
that shows how this works in detail)
- macros & user feedback in a rich client app
- fine-grained (data-level) authorization
- error handling (isolating, summarizing, and consistently responding to errors)
- testing

In each case, AOP let us write clean code that's noninvasive and separately testable. 
By contrast, if we had scattered and tangled the implementation of these requirements 
it would have been virtually impossible to be consistent and correct. I think the AOP solution
is far preferable to the code generation, boilerplate templates, and heavyweight, and 
inflexible frameworks that people traditionally reach for to cope with these kinds of problems.
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200749">On reuse across projects</a>:
</p>

<blockquote>
<pre>
> No AOP is only good for logging and tracing. Its a techy toy that will cause serious
> trouble and should be banned from any enterprise environment because of the 
> maintainance issues it will undoubtedly create down the line.Show a good example 
> where we would really use it

Wrong on all counts. We use it for
   Security
   Profiling
   Caching
   Transactions
   and soon
   Messaging
   Unified exception handling.

As usual, the only people who seem to berate never actually used it.

Oh, I almost forgot, all those items are reused across currently six different projects and 
NONE affects the business logic.
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200752">On the learning curve:</a>:
</p>

<blockquote>
<pre>
I have the opposite experience. AOP terminologies and syntax many feel strange initially
 (as is the case with any interesting technology). However, in my experience, most 
developers understand them quite easily.

I present AOP/AspectJ at many No Fluff Just Stuff and other conferences. I have a pretty 
uniform experience that most attendees understand the power, concepts, and syntax 
fairly well. For example, after explaining a few simple pointcuts, I ask attendees to tell 
me syntax for more complex pointcuts. I am happy to report near 100% correct answers. 
To me, this is an indication that the syntax is logical and predictable.

The same experience is repeated with developers at client sites. Developers understand 
the concepts and syntax very quickly (perhaps because they are motivated by its potential
to solve the problems they are facing!). Granted, many don&rsquo;t understand the full power and
implications of using AOP right after the first introduction, but that isn&rsquo;t unexpected.
As the article explains, it does take time to fully fathom AOP, much like any other technology.
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200754">A new user:</a>:
</p>

<blockquote>
<pre>
I actually just started using it.

We have a fairly large object model, used by (right now) two very distinct applications.
Due to certain realities, one project needs to listen to certain properties and the other 
project doesn't. I used AspectJ (AJDT in Eclipse) to instrument the model with the proper
interfaces, defined the proper pointcut, and it's working beautifully.

Took ~ 1 day to get used to the 'new' terms. Took another to get used to the syntax. 
Now the property change stuff is used only by the app which needs it, with absolutely 
zero impact on the other app.
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200782">Reality check:</a>:
</p>

<blockquote>
<pre>
We have been using AOP as the foundation for our CMS/portal products for three years now. 
It's working great, we don't even use it for logging and tracing at all, and some of the 
stuff we do would be impossible without AOP, not because they could not be coded, 
but because they would be horrendously expensive to write and maintain.

We use it for asynchronous event handling, undo management (on the client), 
replication, transactions, security, caching, parameter validation, the entire object model
(in a way that would be more or less impossible to do without AOP), versioning of state, 
automatic persistence, locking, last modified timestamps, business rules, client/server 
synchronization, and lots lots more.

In other words, it is not "only good for logging and tracing", it is not a "techy toy", and 
it should most definitely not be "banned from any enterprise environment".

There are other things that definitely should be banned from enterprise environments 
though, such as yacking about things that one knows nothing about. Now, there's 
something that'll cause all kinds of problems down the line.
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39026#200788">On the cost of implementation</a>:
</p>

<blockquote>
<pre>
All good suggestions!

I have used AOP in pretty much all the scenarios you mention. In all cases, I found that 
the cost of implementation is reduced significantly. Often, many useful features that 
would not have been implemented due to sheer implementation complexity associated 
with them (automatic fail over logic, for example) become suddenly very attractive when
 implemented using AOP.

For the client side, I have seen Swing thread safety aspects saved the day for quite 
a few projects.

Some specific projects/products for the ideas you mentioned implemented using AOP: 
Audit trail: see: http://nearinfinity.com/products.html
Monitoring: http://www.glassbox.com/glassbox/Downloads.do 
(and http://www.ibm.com/developerworks/java/library/j-aopwork10)
<plug>
For authentication and authorization implemented using AspectJ, check out chapters 
from my book  (free download): http://manning.com/books/laddad/chapters. 
Also take a look at table of content for a range of problems solved with AOP.
</plug>

The bottom line is a quote from the article: "...the only way to find out whether 
AOP is a good addition to your development practice is to try it for yourself.
I suggest that you set aside one full day to experiment with AOP -- not by 
reading articles, books, or blogs, but by coding aspects for yourself. 
Doing that will let you form your own opinion of AOP, which ultimately is what 
really matters."
</pre>
</blockquote>

<p>
<a href="http://www.theserverside.com/news/thread.tss?thread_id=39066#201150">On AOP helping to keep the Java platform competitive</a>:
</p>

<blockquote>
<pre>
The team that I am working with now created a framework based on Facelets, 
AOP (heavy use of AOP, AspectJ and Spring AOP), JSF, Spring and Hibernate. We can 
create a simple database web application in a fraction of the time it use to take with 
a fraction of the code. It is all Java based. We are in the process of getting permission
to write a white paper. This framework has built in support for 
pagination, filtering, etc. etc. And, you can augment with standard JSF, and Java. 
(Like RoR this framework is not for Amazon.com, but it fits a lot of web application 
nicely). Also since we are built on top of Hibernate we can easily add caching. 
Since we are using AOP, we can easily add just about anything really (IMHO).
</pre>
</blockquote>

<p>If you have your own success stories with AOP, I'd love to hear them. If you tried AOP and it didn't work out for you, I'd love to hear about that too so that we can learn where we need to do better...</p>



' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/03/graham_hamilton.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Fri, 10 Mar 2006 14:44:00 +0100</pubDate>
</item>
<item>
<title>Tips for using Eclipse effectively</title>
<description><![CDATA['
<p>In Germany they have an entire magazine devoted to Eclipse, called (imaginatively ;) "<a href="http://www.eclipse-magazin.de/">Eclipse Magazin"</a>". I don't speak (or read) German, but I have to say the content always looks really good, and they've had some excellent coverage of AspectJ and AJDT in past issues. The magazine has a guest column, "MyEclipse" in which various users of Eclipse describe their favourite hints and tips for working with the IDE.</p>

<p>It was my turn to write the column this month. </p>

<p>I have to say, I enjoyed writing the piece more than I thought I would - amongst other things it made we really think about how I actually do use Eclipse, and whether I'm using it as effectively as possible. The <a hrerf="http://www.eclipse-magazin.de/itr/online_artikel/psecom,id,797,nodeid,230.html">original column can be found here</a>. With permission, I'm making an English translation (strictly, the English original!) available here for those that don't read German. If you have any favourite Eclipse tips that I don't know about, please do let me know!</p>

<h2>My Eclipse</h2>
<p>
I&rsquo;ve seen a lot of different people using Eclipse over the last few years. Nearly every one of them was using Eclipse pretty much in its default configuration. My Eclipse looks quite different to that, and in this article I&rsquo;ll walk you through a collection of hints and tips for getting the most out of the IDE for Java development.
</p>
<p>
I&rsquo;ll show you how to get organized when working with multiple workspaces, multiple projects, and lots of jar files. I&rsquo;ll show you how to configure the IDE to help you write better code, and how to organize the Java perspective for maximum efficiency. As you might expect, I&rsquo;ll also give you a couple of hints and tips for working with AspectJ!
</p>

<h3>Getting Organized</h3>

<p><b>Using multiple workspaces</b></p>

<p>
I tend to have multiple workspaces on the go at any one time (about 8 at present having just done a quick check). I use different workspaces for each major project (or version of a project) that I&rsquo;m working with. For example, right now I&rsquo;ve got workspaces for AspectJ 1.5.1 development, the AspectJ 1.5.0 release branch, Spring development, a couple of demonstration workspaces I use when giving talks, a workspace I use when giving training courses, and so on. It&rsquo;s not uncommon for me to have 2 or 3 eclipses open at the same time. 
</p>
<p>
The first practical question becomes knowing which eclipse is which when looking at the task bar or selecting between open windows using Alt-Tab. I always launch eclipse from the command-line using a script. Passing the &ldquo;-showlocation&rdquo; flag adds the workspace location to the windows title bar so that you can easily see which window is for which workspace.  I normally start Eclipse with a little extra memory too (I find it works a little snappier that way). A good default for launching Eclipse if you&rsquo;re working with sizeable projects would be something like this:
</p>

<blockquote>
<pre>
eclipse.exe &ndash;showlocation &ndash;vmargs &ndash;Xmx512m > /dev/null 2>&1
</pre>
</blockquote>

<p>
(I use cygwin, and I find that Eclipse tends to dump nonsense to the console that I don&rsquo;t want to see, hence the redirect). 
</p>

<p>
Another problem with using multiple workspaces is keeping your preferences and settings up to date across all of them. <i>There is no need to configure each workspace individually every time you create a new one!</i>  Get one workspace set up exactly how you like it, and then select File -> Export -> Preferences. This will create a file that contains all of your preferences settings that you can keep in (e.g.) your home directory. Whenever you create a fresh workspace, use File -> Import -> Preferences and you&rsquo;re good to go.
</p>

<p>
(By the way, if you're adding plugins to the base eclipse set, see <a href="http://blog.exis.com/colin/archives/2004/12/23/managing-plugins-in-eclipse/">Colin Sampaleanu's excellent blog entry on how best to manage that</a>). 
</p>

<p><b> Coping with lots of projects inside a workspace:</b></p>

<p>
It&rsquo;s also not uncommon for me to have a lot of projects inside a workspace (one project per module). This is where working sets can make a big difference.  Take a look at how the package explorer shows my core spring training workspace by default:</p>

<img src="http://www.aspectprogrammer.org/images/myeclipse/package-explorer-projects-view.jpg">

<p>
It&rsquo;s just a jumbled mess of projects. Working sets to the rescue!  From the drop down menu at the top right-hand corner of the Package Explorer view click on &ldquo;Select Working Sets&hellip;&rdquo;. From here you can define logical groupings of projects.  With your groupings defined, select &ldquo;Show -> Working Sets&rdquo; from the drop-down menu. Now the Package Explorer will look something like this:
</p>

<img src="http://www.aspectprogrammer.org/images/myeclipse/package-explorer-working-sets-view.jpg">

<p>
Much better!
</p>

<p><b>Sorting out the clutter inside a project:</b></p>

<p>
When looking at an individual project inside the package explorer, all of the jar files on the project build path show up by default. Most of the time I find these just get in the way. Here&rsquo;s how my spring development workspace looks with the jar files showing:
</p>

<img src="http://www.aspectprogrammer.org/images/myeclipse/package-explorer-jars.jpg">

<p>
The list of jars goes on even further, and worse, there are additional folders that I do care about at the end of the list.  Select &ldquo;Filters&hellip;&rdquo; from the Package Explorer drop-down menu and define a new name filter matching &ldquo;*.jar&rdquo;.  This will hide all of these jars from view making it much easier to find what you really want. 
</p>

<p><b> Organizing jar files: </b></p>

<p>
On the subject of jar files, if you have common groups of jar files it can be very effective to define them as &ldquo;User Libraries&rdquo; that can be named and added to a build path as a unit. You&rsquo;ll find the settings page to define user libraries under &ldquo;Windows -> Preferences&hellip;&rdquo; and then select Java -> Build Path -> User Libraries. 
</p>

<p><b>Sharing projects with others:</b></p>

<p>
To make projects easy to share with others (for example, checking into a shared CVS repository) make the maximum use of variables. Right next to the option to define User Libraries, you&rsquo;ll find the option to define Classpath Variables. When adding an external library to a build path of a shared project, always define a classpath variable that points to the containing directory on your local machine (or just the jar file itself). Then you &ldquo;extend&rdquo; the variable when defining a build path entry. This way each user can define the variable appropriately for their own local environment, but the project settings can still be shared in the repository.
</p>

<h3>Using Eclipse for Java Development</h3>

<p><b>Helping Eclipse to help you write better code:</b></p>

<p>
I used to use a small editor font in order to see the maximum amount of code possible inside the Java editor window. A while ago I changed tactics. Now I use a larger font than normal &ndash; 14 pt bold. As a consequence, I can see a lot less code in the editor at a time. This helps me write better code. 
</p>
<p>
Let me explain.
</p>
<p>
It&rsquo;s natural to want to see a whole method in one go. Seeing less code on the screen at a time has the subtle effect of making me write shorter, clearer methods. It&rsquo;s also easier to sit back and reflect on code, and easier to pair program and work with others. Give it a try and see if it works for you too.
</p>

<p><b>Organising the Java Perspective:</b></p>

<p>
It used to be that I was never satisfied with the width I&rsquo;d set for the Package Explorer and JUnit views. Too narrow and I couldn&rsquo;t see the package and type names properly, or the stack traces in a test failure. Too wide and the editor window would get crushed between the Package Explorer on the left, and the Outline View on the right.  Especially if you follow my suggestion of using a bigger font this can be a real pain. 
</p>
<p>
I found the answer in a combination of fast views and in-place views.  Now my eclipse dedicates as much real estate as possible to the source code. I have no views on the right-hand side, and no views on the left-hand side.  The views I typically work with are the JUnit View, Type Hierarchy View, Package Explorer, and Javadoc View. Open these views, right-click in the title bar, and select &ldquo;Fast View&rdquo;. By default fast views dock at the bottom of the screen, but it&rsquo;s not as convenient to move a mouse up and down to open them as it is to left-to-right. Select the fast view bar and choose &ldquo;Dock on&hellip; left&rdquo;. You have now reclaimed all of the space on the left-hand side that these views used to take, and your perspective should look something like this:
</p>

<img src="http://www.aspectprogrammer.org/images/myeclipse/fast-view-arrangement.jpg">

<p>
Another hidden benefit of this mode is that you can make the views wider than they were before, so that you can see the content properly (or even better for e.g. JUnit and Search, set the orientation to "horizontal" from the context menu). You can also set the widths of each view individually (JUnit wider than the Package Explorer for example, which is a significant improvement).  If you don&rsquo;t like having to move the mouse across to open a view, I&rsquo;ll discuss a solution to that in a moment. 
</p>

<p>
Any views you may have on the right-hand side, just close them (for most people, this means the Outline View). Instead use the in-place views. Ctrl-O opens an in-place Outline View (over the top of the editor). It&rsquo;s actually better than the more usual docked view because it supports type ahead to quickly find the member you are looking for. Along with Ctrl-O, you also need to learn Ctrl-T which opens an in-place &ldquo;quick&rdquo; type hierarchy. This is a really easy way to see all implementers of an interface for example. 
</p>
<p>
A final tip on the subject of view arrangement. If you have a dual monitor setup (becoming very common in the client sites I visit) it is quite nice to undock the Javadoc view completely &ndash; just grab it and drag it right outside of your Eclipse window and onto your second monitor screen. Now you&rsquo;ll have the javadoc permanently open as a reference tool while you work. (Yes, you can undock views in Eclipse now, a lot of people seem not to know that).
</p>
<p>
On the subject of key bindings, you can significantly improve your productivity in Eclipse by learning some of the basic keyboard short cuts for common tasks (and indeed, for some things in the Java editor that aren&rsquo;t available from the menus at all).  However it&rsquo;s also true that some of the default bindings for common tasks are absurd: &ldquo;Alt-Shift-X,T&rdquo; to run a test case for example &ndash; one of the tasks you&rsquo;ll be doing very frequently I trust.  When using fast views, I also find it convenient to add key bindings to open the Package Explorer and JUnit views quickly without having to move the mouse at all. 
</p>
<p>
I make the following changes to the default key bindings:
</p>

<table border="1">
 <tr><th>Key combination</th><th>Result</th></tr>
  <tr>
     <td>Ctrl-P</td>
     <td>Open the Package Explorer   (normally bound to print, but I hardly ever 
             print from Eclipse, and will happily use the menu for that) </td>
  </tr>
  <tr>
     <td>Ctrl-R</td>
     <td> Run as a test case. (normally bound to run-to-line in the debugger). Running tests should be a simple key-stroke away at any time. </td>
  </tr>
  <tr>
     <td>Ctrl-J</td>
     <td> Open the JUnit View (normally bound to incremental search)
    </td>
  </tr>
  <tr>
     <td>Ctrl-I</td>
     <td> Incremental search
 </td>
  </tr>
  <tr>
     <td>Ctrl-G</td>
     <td> Generate getter/setter </td>
  </tr>
  <tr>
     <td>Ctrl-B</td>
     <td> Toggle breakpoint </td>
  </tr>
</table>

<p>
Now that you have Ctrl-R to run tests, it&rsquo;s worth knowing that you can use this shortcut from within the editor when editing a test case, when a package is selected (to run all the tests in the package), when a source folder is selected (to run all the tests under the source folder), and when a project is selected (to run all the tests in the project).
</p>
<p>
Here are some of the other key shortcuts that I find amongst the most useful:
</p>
<p>
You&rsquo;re already familiar with using the arrow keys (left,right,up,down) to move around within the editor. Using the arrow keys in combination with Alt, Shift, and Ctrl put a whole new set of capabilities at your fingertips:
</p>

<table border="1">
 <tr><th>Key combination</th><th>Result</th></tr>
<tr><td>Arrow keys </td><td>Move cursor point in editor</td></tr>
<tr><td>Shift + arrow keys</td><td>	Increase/decrease selection in editor</td></tr>
<tr><td>Alt+Shift + left,right</td><td>	Select previous syntactic element / next syntactic element</td></tr>
<tr><td>Alt+Shift + up, down	</td><td>Select enclosing element / restore last selection</td></tr>
<tr><td>Ctrl+Shift+left,right</td><td>	Select next word / previous word</td></tr>
<tr><td>Ctrl + left,right</td><td>	Move left / right by one word</td></tr>
<tr><td>Ctrl + up,down</td><td>	Scroll up / down by one line</td></tr>
<tr><td>Ctrl+Shift+up,down</td><td>	Go to previous member / go to next member</td></tr>
<tr><td>Alt + left, right</td><td>	Go forward and backward in history (really useful if you&rsquo;ve been following links exploring the code)</td></tr>
<tr><td>Alt+up,down</td><td>	Hidden treasure! Move the current line or selected lines up and down</td></tr>
<tr><td>Ctrl+Alt+up,down</td><td>	Duplicate line above / below</td></tr>
</table>

<p>
Other useful keys (standard cut/copy/paste etc. not included as I assume you are already familiar with these):
</p>

<table border="1">
 <tr><th>Key combination</th><th>Result</th></tr>
<tr><td>Ctrl+O</td><td>	In-place outline view</td></tr>
<tr><td>Ctrl+T</td><td>	In-place quick type hierarchy</td></tr>
<tr><td>Ctrl+M</td><td>	Maximize/restore current window/view</td></tr>
<tr><td>Ctrl+D</td><td>	Delete line</td></tr>
<tr><td>Ctrl+Shift+delete</td><td>	Delete to end of line</td></tr>
<tr><td>Shift+Enter</td><td>	Insert new line below</td></tr>
<tr><td>Alt+Shift+R</td><td>	Rename</td></tr>
<tr><td>Alt+Shift+T</td><td>	Quick refactoring menu</td></tr>
<tr><td>F3</td><td>	Open declaration</td></tr>
<tr><td>F4</td><td>	Open in type hierarchy</td></tr>
<tr><td>F11</td><td>	Debug last launched</td></tr>
<tr><td>Ctrl+F11</td><td>	Run last launched</td></tr>
<tr><td>Ctrl+Shift+T</td><td>	Open type</td></tr>
<tr><td>Ctrl+Shift+R</td><td>	Open resource</td></tr>
<tr><td>Ctrl+Shift+G</td><td>	Search for references in workspace</td></tr>
<tr><td>Ctrl+F6</td><td>	In-place editor selection</td></tr>
<tr><td>Ctrl+F7</td><td>	In-place view selection</td></tr>
<tr><td>Ctrl+F8</td><td>	In-place perspective selection</td></tr>
<tr><td>F12</td><td>	Activate editor (useful if you&rsquo;re following my suggestion of using fast views :- F21 will dismiss the fast view and return you to the editor)</td></tr>
</table>

<h3>AspectJ hints and tips</h3>

<p>
Eclipse has great support for aspect-oriented programming with AspectJ through the AJDT plugins.  In this section I&rsquo;ll show you how to set up projects using linked source folders, how to run JUnit tests with an aspect library using load-time weaving, and some things you can do with the Visualizer that you may not realise. See the AJDT site on Eclipse.org for a tutorial on using AJDT &ndash; this section just contains a few less-well-known pointers.
</p>
<p>
Before we start, if you&rsquo;re trying out using fast views and closing all the views on the right-hand side, one of things you&rsquo;ll be missing is the cross-references view from AJDT (with all of the advises and advised-by relationship information). You can either dock this at the bottom (alongside the console for example), or use the in-place quick cross references view (not a lot of people know about that!). It has a not-very-useful default key binding of Alt-Shift+P, I remap it to Ctrl+U (not many letters left to choose from!). Now just press Ctrl+U anywhere in the editor and get a pop-up view of the cross-references for the selected element. Press it again to get cross-references for the whole file. Perfect!
</p>

<p><b>Linked source folders:</b></p>

<p>
Linked source folders can be a great way to experiment with aspects on a project without touching the main (Java) project at all. Create an AspectJ project alongside the Java project that you want to work with. Put all of your aspects into the &ldquo;src&rdquo; folder of the AspectJ project. Now, inside the AspectJ project open the project properties (Alt+Enter, since we&rsquo;re trying to wean you off the mouse!)  and go to the Java Builder page, and then the &ldquo;Source&rdquo; tab. Click on &ldquo;add folder&rdquo; to create a new source folder, and then the &ldquo;Create new folder&hellip;&rdquo; button. Here you&rsquo;ll see an &ldquo;Advanced&rdquo; button. If you press this, you&rsquo;ll get the option to create a folder that is actually a symbolic link to another location. Use this technique to create source folders inside the AspectJ project that are symbolic links to the source folders inside the Java project you want to work with. 
</p>
<p>
Now whenever you build the AspectJ project, you will get (in the bin directory of the AspectJ project) a woven version of the project files. You will also see any warnings or errors arising from your use of declare warning / declare error in this project. The &ldquo;donor&rdquo; Java project remains completely unaffected by this exercise. Any changes to the source files in the Java project are of course instantly visible in the AspectJ project (and vice versa). To get the best performance, you can now turn off incremental building for the AspectJ project (Project menu -> build automatically) and just build that project on demand using the AspectJ build button in the taskbar.
</p>

<p><b>Load-time weaving</b></p>

<p>(See my entry on <a href="http://www.aspectprogrammer.org/blogs/adrian/2006/02/a_practical_gui_2.html">using an aspect library</a>for a more in-depth treatment of this)</p>

<p>
If you&rsquo;re using an aspect library (such as spring-aspects.jar that ships with Spring 2.0) it is very convenient during development to use &ldquo;load-time weaving&rdquo;. Load-time weaving is the name given to weaving your application classes at runtime as they are loaded into the virtual machine. In this way there is no need to convert your project to an AspectJ project, or to do anything special at all other than put the aspect library on your build path.
</p>
<p>
Say you have some integration tests that you kick off via JUnit, and that rely on the behaviour contributed by the aspects in order to pass. For example, you&rsquo;re using @Configurable to dependency inject domain objects. With the needed library on the build path, create a launch profile for the test run. The easiest way to create a launch profile is just to highlight the test or set of tests that you want to run and run them with Ctrl+R (if you&rsquo;ve followed my advice and remapped that key binding).  This run will fail, because you haven&rsquo;t activated load-time weaving yet. Now select &ldquo;run&hellip;&rdquo; from the launch menu and you&rsquo;ll see the launch profile that was created for the tests you just ran.  Click on the arguments tab, and in the &ldquo;VM arguments&rdquo; box add the following:
</p>
<blockquote>
<pre>
-javaagent:aspectj-install-dir/lib/aspectjweaver.jar
</pre>
</blockquote>
<p>
Where aspectj-install-dir is the directory where you installed AspectJ (it&rsquo;s best to download the standalone compiler and associated tools from www.eclipse.org/aspectj when using load-time weaving, ant building etc..).
</p>
<p>
Now you can rerun the tests and you&rsquo;ll find that AspectJ picks up and uses the aspect libraries that you have on your classpath. It really is as simple as that.
</p>

<p><b>Visualizer:</b></p>

<p>
One of the tools that you get when you install AspectJ is the Visualizer. In fact, you get a whole &ldquo;Aspect Visualisation&rdquo; perspective which is the best way to use the visualiser. By default, the visualiser shows you cross-cutting information such as advises and advised by relationships. The visualizer plugin actually provides a generic capability that is not tied to AspectJ though. Open the visualizer perspective, and from the drop-down menu of the main visualizer view select &ldquo;preferences&rdquo;. Here you can choose the data provider that the visualizer will use to display information. By default it uses the AspectJ provider as I said. If you change to the &ldquo;JDT Search Results Provider&rdquo; you can use the view to visualize the results of the current search (all the matches, and where they are in the project). 
</p>
<p>
The following image shows the results of searching for references to &ldquo;InitializingBean&rdquo; in Spring. Just as with the advice visualization, you can navigate from the visualization to the source code locations simply by clicking on the bars.
<p>

<img src="http://www.aspectprogrammer.org/images/myeclipse/search-visualization.jpg" width="600">

<p>
If you select &ldquo;Resource and Markers Provider&rdquo; you can see where all of your breakpoints, Task markers, warnings and errors are. Clicking on the options in the visualizer menu enables you to choose the subset of these that you are interested in at the time:
</p>

<img src="http://www.aspectprogrammer.org/images/myeclipse/marker-visualization.jpg">

<h3>And finally</h3>

<p>
If you haven&rsquo;t done so already, you should check out the Mylar plugin for Eclipse (developed by one of the AspectJ team, Mik Kersten) (see <a href="http://www.eclipse.org/mylar">www.eclipse.org/mylar</a>, and then go to the getting started page and watch the flash videos there). Especially if you&rsquo;re working with bugzilla, Mylar is fantastic. Mylar deserves an article all of its own so I won&rsquo;t attempt to describe it here &ndash; just go and try it out for yourself, you&rsquo;ll be glad you did!
</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/02/tips_for_using.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Thu, 23 Feb 2006 11:14:34 +0100</pubDate>
</item>
<item>
<title>A Practical Guide to Using an Aspect Library (part I)</title>
<description><![CDATA['
<p>This entry represents part one of a two-part guide to using an aspect library (with AspectJ). I wrote it in December of last year, and have been waiting to finish part II before publishing it. But I finally realised with everything else I've got on at the moment it's probably best just to make this part available anyway! So with no further ado:</p>

<h2>Introduction</h2>
<p>
With the arrival of AspectJ 5 and the Spring 2.0 milestone builds,
many of you will be working with AspectJ-based aspect libraries for
the first time. This article is a practical guide to get you up and
running as quickly as possible and with the least amount of
hassle. I'll cover development and unit testing, integration testing
and deployment, continuous integration, and production builds.
</p>
<p>
I'm assuming that for the time being you don't want to write your own
aspects: you just want to use the capabilities of an existing
library. As a running example, I'm going to use the aspect library
that ships with Spring 2.0: spring-aspects.jar. This library contains
an aspect that supports dependency injection of domain objects,
following the principles I outlined in the developerWorks
article "Dependency Injection with AspectJ and Spring"
(http://www-128.ibm.com/developerworks/java/library/j-aopwork13.html).
</p>
<p>
The library supports an @Configurable annotation. When an instance of
an @Configurable type is created, however it is created, it will be
dependency injected by Spring. The following examples demonstrate some
typical uses of the annotation:
</p>

<blockquote>
<pre>
@Configurable
public class Account {...}
</pre>
</blockquote>

<p>
When the annotation is used like this without a value, an instance of Account will be dependency injected by Spring, using the fully-qualifed class name of Account as the bean name.
</p>

<blockquote>
<pre>
@Configurable("accountBean")
public class Account {...}
</pre>
</blockquote>

<p>
When a value is supplied, it is used as the bean name: ;n instance of Account will be dependency injected by Spring, using "accountBean" as the bean name.
</p>

<blockquote>
<pre>
@Configurable(autowire=Autowire.BY_NAME)
public class Account {...}
</pre>
</blockquote>

<p>
An instance of Account will be dependency injected by Spring using
autowiring by name.
</p>

<blockquote>
<pre>
@Configurable(autowire=Autowire.BY_TYPE)
public class Account {...}
</pre>
</blockquote>

<p>
An instance of Account will be dependency injected by Spring using
autowiring by type.
</p>

<p>
When autowiring, it is also possible to require a dependency check by
specifying dependencyCheck="true". For example,
</p>

<blockquote>
<pre>
@Configurable(autowire=Autowire.BY_TYPE, dependencyCheck="true")
public class Account {...}
</pre>
</blockquote>

<p>
So let's get started developing an application that uses @Configurable...
</p>

<h2>Development, unit testing, and simple integration testing</h2>
<p>Unit testing means testing the Account class in isolation. The standard benefits of dependency injection as related to enhanced testability apply here, and there is nothing special to do. In unit tests, we will manually pass in mock or stub implementations of the Account object's dependencies. 
</p>When it comes to simple integration testing (firing up a combination of objects in a Spring container and checking they behave as expected) we <i>do</i> want the dependency injection to happen (i.e. we do need the aspect in the library to be in effect).</p>

<p>
You can annotate any type with @Configurable, but just using the
annotation on its own doesn't deliver the behaviour associated with
that annotation by the aspects in the spring-aspects library. You need
to link (or "weave") the aspects in the library with your application
for it to behave as desired at runtime. In this section I'm going to
focus on what you need to do to get your basic integration tests passing in your
IDE. I'll describe configuration for both Eclipse and IntelliJ
IDEA. If you use a different IDE it should be straightforward to setup
a similar environment.
</p>

<p>
First let's look at the sample project we'll be working with. The
project defines one domain object, "Account", a service interface
"AccountService", and a default implementation of that service,
"DefaultAccountService". There is an accompanying test
suite, "AccountTests". The Account class looks like this:

<blockquote>
<pre>
/**
 * Sample domain class using the Spring @Configurable annotation.
 */
@Configurable
public class Account {

    private AccountService accountService;

    public void setAccountService(AccountService anAccountService) {
        this.accountService = anAccountService;
    }

    /** so that we can test it has been set appropriately */
    public AccountService getAccountService() {
        return accountService;
    }

}
</pre>
</blockquote>

<p>
It is expecting to be configured with an "AccountService" when it is
instantiated. The test case verifies this is the case:
</p>

<blockquote>
<pre>
public class AccountTests extends AbstractSpringContextTests {

    public void testAccountConfiguration() {
        Account acc = new Account();
        assertNotNull(
          "account service should have been provided",
          acc.getAccountService());
    }

    protected void setUp() throws Exception {
        super.setUp();
        getContext(new String[] {
            "org/aspectprogrammer/samples/domain/beans.xml"
        });
    }

}
</pre>
</blockquote>

<p>
Note that "testAccountConfiguration" simply creates a new Account
object using the default constructor, and expects it to be dependency
injected. The test case configures a Spring application context from
"beans.xml". Here it is (using the new Spring 2.0 configuration style):
</p>

<blockquote>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xsi:schemaLocation=
             "http://www.springframework.org/schema/beans 
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/aop 
              http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- this element causes spring to configure the
         AnnotationBeanConfigurer aspect in spring-aspects.jar
         so that it has a reference to the bean factory 
    -->
    <aop:spring-configured/>

    <!-- configuration of Account bean, because we don't specify an 
         id, the class name will be used as the bean name. This 
         conveniently matches the behaviour of @Configurable when no
         bean name is given in the annotation 
     -->
    <bean 
       class="org.aspectprogrammer.samples.domain.Account"
       lazy-init="true">
       <property name="accountService" ref="accountService"/>
    </bean>

    <!-- service used by the Account bean -->
    <bean id="accountService"
      class="org.aspectprogrammer.samples.services.impl.DefaultAccountService">
    </bean>

</beans>
</pre>
</blockquote>

<p>
You'll need spring-aspects.jar on the classpath for your project.There was a packaging issue with
the jar in Spring 2.0 M1, but if you're using M2 or higher everything should work as described in this article. You'll also need the AspectJ runtime
library, aspectjrt.jar on the classpath. 
</p>

<p>
If we run the test case under JUnit right now it will fail with the
message "account service should have been provided". This is because
we haven't woven the application with the aspects in the library yet,
so there is no behaviour associated with the annotation. So how do we
make the tests pass?
</p>

<h3>Introducing Load-time Weaving</h3>
<p>
AspectJ is first and foremost a programming language. It supports
constructs called "aspects" in addition to the regular Java types. So
one way to use AspectJ is to write a program in the AspectJ language,
compile it with the AspectJ compiler (producing standard .class
files), and run it. AspectJ also lets you take pre-compiled aspects
(in a jar file for example) and link (weave) them with your
application classes. This can be done as an additional stage in a
build process (see later) or at runtime as classes are loaded into the
virtual machine. Weaving classes at loadtime goes by the name of
"Load-time weaving" or "LTW" for short.
</p>
<p>
Load-time weaving is a very easy and flexible way to use an existing
aspect library during development. The simplest way to use it is under
Java 5 using the AspectJ weaving Java agent.
</p>

<h3>Using LTW with JUnit in Eclipse and IDEA</h3>

<p><b>To set this up in Eclipse, do the following:</b></p>

<p>Click on the Run... drop-down icon in the toolbar to open the run
configurations dialog. Click on "JUnit" and then press "New". Give the
configuration a name (I've called it "tests") and select the tests you
want to run (I've chosen to run all the tests in the project):
</p>

<img src="http://www.aspectprogrammer.org/images/eclipse-fig1.jpg">

<p>
Click on the "Arguments" tab and in the "VM arguments" section enter:
</p>

<blockquote>
-javaagent:lib/aspectjweaver.jar
</blockquote>

<p>
The part after the ":" should be the path to your copy of
aspectjweaver.jar. In this case, I've copied the aspectjweaver.jar
from the Spring distribution into the lib directory of my project (it
doesnt' need to be on the project's classpath). You can use the jar
from the AspectJ 5 final release too if you want to.
</p>

<img src="http://www.aspectprogrammer.org/images/eclipse-fig2.jpg">

<p>
That's it!
</p>
<p>
Save and run the configuration - you should see a green bar.
</p>

<p><b>To set this up in IDEA:</b></p>

<p>
Configuration in IDEA is very similar. Open the "Run/Debug
Configurations" dialog using the drop-down in the toolbar. Click the
"+" icon to create a new configuration and name it e.g. "tests".
</p>

<img src="http://www.aspectprogrammer.org/images/idea-fig1.jpg">

<p>
For this project, I've selected "All in package" and search for tests
"In whole project". 
</p>

<p>
Now all you have to do is add the VM startup parameter that brings in
the AspectJ LTW agent:
</p>

<blockquote>
-javaagent:lib/aspectjweaver.jar
</blockquote>

<p>
The part after the ":" should be the path to your copy of
aspectjweaver.jar. In this case, I've copied the aspectjweaver.jar
from the Spring distribution into the lib directory of my project (it
doesnt' need to be on the project's classpath). You can use the jar
from AspectJ 5 final release too if you want to.
</p>

<img src="http://www.aspectprogrammer.org/images/idea-fig2.jpg">

<p>That's it!</p>

<p>
Save and run the configuration - you should see a green bar.
</p>

<h3>Running a Java application with LTW</h3>


<p>
To run a Java application (class with a "main" method) from your IDE
you can follow exactly the same process and set the javaagent VM
parameter. In Eclipse if you have the AJDT plugin installed, there is
also a dedicated launch type that gives you a few more options here. 
</p>
<p>
In the run configurations dialog, create a new "AspectJ Load-Time
Weaving Application" launch configuration.
</p>

<img src="http://www.aspectprogrammer.org/images/eclipse-fig3.jpg" >

<p>
You'll see a new tab appear, "LTW Aspectpath". By selecting that tab
you can add aspect library jars from your project or from an external
source, and even aspects that are built by another project in your
workspace. 
</p>

<img src="http://www.aspectprogrammer.org/images/eclipse-fig4.jpg" >

<p>
This can be a very convienent way of launching an application with a
diagnostics or instrumentation aspect library for example. Remember
that this all works with standard Java projects - you do not need to
convert your project to an AspectJ project.
</p>

<h3>Getting more information</h3>

<p>
So how did that work? 
</p>

<p>
AspectJ's load-time weaving agent is configured by the use of aop.xml
files. It looks for one or more aop.xml files on the classpath in the
location "META-INF/aop.xml" and aggregates the contents to determine
the weaver configuration. If you look inside spring-aspects.jar,
you'll find a META-INF/aop.xml file in there that defines the Spring
aspects in the library to the weaver. (For full details on the aop.xml
file format and load-time weaving in general, see the AspectJ
Developer's Guide). 
</p>

<p>
Because aop.xml files are aggregated we can define our own project
file and use it to give additional instructions to the weaver. One
useful option to pass is "-showWeaveInfo" which causes the weaving
agent to tell us exactly what it is doing.
</p>

<p>
Create a META-INF folder under the source root of your project
(e.g. "src/META-INF").  In that folder, create a simple aop.xml file as follows:
</p>

<blockquote>
<pre>
<aspectj>
    <weaver options="-showWeaveInfo"/>
</aspectj>
</pre>
</blockquote>

<p>
When you run the tests again, take a closer look at the console
output. Here's the edited output of running the tests on my machine
(I've stripped the package names out for clarity):
</p>

<blockquote>
<pre>
23-Dec-2005 13:45:08 AbstractSpringContextTests loadContextLocations
INFO: Loading config for: org/aspectprogrammer/samples/domain/beans.xml
23-Dec-2005 13:45:08 XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource 
      [org/aspectprogrammer/samples/domain/beans.xml]
weaveinfo Join point 'initialization(void Account.<init>())' 
   in Type 'org.aspectprogrammer.samples.domain.Account'(Account.java:15)
   advised by afterReturning advice from 
   'org.springframework.beans.factory.aspectj.AnnotationBeanConfigurer' 
   (AbstractBeanConfigurer.aj:96)
23-Dec-2005 13:45:08 AbstractRefreshableApplicationContext refreshBeanFactory
INFO: Bean factory for application context  .....
</pre>
</blockquote>

<p>
Notice the weaveinfo message? AspectJ will tell you exactly what it is
doing - which join points in which types are advised by which
aspects. In this case, the "initialization" join point for the default
constructor of Account has been advised by "afterReturning" advice
from the "AnnotationBeanConfigurer" aspect (the advice is defined in
the super-aspect AbstractBeanConfigurer, at L96 in the source file).
</p>

<p>
If you want the AspectJ messages nicely integrated into the log output
(especially useful when it comes to deploying LTW in servers) you can
supply your own message handler class using the
"-XmessageHandlerClass" option. Spring supplies a message handler
class that integrates the AspectJ messages into commons logging output
produced by Spring itself. To use it add </p>

<blockquote>
-XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"
</blockquote>

<p>
to the weaver options in your aop.xml file. This class isn't supplied
in the Spring 2.0 M2 distribution, but is included in M3.</p>

<p>
Here's an extract from a test run using the custom message handling
class:
</p>

<blockquote>
<pre>
23-Dec-2005 14:34:58 AspectJWeaverMessageHandler handleMessage
INFO: [AspectJ] register aspect 
       org.springframework.beans.factory.aspectj.AnnotationBeanConfigurer
...
INFO: [AspectJ] weaving 'org/aspectprogrammer/samples/domain/Account'
23-Dec-2005 14:34:58 AspectJWeaverMessageHandler handleMessage
INFO: [AspectJ] Join point 'initialization(void domain.Account.<init>())' 
       in Type 'org.aspectprogrammer.samples.domain.Account' (Account.java:15)
       advised by afterReturning advice from 
       'org.springframework.beans.factory.aspectj.AnnotationBeanConfigurer' 
       (AbstractBeanConfigurer.aj:96)
23-Dec-2005 14:34:58 AspectJWeaverMessageHandler handleMessage
INFO: [AspectJ] weaving 'org/aspectprogrammer/samples/services/impl/DefaultAccountService'
23-Dec-2005 14:34:58 AspectJWeaverMessageHandler handleMessage
INFO: [AspectJ] weaving 'org/aspectprogrammer/samples/services/AccountService'
23-Dec-2005 14:34:58 AbstractRefreshableApplicationContext refreshBeanFactory
INFO: Bean factory for application context ...
</pre>
</blockquote>


<p>
Note that we're now also getting messages about the all of the aspects
in use and all of the types that the weaver is looking at (the
"weaving ..." messages). Of these, it is only the Account class in our
project that has the @Configurable annotation, and hence it is only
during the weaving of that type that we see a join point woven
message.
</p>

<p>
Being able to get detailed information about exactly what the weaver
is doing can be a useful aid in performance tuning and troubleshooting.
</p>

<h3>Controlling LTW with aop.xml</h3>

<p><b>Controlling the weaving scope:</b></p>

<p>
One of the things you might have noticed if you tried out the custom
message handling class is that the weaver looked at a large number of
types. This includes for example "junit.framework.TestSuite" and
several other types in the junit package. Load-Time Weaving will be
much more efficient if you scope it to just the types in your
application that you actually want to weave. In the case of our sample
application, that's the classes in the org.aspectprogrammer.samples
package and sub-packages. The weaving scope is controlled by the
aop.xml file. We can add one or more include and exclude elements to
control the set of types that the weaver will look at. If there are no
include statements, then the weaver will look at all types that are
not explicitly included. If there are one or more include statements,
then the weaver looks at all included but not excluded types. To weave
only the sample application classes we can update the aop.xml file as
follows:
</p>

<blockquote>
<pre>
<aspectj>

    <weaver options="....">
    	<include within="org.aspectprogrammer.samples..*"/>
    </weaver>

</aspectj>
</pre>
</blockquote>

<p>
The "within" attribute syntax is actually an AspectJ type pattern as
used in the AspectJ pointcut language. For now all you need to know is
that a pattern like "org.xyz.*" will include all types in the
"org.xyz" package, and a pattern like "org.xyz..*" will include all
types in the "org.xzy" package or any sub-package thereof.
</p>

<p><b>Controlling which aspects are used:</b></p>

<p>
The spring-aspects.jar contains several aspects. Since they are all defined by the
META-INF/aop.xml file in the jar, they will all be registered and used
for weaving. What if you want to use the @Configurable
(AnnotationBeanConfigurer) aspect, but not the @Transactional support
(AnnotationTransactionAspect)? You can control this via the aop.xml
file too. This time you need to use the <aspects> element:

<blockquote>
<pre>
<aspectj>

    <!-- definitions of aspects available to the weaver, and which
         ones should be used or not used -->
    <aspects>
       <exclude within="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>

    </aspects>

    <!-- control over the weaver itself and the types that will be
         woven -->
    <weaver options="....">
    	<include within="org.aspectprogrammer.samples..*"/>
    </weaver>

</aspectj>
</pre>
</blockquote>

<p>
The include and exclude options in the <aspects> element work the same
way they do in the <weaver> element: if there are no include elements
specified then all defined aspects that are not explicitly excluded
are included. If there are one or more include elements, then all
included but not excluded aspects are used. 
</p>

<h3>What if I can't use Java 5?</h3>

<p>
For development, of course you can use Java 5! 
</p>

<p>
By which I mean that even if you are developing an application that
has to run under 1.3 or 1.4, you can still use a Java 5 VM with
-source and -target compiler flags set appropriately. The only
requirement to use load-time weaving in the way we have been
describing is that you run the tests on a 1.5 VM. 
</p>

<p>
In part II, I'll be looking at integration testing and
deployment, and there I'll cover your options if you really can't use
Java 5 to run your test server.
</p>

<p>(Note: as mentioned at the start of this article, part II will be forthcoming just as soon as I get some more writing cycles!)</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/02/a_practical_gui_2.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Mon, 20 Feb 2006 15:15:43 +0100</pubDate>
</item>
<item>
<title>What's on your bookshelf?</title>
<description><![CDATA['
<p>
One of the things I like to do when I visit a client is to take a look
at the books on their bookshelf (and those of the other members of
their team). I do this for three reasons. </p>

<p>
Firstly I'm always on the lookout for good books that I haven't read
yet. If I see an interesting title that I've not read, I'll ask if
it's any good.</p>

<p>Secondly, it tells me a lot about the background and mindset of the
person I'm working with: you can often tell whether someone is
interested primarily in the web-tier, data-tier, or domain modelling;
you can tell what language they're likely to be familiar with when
you're talking to them, and what technical background you can assume;
you can tell whether they like abstract thinking or concrete
how-tos. You can learn a lot from a few books...</p>

<p>The third reason is to guage how well different technologies are
penetrating the marketplace. Seeing lots of "Pragmatic Ruby" books?
That tells you that Ruby has made it onto the corporate developer's
radar (it <i>doesn't</i> tell you whether or not Ruby is actually
being used of course - you'll need to ask some more questions to find
that out).</p>

<p>If I see books such as "Professional Java Development with the
Spring Framework", "Pro Spring", and "Domain Driven Design" on the
bookshelf that gives me a good feeling. The purpose of this entry is
to highlight that there's a new book on the block I'm going to be
looking out for: "POJOs in Action" by Chris Richardson. With a title
like that, you may be unclear exactly what you're going to get. Rest
assured, this is <i>not</i> a "lightweight" book - it has plenty of
detailed discussion. The book is especially valuable for two reasons
(maybe more!, but I'll pick on two here):</p>

<ul>
 <li>It compares and contrasts different implementation techniques and
 approaches side by side. Want to see how dynamic paged queries pan
 out in iBATIS vs JDO vs Hibernate for example? Go to chapter 11. Same
 for detached object support, optimistic locking and more. There are
 also discussions on how to arrange business logic and the implications
 of EJB 3 ("if you are already using lightweight technologies such as
 Spring, Hibernate, and JDO you will be disappointed"). Too often in
 the software industry we tend to see things in black and white. The
 truth is that there are many shades of gray. When you see things put
 side by side and compared, you are better able to evaluate the
 strengths and weaknesses of different approaches, and the likely
 consequences of your architectural decisions.</li>
 <li>Chris encourages the reader to think for themselves, and
 not just rely on fashion and propaganda: "If we blindly used POJOs
 and lightweight frameworks, we would be repeating the mistake the
 enterprise Java community made with EJBs". (So here are the arguments
 for and against...).
 </li>
</ul> 

<p>I've only read part 1 and part 3 so far, but I've seen enough
already to trigger that knowing smile if I see a copy of this on the
bookshelf...</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/01/whats_on_your_b.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Mon, 30 Jan 2006 20:52:48 +0100</pubDate>
</item>
<item>
<title>Typed Advice in Spring 2.0 (M2)</title>
<description><![CDATA['
<p>I spent a few days last week working on argument binding in
advice for the new aop schema and @AspectJ support in Spring 2.0. In
this article, I'll explain how the new support works and how you can
use it.</p>

<p>First some background for those of you who haven't been following
along with developments in Spring 2.0. Spring 2.0 supports
schema-based configuration as well as DTD based. Schema gives better
validation, a better experience in the IDE (in terms of code
completion etc.), and a more concise and readable configuration
file. It's important to state that <i>however</i> you specify your
bean definitions (DTD-based, schema-based, script-based,...)
everything comes down to the same bean metadata model at runtime so
the different styles are compatible and interchangeable. For AOP
support, we have the schema
http://www.springframework.org/schema/aop/spring-aop.xsd.</p>

<p>This is what a skeletal config file looks like using the new schema
support:</p>

<blockquote>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<beans 
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"      
  xsi:schemaLocation="http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

       
</beans>
</pre>
</blockquote>

<p>The various AOP-related definitions are placed inside an
<aop:config> element. Here's a cut-down example of a simple
aspect from the test suite:</p>

<blockquote>
<pre>
<aop:config>
  <aop:aspect id="beforeAdviceBindingTests" ref="testAspect">
    <aop:advice 
	kind="before"
	method="oneIntArg"
	pointcut="execution(* setAge(..)) and args(age)"
    />
  </aop:aspect>
</aop:config>

<bean id="testAspect"
      class="org.springframework.aop.aspectj.AdviceBindingTestAspect"/>


</pre>
</blockquote>

<p>I'm declaring an aspect called "beforeAdviceBindingTests", the
aspect instance (holding the state for the aspect) is the bean
"testAspect". This is just a regular bean, that can be configured by
Spring in all the usual ways. The implementing class (in this case,
AdviceBindingTestAspect") is just a regular POJO. The aspect contains
only one piece of advice, which is "before" advice (you can specify
one of the five AspectJ advice kinds in the "kind" attribute: before,
afterReturning, afterThrowing, after, or around). The advice body is
implemented by the method "oneIntArg", and the associated pointcut
expression matches the execution of any method named "setAge" taking a
single int argument. The argument is bound to a parameter named
"age".</p>

<p>What this all boils down to, is that any time a matching method
executes on a Spring bean in the application context, the "oneIntArg"
method will be called on the "testAspect" bean, passing the age as a
parameter.</p>

<p>Note that we've gained two important things here: the aspect class
and advice method do not need to implement any special interfaces, and
we have typed advice. By typed advice, I mean that the advice
signature declares the parameters it needs, and gets passed those
parameters only, preserving type information. Contrast this to typical
AOP framework approach of always passing an Object[] from which the
advice body must pick-and-choose and cast as needed.</p>

<p>To complete this introductory example, here's the aspect class:</p>

<blockquote>
<pre>
public class AdviceBindingTestAspect {

  public void oneIntArg(int age) {
     // whatever we like here, using "age" as needed
  }

}
</pre>
</blockquote>

<p>The combination of the class declaration and XML definitions has
the same effect as the following AspectJ aspect declaration:</p>

<blockquote>
<pre>
public aspect AdviceBindingTestAspect {

  before(int age) : execution(* setAge(..)) && args(age) {
     // whatever we like here, using "age" as needed
  }

}
</pre>
</blockquote>

<p>So let's turn our attention to the main subject of this article:
how does the binding support for typed advice work and how can you use
it?</p>

<h2>Determining argument names and types</h2>

<p>Look at the AspectJ aspect definition I gave you above for a
moment. The advice declares a parameter, "age" of type int, and in the
pointcut expression, "age" is bound by the "args" clause. The
expression "args(age)" actually does two things: it restricts matching
to join points where there is a single argument of type "int" (the
type of "age"), and it binds the argument value to the "age"
parameter.</p>

<p>In the Spring 2.0 version, we have exactly the same
pointcut expression, but the method declaring the "age" parameter is
defined elsewhere - in the AdviceBindingTestAspect class. Java
reflection lets us down at this point. All we can determine is that
the "oneIntArg" method takes a single parameter of type "int": we
can't determine the parameter names. In this case since the advice
method takes only one argument, and the pointcut binds only one
argument, you could deduce that the int parameter must corresponding
to "age", but when binding multiple arguments this may not always be
possible. Matching argument names to argument types is critical to the
matching process, and of course to passing arguments to the advice
method itself.</p>

<p>Spring 2.0 resolves this issue by supporting a number of
"ParameterNameDiscoverers". ParameterNameDiscoverer is a strategy
interface, and multiple implementations are arranged in a
ChainOfResponsibility. Spring attempts to discover argument names by
applying the following strategies in turn:</p>

<ol> 
  <li>If the argument names are explicitly specified, then the
  given argument names are used. Argument names can be specified in
  one of two ways: 
  <ul> 
    <li>They can be specified using the
  "arg-names" attribute of the &lt:aop:advice> element. In the
  example we've been working with so far, we could have specified
  arg-names="age" for example. The string value of this attribute
  takes a comma-delimited list of argument names.  
    </li> 
    <li>If using
  the @AspectJ notation to define aspects, then the advice annotations
  (@Before, @AfterReturning, @AfterThrowing etc.)  all support an
  optional "argNames" attribute. Again, this takes a comma-delimited
  list of argument names.
    </li> 
  </ul>
 </li> 
  <li>If argument names have
  not been explicitly specified, then we attempt to recover the
  argument names from the class file of the class defining the
  method. This is possible so long as the class was compiled with
  debug information (at a minimum, -g:vars). From the user perspective
  this is certainly the easiest and most natural way of obtaining
  argument names. Compiling with debug information makes it much
  easier to diagnose problems in running code (stack traces can
  include source file and line number information for example). If you
  are worried about overhead, then -g:vars will ensure that the class
  files contain the minimum amount of debug information
  (LocalVariableTables) that Spring needs for this mechanism to
  work. What are the downsides of -g:vars? Your class files will be
  very slightly larger (this will not be an issue in the vast majority
  of cases), certain optimisations that the compiler would otherwise
  make (pertaining to the removal of unused local variables for
  example) will not be made, and reverse engineering of your
  application is slightly easier. If you are worried about the sound
  of lost optimisations, run some performance tests - you may well
  find the effect is not noticeable.  
  </li> 
  <li>If local variable table information is not available for the
  method, then Spring tries to deduce the argument names from the
  pointcut expression and the signature of the method. Consider a
  method that takes 2 parameters, one of a reference type, and one of a
  primitive type. Given a pointcut expression that binds one variable
  using "this()" and one variable using "args()" we know that the
  primitive argument must be the one bound by args, because "this"
  must be a reference type. In the AspectJ pointcut language all of
  the binding pointcut designators have two forms: one that takes a
  type name, and one that takes a variable name. For example, I can
  write "this(Float)" which simply matches any join point where "this"
  is an instance of Float, or I can write "this(f)" which matches any
  join point where "this" is an instance of the type of "f", and binds
  the value to the "f" argument. To find out what the variables in the
  pointcut expression are, Spring uses the simple assumption that any
  string inside a binding pointcut expression that is a valid Java
  identifier name and starts with a lower case letter is a variable,
  and anything else is a type.
  </li>
</ol>

<h2>Using typed advice</h2>

<p>Let's look at some of the features available.</p>

<h3>Information about the current join point</h3>

<p>Firstly, if any advice method has a first argument of type
org.aspectj.lang.JoinPoint then a JoinPoint instance representing the
current join point will be passed to the advice method. This provides
equivalent functionality to the use of 'thisJoinPoint' within AspectJ
advice. The JoinPoint object can be useful when writing generic advice
that applies across a wide range of join points since it can give you
reflective information about the join point, such as the method being
executed under the join point. For around advice, you must use the
type org.aspectj.lang.ProceedingJoinPoint instead of JoinPoint - this
subtype of JoinPoint provides the critical "proceed" method that you
must call when you wish to proceed with the computation under the join
point.</p>
<p>As an alternative to JoinPoint, a first parameter of type
org.aspectj.lang.JoinPoint.StaticPart will be passed an instance of
JoinPoint.StaticPart instead of JoinPoint. This provides only
statically available information about the join point (method and
signature for example) but not the arguments and target object for the
invocation being advised. Use of JoinPoint.StaticPart instead of
JoinPoint may allow optimisations inside the AOP framework in the
future. For now it is no more efficient than JoinPoint when using
Spring AOP.</p>

<p>Here's a simple example using JoinPoint from the test suite;</p>

<p>XML fragment for advice definition</p>
<blockquote>
<pre>
  <aop:advice
    kind="afterReturning"
    method="needsJoinPoint"
    pointcut="execution(* getAge())"
  />
</pre>
</blockquote>

<p>Advice method declaration:</p>

<blockquote>
<pre>
public void needsJoinPoint(JoinPoint tjp) {
   this.collaborator.needsJoinPoint(tjp.getSignature().getName());
}
</pre>
</blockquote>

<p>And the test case that verifies a suitable JoinPoint object is
passed to the advice method:</p>

<blockquote>
<pre>
public void testNeedsJoinPoint() {
    mockCollaborator.needsJoinPoint("getAge");
    mockControl.replay();
    testBean.getAge();
    mockControl.verify();
}
</pre>
</blockquote>

<p>(I'll write more about the approach to testing aspects I've taken
here in a separate post....)</p>

<h3>Method execution arguments</h3>

<p>You've already seen an example of using "args" to bind the
arguments at the method execution join point (remember than Spring AOP
only supports method execution join points). You can read up on "args"
(and all of the other AspectJ pointcut designators" in the AspectJ
programming guide at the AspectJ website. "args" restricts matching
only to the execution join points for methods that have a
corresponding number of arguments, and can bind one or more of those
arguments.</p>

<p>Here are some very simple examples:</p>

<dl>
  <dt>args()</dt>
  <dd>matches the execution of methods that take no arguments (so
  clearly there is nothing to bind here</dd>
  <dt>args(..)</dt>
  <dd>matches the execution of methods that take zero or more
  arguments (but still performs no binding)</dd>
  <dt>args(x,..)</dt>
  <dd>matches methods with one or more parameters, that have a first
  parameter of the type of "x", and bind the argument value to
  "x"</dd>
  <dt>args(x,*,*,s,..)</dt>
  <dd>a more contrived example. Matches the execution of methods that
  take at least 4 parameters. The first parameter must be of the type
  of "x", and the argument value will be bound to "x". The second and
  third parameters may be anything, but the fourth parameter must be
  of the type of "s" and the argument value will be bound to "s".</dd>
</dl>

<p>By combining named arguments, "*" (which matches a single argument
of any type), and ".." (which matches zero or more arguments of any
type) you can expose exactly the context information you need to the
advice that executes at the join point.</p>


<h3>Method return values</h3>
<p>If your advice needs access to the return value of a method execution join point you can use afterReturning advice and bind the returned value using the "returning" attribute.</p>

<p>Here's a simple example:</p>

<blockquote>
<pre>
<aop:advice
  kind="afterReturning"
  method="afterGettingName"
  returning="name"
  pointcut="execution(* getName())"
/>
</pre>
</blockquote>

<p>Couple this with the method definition</p>

<blockquote>
<pre>
public void afterGettingName(String name) {
   // advice body
}
</pre>
</blockquote>

<p>and "afterGettingName" will be invoked on every successful return from an invocation of "getName" with the return value passed in as the parameter 'name'.</p>

<p>Note that the "returning" clause is doing two things here: it is restricting matching to only those method execution join points that return an instanceof String (the type of 'name'), and it is binding the return value to the parameter name.</p>

<p>If you use the returning attribute with a type name (rather than a variable name) it restricts matching to only those join points where the return value is an instance of the given type (but does not pass the actual return value to the advice).</p>

<h3>Thrown exceptions</h3>
<p>afterThrowing advice runs when an advised join point exits by throwing an exception. Often it's useful to have access to the actual exception that was thrown in the advice. You can use the "throwing" attribute to do this.</p>

<p>Consider the following aspect definition:</p>

<blockquote>
<pre>
<aop:aspect id="legacyDaoExceptionTranslator" ref="exceptionTranslator">
  <aop:pointcut name="legacyDaoMethodExecution"
                   expression="execution(* org.xzy.dao..*.*(..))"/>
  <aop:advice 
     kind="afterThrowing"
     method="translateException"
     pointcut-ref="legacyDaoMethodExecution"
     throwing="hibEx"
  />
</aop:aspect>
</pre>
</blockquote>

<p>and the accompanying method definition</p>

<blockquote>
<pre>
  public void translateException(HibernateException hibEx) {
    throw SessionFactoryUtils.convertHibernateAccessException(hibEx);
  }
</pre>
</blockquote>

<p>The advice will run whenever a legacy DAO method (written without Spring ;) ) throws a HibernateException, passing the thrown exception to the advice method where it can be converted to a Spring DataAccessException and rethrown.</p>

<p>(yes, that is all the code you need :) )</p>

<h3>The executing instance</h3>

<p>Consider the execution of a method that would result from a call to
"testBean.getAge()". What if my advice needs access to the testBean
instance on which the method executes? The pointcut designators "this"
and "target" provide access to this instance. In AspectJ, both this
and target are bound to the executing instance at the join point. In
Spring AOP an advised object will be proxied. Using the "this"
pointcut designator will bind the proxy object (the value of "this"
for the object instance that represents the bean), and using the "target"
pointcut designator will bind the true target.</p>

<p>For example:</p>	      

<blockquote>
<pre>
<aop:advice
    kind="afterReturning"
    method="setAgeOnATestBean"
    pointcut="execution(* setAge(..)) and args(age) and this(bean)"
    arg-names="age,bean"
/>
</pre>
</blockquote>

<p>This advice passes with the following test case:</p>

<blockquote>
<pre>
public void testOneIntAndOneObjectArgs() {
 mockCollaborator.setAgeOnATestBean(5,testBean);
 mockControl.replay();
 testBean.setAge(5);
 mockControl.verify();
}
</pre>
</blockquote>

<p>If we use "target" instead of "this": "execution(* setAge(..)) and
args(age) and target(bean)" the test would fail. The mock collaborator
would be expecting "testBean" (which will be an AOP proxy) to be
passed as an argument, but because we used "target", the proxy target
object will be passed instead. This is demonstrated by the following
test case:</p>

<blockquote>
<pre>
public void testTargetBinding() {
 Advised advisedObject = (Advised) testBean;
 TestBean target = (TestBean) advisedObject.getTargetSource().getTarget();
 mockCollaborator.setAgeOnATestBeanTarget(5,target);
 mockControl.replay();
 testBean.setAge(5);
 mockControl.verify();
}
</pre>
</blockquote>

<h3>Annotations</h3>

<p>The AspectJ pointcut language provides rich support for matching
and binding annotations. For Spring applications, the two most useful
pointcut designators are probably "@annotation" and "@within".</p>

<p>"@annotation" matches when the subject of the join point has an
annotation of the given type. For Spring, this means when the method
being advised has an annotation of the given type. For example, the
advice:
</p>

<blockquote>
<pre>
<aop:advice
    kind="before"
    method="beforeTxMethodExecution"
    pointcut="@annotation(tx)"
/>
</pre>
</blockquote>

<p>when coupled with the signature of the "beforeTxMethodExecution" method
(in order to determine the type of annotation that "tx" will
match):</p>

<blockquote>
<pre>
public void beforeTxMethodExecution(Transactional tx) {
  if (tx.readOnly()) { 
    ...
}
</pre>
</blockquote>

<p>will match the execution of any bean method that has the
"@Transactional" annotation. Remember that Spring is implicitly
limited to execution join points only. The corresponding pointcut when
using the full AspectJ language would be: "execution(* *(..)) &&
@annotation(tx)".</p>

<p>"@within" matches any join point within a type that has a given
annotation. So to match execution of any bean methods within a type
that has the "@Transactional" annotation we could write:</p>

<blockquote>
<pre>
<aop:advice
    kind="before"
    method="beforeTxMethodExecution"
    pointcut="@within(tx)"
/>
</pre>
</blockquote>

<h2>The @AspectJ style</h2>
<p>All of the examples I've shown you so far have used the XML schema
form of aspect definition. Spring 2.0 can also make use of aspects
written using the <a href="http://www.eclipse.org/aspectj/doc/released/adk15notebook/ataspectj.html">"@AspectJ style"</a>. It's out of scope for this blog entry to give a full
tutorial on @AspectJ, but here's a quick example of how it
works...</p>

<p>The first thing that you need to do is enable auto-proxying from
@AspectJ aspects in your application context. This is trivial using
the new schema support for AOP:</p>

<blockquote>
<pre>
<aop:aspectj-autoproxy/>
</pre>
</blockquote>

<p>Then if we define any beans in the application context that are
actually @AspectJ aspects (annotated using the AspectJ annotations),
Spring will automatically use those beans to configure AOP
proxies. The transactional method execution example, written as an
@AspectJ aspect, would look like this:</p>

<blockquote>
<pre>
@Aspect
AnnotationDrivenTransactionManager {

  @Before("execution(* *(..)) && @annotation(tx)")
  public void beforeTxMethodExecution(Transactional tx) {
     // ...
  }

}
</pre>
</blockquote>

<p>To use this aspect, we would simply add a definition such as the
following to the configuration.</p>

<blockquote>
<pre>
<bean class="...AnnotationDrivenTransactionManager" >
</pre>
</blockquote>

<p>of course, all of the usual dependency injection capabilities are
avaible for configuring the aspect.</p>

<p>One nice advantage of using this style of aspect definition, is
that you can switch from using Spring AOP proxying to full
AspectJ weaving simply by removing the "aspectj-autoproxy" element
from your configuration, and compiling (or binary weaving) your
application using AspectJ instead. If you are dependency injecting
those aspects, then either their bean definitions have to be changed slighty to
obtain the aspect instance for injection via an AtAspectJFactoryBean,
or you could simply annotate the aspects as @Configurable and use the
spring-aspects.jar aspect library.</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/01/typed_advice_in.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Wed, 18 Jan 2006 15:01:13 +0100</pubDate>
</item>
<item>
<title>AspectJ and AJDT going strong...</title>
<description><![CDATA['
<p>Matt Chapman pulled together the download statistics for AspectJ and AJDT for the month of December 2005:</p>
<ul>
<li>AspectJ - 7,400</li>
<li>AJDT - 20,000</li>
</ul>
<p>It's great to see the numbers looking so healthy, and interesting to note just how many folks are getting AspectJ through the integrated Eclipse tooling (AJDT).</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/01/aspectj_and_ajd.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Tue, 10 Jan 2006 15:36:51 +0100</pubDate>
</item>
<item>
<title>Eclipse AspectJ book examples now packaged for Eclipse 3.1 & AspectJ 5</title>
<description><![CDATA['
<p>Long overdue, but I've finally repackaged all of the examples from the <a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">Eclipse AspectJ</a> book for easy installation on Eclipse 3.1 and the latest AJDT. Here's the <a href="http://www.aspectprogrammer.org/eclipseaspectj">download link and installation instructions</a>.</p>
<p>Since the book was published, AJDT has introduced the Cross References View. If you are following along with the text, relationship information (such as "advises" and "advised by") is now shown in the Cross References View and not in the outline view. To run the junit tests for any project, simply select the testsrc folder in the package explorer and "run as... junit test" from the context menu. To run the main Simple Insurance application, select insurance.ui.SimpleInsuranceApp in the package explorer and "run as... SWT application" from the context menu. If you get an error about a missing dll, you're probably running it as a "Java application", and not as an "SWT application".</p>
<p>This version of the download includes all of the needed dependencies, bar MySQL which you will still need to download and install yourself to follow along with all of the Hibernate related examples.</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2006/01/eclipse_aspectj.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Mon, 09 Jan 2006 11:45:27 +0100</pubDate>
</item>
<item>
<title>Something you *don't* want to see...</title>
<description><![CDATA['
<p>For once, this is <i>not</i> a post about AspectJ!</>

<p>Not wanting to name names, but I was using the <b>woolwich cashpoint in southampton airport terminal building</b> last night. I put my card into the machine, entered my pin, selected the amount of cash I wanted to withdraw.... whirr, whirr, whirr, clunk. Blank screen for several seconds, then the cash machine started rebooting! The boot sequence of a cash machine that has your card in it is <b>not</b> something you want to see. The thing that surprised me as the cash machine slowly came back into life is that is was running on.......... OS/2 Warp!!! There's an operating system I haven't seen in a long time. Making some educated guesses, that probably means the operator is a "blue" company, and that the back end was probably CICS running on Z/OS - which gives me some comfort as the 2PC probably worked and I won't be charged for the cash I never got (though I'm still going to check my statement ;)).</p>
<p>I never got my card back of course (the machine swallowed it for good - which if you think about it is all you can safely design it to do, since if the user has walked away in disgust in the interim period, spitting the card back out wouldn't exactly be safe). So I had to call my bank and cancel the card. It should take about 3 working days to get me a new one they reckon. So I have no card and no cash in the run-up to Christmas :(. </p>
<p>And yes, this is a true story, not just a ploy to get you to buy the round this Christmas!!</p>

' ]]></description>
<link>http://www.aspectprogrammer.org/blogs/adrian/2005/12/something_you_d.html</link>
<author>adrian@aspectprogrammer.org (adrian)</author>
<pubDate>Wed, 21 Dec 2005 11:01:59 +0100</pubDate>
</item>
<item>
<title>Welcome</title>
<description><![CDATA['This is my new Blog.I am professor of computer science at the University of Nantes, France and a member of the INRIA ATLAS team. I am interested in the research area of model engineering. I am planning to use this Blog to discuss ideas on this research area and may be more.You may contact me on my secondary google adress bezivin{atNoSpam}google.com. Although this is not may main e.mail address, I' ]]></description>
<link>http://jbezivin.blogspot.com/2005/10/welcome.html</link>
<author>noreply@blogger.com (Jean Bezivin)</author>
<pubDate>Mon, 31 Oct 2005 08:33:58 +0100</pubDate>
</item>
<item>
<title>Welcome</title>
<description><![CDATA['This is my new Blog.I am professor of computer science at the University of Nantes, France and a member of the INRIA ATLAS team. I am interested in the research area of model engineering. I am planning to use this Blog to discuss ideas on this research area and may be more.You may contact me on my secondary google adress bezivin{atNoSpam}google.com. Although this is not may main e.mail address, I' ]]></description>
<link>http://jbezivin.blogspot.com/2005/10/welcome.html</link>
<author>noreply@blogger.com (Jean Bezivin)</author>
<pubDate>Mon, 31 Oct 2005 08:33:58 +0100</pubDate>
</item>
<item>
<title>Every metamodel is a treaty</title>
<description><![CDATA['This is a copy of a text previously posted Friday, December 10, 2004 on my previous Blog.------------------------------ There are very narrow relations between DSLs, Metamodels and Ontologies. Many lessons from ontology engineering are of relevance to model-driven engineering. This is why it may be interesting to read a recent paper by Tom Gruber, one of the most influential researcher in ' ]]></description>
<link>http://jbezivin.blogspot.com/2005/10/every-metamodel-is-treaty.html</link>
<author>noreply@blogger.com (Jean Bezivin)</author>
<pubDate>Mon, 31 Oct 2005 08:30:27 +0100</pubDate>
</item>
<item>
<title>Every metamodel is a treaty</title>
<description><![CDATA['This is a copy of a text previously posted Friday, December 10, 2004 on my previous Blog.------------------------------ There are very narrow relations between DSLs, Metamodels and Ontologies. Many lessons from ontology engineering are of relevance to model-driven engineering. This is why it may be interesting to read a recent paper by Tom Gruber, one of the most influential researcher in ' ]]></description>
<link>http://jbezivin.blogspot.com/2005/10/every-metamodel-is-treaty.html</link>
<author>noreply@blogger.com (Jean Bezivin)</author>
<pubDate>Mon, 31 Oct 2005 08:30:27 +0100</pubDate>
</item>
<item>
<title>U-Languages or M-Languages?</title>
<description><![CDATA['This is a copy of a text previously posted  Saturday, December 11, 2004 on my previous Blog.------------------------------ I cannot resist quoting Stefan Tilkov's blog : http://www.innoq.com/blog/st/:------------------------------" ... Once upon a time, I used to believe the OMG shared the vision of modeling based on custom meta-models &mdash; after all, what MS now claims as its innovation is ' ]]></description>
<link>http://jbezivin.blogspot.com/2005/10/u-languages-or-m-languages.html</link>
<author>noreply@blogger.com (Jean Bezivin)</author>
<pubDate>Mon, 31 Oct 2005 08:27:44 +0100</pubDate>
</item>
<item>
<title>U-Languages or M-Languages?</title>
<description><![CDATA['This is a copy of a text previously posted  Saturday, December 11, 2004 on my previous Blog.------------------------------ I cannot resist quoting Stefan Tilkov's blog : http://www.innoq.com/blog/st/:------------------------------" ... Once upon a time, I used to believe the OMG shared the vision of modeling based on custom meta-models &mdash; after all, what MS now claims as its innovation is ' ]]></description>
<link>http://jbezivin.blogspot.com/2005/10/u-languages-or-m-languages.html</link>
<author>noreply@blogger.com (Jean Bezivin)</author>
<pubDate>Mon, 31 Oct 2005 08:27:44 +0100</pubDate>
</item>
<item>
<title>Grails Podcast Episode 129: Interview with Ken Kousen, author of "Making Java Groovy";"Glen Smith,Sven Haiges</title>
<description><![CDATA[ ]]></description>
<link>'Don't Panic! After a long hiatus, it's back with a&nbsp;vengeance!&nbsp;<br><div>Welcome to the reboot of Grails Podcast for 2012! We are back on the horse and looking forward to a bunch of fresh Grails-related Podcast content.<br><div>This week we inter</link>
<author>1332750960</author>
<pubDate>Thu, 01 Jan 1970 01:00:00 +0100</pubDate>
</item>
</channel>
</rss>

