<?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>NFJS One</title>
    <link>http://www.nfjsone.com</link>
    <description>The best value in the Java/Open Source conferencing space hands down</description>
    <item>
      <title>Weld extensions alpha available</title>
      <link>http://www.nfjsone.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:28 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.nfjsone.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:21 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.nfjsone.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:23 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.nfjsone.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:27 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.nfjsone.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:34 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.nfjsone.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:49 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.nfjsone.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:43 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.nfjsone.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:45 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.nfjsone.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:46 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.nfjsone.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:45 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.nfjsone.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:43 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.nfjsone.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:49 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.nfjsone.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:27 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.nfjsone.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:24 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.nfjsone.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:25 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.nfjsone.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:31 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.nfjsone.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:24 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.nfjsone.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:29 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.nfjsone.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:20 CST</pubDate>
      <guid isPermaLink="true">http://blog.calevans.com/?p=1518</guid>
      <dc:creator>Cal Evans</dc:creator>
    </item>
    <item>
      <title>Scala: Post-Functional, Post-Modern, or Just Perl++?</title>
      <link>http://www.nfjsone.com/blog/robert_fischer/2010/03/scala_post_functional_post_modern_or_just_perl__?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;h3&gt;Let&amp;#8217;s start with some background.&lt;/h3&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/scala-not-functional/"&gt;I complained that Scala did not seem to be very functional to me&lt;/a&gt;, but I didn&amp;#8217;t really know how best to express what was fundamentally wrong with it. I did know that if &lt;a rel="nofollow" target="_blank" href="http://www.artima.com/scalazine/articles/goals_of_scala.html"&gt;&amp;#8220;functional languages have a fixed set of features&amp;#8221; like Scala&amp;#8217;s creator, Odersky, claims&lt;/a&gt;, then it wasn&amp;#8217;t simply &amp;#8220;first-class functions in there, function literals, closures&amp;#8221;, &amp;#8220;types, generics, [and] pattern matching&amp;#8221;. Scala has missed the functional boat in some basic way.&lt;/p&gt;
&lt;p&gt;After a kerfuffle in the comments, &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/what-is-a-functional-programming-language/"&gt;Brian enlightened us all by telling us what is a functional programming language&lt;/a&gt;. His explanation (while being a self-admitted generalization) is summarized as follows:&lt;br /&gt;
&lt;blockquote&gt;So, what is it that differentiates the functional programming languages from all the other programming languages? It is simply this: the functional programming languages use, as their fundamental model of computation, the lambda calculus, while all the other programming languages use the Turing machine as their fundamental model of computation.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Six months later, &lt;a rel="nofollow" target="_blank" href="http://www.scala-lang.org/node/4960"&gt;Odersky responds with a very interesting post&lt;/a&gt;, which actually agrees that Scala is not a functional language in Brian&amp;#8217;s sense, but instead argues that any language is functional if it &amp;#8220;makes programming centered around functions easy and natural&amp;#8221;. He then runs through a list of features which is in common with functional languages, noting that Scala has them within handwave enough (more on that later). He ends wishing that people would &amp;#8220;stop thinking of functional programming as a different, novel, or exotic way to code&amp;#8221;. Even more, though, Scala is apparently &amp;#8220;an early example of a new breed of postfunctional languages&amp;#8221;.&lt;/p&gt;
&lt;h3&gt;And that gets us to this blog post.&lt;/h3&gt;
&lt;p&gt;First of all, Odersky is still missing the point. It&amp;#8217;s not about whether you use &lt;code&gt;fold&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt;, and &lt;code&gt;iter&lt;/code&gt;, or whether you can write closures easily. It&amp;#8217;s not even really about pure functions vs. side-effects. To code in a functional style is a fundamentally different way of thinking about problems: instead of thinking about problems as nouns that are doing things, functional programming views a problem as a series of transformations to the world which results in an answer. This is why functional programming is considered &amp;#8220;a different, novel, or exotic way to code&amp;#8221;: it &lt;em&gt;is&lt;/em&gt; a different, novel, and (as of yet) exotic way to code. It&amp;#8217;s as different, novel, and exotic from OO as OO was from imperative. It&amp;#8217;s a different way of thinking about the entire issue. You can &lt;a rel="nofollow" target="_blank" href="http://itmmetelko.com/blog/2008/02/23/functional-programming-immutable-objects-explained-irc-style/"&gt;check out this snippet of an IRC conversation from #ocaml&lt;/a&gt; for more on that.&lt;/p&gt;
&lt;p&gt;The paragon of this way of programming is &lt;a rel="nofollow" target="_blank" href="http://buffered.io/2009/06/27/point-free-style-what-is-it-good-for/"&gt;point-free programming&lt;/a&gt;, where you are quite literally building up a mega-function that describes how your program works, and then executing that one, single function when you run that program. If your language doesn&amp;#8217;t lead people to re-discover point free programming at least in the small, then the language really isn&amp;#8217;t taking function manipulation and functional language type conceptions seriously. And that&amp;#8217;s the case with Scala: even Odersky admits that in Scala, &amp;#8220;currying is more verbose and much less used than in other functional languages&amp;#8221;. (Protip to Scala people: If one of the fundamental stunts of a style is pervasive in all the code but yours, you&amp;#8217;re not in the same style of programming.)&lt;/p&gt;
&lt;p&gt;What really gets me, though, is the claim that Scala is &amp;#8220;an early example of a new breed of postfunctional languages&amp;#8221;, because aside from the static typing, all the language features that Odersky trots out already exist in Perl. It&amp;#8217;s hard to be a vanguard of a new breed of programming languages when there&amp;#8217;s prior art &lt;a rel="nofollow" target="_blank" href="http://history.perl.org/PerlTimeline.html#1980s"&gt;from the 1980s&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t believe me? &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/exec/obidos/ASIN/1558607013/lovespiralsof-20"&gt;The existence of a book on the topic unconvincing&lt;/a&gt;? Then let&amp;#8217;s run the list of functional language features from Odersky.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Functions as first class values: &lt;em&gt;check&lt;/em&gt;. &lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="perl" style="font-family:monospace;"&gt;&lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; apply&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;$)&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#666666;font-style:italic;"&gt;# Take a function as an argument no problem&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; times2&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;$)&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#666666;font-style:italic;"&gt;# Create a function to take&lt;/span&gt; &lt;span style="color:#000066;"&gt;print&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#339933;"&gt;*&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;2&lt;/span&gt; &lt;span style="color:#339933;"&gt;.&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;"&lt;span style="color:#000099;font-weight:bold;"&gt;&amp;#92;n&lt;/span&gt;"&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
apply&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#92;&amp;amp;times2&lt;/span&gt;&lt;span style="color:#339933;"&gt;,&lt;/span&gt; &lt;span style="color:#cc66cc;"&gt;3&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;/li&gt;
&lt;li&gt;Convenient closure syntax: &lt;em&gt;check&lt;/em&gt; &lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="perl" style="font-family:monospace;"&gt;&lt;span style="color:#b1b100;"&gt;my&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$x&lt;/span&gt; &lt;span style="color:#339933;"&gt;=&lt;/span&gt; &lt;span style="color:#cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
apply &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#000066;"&gt;print&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;*$x&lt;/span&gt; &lt;span style="color:#339933;"&gt;.&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;"&lt;span style="color:#000099;font-weight:bold;"&gt;&amp;#92;n&lt;/span&gt;"&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color:#cc66cc;"&gt;3&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color:#b1b100;"&gt;my&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$times_x&lt;/span&gt; &lt;span style="color:#339933;"&gt;=&lt;/span&gt; &lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;$)&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#000066;"&gt;print&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;*$x&lt;/span&gt; &lt;span style="color:#339933;"&gt;.&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;"&lt;span style="color:#000099;font-weight:bold;"&gt;&amp;#92;n&lt;/span&gt;"&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;$times_x&lt;/span&gt;&lt;span style="color:#339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;3&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;/li&gt;
&lt;li&gt;List comprehensions: &lt;em&gt;check&lt;/em&gt;. (See &lt;a rel="nofollow" target="_blank" href="http://perldoc.perl.org/index-functions-by-cat.html#Functions-for-list-data"&gt;perlfunc on list data&lt;/a&gt;.)
&lt;/li&gt;
&lt;li&gt;&amp;#8220;Curried&amp;#8221; function definitions and applications: check-ish.&lt;br /&gt;
Okay, so calling this a &amp;#8220;check&amp;#8221; on Scala is a bit of a reach (&lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/scala-not-functional/#comment-35168"&gt;cite&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/scala-not-functional/#comment-35550"&gt;cite&lt;/a&gt;, although &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/scala-not-functional/#comment-35231"&gt;note this&lt;/a&gt;—&lt;a rel="nofollow" target="_blank" href="http://www.codecommit.com/blog/scala/function-currying-in-scala"&gt;here&lt;/a&gt; is a more sympathetic run-down on Scala currying). Ignoring the &lt;code&gt;foo(2,_:Int)&lt;/code&gt; syntax for a moment, we can implement basically the same style of &amp;#8220;&amp;#8216;curried&amp;#8217; function definitions&amp;#8221; such as Scala&amp;#8217;s &lt;a rel="nofollow" target="_blank" href="http://www.scala-lang.org/docu/files/api/scala/List.html#foldLeft%28B%29"&gt;List#foldLeft&lt;/a&gt;. &lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="perl" style="font-family:monospace;"&gt;&lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; add &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#b1b100;"&gt;my&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$x&lt;/span&gt; &lt;span style="color:#339933;"&gt;=&lt;/span&gt; &lt;span style="color:#000066;"&gt;shift&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt; &lt;span style="color:#000066;"&gt;return&lt;/span&gt; &lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$x&lt;/span&gt; &lt;span style="color:#339933;"&gt;+&lt;/span&gt; &lt;span style="color:#000066;"&gt;shift&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;
add&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;3&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt; &lt;span style="color:#666666;font-style:italic;"&gt;# Okay, so you do need an extra -&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;In the case of our &lt;code&gt;apply&lt;/code&gt; function above (where we take a function as the first argument), it&amp;#8217;s even easier.&lt;/p&gt; &lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="perl" style="font-family:monospace;"&gt;apply &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#000066;"&gt;print&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;*$x&lt;/span&gt; &lt;span style="color:#339933;"&gt;.&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;"&lt;span style="color:#000099;font-weight:bold;"&gt;&amp;#92;n&lt;/span&gt;"&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color:#cc66cc;"&gt;8&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Now, there isn&amp;#8217;t really argument skipping (i.e.: &lt;code&gt;foo(_:Int,3)&lt;/code&gt;) as a syntax feature, and there isn&amp;#8217;t a built-in &lt;code&gt;curry&lt;/code&gt; function, but if you want Scala&amp;#8217;s &lt;code&gt;Function.curried&lt;/code&gt; in perl, here it is:&lt;/p&gt; &lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="perl" style="font-family:monospace;"&gt;&lt;span style="color:#666666;font-style:italic;"&gt;# This code released under Creative Commons 0 and WTFPL.&lt;/span&gt;
&lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; curry&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#339933;"&gt;&amp;amp;@&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#b1b100;"&gt;my&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;$f&lt;/span&gt;&lt;span style="color:#339933;"&gt;,&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;@args&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color:#339933;"&gt;=&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;@_&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt; &lt;span style="color:#000066;"&gt;return&lt;/span&gt; &lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$f&lt;/span&gt;&lt;span style="color:#339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;@args&lt;/span&gt;&lt;span style="color:#339933;"&gt;,&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;@_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color:#000000;font-weight:bold;"&gt;sub&lt;/span&gt; add&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;$$&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color:#009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color:#000066;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color:#339933;"&gt;+&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$_&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color:#b1b100;"&gt;my&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$curried&lt;/span&gt; &lt;span style="color:#339933;"&gt;=&lt;/span&gt; curry&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#92;&amp;amp;add&lt;/span&gt;&lt;span style="color:#339933;"&gt;,&lt;/span&gt; &lt;span style="color:#cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt; &lt;span style="color:#000066;"&gt;print&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;$curried&lt;/span&gt;&lt;span style="color:#339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color:#cc66cc;"&gt;3&lt;/span&gt;&lt;span style="color:#009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color:#339933;"&gt;.&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;"&lt;span style="color:#000099;font-weight:bold;"&gt;&amp;#92;n&lt;/span&gt;"&lt;/span&gt;&lt;span style="color:#339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;/li&gt;
&lt;li&gt;Lazy evaluation: &lt;em&gt;check&lt;/em&gt;. See &lt;a rel="nofollow" target="_blank" href="http://search.cpan.org/~jesse/Scalar-Defer-0.23/lib/Scalar/Defer.pm"&gt;Scalar::Defer&lt;/a&gt; for lazy val equivalents and &lt;a rel="nofollow" target="_blank" href="http://search.cpan.org/~genie/Tie-LazyList-0.05/LazyList.pm"&gt;Tie::LazyList&lt;/a&gt; for lazy seq equivalents. People generally use a &lt;a rel="nofollow" target="_blank" href="http://www.perldesignpatterns.com/?LazyEvaluation"&gt;double-return approach&lt;/a&gt; for generators (which I realize are different than lazy seqs and only kinda-sorta lazy).
&lt;/li&gt;
&lt;li&gt;Pattern matching: &lt;em&gt;check&lt;/em&gt; (okay, check-ish). See &lt;a rel="nofollow" target="_blank" href="http://perldoc.perl.org/Switch.html"&gt;Switch&lt;/a&gt;. The decomposition isn&amp;#8217;t there, which is the biggest weakness. But the general cumbersomeness and lack of real algebraic data types hamstrings the coolest parts of pattern matching anyway, so I&amp;#8217;m calling it a draw. (This should be read as a generous and sympathetic ruling for Scala: Cedric Beust, for instance, rails against pattern matching/case classes and says &amp;#8220;&lt;a rel="nofollow" target="_blank" href="http://beust.com/weblog2/archives/000490.html"&gt;it&amp;#8217;s hard for me to see case classes as anything but a failure&lt;/a&gt;&amp;#8220;.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, perl&amp;#8217;s got a few features in its favor for functional programming, like more flexible arguments, &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Autovivification"&gt;autovificiation&lt;/a&gt;, list/argument coercion, and dynamic symbol table mangling. Since perl also has OO capabilities, perl is &lt;em&gt;at least&lt;/em&gt; as convincing a &amp;#8220;post-functional language&amp;#8221; as Scala. But there&amp;#8217;s even more in common between the two than that.&lt;/p&gt;
&lt;p&gt;Odersky&amp;#8217;s &amp;#8220;post-functional language&amp;#8221; is really a subtype of &lt;a rel="nofollow" target="_blank" href="http://www.wall.org/~larry/pm.html"&gt;Larry Wall&amp;#8217;s &amp;#8220;post-modern language&amp;#8221;&lt;/a&gt;: it&amp;#8217;s an attempt to create a language that is a grab-bag of multiple paradigms. And when you do that, you&amp;#8217;re just begging for the complaints that you hear leveled against both perl and Scala: it&amp;#8217;s too complicated, its syntax is weird, it&amp;#8217;s too magical, people write in entirely distinct subsets of the language, etc. (&lt;a rel="nofollow" target="_blank" href="http://creativekarma.com/ee.php/weblog/comments/my_verdict_on_the_scala_language/"&gt;cite&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://www.weiqigao.com/blog/2008/03/24/scala_still_uncomfortable_after_five_years.html"&gt;cite&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://neopythonic.blogspot.com/2008/11/scala.html"&gt;cite&lt;/a&gt;) Now, those who master the language (or master their favorite subset of it) love the &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/There's_more_than_one_way_to_do_it"&gt;TIMTOWTDI&lt;/a&gt; aspect. But it also means that the language is left as a jack-of-all-trades, master of none. Yes, Scala and perl integrate a lot of powerful tools from functional languages—but learning OCaml still blew my mind, despite knowing perl for years. As I started off saying, Scala is not a functional programming language. It is a statically typed object oriented language with closures.&lt;/p&gt;
&lt;p&gt;Now, there is a sense in which Odersky is really onto something. The world of programming is forever transformed with closures and list comprehensions as being mandatory for new high-level languages, even if they&amp;#8217;re otherwise object oriented. And software developers are going to need how to work with them effectively if they want to read code moving forward. Yes, after 20+ years, the rest of the programming world finally caught up to one of perl&amp;#8217;s fundamental insights.&lt;/p&gt;
&lt;hr /&gt;
This post was by &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/author/candide/"&gt;Robert Fischer&lt;/a&gt;, written on March 6, 2010.&lt;br /&gt;
Comment on this post: &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/post-functional-scala/#respond"&gt;http://enfranchisedmind.com/blog/posts/post-functional-scala/#respond&lt;/a&gt;&lt;br /&gt;
Public Permalink: &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/posts/post-functional-scala/"&gt;http://enfranchisedmind.com/blog/posts/post-functional-scala/&lt;/a&gt;
&lt;hr /&gt;&lt;a rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/3.0/us/"&gt;&lt;img alt="Creative Commons License" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png"/&gt;&lt;/a&gt;&lt;br /&gt;This article was a post on &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog"&gt;the EnfranchisedMind blog&lt;/a&gt;. &lt;span&gt;EnfranchisedMind Blog&lt;/span&gt; by &lt;a rel="nofollow" target="_blank" href="http://enfranchisedmind.com/blog/"&gt;Robert Fischer, Brian Hurt, and Other Authors&lt;/a&gt; is licensed under a &lt;a rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/3.0/us/"&gt;Creative Commons Attribution-Share Alike 3.0 United States License&lt;/a&gt;.&lt;p style="display:none;"&gt;(Digital Fingerprint: bcecb67d74ab248f06f068724220e340 (200.55.161.21) )&lt;/p&gt;</description>
      <pubDate>Sun, 07 Mar 2010 08:00:28 CST</pubDate>
      <guid isPermaLink="true">http://enfranchisedmind.com/blog/?p=2330</guid>
      <dc:creator>Robert Fischer</dc:creator>
    </item>
  </channel>
</rss>

