<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" version="2.0">
  <channel>
    <title>SpringOne 2GX</title>
    <link>http://www.springone2gx.com</link>
    <description>The best value in the Java/Open Source conferencing space hands down</description>
    <item>
      <title>Why Eclipse leaves me wanting</title>
      <link>http://www.springone2gx.com/blog/howard_lewis_ship/2010/03/why_eclipse_leaves_me_wanting?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I think I've come to understand why Eclipse leaves me always feeling a bit frustrated.  Yes, it is more stable than IDEA, uses less memory, has some documentation, and a lot of acceptance ... but even so, it just leaves me cold (and I was an early adopter, signed up for the beta way back in 2000!).

&lt;h3&gt;Keystrokes are &lt;strong&gt;not&lt;/strong&gt; modal&lt;/h3&gt;

&lt;p&gt;
The fact that I can type a common keystroke into an Eclipse window and not know what it will do is painful. How a keystroke is interpreted depends on what perspective is active, what view or editor has focus, and what kind of data is being edited in the editor.  That's &lt;strong&gt;dead wrong&lt;/strong&gt;; keystrokes are about muscle memory, and muscle memory remembers motion, not context. The end result is that I get frustrated hitting keystrokes and seeing nothing happening. It doesn't help that I cycle between Mac and a PC on most days.

&lt;h3&gt;You &lt;strong&gt;can't&lt;/strong&gt; have it your way&lt;/h3&gt;

&lt;p&gt;
A tool as powerful and extensible as Eclipse walks the tightrope of offering lots of features and customizations without overwhelming the user. Alas, Eclipse is lying in a broken heap fifty feet below that tightrope.  Eclipse has an unending set of options and defaults for things I don't care about, but anything I do care about seems to never be presents.  Here's a few ideas of the top of my head:

&lt;ul&gt;
&lt;li&gt;Stop running launches when I close the project (I often have to kill them from the command line)&lt;/li&gt;
&lt;li&gt;Give me a quick way to stop all running launches&lt;/l1&gt;
&lt;li&gt;Why so many steps to implement an interface? It's the second most common thing I do!&lt;/li&gt;
&lt;li&gt;How about a button to quickly relaunch the current running launch?&lt;/li&gt;
&lt;li&gt;Why are the available refactorings so paltry and where are the 3rd party ones?
&lt;/ul&gt;

&lt;h3&gt;Who's eating their own dog food?&lt;/h3&gt;

&lt;p&gt;When I used IDEA, I was constantly struck by little details that showed that the IDE developers were also its prime users.  For example, it has open-type and open-resource dialogs much like Eclipse ... but each recognizes the keystroke for the other, so that if you mistakenly activate the open-type dialog, you just hit the normal keystroke to switch over to open-resource. Eclipse makes you cancel the dialog first.

&lt;p&gt;Another example: in IDEA if you rename a field, it notices the getter and setter and will offer to rename those as well.

&lt;p&gt;IDEA also has lots of quick fixes everywhere, such as "implement this interface" and lots of other tiny, cool things I miss every single day I use Eclipse. It's been about a year since I gave up on IDEA and I still miss it.

&lt;p&gt;Is it cultural or organizational?  Eclipse gives me the impression that day-to-day developers either have no concept of how the IDE gets used (and what rough spots are causing some serious chafing) &lt;em&gt;OR&lt;/em&gt; they are somehow prohibited from fixing things that are obviously wrong. 

&lt;h3&gt;If you love IDEA so much why don't you marry it?&lt;/h3&gt;

&lt;p&gt;So why don't I use IDEA anymore?  Two main reasons:  first, it's become very bloated, to the point that unless you go in and shut off a ton of features, it's unusable on my hardware. Merlyn has the same problem doing GWT work on his MacBook Pro ... all the help it gives you comes at a cost in terms of CPU and memory utilization and some instability.

&lt;p&gt;Secondly, I tried (even before IDEA went open source) to use IDEA in my training labs and I hit a stone wall of non-acceptance. Switching to Eclipse was a benefit to my students since, even running in Ubuntu instead of Windows, it was familiar and easy to navigate. It also out-performs IDEA inside my Ubuntu Virtual Machine.  I simply lack the ability to switch between the two on a constant basis without getting completely confused and frustrated. I had to choose  one, and I chose Eclipse: stable and accepted, even if it is brain dead.

&lt;h3&gt;Why call it Ugly?&lt;/h3&gt;

&lt;p&gt;One thing I don't get is how many people claim Eclipse is "ugly" and IDEA "beautiful".  I found IDEA to be overly chock-full of modal dialogs and a number of improperly resized (or non-resizable) dialogs and windows. It's a real dog's breakfast in terms of UI, and has the classically ugly Swing look and feel.

&lt;p&gt;I've always found Eclipse to look sharp and somewhat elegant. You can have a debate about the technical merits of SWT vs. AWT and Swing, or the ability to tune Swing to look like SWT ... but SWT out of the box is simply a better L&amp;F visually.  

&lt;p&gt;On a Mac they both suck at keyboard navigation, though.

&lt;p&gt;There, I've vented.  See what going cold-turkey from Twitter can do?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4110180-7613338214682473566?l=tapestryjava.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TapestryCentral/~4/t7UqTO_DIUQ" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 12 Mar 2010 08:00:06 CST</pubDate>
      <guid isPermaLink="true">tag:blogger.com,1999:blog-4110180.post-7613338214682473566</guid>
      <dc:creator>Howard Lewis Ship</dc:creator>
    </item>
    <item>
      <title>Weld extensions alpha available</title>
      <link>http://www.springone2gx.com/blog/pete_muir/2010/03/weld_extensions_alpha_available?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description />
      <pubDate>Thu, 11 Mar 2010 16:00:17 CST</pubDate>
      <guid isPermaLink="true">http://in.relation.to/Bloggers/WeldExtensionsAlphaAvailable</guid>
      <dc:creator>Pete Muir</dc:creator>
    </item>
    <item>
      <title>simplejson 2.1.0</title>
      <link>http://www.springone2gx.com/blog/bob_ippolito/2010/03/simplejson_2_1_0?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://undefined.org/python/#simplejson"&gt;simplejson&lt;/a&gt; (&lt;a href="http://simplejson.googlecode.com/svn/tags/simplejson-2.1.0/docs/index.html"&gt;documentation&lt;/a&gt;) is a simple, fast, complete, correct and extensible &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt; (&lt;a href="http://www.ietf.org/rfc/rfc4627.txt"&gt;RFC 4627&lt;/a&gt;) encoder/decoder for Python 2.5+.  It is pure Python code with no dependencies, but features an optional C extension for speed-ups.
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://undefined.org/python/#simplejson"&gt;simplejson&lt;/a&gt; 2.1.0 is a major update with several new features and bug-fixes:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     Decimal serialization officially supported for encoding with use_decimal=True. For encoding this encodes Decimal objects and for decoding it implies parse_float=Decimal
 &lt;/li&gt;

 &lt;li&gt;
     Python 2.4 no longer supported (may still work, but no longer tested)
 &lt;/li&gt;

 &lt;li&gt;
     Decoding performance and memory utilization enhancements &lt;a href="http://bugs.python.org/issue7451"&gt;http://bugs.python.org/issue7451&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     JSONEncoderForHTML class for escaping &amp;amp;, &amp;lt;, &amp;gt; &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=66"&gt;http://code.google.com/p/simplejson/issues/detail?id=66&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Memoization of object keys during encoding (when using speedups)
 &lt;/li&gt;

 &lt;li&gt;
     Encoder changed to use PyIter_Next for list iteration to avoid potential threading issues
 &lt;/li&gt;

 &lt;li&gt;
     Encoder changed to use iteritems rather than PyDict_Next in order to support dict subclasses that have a well defined ordering &lt;a href="http://bugs.python.org/issue6105"&gt;http://bugs.python.org/issue6105&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     indent encoding parameter changed to be a string rather than an integer (integer use still supported for backwards compatibility) &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=56"&gt;http://code.google.com/p/simplejson/issues/detail?id=56&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Test suite (python setup.py test) now automatically runs with and without speedups &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=55"&gt;http://code.google.com/p/simplejson/issues/detail?id=55&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Fixed support for older versions of easy_install (e.g. stock Mac OS X config) &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=54"&gt;http://code.google.com/p/simplejson/issues/detail?id=54&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Fixed str/unicode mismatches when using ensure_ascii=False &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=48"&gt;http://code.google.com/p/simplejson/issues/detail?id=48&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Fixed error message when parsing an array with trailing comma with speedups &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=46"&gt;http://code.google.com/p/simplejson/issues/detail?id=46&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Refactor decoder errors to raise JSONDecodeError instead of ValueError &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=45"&gt;http://code.google.com/p/simplejson/issues/detail?id=45&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     New ordered_pairs_hook feature in decoder which makes it possible to preserve key order. &lt;a href="http://bugs.python.org/issue5381"&gt;http://bugs.python.org/issue5381&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Fixed containerless unicode float decoding (same bug as 2.0.4, oops!) &lt;a href="http://code.google.com/p/simplejson/issues/detail?id=43"&gt;http://code.google.com/p/simplejson/issues/detail?id=43&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     Share PosInf definition between encoder and decoder
 &lt;/li&gt;

 &lt;li&gt;
     Minor reformatting to make it easier to backport simplejson changes to Python 2.7/3.1 json module
 &lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Thu, 11 Mar 2010 13:00:13 CST</pubDate>
      <guid isPermaLink="true">http://bob.pythonmac.org/archives/2010/03/10/simplejson-210/</guid>
      <dc:creator>Bob Ippolito</dc:creator>
    </item>
    <item>
      <title>Charter for Compassion [Flickr]</title>
      <link>http://www.springone2gx.com/blog/aaron_gustafson/2010/03/charter_for_compassion_flickr_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/aarongustafson/"&gt;Aaron Gustafson&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/aarongustafson/4424293463/" title="Charter for Compassion"&gt;&lt;img src="http://farm3.static.flickr.com/2536/4424293463_3e7324b61a_m.jpg" width="146" height="240" alt="Charter for Compassion" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ar.charterforcompassion.org/share/the-charter/" rel="nofollow"&gt;ar.charterforcompassion.org/share/the-charter/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/EasyReader/~4/_JXbGCubApU" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 11 Mar 2010 11:00:18 CST</pubDate>
      <guid isPermaLink="true">tag:flickr.com,2005:/photo/4424293463</guid>
      <dc:creator>Aaron Gustafson</dc:creator>
    </item>
    <item>
      <title>PyCon 2010, Analysis: The Other Kind of Testing</title>
      <link>http://www.springone2gx.com/blog/bob_ippolito/2010/03/pycon_2010_analysis_the_other_kind_of_testing?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I gave a talk at &lt;a href="http://us.pycon.org/2010/conference/"&gt;PyCon 2010&lt;/a&gt; in Atlanta last month called &lt;a href="http://bitbucket.org/etrepum/analysis_pycon_2010/"&gt;Analysis: The Other Kind of Testing&lt;/a&gt; (&lt;a href="http://blip.tv/file/3321657"&gt;video&lt;/a&gt;). It's a very simple overview of techniques such as split testing (AB testing) and a call to action to improve &lt;a href="http://bitbucket.org/akoha/django-lean/"&gt;django-lean&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Atlanta was a fantastic location for PyCon 2010, and I look forward to returning next year. Hopefully if I give another talk I'll be able to put a little more time into it :)
&lt;/p&gt;
&lt;p&gt;As per usual, I've been incredibly lazy about updating this blog, so you're much better off following &lt;a href="http://twitter.com/etrepum"&gt;@etrepum&lt;/a&gt; on &lt;a href="http://twitter.com/etrepum"&gt;Twitter&lt;/a&gt;.
&lt;/p&gt;</description>
      <pubDate>Thu, 11 Mar 2010 08:00:19 CST</pubDate>
      <guid isPermaLink="true">http://bob.pythonmac.org/archives/2010/03/10/pycon-2010-analysis-the-other-kind-of-testing/</guid>
      <dc:creator>Bob Ippolito</dc:creator>
    </item>
    <item>
      <title>The Community Manager</title>
      <link>http://www.springone2gx.com/blog/pete_muir/2010/03/the_community_manager?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description />
      <pubDate>Wed, 10 Mar 2010 16:00:24 CST</pubDate>
      <guid isPermaLink="true">http://in.relation.to/Bloggers/TheCommunityManager</guid>
      <dc:creator>Pete Muir</dc:creator>
    </item>
    <item>
      <title>Using BIRT and Actuate with JSF, RichFaces</title>
      <link>http://www.springone2gx.com/blog/max_katz/2010/03/using_birt_and_actuate_with_jsf_richfaces?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://www.birt-exchange.org/blog/?author=33"&gt;Virgil Dodson&lt;/a&gt; from Actuate posted a great &lt;a href="http://www.birt-exchange.org/wiki/Using_BIRT_and_Actuate_with_JavaServer_Faces%28JSF%29/"&gt;tutorial&lt;/a&gt; on how to use BIRT and Actuate with JSF. RichFaces is used as well. The tutorial uses &lt;a href="http://exadel.com/web/portal/download/jsf4birt"&gt;jsf4birt&lt;/a&gt; library developed by Exadel. &lt;/p&gt;
&lt;p&gt;jsf4birt can be downloaded &lt;a href="http://exadel.com/web/portal/download/jsf4birt"&gt;here&lt;/a&gt;. &lt;/p&gt;</description>
      <pubDate>Wed, 10 Mar 2010 13:00:36 CST</pubDate>
      <guid isPermaLink="true">http://mkblog.exadel.com/?p=1365</guid>
      <dc:creator>Max Katz</dc:creator>
    </item>
    <item>
      <title>Actor style messaging and honey do lists</title>
      <link>http://www.springone2gx.com/blog/andrew_glover/2010/03/actor_style_messaging_and_honey_do_lists?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;img style="PADDING-LEFT: 1.0em; PADDING-RIGHT: 0.0em; PADDING-TOP: 0.0em; FLOAT: RIGHT; PADDING-BOTTOM: 0.0em" src="http://thediscoblog.com/images/2010/housewife.jpg" alt="free lunch" width="158" height="210"/&gt;As I previously mentioned in &amp;#8220;&lt;A HREF="http://thediscoblog.com/2010/03/03/free-lunches-mousetraps-and-the-actor-model/"&gt;Free lunches, mousetraps and the Actor model&lt;/A&gt;&amp;#8220;, Edward A. Lee wrote an interesting article entitled &amp;#8220;&lt;a href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf"&gt;The Problem with Threads&lt;/a&gt;&amp;#8221; in which he advocates leveraging the actor model in popular languages (such as in Java) as opposed to adopting an entire new paradigm (like &lt;a href="http://thediscoblog.com/2008/10/19/book-review-programming-erlang/"&gt;Erlang&lt;/a&gt;). He states:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;We should not replace established languages. We should instead build on them.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It appears that more than a few hip people agree with his line of thinking. It turns out there are quite a few options available for leveraging the actor model in Java. That is, aside from alternative languages like &lt;a href="http://thediscoblog.com/2009/12/10/book-review-programming-scala/"&gt;Scala&lt;/a&gt;, which supports actors and &lt;A HREF="http://gpars.codehaus.org/"&gt;Groovy with GPars&lt;/A&gt;, there&amp;#8217;s framework&amp;#8217;s like &lt;A HREF="http://www.malhar.net/sriram/kilim/"&gt;Kilim&lt;/A&gt;, &lt;A HREF="http://osl.cs.uiuc.edu/af/"&gt;ActorFoundry&lt;/A&gt;, &lt;A HREF="http://actorsguildframework.org/"&gt;Actors Guild&lt;/A&gt;, and &lt;A HREF="http://code.google.com/p/jetlang/"&gt;jetlang&lt;/A&gt;.  &lt;/p&gt;
&lt;p&gt;I ended up employing Kilim at a client side over a year ago to replace a thread based computational model. At the time, GPars was in its early stages and I was specifically looking for a speed up in application performance. The multi-threaded application was taking roughly 5 hours to complete.  &lt;/p&gt;
&lt;p&gt;In the end, the speed up attributed to Kilim (or indirectly leveraging its actor model) was hardly noticeable (some aspects of &lt;A HREF="http://www.infoq.com/news/2008/06/kilim-message-passing-in-java"&gt;Kilim&lt;/A&gt; were noticeably faster though &amp;#8212; such as spawning a task was quite fast as opposed to spawning a normal threads) as the real performance gain was leveraged by reducing and improving database queries (as usual, performance issues were essentially IO bound); nevertheless, the prime benefit of Kilim, which at the time I had overlooked, was the notion of a &lt;I&gt;mailbox&lt;/I&gt;. That is, in the actor model, processes can &lt;I&gt;share data more safely&lt;/I&gt;. &lt;/p&gt;
&lt;p&gt;There are quite a few different implementations and ways to facilitate message passing in various languages and platforms, but to me, the actor model&amp;#8217;s mailbox notion is quite intuitive. In &lt;A HREF="http://java.dzone.com/articles/java-actors-with-kilim"&gt;Kilim&amp;#8217;s actor model&lt;/A&gt;, messages are passed between processes via a &lt;code&gt;Mailbox&lt;/code&gt; &amp;#8212; in many ways, you can think of it as a queue. Processes can put items into a mailbox and also pull items from a mailbox in both a blocking and non-blocking manner (blocking of the underlying process not a thread). &lt;/p&gt;
&lt;p&gt;As an example of leveraging mailboxes in Kilim, I wrote two actors (a &lt;code&gt;Husband&lt;/code&gt; and a &lt;code&gt;Wife&lt;/code&gt;) that extend from Kilim&amp;#8217;s &lt;code&gt;Task&lt;/code&gt; type. Previous versions of Kilim had an &lt;code&gt;Actor&lt;/code&gt; type; however, as of version 0.6, &lt;code&gt;Task&lt;/code&gt; is the way to go. &lt;/p&gt;
&lt;pre class="brush: java;"&gt;
import kilim.Mailbox;
import kilim.Pausable;
import kilim.Task;

public class Husband extends Task {
 private Mailbox&amp;lt;Message&amp;gt; mailbox;

 public Husband(Mailbox&amp;lt;Message&amp;gt; mailbox) {
  super();
  this.mailbox = mailbox;
 }

 @Override
 public void execute() throws Pausable, Exception {
  while (true) {
   System.out.println(&amp;quot;Husband listening...&amp;quot;);
   Message msg = mailbox.get(); // blocks
   if (msg.getReceipient() == Message.HUSBAND) {
    System.out.println(&amp;quot;Husband hears: &amp;quot; + msg.getMessage());
    Message reply = new Message(Message.WIFE, &amp;quot;Yes, dear&amp;quot;);
    mailbox.putnb(reply);
   }
   Task.sleep(1000);
  }
 }
}
&lt;/pre&gt;
&lt;p&gt;Under the covers, Kilim works by weaving bytecode so as to control &lt;code&gt;Task&lt;/code&gt; types and facilitate their safe interaction &amp;#8212; specifically, Kilim&amp;#8217;s weaver is looking for methods that throw the &lt;code&gt;Pausable&lt;/code&gt; type (previous versions used the &lt;code&gt;@Pausable&lt;/code&gt; annotation). &lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;Husband&lt;/code&gt; class, a few things are going on &amp;#8212; first, the instance waits for a message from a shared mailbox. In this case, I used a blocking &lt;code&gt;get&lt;/code&gt; call (as in reality, a husband really doesn&amp;#8217;t do anything else but waits for orders (I mean requests) from his wife). When a message is picked up, the instance checks to see if it was intended for it (in many cases, wife instances can communicate with children types sending messages like &amp;#8220;clean your room&amp;#8221; or &amp;#8220;brush your hair&amp;#8221;). &lt;/p&gt;
&lt;p&gt;Once a &lt;code&gt;Message&lt;/code&gt; type (which, in this case, is not a Kilim type) is determined to be sent to a &lt;code&gt;Husband&lt;/code&gt; instance, the &lt;code&gt;Husband&lt;/code&gt; type replies appropriately by creating a &lt;code&gt;Message&lt;/code&gt; and placing it into the &lt;code&gt;mailbox&lt;/code&gt; instance. Finally, the &lt;code&gt;sleep&lt;/code&gt; call is just placed to facilitate reading console output. &lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Wife&lt;/code&gt; class is similar (expect that she doesn&amp;#8217;t wait to listen&amp;#8230;). Like the &lt;code&gt;Husband&lt;/code&gt; instance, this class creates a &lt;code&gt;Message&lt;/code&gt; (in the form of a Honey Do) and sends it off via the shared &lt;code&gt;MailBox&lt;/code&gt;; however, she doesn&amp;#8217;t wait around &amp;#8212; that is, the instance uses the &lt;code&gt;putnb&lt;/code&gt; call, which is non-blocking. What&amp;#8217;s more, she&amp;#8217;ll also attempt to see if anything is in the mailbox for her, but in her case, she also uses a non-blocking call (&lt;code&gt;getnb&lt;/code&gt;) like so:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
import kilim.Mailbox;
import kilim.Pausable;
import kilim.Task;

public class Wife extends Task {

 private Mailbox&amp;lt;Message&amp;gt; mailbox;

 public Wife(Mailbox&amp;lt;Message&amp;gt; mailbox) {
  super();
  this.mailbox = mailbox;
 }

 @Override
 public void execute() throws Pausable, Exception {
  while (true) {
   Message request = new Message(Message.HUSBAND,
    &amp;quot;Please do x, y, and z today, husband.&amp;quot;);

   mailbox.putnb(request);
   Task.sleep(1000);
   Message msg = mailbox.getnb(); // no block

   if (msg != null &amp;amp;&amp;amp; msg.getReceipient() == Message.WIFE) {
    System.out.println(&amp;quot;Wife hears: &amp;quot; + msg.getMessage());
   }
  }
 }
}
&lt;/pre&gt;
&lt;p&gt;As you can see, if there is a message waiting for her, she&amp;#8217;ll hear it, otherwise, she moves on and requests her husband to do something else.&lt;/p&gt;
&lt;p&gt;Lastly, everything is coordinated by a simple driver class containing a &lt;code&gt;main&lt;/code&gt; method like so:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
import kilim.Mailbox;
import kilim.Task;

public class HoneyDo {

 public static void main(String[] args) {

  Mailbox&amp;lt;Message&amp;gt; sharedMailbox = new Mailbox&amp;lt;Message&amp;gt;();

  Task wife = new Wife(sharedMailbox);
  Task husband = new Husband(sharedMailbox);

  husband.start();
  wife.start();
 }
}
&lt;/pre&gt;
&lt;p&gt;Note how a &lt;code&gt;Mailbox&lt;/code&gt; instance is created for my custom &lt;code&gt;Message&lt;/code&gt; type; what&amp;#8217;s more, the &lt;code&gt;sharedMailbox&lt;/code&gt; is then shared between both the &lt;code&gt;wife&lt;/code&gt; and &lt;code&gt;husband&lt;/code&gt; instances. Lastly, things are started via the &lt;code&gt;start&lt;/code&gt; method. &lt;/p&gt;
&lt;p&gt;Running this hip example yields the following output (remember, your exact output will most likely look different; however, the logic sequence of activities will line up. That is, the wife requests things be done and the husband responds with &amp;#8220;yes, dear&amp;#8221;, which the wife hears). &lt;/p&gt;
&lt;pre class="brush: plain;"&gt;
 Husband listening...
 Husband hears: Please do x, y, and z today, husband.
 Husband says: Yes, dear
 Husband listening...
 Wife hears: Yes, dear
 Husband hears: Please do x, y, and z today, husband.
 Husband says: Yes, dear
 Husband listening...
 Wife hears: Yes, dear
 Husband hears: Please do x, y, and z today, husband.
 Husband says: Yes, dear
 Wife hears: Yes, dear
 Husband listening...
 Husband hears: Please do x, y, and z today, husband.
 Husband says: Yes, dear
 Husband listening...
 Wife hears: Yes, dear
 Husband hears: Please do x, y, and z today, husband.
 Husband says: Yes, dear
 Wife hears: Yes, dear
 Husband listening...
 Husband hears: Please do x, y, and z today, husband.
 Husband says: Yes, dear
&lt;/pre&gt;
&lt;p&gt;The actor model facilitates &lt;a href="http://thediscoblog.com/2008/10/19/poll-which-language-is-better-suited-for-jvm-concurrency/"&gt;concurrent programming&lt;/a&gt; by allowing a safer mechanism for message passing between processes (or actors). Implementations of this model vary between languages and frameworks &amp;#8212; I suggest checking out &lt;a href="http://thediscoblog.com/2008/10/19/book-review-programming-erlang/"&gt;Erlang&lt;/a&gt;&amp;#8217;s actors followed by &lt;a href="http://thediscoblog.com/2009/12/10/book-review-programming-scala/"&gt;Scala&lt;/a&gt;&amp;#8217;s as each implementation is quite neat given their respective syntax. &lt;/p&gt;
&lt;p&gt;In the end, if you want to leverage plain Jane Java &lt;a href="http://en.wikipedia.org/wiki/Actor_model"&gt;actors&lt;/a&gt;, then have a look at &lt;a href="http://www.malhar.net/sriram/kilim/"&gt;Kilim&lt;/a&gt; (or one of the other frameworks available)  &amp;#8212; just make sure you&amp;#8217;ve finished your honey do list first, man.&lt;/p&gt;
                                 &lt;p&gt;&lt;center&gt;Looking to spin up Continuous Integration &lt;em&gt;quickly&lt;/em&gt;? Check out &lt;a href="http://www.ciinabox.com"&gt;www.ciinabox.com&lt;/a&gt;.&lt;/center&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 10 Mar 2010 11:00:34 CST</pubDate>
      <guid isPermaLink="true">http://thediscoblog.com/?p=1069</guid>
      <dc:creator>Andrew Glover</dc:creator>
    </item>
    <item>
      <title>Links for 2010-03-09 [del.icio.us]</title>
      <link>http://www.springone2gx.com/blog/aaron_gustafson/2010/03/links_for_2010_03_09_del_icio_us_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.theonion.com/content/news/google_responds_to_privacy"&gt;Google Responds To Privacy Concerns With Unsettlingly Specific Apology&lt;/a&gt;&lt;br/&gt;
The Onion... brilliant as always.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://justaddwater.dk/2009/03/09/using-git-for-svn-repositories-workflow/"&gt;Using Git for SVN Repositories Workflow&lt;/a&gt;&lt;br/&gt;
Great overview of using Git with standard SVN repository layouts.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/EasyReader/~4/E3A5V69Z1tg" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 10 Mar 2010 08:01:15 CST</pubDate>
      <guid isPermaLink="true">http://del.icio.us/aarongustafson#2010-03-09</guid>
      <dc:creator>Aaron Gustafson</dc:creator>
    </item>
    <item>
      <title>Annotation-Based Spring Portlet MVC</title>
      <link>http://www.springone2gx.com/blog/john_lewis/2010/03/annotation_based_spring_portlet_mvc?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Here is the full screencast from my Jasig 2010 Conference Session on Annotation-Based Spring Portlet MVC. Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.unicon.net/node/1367"&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 09 Mar 2010 16:00:40 CST</pubDate>
      <guid isPermaLink="true">1367 at http://www.unicon.net</guid>
      <dc:creator>John Lewis</dc:creator>
    </item>
    <item>
      <title>Mockito 1.8.3 Released</title>
      <link>http://www.springone2gx.com/blog/james_carr/2010/03/mockito_1_8_3_released?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://monkeyisland.pl/"&gt;Szczepan&lt;/a&gt; has announced on the Mockito user mailing list that 1.8.3 of Mockito has been released. This released includes several small (but useful) additions as well as bug fixes.&lt;/p&gt;
&lt;p&gt;The two parts of this release I like are the &lt;a href="http://mockito.googlecode.com/svn/tags/1.8.3/javadoc/org/mockito/Mockito.html#21"&gt;new annotations&lt;/a&gt; @Spy, @Captor, and @injectMocks. These add to the already useful @Mock annotation to simplify test setup tremendously. Additionally, the @Mock annotation is now configurable so you can add different Mock/Stub styles; previously @Mock only supported the default mock behavior, now you can configure it to RETURNS_MOCKS, CALLS_REAL_METHODS, etc.&lt;/p&gt;
&lt;p&gt;This release also includes a &lt;a href="http://code.google.com/p/mockito/issues/detail?id=170&amp;#038;can=1&amp;#038;q=label:Milestone-Release1.8.3"&gt;feature&lt;/a&gt; I requested that can be useful when trying to get legacy code under test, something I call &lt;a href="http://mockito.googlecode.com/svn/tags/1.8.3/javadoc/org/mockito/Mockito.html#RETURNS_DEEP_STUBS"&gt;deep stubs&lt;/a&gt;. Ever been in the situation where you have code with something like this in the middle of it:&lt;/p&gt;
&lt;pre name="code" class="java"&gt;
someCollaborator.getFoo().doBarThings().getBaz().execute().processResult();
&lt;/pre&gt;
&lt;p&gt;Normally to stub this call, you&amp;#8217;ll have to mock every object returned by each method call, and then stub the last one. Examples for code like this can be a little verbose, but now you can just @Mock the aggregate root and do something like:&lt;/p&gt;
&lt;pre name="code" class="java"&gt;
given(someColllaborator.getFoo().doBarThings().getBaz().execute().processResult).willReturn(resultObject);
&lt;/pre&gt;
&lt;p&gt;Just remember friends, this is only good for legacy code&amp;#8230; if you are already writing your code exemplar first to drive your design, you should know better than to make your object know too many details about it&amp;#8217;s neighbors. &lt;img src='http://blog.james-carr.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;This release also includes a &lt;a href="http://code.google.com/p/mockito/issues/detail?id=109&amp;#038;can=1&amp;#038;q=label:Milestone-Release1.8.3"&gt;patch I submitted&lt;/a&gt; to stop having all of the examples in a test run when trying to run a single one in eclipse and intelliJ when using MockitoJunitRunner. &lt;/p&gt;
&lt;p&gt;For a complete list of features/fixes, see the &lt;a href="http://code.google.com/p/mockito/issues/list?can=1&amp;#038;q=label:Milestone-Release1.8.3&amp;#038;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;#038;cells=tiles"&gt;release notes&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 09 Mar 2010 13:00:34 CST</pubDate>
      <guid isPermaLink="true">http://blog.james-carr.org/?p=726</guid>
      <dc:creator>James Carr</dc:creator>
    </item>
    <item>
      <title>Another Good Tidbit from GOOSGBT</title>
      <link>http://www.springone2gx.com/blog/james_carr/2010/03/another_good_tidbit_from_goosgbt?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I&amp;#8217;m currently in chapter 12 of &lt;a href="http://www.growing-object-oriented-software.com/"&gt;Growing Object Oriented Software Guided By Tests&lt;/a&gt; and thought I&amp;#8217;d share another good tidbit from one of the asides:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;Put Tests in a Different Package&lt;/h3&gt;
&lt;p&gt;We&amp;#8217;ve adopted a habit of putting tests in a different package from the code they&amp;#8217;re exercising. We want to make sure we&amp;#8217;re driving the code through its public interfaces, like any other client, rather than opening up a package-scoped back door for testing.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Good point! Almost everytime I&amp;#8217;ve found my self expose a method that should be private as protected or default it&amp;#8217;s been because that method was really in gross violation of Single Responsibility Principle and I&amp;#8217;ve often taken such code and extracted it to a separate object.&lt;/p&gt;
&lt;p&gt;Thoughts?&lt;/p&gt;</description>
      <pubDate>Tue, 09 Mar 2010 11:00:37 CST</pubDate>
      <guid isPermaLink="true">http://blog.james-carr.org/?p=731</guid>
      <dc:creator>James Carr</dc:creator>
    </item>
    <item>
      <title>Java Champion</title>
      <link>http://www.springone2gx.com/blog/howard_lewis_ship/2010/03/java_champion?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;You might call it petty, you might call it vain, but I've aspired to be recognized as a Java Champion for the last couple of years. The process by which you are selected for this is a bit secretive, but I've finally &lt;a href="https://java-champions.dev.java.net/content/corechampions.html#Ship"&gt;gotten the nod&lt;/a&gt; and joined the roster. 

&lt;p&gt;
My larger goal for Tapestry has always been to create a web application platform so compelling that it would draw developers to the Java programming language, just to be able to use it. Of course, that's not so much a goal as it is a journey. Technologically, I think Tapestry has the chops to embrace that goal (or journey) ... and looking at current discussions and developments in the Tapestry world, I think the other critical areas where Tapestry is lagging (namely, Documentation and Marketing) may come around.

&lt;p&gt;
Want to do your part?  Blog about Tapestry ... what you like, what you don't like, what's missing, and what's hidden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4110180-8860140314474342522?l=tapestryjava.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TapestryCentral/~4/yxxLSudkCuU" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 09 Mar 2010 08:00:36 CST</pubDate>
      <guid isPermaLink="true">tag:blogger.com,1999:blog-4110180.post-8860140314474342522</guid>
      <dc:creator>Howard Lewis Ship</dc:creator>
    </item>
    <item>
      <title>ESDC 2010 resources</title>
      <link>http://www.springone2gx.com/blog/andrew_glover/2010/03/esdc_2010_resources?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I recently had the opportunity to present four different talks at the &lt;A HREF="http://thediscoblog.com/2010/01/19/development-2-0-concepts-at-esdc/"&gt;Enterprise Software Development Conference&lt;/A&gt; (or ESDC) in San Mateo, California. In an effort to provide additional data points and information, I created individual resource pages for each talk. These pages (hosted at my company&amp;#8217;s site &amp;#8212; &lt;A HREF="http://beacon50.com/"&gt;beacon50.com&lt;/A&gt;) provide links to articles, blog entries, tutorials, and a copy of each presentation. If you&amp;#8217;re curious to see what you missed at ESDC, then have a look, man:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;A HREF="http://beacon50.com/resources/esdc/gtrench.html"&gt;Resources for Groovy from the trenches&lt;/A&gt;&lt;/li&gt;
&lt;li&gt;&lt;A HREF="http://beacon50.com/resources/esdc/easyb.html"&gt;Resources for Easy BDD with easyb&lt;/A&gt;&lt;/li&gt;
&lt;li&gt;&lt;A HREF="http://beacon50.com/resources/esdc/cloud.html"&gt;Resources for Comparing the cloud: GAE versus EC2&lt;/A&gt;&lt;/li&gt;
&lt;li&gt;&lt;A HREF="http://beacon50.com/resources/esdc/rest.html"&gt;Resources for RESTful web services in Grails&lt;/A&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to everyone who came to ESDC and attended my talks &amp;#8212; I had a great time discussing these topics (and more!) with you! &lt;/p&gt;
                                 &lt;p&gt;&lt;center&gt;Looking to spin up Continuous Integration &lt;em&gt;quickly&lt;/em&gt;? Check out &lt;a href="http://www.ciinabox.com"&gt;www.ciinabox.com&lt;/a&gt;.&lt;/center&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 08 Mar 2010 16:00:15 CST</pubDate>
      <guid isPermaLink="true">http://thediscoblog.com/?p=1090</guid>
      <dc:creator>Andrew Glover</dc:creator>
    </item>
    <item>
      <title>Webinar recording: Add BIRT Re­porting to JSF Ap­pli­ca­tions Using RichFaces</title>
      <link>http://www.springone2gx.com/blog/max_katz/2010/03/webinar_recording_add_birt_re_porting_to_jsf_ap_pli_ca_tions_using_richfaces?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://blog.exadel.com/2010/02/09/update-exadel-and-actuate-webinar-on-jsf-richfaces-birt/"&gt;Add BIRT Reporting to JSF Applications using RichFaces&lt;/a&gt; recording is available &lt;a href="http://blog.exadel.com/2010/02/09/update-exadel-and-actuate-webinar-on-jsf-richfaces-birt/"&gt;here&lt;/a&gt;.  You can also download the complete application I showed during the webinar &lt;a href="http://exadel.com/web/portal/download/jsf4birt"&gt;here&lt;/a&gt;. &lt;/p&gt;</description>
      <pubDate>Mon, 08 Mar 2010 13:00:16 CST</pubDate>
      <guid isPermaLink="true">http://mkblog.exadel.com/?p=1343</guid>
      <dc:creator>Max Katz</dc:creator>
    </item>
    <item>
      <title>Test</title>
      <link>http://www.springone2gx.com/blog/max_katz/2010/03/test?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;div class='posterous_autopost'&gt;
&lt;p&gt;Test&lt;/p&gt;
&lt;p style="font-size: 10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;   from &lt;a href="http://maxkatz.posterous.com/test-77252"&gt;maxkatz&amp;#8217;s posterous&lt;/a&gt;  &lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 08 Mar 2010 11:00:16 CST</pubDate>
      <guid isPermaLink="true">http://mkblog.exadel.com/maxablog/test/</guid>
      <dc:creator>Max Katz</dc:creator>
    </item>
    <item>
      <title>Buzz Buzz</title>
      <link>http://www.springone2gx.com/blog/sean_kane/2010/03/buzz_buzz?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;The evening light today was perfect for shooting some tree blossoms and the busy bees working on them.  I was using my 28-135 lens for these shots which means I had to crop quite a bit to get the right detail.  The real challenge here was sharp focus with the quickly moving bees.  For that, I used live view, zoomed in to  quickly  manually focus on the bees while somewhat still.  Once they started to move, I let the rapid-fire shutter go.  This collection is out of about 30 total attempts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seankane.smugmug.com/gallery/10870898_9dyia#805150275_TEVvD"&gt;&lt;img class="alignnone" title="Bee and Flowers" src="http://seankane.smugmug.com/Photography/Recent-Shots/IMG3097/805150275_TEVvD-M.jpg" alt="" width="500" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seankane.smugmug.com/Photography/Recent-Shots/10870898_9dyia#805122287_DhBJF"&gt;&lt;img class="alignnone" title="Bee and Flowers" src="http://seankane.smugmug.com/Photography/Recent-Shots/IMG3067/805122287_DhBJF-M.jpg" alt="" width="500" height="321" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seankane.smugmug.com/Photography/Recent-Shots/10870898_9dyia#805120201_te8cS"&gt;&lt;img class="alignnone" title="Bee and Flowers" src="http://seankane.smugmug.com/Photography/Recent-Shots/IMG3063/805120201_te8cS-M.jpg" alt="" width="500" height="355" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seankane.smugmug.com/Photography/Recent-Shots/10870898_9dyia#805114587_Tbwoc"&gt;&lt;img class="alignnone" title="Bee and Flowers" src="http://seankane.smugmug.com/Photography/Recent-Shots/IMG3048/805114587_Tbwoc-M.jpg" alt="" width="500" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/seankane.wordpress.com/794/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/seankane.wordpress.com/794/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/seankane.wordpress.com/794/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/seankane.wordpress.com/794/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/seankane.wordpress.com/794/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/seankane.wordpress.com/794/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/seankane.wordpress.com/794/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/seankane.wordpress.com/794/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/seankane.wordpress.com/794/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/seankane.wordpress.com/794/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=seankane.wordpress.com&amp;blog=407696&amp;post=794&amp;subd=seankane&amp;ref=&amp;feed=1" /&gt;</description>
      <pubDate>Mon, 08 Mar 2010 08:00:26 CST</pubDate>
      <guid isPermaLink="true">http://seankane.wordpress.com/?p=794</guid>
      <dc:creator>Sean Kane</dc:creator>
    </item>
    <item>
      <title>Griffon rises once more</title>
      <link>http://www.springone2gx.com/blog/andres_almiray/2010/03/griffon_rises_once_more?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;The Griffon team is very pleased to announce that &lt;a hre="http://groovy.dzone.com/announcements/griffon-03-released"&gt;Griffon 0.3 has been released!&lt;/a&gt;. This release is loaded with new features, plus a good number of bug fixes. Here's a quick tour on what 0.3 has to offer:&lt;/P&gt;

&lt;h3&gt;Addon enhancements&lt;/h3&gt;
&lt;p&gt;As you may know, addons are Griffon's runtime plugins; you can use them to extend the capabilities of an application. Addons were introduced in 0.2 however they only exposed a small set of hooks (factories, methods, props) plus their own life cycle hooks. Starting form this release addons are able to contribute application event listeners and all types of delegates that a FactoryBuilderSupport builder can handle.&lt;/p&gt;

&lt;h3&gt;Native libraries support&lt;/h3&gt;
&lt;p&gt;What do you do if your application requires a platform specific library or jar? What if you need to package several of those depending on which platform you intend to run on? What about plugins and native libraries? Well all these questions and more can now be solved by following a file placement convention that can save you lots of time. Supported platforms at the moment include: Windows, Linux, OSX and Solaris (all 32bit versions).
&lt;/p&gt;

&lt;h3&gt;Packaging enhancements&lt;/h3&gt;
&lt;p&gt;Closely related to native libraries support, you're now able to specify additional settings and resources that can merged into the generated JNLP files when running on webstart and applet modes. No need to manually fumble with those files anymore. Plugins can take advantage of this feature too.
&lt;/p&gt;

&lt;h3&gt;Artifacts API&lt;/h3&gt;
&lt;p&gt;Since the beginning Griffon has had basic artifacts (Model, View, Controller) but there was no easy way to query them for additional info. This is precisely what the artifacts API does for you now. Additional artifact types may be added an listed when calling 'griffon stats'. this API is further enhanced by the &lt;a href="http://griffon.codehaus.org/Artifacts+Plugin"&gt;artifacts-plugin&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Lightweight services&lt;/h3&gt;
&lt;p&gt;Griffon 0.3 introduces services support. Services in Griffon differ from their Grails counterparts as they are not transactional. The Griffon runtime will inject an instance of a particular service to other artifatcs following a simple naming convention; this is not a replacement for a full DI solution but gets the job done without installing additional plugins.&lt;/p&gt;

&lt;h3&gt;Threading additions&lt;/h3&gt;
&lt;p&gt;While SwingBuilder's &lt;tt&gt;edt{}&lt;/tt&gt;, &lt;tt&gt;doLater{}&lt;/tt&gt; and &lt;tt&gt;doOutside{}&lt;/tt&gt; are very handy they only work if the current toolkit is Swing. Griffon supports other toolkits via plugins (SWT, Pivot, Gtk, and JavaFX) so it makes sense to have generic threading facilities that can work with any toolkit. This is precisely what &lt;tt&gt;UIThreadHelper&lt;/tt&gt; does.&lt;/p&gt;

In addition to this features, a new set of plugins is available too; check'em out&lt;ul&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Artifacts+Plugin"&gt;artifacts&lt;/a&gt; - further enhancements to the artifacts API. distributed as a plugin to keep core's dependency count low.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/I18n+Plugin"&gt;i18n&lt;/a&gt; - message i18n support using Spring's MessageSources.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Erlang+Plugin"&gt;erlang&lt;/a&gt; - support for making RPC calls to Erlang servers using Erlang's JInterface.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Flyingsaucer+Plugin"&gt;flyingsaucer&lt;/a&gt; - an XHTML renderer component.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Processing+Plugin"&gt;processing&lt;/a&gt; - make 2D/3D renders and animations with the Processing Programming language and Griffon.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Serial+Plugin"&gt;serial&lt;/a&gt; - serial port communication libraries.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Thrift+Plugin"&gt;thrift&lt;/a&gt; - Apache Thrift support (another serialization option).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Jmx+Plugin"&gt;jmx&lt;/a&gt; - a straight port of the Grails JMX plugin, originally created by Ken Sipe.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/P6spy+Plugin"&gt;p6spy&lt;/a&gt; - another Grails plugin port.&lt;/li&gt;
&lt;/ul&gt;
Speaking of toolkits the following plugins have become available too:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Swt+Plugin"&gt;swt&lt;/a&gt; - relies on SWTBuilder.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Pivot+Plugin"&gt;pivot&lt;/a&gt; - brand new UI Toolkit from VMWare labs, donated to Apache.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Gtk+Plugin"&gt;gtk&lt;/a&gt; - GNOME integration via java-gnome.&lt;/li&gt;
&lt;/ul&gt;
Griffon couldn't stay behind the recent NoSQL movement:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Berkeleydb+Plugin"&gt;berkeleydb&lt;/a&gt; - available now!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Db4o+Plugin"&gt;db4o&lt;/a&gt; - available now!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Couchdb+Plugin"&gt;couchdb&lt;/a&gt; - preview mode&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Neo4j+Plugin"&gt;neo4j&lt;/a&gt; - preview mode&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon.codehaus.org/Riak+Plugin"&gt;riak&lt;/a&gt; - preview mode&lt;/li&gt;
&lt;/ul&gt;
Other existing plugins have been updated, perhaps most notably &lt;a href="http://griffon.codehaus.org/Spring+Plugin"&gt;Spring&lt;/a&gt;, &lt;a href="http://griffon.codehaus.org/GSQL+Plugin"&gt;GSQL&lt;/a&gt; and builder plugins.&lt;br/&gt;&lt;br/&gt;Let us know what your impressions are of these new features and tools. We would also appreciate if you let us know if Griffon has been of use to you and how. Feedback is welcome always.&lt;br/&gt;&lt;br/&gt;Keep on Groovying!</description>
      <pubDate>Sun, 07 Mar 2010 16:00:16 CST</pubDate>
      <guid isPermaLink="true">http://www.jroller.com/aalmiray/entry/griffon_rises_once_more</guid>
      <dc:creator>Andres Almiray</dc:creator>
    </item>
    <item>
      <title>PodcampNashville ‘10 take-aways</title>
      <link>http://www.springone2gx.com/blog/cal_evans/2010/03/podcampnashville_10_take_aways?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>Dear Reader, The dust has settled, the swag-bag has been rifled through and the drink tickets have all been exchanged for various combinations of kool-aid and vodka. Since I can&amp;#8217;t find any of my Microsoft friends who can can me into the beta for the new Microsoft Courier, I had to go old school and take [...]&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=Jtke7HLLMoM:Po7yumKNP1c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=Jtke7HLLMoM:Po7yumKNP1c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=Jtke7HLLMoM:Po7yumKNP1c:aKCwKftKxY0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?i=Jtke7HLLMoM:Po7yumKNP1c:aKCwKftKxY0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=Jtke7HLLMoM:Po7yumKNP1c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=Jtke7HLLMoM:Po7yumKNP1c:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PostcardsFromMyLife/~4/Jtke7HLLMoM" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 07 Mar 2010 13:00:22 CST</pubDate>
      <guid isPermaLink="true">http://blog.calevans.com/?p=1523</guid>
      <dc:creator>Cal Evans</dc:creator>
    </item>
    <item>
      <title>Podcamp Nashville ‘10 Review</title>
      <link>http://www.springone2gx.com/blog/cal_evans/2010/03/podcamp_nashville_10_review?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>Dear Reader, Today was the day!  Podcamp Nashville 2010, downtown Nashville at the Cadillac Ranch.  As always with the Nashville camps, overall it was  great experience.  The sessions were quality with speakers like Mitch Canter and Kate Gallagher. It was great to meet some new friends and catch up with some old [...]&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=IWV16hP-6C8:hLIhRblHIAA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=IWV16hP-6C8:hLIhRblHIAA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=IWV16hP-6C8:hLIhRblHIAA:aKCwKftKxY0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?i=IWV16hP-6C8:hLIhRblHIAA:aKCwKftKxY0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=IWV16hP-6C8:hLIhRblHIAA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?a=IWV16hP-6C8:hLIhRblHIAA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PostcardsFromMyLife?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PostcardsFromMyLife/~4/IWV16hP-6C8" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 07 Mar 2010 11:00:13 CST</pubDate>
      <guid isPermaLink="true">http://blog.calevans.com/?p=1518</guid>
      <dc:creator>Cal Evans</dc:creator>
    </item>
  </channel>
</rss>

