<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Surya Suravarapu's Blog</title><link>http://www.suryasuravarapu.com</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SuryaSuravarapusBlog" /><description>Ramblings about software development and stuff related</description><language>en</language><lastBuildDate>Sat, 21 Aug 2010 07:40:21 PDT</lastBuildDate><generator>http://wordpress.org/?v=3.0.1</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SuryaSuravarapusBlog" /><feedburner:info uri="suryasuravarapusblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>Ramblings about software development and stuff related</itunes:subtitle><geo:lat>40.089905</geo:lat><geo:long>-75.641249</geo:long><image><link>http://www.feedburner.com</link><url>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</url><title>This Feed Powered by FeedBurner.com</title></image><feedburner:emailServiceId>SuryaSuravarapusBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>Lift and Content Negotiation</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/8S1-tIZ2EmM/lift-and-content-negotiation.html</link><category>REST</category><category>Scala</category><category>Lift</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Thu, 19 Aug 2010 07:40:35 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1229</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Overview</h3>
<p>This is a follow up of my <a href="http://www.suryasuravarapu.com/2010/08/lift-and-rest-uri-matching-and-content-negotiation.html">previous post on Lift and REST</a> discussing the aspects of URI matching and content negotiation. <a href="http://liftweb.net/">Lift</a> supports <code>Accept</code> header of HTTP by responding back with a representation in accordance with the media type provided in the header. However, it currently doesn't support <code>quality factor</code> (<code>q</code> parameter) of the <code>Accept</code> header, out of the box. Here  I will attempt to provide an approach to provide that support and along the way let's explore another compelling feature of the Lift's REST support.</p>
<h3>HTTP Accept Header</h3>
<p>Check <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">RFC 2616</a> for detailed explanation on <code>Accept</code> and other HTTP headers. Let's go over this based on an example: If a client sends an Accept header something like the following --</p>
<p><code>Accept: application/xml; q=0.8, application/json</code></p>
<p>is interpreted as: I prefer JSON representation but if you don't have it XML is my second choice.</p>
<p><code>Quality factor</code> or <code>q</code> parameter is the one that's used to specify the preference. <code>q</code> is a decimal ranging from 0.0 to 1.0 and is delimited with a semi-colon <code>(;)</code> following the media mime type. If no <code>q</code> parameter is specified it defaults to value of 1.0, indicating first among the options provided.</p>
<h3>Approach</h3>
<p>Before going into the approach for supporting the <code>q</code> parameter (for your Lift-based application) let's get into one of the things that you definitely want to see in a web framework: decouple business logic from the representation. Lift doesn't disappoint you in this area. In my case I was using the same business logic, authorizing the user and making the database lookups, returning the appropriate representation independent of the business logic.</p>
<p><code>serveJx</code> in <code>RestHelper</code> is there precisely for that purpose. Following code provides the URI matching rule (matches <code>/api/user/{user_id}</code> for GET requests) and returns an object that's of trait <code>Convertable</code>. Also, define an implicit def that converts the object to the appropriate representation (XML or JSON, in this case).</p>
<p><script src="http://gist.github.com/536539.js?file=gistfile4.scala"></script><noscript>[If you don't see the code embedded, here is the <a href="http://gist.github.com/536539.js?file=gistfile4.scala">direct link</a>]</noscript></p>
<p>Relevant pieces of <code>case class User</code> is provided below. If you are familiar with <a href="http://squeryl.org/">Squeryl</a> you may have already identified the annotations provided for the constructor arguments otherwise don't worry about it; Squeryl is an excellent Scala-based ORM (I like Squeryl quite a bit, that's a topic for another blog post!). <code>User</code> implements <code>Convertable</code>, meaning the two representations -- XML and JSON via <code>toXml</code> and <code>toJson</code> functions respectively. </p>
<p><script src="http://gist.github.com/536539.js?file=User.scala"></script><noscript>[If you don't see the code embedded, here is the <a href="http://gist.github.com/536539.js?file=User.scala">direct link</a>]</noscript></p>
<p>So with all the above in place, the following request would result in an XML or JSON response based on the <code>Accept</code> header. The logic for identifying the appropriate representation  is in the <code>RestHelper</code>'s <code>implicit def jxSel</code> shown below. As <code>RestHelper</code> does not support <code>q</code> parameter out of the box, <code>UserManagementService</code> extended from <code>RestHelper</code> changes the behavior by overriding <code>jxSel</code>. </p>
<p><script src="http://gist.github.com/536539.js?file=RestHelper.scala"></script><noscript>[If you don't see the code embedded, here is the <a href="http://gist.github.com/536539.js?file=RestHelper.scala">direct link</a>]</noscript></p>
<p><strong>Actual Parsing:</strong> Parsing of the Accept header and determining the representation is done using functions in the <code>ClientMediaPreference</code> object. Instead of embedding the code in this already lengthy post, here is a <a href="http://gist.github.com/536539#file_user_management_service.scala">link to the gist</a> covering the parsing logic.</p>
<h3>Conclusion</h3>
<p>There are a couple of areas that I still have to tighten-up the code, but that's the general idea. One of the <em>Todo</em> items is to send a <code>406 Not Acceptable</code> response if the representation that a client asks for is not implemented by the server.</p>
<p>Before closing, let's continue checking off another item from <a href="http://www.innoq.com/blog/st/2010/07/rest_litmus_test_for_web_frame.html">Tilkov's litmus test</a> (as we did in the <a href="http://www.suryasuravarapu.com/2010/08/lift-and-rest-uri-matching-and-content-negotiation.html">last post</a>) ...</p>
<blockquote><p>Can I easily use the same business logic while returning different content types in the response?</p></blockquote>
<p><strong>Answer:</strong> Yes, the framework is flexible in this aspect.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;title=Lift%20and%20Content%20Negotiation&amp;notes=Overview%0D%0AThis%20is%20a%20follow%20up%20of%20my%20previous%20post%20on%20Lift%20and%20REST%20discussing%20the%20aspects%20of%20URI%20matching%20and%20content%20negotiation.%20Lift%20supports%20Accept%20header%20of%20HTTP%20by%20responding%20back%20with%20a%20representation%20in%20accordance%20with%20the%20media%20type%20provided" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;title=Lift%20and%20Content%20Negotiation" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;title=Lift%20and%20Content%20Negotiation&amp;bodytext=Overview%0D%0AThis%20is%20a%20follow%20up%20of%20my%20previous%20post%20on%20Lift%20and%20REST%20discussing%20the%20aspects%20of%20URI%20matching%20and%20content%20negotiation.%20Lift%20supports%20Accept%20header%20of%20HTTP%20by%20responding%20back%20with%20a%20representation%20in%20accordance%20with%20the%20media%20type%20provided" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;title=Lift%20and%20Content%20Negotiation" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;title=Lift%20and%20Content%20Negotiation" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;t=Lift%20and%20Content%20Negotiation" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Lift%20and%20Content%20Negotiation%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;title=Lift%20and%20Content%20Negotiation&amp;annotation=Overview%0D%0AThis%20is%20a%20follow%20up%20of%20my%20previous%20post%20on%20Lift%20and%20REST%20discussing%20the%20aspects%20of%20URI%20matching%20and%20content%20negotiation.%20Lift%20supports%20Accept%20header%20of%20HTTP%20by%20responding%20back%20with%20a%20representation%20in%20accordance%20with%20the%20media%20type%20provided" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Lift%20and%20Content%20Negotiation&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;t=Lift%20and%20Content%20Negotiation&amp;s=Overview%0D%0AThis%20is%20a%20follow%20up%20of%20my%20previous%20post%20on%20Lift%20and%20REST%20discussing%20the%20aspects%20of%20URI%20matching%20and%20content%20negotiation.%20Lift%20supports%20Accept%20header%20of%20HTTP%20by%20responding%20back%20with%20a%20representation%20in%20accordance%20with%20the%20media%20type%20provided" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-content-negotiation.html&amp;t=Lift%20and%20Content%20Negotiation" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>

<p><b>You may also like:</b><ol><li><a href='http://www.suryasuravarapu.com/2010/08/lift-and-rest-uri-matching-and-content-negotiation.html' rel='bookmark' title='Permanent Link: Lift and REST: URI Matching and Content Negotiation'>Lift and REST: URI Matching and Content Negotiation</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/8S1-tIZ2EmM" height="1" width="1"/>]]></content:encoded><description>Overview This is a follow up of my previous post on Lift and REST discussing the aspects of URI matching and content negotiation. Lift supports Accept header of HTTP by responding back with a representation in accordance with the media type provided in the header. However, it currently doesn't support quality factor (q parameter) of [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2010/08/lift-and-rest-uri-matching-and-content-negotiation.html' rel='bookmark' title='Permanent Link: Lift and REST: URI Matching and Content Negotiation'&gt;Lift and REST: URI Matching and Content Negotiation&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/08/lift-and-content-negotiation.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2010/08/lift-and-content-negotiation.html</feedburner:origLink></item><item><title>Lift and REST: URI Matching and Content Negotiation</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/6bAiG3WFvPc/lift-and-rest-uri-matching-and-content-negotiation.html</link><category>REST</category><category>Scala</category><category>Lift</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 03 Aug 2010 08:15:13 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1184</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>As a Scala enthusiast I'm currently evaluating<a href="http://liftweb.net/"> Lift</a>, particularly the aspect of its REST support. This could become a series of posts on the topic as I try to understand the framework better and may be subject it to a <a href="http://www.innoq.com/blog/st/2010/07/rest_litmus_test_for_web_frame.html">litmus test</a> proposed by Stefan Tilkov. Of course, I will not be making a judgment call whether the framework is RESTful or not as I don't want to get into a dogmatic discussion!</p>
<p>So far I like what I see, it is a productive framework with a nice set of features (and has cherry-picked some best ideas from other frameworks too), and what else it's Scala-based (my current favorite language).</p>
<h3>Setup</h3>
<p><a href="http://www.assembla.com/wiki/show/liftweb/Using_Maven">Getting started instructions</a> on Liftweb's wiki worked perfectly fine for me. I used instructions for Maven and I'm using Scala 2.8.</p>
<h3>URI Matching</h3>
<p><a href="http://main.scala-tools.org/mvnsites/liftweb-2.0/framework/scaladocs/net/liftweb/http/rest/RestHelper.html">RESTHelper</a> is the trait that you may want to extend for building your REST-based web services. Lift's URI dispatch follows the templating approach in which you would leave part of the URIs to be filled by the clients before they are submitted. For example, <code>id</code> can be sent dynamically by the user: <code>http://example.org/api/user/{id}</code></p>
<p>The following block of code can take care of the above URI matching ...</p>
<p><script src="http://gist.github.com/505507.js?file=gistfile1.scala"></script><noscript>Script disabled in your reader, <a href="http://gist.github.com/505507.js?file=gistfile1.scala">click here</a></noscript></p>
<p>the List of strings are the tokens after each "/" (forward slash) in the URI. The above code indicates that a GET request can handle that specific URI pattern. And when such a pattern is encountered invoke the method userDetails.  If a URI is encountered as <code>http://example.org/api/user/101</code>, <code>101</code> is bound to <code>id</code> variable.</p>
<p><code>Box[LiftResponse]</code> is the return type that's expected. Box goes by the same notion as Option in Scala. When you have stuff to return you would respond with <code>Full(LiftResponse)</code> and <code>Empty</code> when there is no response.  So here is an example of how you can URI match and dispatch for a sample CRUD (I'm using simple User account management).</p>
<p><script src="http://gist.github.com/505507.js?file=gistfile2.scala"></script><noscript>Script disabled in your reader, <a href="http://gist.github.com/505507.js?file=gistfile2.scala">click here</a></noscript></p>
<p>Ideally I would like to write this in a single case block without breaking into multiple units as I did above. When I add more than three case statements of this complexity (which is not that much, IMO) Scala compiler takes way too long and eventually gives up with an <code>OffsetTooBigException</code>. This <a href="https://lampsvn.epfl.ch/trac/scala/ticket/1133">issue is in bug tracker</a> for a while now, and the above approach of splitting the matchers into multiple units is based on the workaround suggested there.</p>
<p>The pattern matching is flexible and works great for multiple tokens too. Something like <code>http://example.org/user/{userId}/address/{addrId}</code> can be extracted using a very similar pattern like above with values for <code>userId</code> and <code>addrId</code> binding to their corresponding variables.</p>
<p><script src="http://gist.github.com/505507.js?file=gistfile3.scala"></script><noscript>Script disabled in your reader, <a href="http://gist.github.com/505507.js?file=gistfile3.scala">click here</a></noscript></p>
<p>Here is an excellent article on <a href="http://suereth.blogspot.com/2008/11/using-partial-functions-and-pattern.html">Scala's partial functions and pattern matching</a> that you may find it useful in the context of this discussion.</p>
<h3>Content Negotiation</h3>
<p><a href="http://en.wikipedia.org/wiki/Content_negotiation">Content negotiation</a> is one of the core concepts of RESTful systems where a client can indicate which media type(s) it prefers. Also within the media types it can specify the order of preference. Client does this by using <code>Accept</code> header. For example, consider the following <code>Accept</code> header --</p>
<p><code>Accept: application/xml;q=0.8, application/json;q=0.9</code></p>
<p>It indicates to the server a) it can accept XML and JSON formats and b) it prefers JSON over XML (by providing higher value for 'q' parameter. q value ranges from 0.0 to 1.0, higher value indicates more preference).</p>
<p>Ok, so how does Lift fares in this area? Mixed results --</p>
<ul>
<li>It recognizes which media type to serve by the Accept header. So for example <code>Accept:application/json</code> header from the client is matched to <code>case "api" :: "user" :: id :: _ XmlJson _ =&gt; ...</code></li>
<li>Similarly for XML, an accept header with <code>text/xml</code> is matched to <code>XmlGet</code> method fine. One issue that I encountered here is it only recognizes <code>text/xml</code> as XML media type and not <code>application/xml</code>. <code>application/xml</code> is actually preferable to <code>text/xml</code>, generally speaking. One reason on top of my head is text/* media types ignore the encoding specified in the content, in this case if you declare a specific encoding (e.g: UTF-8) in the XML declaration header it will be ignored.</li>
<li> It doesn't respect the q parameter value. So in the above example, <code>Accept: text/xml; q=0.8, application/json;q=0.9</code> it still serves the client XML as it only looks for if <code>text/xml</code> is present in the header.</li>
</ul>
<p>So let's look at Tilkov's first question in the list:</p>
<blockquote><p>Does the framework respect that an HTTP message does not only consist of  a URI? I.e., is dispatch done at least based on the HTTP verb, the URI,  the Content-type and Accept headers?</p></blockquote>
<p>My answer, at this point: Yes dispatch works great in terms of -- HTTP verb, the pattern matching URI templates and Accept headers (partially). Lift has to get its act together in further tightening its content negotiation support.</p>
<p>[I would love to contribute some patches for this and more (like hypermedia support, will elaborate it in the future posts). Lift folks, you have a volunteer here!]</p>
<p>Stay tuned!</p>
<p><strong>Update:</strong> Follow-up is posted here: <a href="http://www.suryasuravarapu.com/2010/08/lift-and-content-negotiation.html">Lift and Content Negotiation</a></p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation&amp;notes=As%20a%20Scala%20enthusiast%20I%27m%20currently%20evaluating%20Lift%2C%20particularly%20the%20aspect%20of%20its%20REST%20support.%20This%20could%20become%20a%20series%20of%20posts%20on%20the%20topic%20as%20I%20try%20to%20understand%20the%20framework%20better%20and%20may%20be%20subject%20it%20to%20a%20litmus%20test%20proposed%20by%20Stefan%20T" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation&amp;bodytext=As%20a%20Scala%20enthusiast%20I%27m%20currently%20evaluating%20Lift%2C%20particularly%20the%20aspect%20of%20its%20REST%20support.%20This%20could%20become%20a%20series%20of%20posts%20on%20the%20topic%20as%20I%20try%20to%20understand%20the%20framework%20better%20and%20may%20be%20subject%20it%20to%20a%20litmus%20test%20proposed%20by%20Stefan%20T" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;t=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation&amp;annotation=As%20a%20Scala%20enthusiast%20I%27m%20currently%20evaluating%20Lift%2C%20particularly%20the%20aspect%20of%20its%20REST%20support.%20This%20could%20become%20a%20series%20of%20posts%20on%20the%20topic%20as%20I%20try%20to%20understand%20the%20framework%20better%20and%20may%20be%20subject%20it%20to%20a%20litmus%20test%20proposed%20by%20Stefan%20T" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;t=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation&amp;s=As%20a%20Scala%20enthusiast%20I%27m%20currently%20evaluating%20Lift%2C%20particularly%20the%20aspect%20of%20its%20REST%20support.%20This%20could%20become%20a%20series%20of%20posts%20on%20the%20topic%20as%20I%20try%20to%20understand%20the%20framework%20better%20and%20may%20be%20subject%20it%20to%20a%20litmus%20test%20proposed%20by%20Stefan%20T" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F08%2Flift-and-rest-uri-matching-and-content-negotiation.html&amp;t=Lift%20and%20REST%3A%20URI%20Matching%20and%20Content%20Negotiation" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>

<p><b>You may also like:</b><ol><li><a href='http://www.suryasuravarapu.com/2009/10/rest-delete-operation-and-tunneling.html' rel='bookmark' title='Permanent Link: REST: DELETE operation and tunneling'>REST: DELETE operation and tunneling</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/6bAiG3WFvPc" height="1" width="1"/>]]></content:encoded><description>As a Scala enthusiast I'm currently evaluating Lift, particularly the aspect of its REST support. This could become a series of posts on the topic as I try to understand the framework better and may be subject it to a litmus test proposed by Stefan Tilkov. Of course, I will not be making a judgment [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/10/rest-delete-operation-and-tunneling.html' rel='bookmark' title='Permanent Link: REST: DELETE operation and tunneling'&gt;REST: DELETE operation and tunneling&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/08/lift-and-rest-uri-matching-and-content-negotiation.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">9</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2010/08/lift-and-rest-uri-matching-and-content-negotiation.html</feedburner:origLink></item><item><title>Spawning a Process from Hudson</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/0VYGZVL-8gI/spawning-a-process-from-hudson.html</link><category>Build</category><category>Tools</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Fri, 02 Jul 2010 04:39:59 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1170</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>It took a little while to figure this out, and hence documenting here ...</p>
<p>Need is to restart JBoss once the artifacts are deployed. I have two different jobs, one for building and deploying artifacts (EAR, in this case) and the other one to restart the server. Former invokes the latter as a part of its post-build actions.</p>
<p>I've setup a build step in <a href="http://hudson-ci.org/">Hudson</a> that executes a shell script which essentially invokes stop and start operations on the server. The server stops fine, but when I start the server in the background, server process gets killed once the Hudson process is finished. I've tried multiple ways of achieving this -- tried a couple of JBoss Maven plugins and tried Ant route too suspecting if that was an issue with my Shell script. But the real problem lies with the way Hudson deals with the spawned processes. This behavior is consistent with their design according to <a href="http://wiki.hudson-ci.org/display/HUDSON/Spawning+processes+from+build">Hudson docs</a>.</p>
<p>The suggested workaround for Unix systems is to use something like <a href="http://bmc.github.com/daemonize/">daemonize</a>. That didn't work for me. Daemonize works fine but the process is still being killed by the Hudson.  [Side note: daemonize is a neat tool, glad that I stumbled on it. Need it for some other purposes].</p>
<p>So how was this resolved? Searching the bug tracker, found the <a href="http://issues.hudson-ci.org/browse/HUDSON-3125">exact issue</a> that I mentioned here. The solution/workaround mentioned there works like a charm. Here is what it says --</p>
<blockquote><p>set the environment variable BUILD_ID to something like 'dontKillMe'  in the<br />
process that should stay alive.</p>
<p>Hudson looks for that environment variable when cleaning up stray  processes.</p></blockquote>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="alignleft" title="Hudson-SetEnv-BUILD_ID" src="http://www.suryasuravarapu.com/wp-content/uploads/2010/07/SpawnProcessHudson.jpg" alt="" width="322" height="149" /></p>
<p>SetEnv plugin is already installed on my Hudson server, and setting BUILD_ID variable value worked! May be that Hudson could provide an option on the admin UI for the user to indicate not to kill the intentionally spawned processes.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;title=Spawning%20a%20Process%20from%20Hudson&amp;notes=It%20took%20a%20little%20while%20to%20figure%20this%20out%2C%20and%20hence%20documenting%20here%20...%0D%0A%0D%0ANeed%20is%20to%20restart%20JBoss%20once%20the%20artifacts%20are%20deployed.%20I%20have%20two%20different%20jobs%2C%20one%20for%20building%20and%20deploying%20artifacts%20%28EAR%2C%20in%20this%20case%29%20and%20the%20other%20one%20to%20restar" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;title=Spawning%20a%20Process%20from%20Hudson" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;title=Spawning%20a%20Process%20from%20Hudson&amp;bodytext=It%20took%20a%20little%20while%20to%20figure%20this%20out%2C%20and%20hence%20documenting%20here%20...%0D%0A%0D%0ANeed%20is%20to%20restart%20JBoss%20once%20the%20artifacts%20are%20deployed.%20I%20have%20two%20different%20jobs%2C%20one%20for%20building%20and%20deploying%20artifacts%20%28EAR%2C%20in%20this%20case%29%20and%20the%20other%20one%20to%20restar" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;title=Spawning%20a%20Process%20from%20Hudson" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;title=Spawning%20a%20Process%20from%20Hudson" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;t=Spawning%20a%20Process%20from%20Hudson" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Spawning%20a%20Process%20from%20Hudson%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;title=Spawning%20a%20Process%20from%20Hudson&amp;annotation=It%20took%20a%20little%20while%20to%20figure%20this%20out%2C%20and%20hence%20documenting%20here%20...%0D%0A%0D%0ANeed%20is%20to%20restart%20JBoss%20once%20the%20artifacts%20are%20deployed.%20I%20have%20two%20different%20jobs%2C%20one%20for%20building%20and%20deploying%20artifacts%20%28EAR%2C%20in%20this%20case%29%20and%20the%20other%20one%20to%20restar" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Spawning%20a%20Process%20from%20Hudson&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;t=Spawning%20a%20Process%20from%20Hudson&amp;s=It%20took%20a%20little%20while%20to%20figure%20this%20out%2C%20and%20hence%20documenting%20here%20...%0D%0A%0D%0ANeed%20is%20to%20restart%20JBoss%20once%20the%20artifacts%20are%20deployed.%20I%20have%20two%20different%20jobs%2C%20one%20for%20building%20and%20deploying%20artifacts%20%28EAR%2C%20in%20this%20case%29%20and%20the%20other%20one%20to%20restar" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F07%2Fspawning-a-process-from-hudson.html&amp;t=Spawning%20a%20Process%20from%20Hudson" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/0VYGZVL-8gI" height="1" width="1"/>]]></content:encoded><description>It took a little while to figure this out, and hence documenting here ... Need is to restart JBoss once the artifacts are deployed. I have two different jobs, one for building and deploying artifacts (EAR, in this case) and the other one to restart the server. Former invokes the latter as a part of [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/07/spawning-a-process-from-hudson.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2010/07/spawning-a-process-from-hudson.html</feedburner:origLink></item><item><title>Terrastore Scala Client</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/0k51DczlILs/terrastore-scala-client.html</link><category>NoSQL</category><category>Scala</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 01 Jun 2010 04:52:11 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1156</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>For a while now, I've been an enthusiast following the <a href="http://en.wikipedia.org/wiki/NoSQL">NoSQL movement</a> and during the process drawn towards <a href="http://code.google.com/p/terrastore/">Terrastore</a>. Terrastore is based on <a href="http://www.terracotta.org/">Terracotta</a>, it's a modern document store which provides advanced  scalability and elasticity features without sacrificing consistency. If you haven't heard about Terrastore yet, it's worth checking out.</p>
<p>Sergio Bossa is spearheading the efforts on the project, and he is doing a terrific job at it. I've been in touch with Sergio for a bit and in discussions about how I can contribute to the project. Before jumping into the core aspects of the product I wanted to work on a client implementation so that I can play with Terrastore and understanding some of its intricacies. So I started working on a client implementation in Scala, my language of choice these days.</p>
<p>The client implementation is available at <a href="http://github.com/ssuravarapu/Terrastore-Scala-Client">Github</a>. There are few areas that I would like to tighten up a bit in the code, but it's out there for some early feedback.</p>
<p>I'm certainly excited to get started on the Terrastore core, and working with great minds -- Sergio and Greg Luck, a good friend and guru back from Ehcache days.</p>
<p>[Direct link to <a href="http://github.com/ssuravarapu/Terrastore-Scala-Client">Terrastore-Scala-Client</a> on Github]</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;title=Terrastore%20Scala%20Client&amp;notes=For%20a%20while%20now%2C%20I%27ve%20been%20an%20enthusiast%20following%20the%20NoSQL%20movement%20and%20during%20the%20process%20drawn%20towards%20Terrastore.%20Terrastore%20is%20based%20on%20Terracotta%2C%20it%27s%20a%20modern%20document%20store%20which%20provides%20advanced%20%20scalability%20and%20elasticity%20features%20withou" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;title=Terrastore%20Scala%20Client" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;title=Terrastore%20Scala%20Client&amp;bodytext=For%20a%20while%20now%2C%20I%27ve%20been%20an%20enthusiast%20following%20the%20NoSQL%20movement%20and%20during%20the%20process%20drawn%20towards%20Terrastore.%20Terrastore%20is%20based%20on%20Terracotta%2C%20it%27s%20a%20modern%20document%20store%20which%20provides%20advanced%20%20scalability%20and%20elasticity%20features%20withou" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;title=Terrastore%20Scala%20Client" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;title=Terrastore%20Scala%20Client" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;t=Terrastore%20Scala%20Client" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Terrastore%20Scala%20Client%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;title=Terrastore%20Scala%20Client&amp;annotation=For%20a%20while%20now%2C%20I%27ve%20been%20an%20enthusiast%20following%20the%20NoSQL%20movement%20and%20during%20the%20process%20drawn%20towards%20Terrastore.%20Terrastore%20is%20based%20on%20Terracotta%2C%20it%27s%20a%20modern%20document%20store%20which%20provides%20advanced%20%20scalability%20and%20elasticity%20features%20withou" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Terrastore%20Scala%20Client&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;t=Terrastore%20Scala%20Client&amp;s=For%20a%20while%20now%2C%20I%27ve%20been%20an%20enthusiast%20following%20the%20NoSQL%20movement%20and%20during%20the%20process%20drawn%20towards%20Terrastore.%20Terrastore%20is%20based%20on%20Terracotta%2C%20it%27s%20a%20modern%20document%20store%20which%20provides%20advanced%20%20scalability%20and%20elasticity%20features%20withou" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F06%2Fterrastore-scala-client.html&amp;t=Terrastore%20Scala%20Client" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>

<p><b>You may also like:</b><ol><li><a href='http://www.suryasuravarapu.com/2010/05/thoughtworks-technology-radar-april-2010.html' rel='bookmark' title='Permanent Link: Thoughtworks Technology Radar (April 2010)'>Thoughtworks Technology Radar (April 2010)</a></li>
<li><a href='http://www.suryasuravarapu.com/2010/04/scala-game-of-life.html' rel='bookmark' title='Permanent Link: Scala: Game of Life'>Scala: Game of Life</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/0k51DczlILs" height="1" width="1"/>]]></content:encoded><description>For a while now, I've been an enthusiast following the NoSQL movement and during the process drawn towards Terrastore. Terrastore is based on Terracotta, it's a modern document store which provides advanced scalability and elasticity features without sacrificing consistency. If you haven't heard about Terrastore yet, it's worth checking out. Sergio Bossa is spearheading the [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2010/05/thoughtworks-technology-radar-april-2010.html' rel='bookmark' title='Permanent Link: Thoughtworks Technology Radar (April 2010)'&gt;Thoughtworks Technology Radar (April 2010)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2010/04/scala-game-of-life.html' rel='bookmark' title='Permanent Link: Scala: Game of Life'&gt;Scala: Game of Life&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/06/terrastore-scala-client.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2010/06/terrastore-scala-client.html</feedburner:origLink></item><item><title>Thoughtworks Technology Radar (April 2010)</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/tFQkw5T3WtM/thoughtworks-technology-radar-april-2010.html</link><category>General</category><category>Languages</category><category>Tools</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Wed, 12 May 2010 08:59:17 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=997</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Somehow I missed the release of second edition of <a href="http://www.thoughtworks.com/sites/www.thoughtworks.com/files/files/tw-radar-april-2010.pdf">Thoughtworks' technology radar</a> [PDF]. As they did in the inaugural edition they evaluated various techniques, tools, platforms and languages and put them in four <em>buckets</em> -- hold, assess, trial and adopt.</p>
<p>I will jump to the biggest surprise (but something that's consistent with what I'm hearing these days) -- <a href="http://code.google.com/webtoolkit/">GWT</a> is moved back from Assess to Hold status. I used to be a fan of the approach GWT took, mostly coming from my angst towards writing Javascript, and to develop client-side stuff using the language that I'm quite familiar with -- Java.  Although I haven't done enterprise stuff with GWT yet, what I heard was it's not as productive as I was earlier thinking about, and this technology radar points to some of the issues with the generation of Javascript in terms of productivity, troubleshoting, not being able to utilize powerful features of Javascript, and unit testing. I'm not giving up yet on GWT, but would certainly like to hear feedback from the folks who used it in production-grade applications with good success.</p>
<p>As far as languages are concerned -- they are excited about two languages that I'm having great fun with -- <a href="http://www.scala-lang.org/">Scala</a> and <a href="http://clojure.org/">Clojure</a>. I'm fairly convinced that the enterprises sooner than later would evaluate options of using these JVM-based languages than sticking with Java alone. Java as a language is not dead yet (in fact far from it and <em>dead</em> is a too harsh a word), but if the current trend continues in terms of these new breed of JVM languages (coupled with some good customer stories) that day may not be that far off. Other than that in the languages section -- HTML 5 is gaining traction, which is expected.</p>
<p>In the tools category -- <a href="http://restfulie.caelumobjects.com/">Restfulie</a> has got a mention. I think this is pretty significant in the world of REST-based development. Restfulie is an excellent tool to achieve Hypermedia constraint (HATEOAS) of REST, which helps significantly in loose coupling between clients and servers. They said it well -- "<em>It [success of Restufulie] is an emperical proof that the web and the hypermedia can be used to orchestrate complex business activities</em>".</p>
<p>Also in the tools category -- <a href="http://subversion.tigris.org/">Subversion</a> moves back into the Adopt section. It has to be that way all along, in my opinion. I like distributed version control systems (<a href="http://git-scm.com/">Git</a> and <a href="http://mercurial.selenic.com/">Mercurial</a>) a lot but Subversion still has a place in the enterprise. I second their opinion that it's a solid version control system suitable for most teams. New to enter the radar is <a href="https://github.com/">Github</a>, another success story, undoubtedly popularized Git along with their source code hosting and social networking abilities.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;title=Thoughtworks%20Technology%20Radar%20%28April%202010%29&amp;notes=Somehow%20I%20missed%20the%20release%20of%20second%20edition%20of%20Thoughtworks%27%20technology%20radar%20%5BPDF%5D.%20As%20they%20did%20in%20the%20inaugural%20edition%20they%20evaluated%20various%20techniques%2C%20tools%2C%20platforms%20and%20languages%20and%20put%20them%20in%20four%20buckets%20--%20hold%2C%20assess%2C%20trial%20and%20ado" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;title=Thoughtworks%20Technology%20Radar%20%28April%202010%29" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;title=Thoughtworks%20Technology%20Radar%20%28April%202010%29&amp;bodytext=Somehow%20I%20missed%20the%20release%20of%20second%20edition%20of%20Thoughtworks%27%20technology%20radar%20%5BPDF%5D.%20As%20they%20did%20in%20the%20inaugural%20edition%20they%20evaluated%20various%20techniques%2C%20tools%2C%20platforms%20and%20languages%20and%20put%20them%20in%20four%20buckets%20--%20hold%2C%20assess%2C%20trial%20and%20ado" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;title=Thoughtworks%20Technology%20Radar%20%28April%202010%29" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;title=Thoughtworks%20Technology%20Radar%20%28April%202010%29" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;t=Thoughtworks%20Technology%20Radar%20%28April%202010%29" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Thoughtworks%20Technology%20Radar%20%28April%202010%29%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;title=Thoughtworks%20Technology%20Radar%20%28April%202010%29&amp;annotation=Somehow%20I%20missed%20the%20release%20of%20second%20edition%20of%20Thoughtworks%27%20technology%20radar%20%5BPDF%5D.%20As%20they%20did%20in%20the%20inaugural%20edition%20they%20evaluated%20various%20techniques%2C%20tools%2C%20platforms%20and%20languages%20and%20put%20them%20in%20four%20buckets%20--%20hold%2C%20assess%2C%20trial%20and%20ado" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Thoughtworks%20Technology%20Radar%20%28April%202010%29&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;t=Thoughtworks%20Technology%20Radar%20%28April%202010%29&amp;s=Somehow%20I%20missed%20the%20release%20of%20second%20edition%20of%20Thoughtworks%27%20technology%20radar%20%5BPDF%5D.%20As%20they%20did%20in%20the%20inaugural%20edition%20they%20evaluated%20various%20techniques%2C%20tools%2C%20platforms%20and%20languages%20and%20put%20them%20in%20four%20buckets%20--%20hold%2C%20assess%2C%20trial%20and%20ado" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F05%2Fthoughtworks-technology-radar-april-2010.html&amp;t=Thoughtworks%20Technology%20Radar%20%28April%202010%29" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/tFQkw5T3WtM" height="1" width="1"/>]]></content:encoded><description>Somehow I missed the release of second edition of Thoughtworks' technology radar [PDF]. As they did in the inaugural edition they evaluated various techniques, tools, platforms and languages and put them in four buckets -- hold, assess, trial and adopt. I will jump to the biggest surprise (but something that's consistent with what I'm hearing [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/05/thoughtworks-technology-radar-april-2010.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><enclosure url="http://www.thoughtworks.com/sites/www.thoughtworks.com/files/files/tw-radar-april-2010.pdf" length="1674276" type="application/pdf" /><media:content url="http://www.thoughtworks.com/sites/www.thoughtworks.com/files/files/tw-radar-april-2010.pdf" fileSize="1674276" type="application/pdf" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>Somehow I missed the release of second edition of Thoughtworks' technology radar [PDF]. As they did in the inaugural edition they evaluated various techniques, tools, platforms and languages and put them in four buckets -- hold, assess, trial and adopt. I</itunes:subtitle><itunes:summary>Somehow I missed the release of second edition of Thoughtworks' technology radar [PDF]. As they did in the inaugural edition they evaluated various techniques, tools, platforms and languages and put them in four buckets -- hold, assess, trial and adopt. I will jump to the biggest surprise (but something that's consistent with what I'm hearing [...]</itunes:summary><itunes:keywords>General, Languages, Tools</itunes:keywords><feedburner:origLink>http://www.suryasuravarapu.com/2010/05/thoughtworks-technology-radar-april-2010.html</feedburner:origLink></item><item><title>Scala: Game of Life</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/E0KFlYMiQq8/scala-game-of-life.html</link><category>Scala</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Wed, 07 Apr 2010 07:13:30 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1072</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I'm trying to write as many small programs as possible on my way to learn Scala. Along the lines, <a href="http://blog.dhananjaynene.com">Dhananjay Nene</a> suggested that <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Conway's Game of Life</a> is a good one to implement. So here is an implementation, feel free to critique.</p>
<p>I tried to write it in a more functional way but you would surely see an overlap of imperative programming style (having worked with Java for over a decade now).</p>
<h3>Rules of the game</h3>
<p><small>[Reproduced from the same Wikipedia article linked above]</small></p>
<blockquote><p>The universe of the Game of Life is an infinite two-dimensional <a title="Orthogonal" href="http://en.wikipedia.org/wiki/Orthogonal">orthogonal</a> grid of square <em>cells</em>, each of  which is in one of two possible states, <em>live</em> or <em>dead</em>.  Every cell interacts with its eight <em><a title="Moore  neighborhood" href="http://en.wikipedia.org/wiki/Moore_neighborhood">neighbors</a></em>, which are the cells that are directly  horizontally, vertically, or diagonally adjacent. At each step in time,  the following transitions occur:</p>
<ol>
<li>Any live cell with fewer than two live neighbours dies, as if caused  by underpopulation.</li>
<li>Any live cell with more than three live neighbours dies, as if by  overcrowding.</li>
<li>Any live cell with two or three live neighbours lives on to the next  generation.</li>
<li>Any dead cell with exactly three live neighbours becomes a live  cell.</li>
</ol>
<p>The initial pattern constitutes the <em>seed</em> of the system. The  first generation is created by applying the above rules simultaneously  to every cell in the seed—births and deaths happen simultaneously, and  the discrete moment at which this happens is sometimes called a <em>tick</em> (in other words, each generation is a pure function of the one before).  The rules continue to be applied repeatedly to create further  generations.</p></blockquote>
<h3>Code</h3>
<p>Hopefully self explanatory <img src='http://www.suryasuravarapu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Game of Life</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="scala"><ol><li class="li1"><div class="de1"><a href="http://scala-lang.org"><span class="kw1">object</span></a> GameOfLife <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">  <a href="http://scala-lang.org"><span class="kw1">def</span></a> buildBoard<span class="br0">&#40;</span>liveCells:List<span class="br0">&#91;</span>Tuple2<span class="br0">&#91;</span>Int, Int<span class="br0">&#93;</span><span class="br0">&#93;</span>, sideWidth:Int<span class="br0">&#41;</span>:Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <a href="http://scala-lang.org"><span class="kw1">val</span></a> board = <a href="http://scala-lang.org"><span class="kw1">new</span></a> Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#40;</span>sideWidth, sideWidth<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    liveCells foreach <span class="br0">&#40;</span>arg =&gt; board<span class="br0">&#40;</span>arg._1<span class="br0">&#41;</span><span class="br0">&#40;</span>arg._2<span class="br0">&#41;</span> = <a href="http://scala-lang.org"><span class="kw1">true</span></a><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    board</div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">  <a href="http://scala-lang.org"><span class="kw1">def</span></a> generationalChange<span class="br0">&#40;</span>board:Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>:Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <a href="http://scala-lang.org"><span class="kw1">val</span></a> newBoard = <a href="http://scala-lang.org"><span class="kw1">new</span></a> Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#40;</span>board.<span class="me1">length</span>, board.<span class="me1">length</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <a href="http://scala-lang.org"><span class="kw1">for</span></a> <span class="br0">&#40;</span>row &lt; - <span class="nu0">0</span> until board.<span class="me1">length</span>; col &lt;- <span class="nu0">0</span> until board.<span class="me1">length</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">      <a href="http://scala-lang.org"><span class="kw1">val</span></a> lives = computeLives<span class="br0">&#40;</span>board, row, col<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">      newBoard<span class="br0">&#40;</span>row<span class="br0">&#41;</span><span class="br0">&#40;</span>col<span class="br0">&#41;</span> = <a href="http://scala-lang.org"><span class="kw1">if</span></a> <span class="br0">&#40;</span>lives == <span class="nu0">3</span> &amp;&amp; !board<span class="br0">&#40;</span>row<span class="br0">&#41;</span><span class="br0">&#40;</span>col<span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://scala-lang.org"><span class="kw1">true</span></a></div></li><li class="li1"><div class="de1">        <a href="http://scala-lang.org"><span class="kw1">else</span></a> <a href="http://scala-lang.org"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="br0">&#40;</span>lives &lt;= <span class="nu0">1</span> || lives &gt;= <span class="nu0">4</span><span class="br0">&#41;</span> &amp;&amp; board<span class="br0">&#40;</span>row<span class="br0">&#41;</span><span class="br0">&#40;</span>col<span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://scala-lang.org"><span class="kw1">false</span></a></div></li><li class="li1"><div class="de1">        <a href="http://scala-lang.org"><span class="kw1">else</span></a> board<span class="br0">&#40;</span>row<span class="br0">&#41;</span><span class="br0">&#40;</span>col<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">    newBoard</div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">  <a href="http://scala-lang.org"><span class="kw1">def</span></a> computeLives<span class="br0">&#40;</span>board:Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span>, currentRow:Int, currentColumn:Int<span class="br0">&#41;</span>:Int = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <a href="http://scala-lang.org"><span class="kw1">var</span></a> lives:Int = <span class="nu0">0</span></div></li><li class="li1"><div class="de1">    <a href="http://scala-lang.org"><span class="kw1">for</span></a> <span class="br0">&#40;</span>i &lt; - Math.<span class="me1">max</span><span class="br0">&#40;</span><span class="nu0">0</span>, currentRow - <span class="nu0">1</span><span class="br0">&#41;</span> to Math.<span class="me1">min</span><span class="br0">&#40;</span>board.<span class="me1">length</span> - <span class="nu0">1</span>, currentRow + <span class="nu0">1</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">         j &lt;- Math.<span class="me1">max</span><span class="br0">&#40;</span><span class="nu0">0</span>, currentColumn - <span class="nu0">1</span><span class="br0">&#41;</span> to Math.<span class="me1">min</span><span class="br0">&#40;</span>board.<span class="me1">length</span> - <span class="nu0">1</span>, currentColumn + <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">      <a href="http://scala-lang.org"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="br0">&#40;</span>i != currentRow || j != currentColumn<span class="br0">&#41;</span> &amp;&amp; board<span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="br0">&#40;</span>j<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">          lives += <span class="nu0">1</span></div></li><li class="li1"><div class="de1">      <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">    lives</div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">  <a href="http://scala-lang.org"><span class="kw1">def</span></a> printBoard<span class="br0">&#40;</span>board:Array<span class="br0">&#91;</span>Array<span class="br0">&#91;</span>Boolean<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    println</div></li><li class="li1"><div class="de1">    board.<span class="me1">foreach</span> <span class="br0">&#123;</span>i =&gt;</div></li><li class="li1"><div class="de1">      i.<span class="me1">foreach</span> <span class="br0">&#123;</span> j =&gt;</div></li><li class="li1"><div class="de1">        <a href="http://scala-lang.org"><span class="kw1">if</span></a> <span class="br0">&#40;</span>j<span class="br0">&#41;</span> print<span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="br0">&#41;</span> <a href="http://scala-lang.org"><span class="kw1">else</span></a> print<span class="br0">&#40;</span><span class="st0">&quot;.&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">      <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">      println</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">  <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div></div>
<h3>Test</h3>
<p>Let's pass in live cell coordinates and board size to mimic the behavior of Oscillators (Beacon) pattern. See image below:</p>
<p><img class="alignnone" title="Game_of_life_beacon" src="http://upload.wikimedia.org/wikipedia/en/1/1c/Game_of_life_beacon.gif" alt="" width="98" height="98" /></p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Test it!</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.suryasuravarapu.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="scala"><a href="http://scala-lang.org"><span class="kw1">def</span></a> main<span class="br0">&#40;</span>args: Array<span class="br0">&#91;</span>String<span class="br0">&#93;</span><span class="br0">&#41;</span> = <span class="br0">&#123;</span>
    <a href="http://scala-lang.org"><span class="kw1">var</span></a> board = buildBoard<span class="br0">&#40;</span>List<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">1</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">1</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">3</span>,<span class="nu0">4</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">4</span>,<span class="nu0">3</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">4</span>,<span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="nu0">6</span><span class="br0">&#41;</span>
    printBoard<span class="br0">&#40;</span>board<span class="br0">&#41;</span>
    <a href="http://scala-lang.org"><span class="kw1">for</span></a> <span class="br0">&#40;</span>period &lt;- <span class="nu0">1</span> to <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      board = generationalChange<span class="br0">&#40;</span>board<span class="br0">&#41;</span>
      printBoard<span class="br0">&#40;</span>board<span class="br0">&#41;</span>
    <span class="br0">&#125;</span>
  <span class="br0">&#125;</span></pre></div></div>
<h3>Output</h3>
<p>A dot (.) represents an empty cell and a star (*) represents a live cell.  Initial, generation 1 and generation 2 in that order below:</p>
<pre>......
.**...
.*....
....*.
...**.
......

......
.**...
.**...
...**.
...**.
......

......
.**...
.*....
....*.
...**.
......</pre>
<p><small>[Image courtesy: <a href="http://en.wikipedia.org/wiki/File:Game_of_life_beacon.gif" rel="lightbox[1072]">wikipedia</a>]</small></p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;title=Scala%3A%20Game%20of%20Life&amp;notes=I%27m%20trying%20to%20write%20as%20many%20small%20programs%20as%20possible%20on%20my%20way%20to%20learn%20Scala.%20Along%20the%20lines%2C%20Dhananjay%20Nene%20suggested%20that%20Conway%27s%20Game%20of%20Life%20is%20a%20good%20one%20to%20implement.%20So%20here%20is%20an%20implementation%2C%20feel%20free%20to%20critique.%0D%0A%0D%0AI%20tried%20to%20write" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;title=Scala%3A%20Game%20of%20Life" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;title=Scala%3A%20Game%20of%20Life&amp;bodytext=I%27m%20trying%20to%20write%20as%20many%20small%20programs%20as%20possible%20on%20my%20way%20to%20learn%20Scala.%20Along%20the%20lines%2C%20Dhananjay%20Nene%20suggested%20that%20Conway%27s%20Game%20of%20Life%20is%20a%20good%20one%20to%20implement.%20So%20here%20is%20an%20implementation%2C%20feel%20free%20to%20critique.%0D%0A%0D%0AI%20tried%20to%20write" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;title=Scala%3A%20Game%20of%20Life" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;title=Scala%3A%20Game%20of%20Life" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;t=Scala%3A%20Game%20of%20Life" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Scala%3A%20Game%20of%20Life%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;title=Scala%3A%20Game%20of%20Life&amp;annotation=I%27m%20trying%20to%20write%20as%20many%20small%20programs%20as%20possible%20on%20my%20way%20to%20learn%20Scala.%20Along%20the%20lines%2C%20Dhananjay%20Nene%20suggested%20that%20Conway%27s%20Game%20of%20Life%20is%20a%20good%20one%20to%20implement.%20So%20here%20is%20an%20implementation%2C%20feel%20free%20to%20critique.%0D%0A%0D%0AI%20tried%20to%20write" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Scala%3A%20Game%20of%20Life&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;t=Scala%3A%20Game%20of%20Life&amp;s=I%27m%20trying%20to%20write%20as%20many%20small%20programs%20as%20possible%20on%20my%20way%20to%20learn%20Scala.%20Along%20the%20lines%2C%20Dhananjay%20Nene%20suggested%20that%20Conway%27s%20Game%20of%20Life%20is%20a%20good%20one%20to%20implement.%20So%20here%20is%20an%20implementation%2C%20feel%20free%20to%20critique.%0D%0A%0D%0AI%20tried%20to%20write" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F04%2Fscala-game-of-life.html&amp;t=Scala%3A%20Game%20of%20Life" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/E0KFlYMiQq8" height="1" width="1"/>]]></content:encoded><description>I'm trying to write as many small programs as possible on my way to learn Scala. Along the lines, Dhananjay Nene suggested that Conway's Game of Life is a good one to implement. So here is an implementation, feel free to critique. I tried to write it in a more functional way but you would [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/04/scala-game-of-life.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2010/04/scala-game-of-life.html</feedburner:origLink></item><item><title>Greg Luck’s Ehcache Presentation</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/nh0UC9Q4wGI/greg-lucks-ehcache-presentation.html</link><category>Caching</category><category>Ehcache</category><category>JavaUserGroup</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Mon, 15 Mar 2010 08:08:38 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1021</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Few days ago, at Philly JUG, <a href="http://gregluck.com">Greg Luck</a> (CTO <a href="http://ehcache.org/">Ehcache</a> at <a href="http://terracotta.org/">Terracotta</a>) spoke about Ehcache and Terracotta. The event was attended by over 100 professionals in the area.</p>
<h3>History</h3>
<p>Greg started off with a brief history on the progress of Ehcache over the years [I still remember those early conversations that I had with Greg about 5 years ago when I first contributed to the project]. The project was never static, in fact far from it, there has been a steady progress from the stage where it was simple-yet-powerful standalone cache to a well-implemented extensible distributed framework.</p>
<p>In the early stages, Greg was not too keen on building a distributed cache. Once the goal of getting out a great standalone cache was achieved, and that coupled with contributions from various people (and feature requests) the quest towards distributed cache began. This post <a href="http://gregluck.com/blog/archives/2006/01/ehcache-goes-distributed/">Ehcache goes distributed</a> on his blog explains the thought process of that time quite well.</p>
<p>Founded in 2003 as a fork of one of the other open source caching frameworks (Apache JCS). It progressed steadily with additions like <a href="http://ehcache.org/documentation/hibernate.html">Hibernate integration</a>, <a href="http://ehcache.org/documentation/web_caching.html">web caching</a>, <a href="http://ehcache.org/documentation/distributed_caching.html">distributed caching</a>, <a href="http://ehcache.org/documentation/cache_server.html">Cache Server</a> with REST and SOAP services. Terracotta acquired Ehcache in 2009.</p>
<h3>Ehcache Configuration and Performance</h3>
<p>Greg explained the basic configuration of Ehcache using Spring's Pet Clinic as an example -- configuring Hibernate and using Ehcache as the second-level cache. He went over configuration options and about the cache eviction algorithms.</p>
<p>I think the performance discussion evoked quite a bit of interest in the audience (well, who doesn't like talking about benchmarks and pretty charts! <img src='http://www.suryasuravarapu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) Arguably, Ehcache is the one of the best out there, in terms of performance. If you want to know more about the tests check out the <a href="https://svn.terracotta.org/repo/forge/ projects/ehcacheperf/">source code</a> yourself (requires Terracotta user account to browse that repository, registration is free).</p>
<p>Here are a few performance figures from the presentation, showing Ehcache's superiority in terms of performance. The speaker also demonstrated the performance figures of Hibernate read and write with Ehcache as the second-level cache (not shown below). Tests were performed in a cluster of 8 client JVMs (1.75G heap), 1  Terracotta server (6G heap) and using MySql</p>
<p><strong>Get (Read) and Put (Write) performance charts below:</strong></p>
<p><a href="http://www.suryasuravarapu.com/wp-content/uploads/2010/03/ehcache-get-perf.jpg" rel="lightbox[1021]"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="size-medium wp-image-1031 alignleft" title="ehcache-get-perf" src="http://www.suryasuravarapu.com/wp-content/uploads/2010/03/ehcache-get-perf-300x294.jpg" alt="" width="300" height="294" /></a></p>
<p style="text-align: center;"><a href="http://www.suryasuravarapu.com/wp-content/uploads/2010/03/ehcache-put-perf.jpg" rel="lightbox[1021]"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="size-medium wp-image-1030 aligncenter" title="ehcache-put-perf" src="http://www.suryasuravarapu.com/wp-content/uploads/2010/03/ehcache-put-perf-262x300.jpg" alt="" width="262" height="300" /></a></p>
<p style="text-align: center;">
<p style="text-align: left;"><strong>Ehcache in-process vs Memcached:</strong></p>
<p><a href="http://www.suryasuravarapu.com/wp-content/uploads/2010/03/ehcache-inprocess-memcached-perf.jpg" rel="lightbox[1021]"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="size-medium wp-image-1032 alignleft" title="ehcache-inprocess-memcached-perf" src="http://www.suryasuravarapu.com/wp-content/uploads/2010/03/ehcache-inprocess-memcached-perf-300x162.jpg" alt="" width="300" height="162" /></a>Ehcache in-process has to be faster than Memcached. If not for anything, the basic setup of in-process should have an upper hand over the serialization and network overhead for the Memcached setup. I'd be more interested in more apples-to-apples comparison of Ehcache server (REST-based) vs Memcached. Mentioned that to Greg and I'm sure he is on to it next ...</p>
<div><strong>Performance conclusions:</strong></div>
<div>After App servers and DBs tuned by the independent 3rd parties -- there is <strong>30-95%</strong> reduction in database load, improved <strong>80 times</strong> the read-only performance of MySQL, and notably lower latency.</div>
<h3>Ehcache Monitor</h3>
<div>Greg demonstrated Ehcache Monitor, a console application for management and monitoring of caches. Couple of main goals of this tool are tuning cache usage and detecting errors. It provides information about Cache hit ratios, hit/miss rates, hits on the database, detailed efficiency of cache regions. It also has some administrative capabilities that I still have to explore. The tool is still in beta, but looks promising. Read more about it <a href="http://ehcache.org/documentation/monitor.html">here</a>.</div>
<h3>New Features in Ehcache 2.0</h3>
<ul>
<li>Hibernate 3.3+ caching API: New SPI addresses some of the synchronization issues with the previous versions to better suit for the clustered environment.</li>
<li>JTA: From version 2.0, Ehcache acts as an XAResource and participates in JTA transactions. It detects most common transaction managers for various popular application servers.</li>
<li>Write-through and write-behind caching: Version 2.0 introduces write-through and write-behind caching. In write-through pattern -- cache acts as a facade to an underlying resource, and a write to the cache causes write to the resource behind it. In write-behind the concept is pretty much the same but the writes happen in an asynchronous fashion. Read more <a href="http://ehcache.org/documentation/write_through_caching.html">here</a>.</li>
<li>Bulk loading: Greg said this is one of the features that's been requested for a while now. Now 2.0 has the ability to significantly speed up bulk loading into caches using the Terracotta server array. Read more <a href="http://ehcache.org/documentation/bulk_loading.html">here</a>.</li>
</ul>
<h3>Conclusion</h3>
<p>All-in-all I think that was a great session, and as always, I enjoy using Ehcache and the association with the project. I also got a chance to hack some code with Greg while he was here in Philadelphia. Hope to contribute more ...</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;title=Greg%20Luck%27s%20Ehcache%20Presentation&amp;notes=Few%20days%20ago%2C%20at%20Philly%20JUG%2C%20Greg%20Luck%20%28CTO%20Ehcache%20at%20Terracotta%29%20spoke%20about%20Ehcache%20and%20Terracotta.%20The%20event%20was%20attended%20by%20over%20100%20professionals%20in%20the%20area.%0D%0AHistory%0D%0AGreg%20started%20off%20with%20a%20brief%20history%20on%20the%20progress%20of%20Ehcache%20over%20the%20y" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;title=Greg%20Luck%27s%20Ehcache%20Presentation" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;title=Greg%20Luck%27s%20Ehcache%20Presentation&amp;bodytext=Few%20days%20ago%2C%20at%20Philly%20JUG%2C%20Greg%20Luck%20%28CTO%20Ehcache%20at%20Terracotta%29%20spoke%20about%20Ehcache%20and%20Terracotta.%20The%20event%20was%20attended%20by%20over%20100%20professionals%20in%20the%20area.%0D%0AHistory%0D%0AGreg%20started%20off%20with%20a%20brief%20history%20on%20the%20progress%20of%20Ehcache%20over%20the%20y" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;title=Greg%20Luck%27s%20Ehcache%20Presentation" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;title=Greg%20Luck%27s%20Ehcache%20Presentation" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;t=Greg%20Luck%27s%20Ehcache%20Presentation" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Greg%20Luck%27s%20Ehcache%20Presentation%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;title=Greg%20Luck%27s%20Ehcache%20Presentation&amp;annotation=Few%20days%20ago%2C%20at%20Philly%20JUG%2C%20Greg%20Luck%20%28CTO%20Ehcache%20at%20Terracotta%29%20spoke%20about%20Ehcache%20and%20Terracotta.%20The%20event%20was%20attended%20by%20over%20100%20professionals%20in%20the%20area.%0D%0AHistory%0D%0AGreg%20started%20off%20with%20a%20brief%20history%20on%20the%20progress%20of%20Ehcache%20over%20the%20y" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Greg%20Luck%27s%20Ehcache%20Presentation&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;t=Greg%20Luck%27s%20Ehcache%20Presentation&amp;s=Few%20days%20ago%2C%20at%20Philly%20JUG%2C%20Greg%20Luck%20%28CTO%20Ehcache%20at%20Terracotta%29%20spoke%20about%20Ehcache%20and%20Terracotta.%20The%20event%20was%20attended%20by%20over%20100%20professionals%20in%20the%20area.%0D%0AHistory%0D%0AGreg%20started%20off%20with%20a%20brief%20history%20on%20the%20progress%20of%20Ehcache%20over%20the%20y" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F03%2Fgreg-lucks-ehcache-presentation.html&amp;t=Greg%20Luck%27s%20Ehcache%20Presentation" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>

<p><b>You may also like:</b><ol><li><a href='http://www.suryasuravarapu.com/2009/10/javas-http-handler-and-cache-validation-issues.html' rel='bookmark' title='Permanent Link: Java&#8217;s HTTP Handler and Cache Validation Issues'>Java&#8217;s HTTP Handler and Cache Validation Issues</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/nh0UC9Q4wGI" height="1" width="1"/>]]></content:encoded><description>Few days ago, at Philly JUG, Greg Luck (CTO Ehcache at Terracotta) spoke about Ehcache and Terracotta. The event was attended by over 100 professionals in the area. History Greg started off with a brief history on the progress of Ehcache over the years [I still remember those early conversations that I had with Greg [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/10/javas-http-handler-and-cache-validation-issues.html' rel='bookmark' title='Permanent Link: Java&amp;#8217;s HTTP Handler and Cache Validation Issues'&gt;Java&amp;#8217;s HTTP Handler and Cache Validation Issues&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/03/greg-lucks-ehcache-presentation.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2010/03/greg-lucks-ehcache-presentation.html</feedburner:origLink></item><item><title>Pomodoro Technique</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/VocMWHsNHiY/pomodoro-technique.html</link><category>General</category><category>PomodoroTechnique</category><category>Productivity</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 23 Feb 2010 07:17:13 PST</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=1001</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>A decade ago Joel Spolsky wrote an article titled <a href="http://www.joelonsoftware.com/articles/fog0000000068.html">Where do these people get their (unoriginal) ideas</a>. What he has written is common sense and most of us who worked for a few years in a corporate environment would agree with (I'm talking based on my IT background). Although the context of his article is different, the underlying theme is higher productivity, precisely the theme of this post. Joel says --</p>
<blockquote><p>Here's the trouble. We all know that knowledge workers work best by getting into "flow", also known as being "in the zone", where they are fully concentrated on their work and fully tuned out of their environment. They lose track of time and produce great stuff through absolute concentration. This is when they get all of their productive work done. Writers, programmers, scientists, and even basketball players will tell you about being in the zone.</p></blockquote>
<p>He continues ...</p>
<blockquote><p>The other trouble is that it's so easy to get knocked out of the zone. Noise, phone calls, going out for lunch, having to drive 5 minutes to Starbucks for coffee, and interruptions by coworkers -- ESPECIALLY interruptions by coworkers -- all knock you out of the zone. ...</p></blockquote>
<p>As Joel rightly points out in the article getting into that "zone" is not that easy. And once you are in, there are quite a few distractions in a typical corporate environment. Great, if you are lucky and gifted to be get into the zone without much effort. If you are like rest of us, you would be all ears for techniques that improve your productivity.</p>
<p>So an year or so ago, I stumbled on this technique called <a href="http://www.pomodorotechnique.com/">Pomodoro</a>. At the outset it's a simple tracking and feedback process where the unit of work is the pomodoro, a time slot of 25 minutes. The basic principle is to keep you focused enough for specific period of time (in this case: 25 minutes). Here is a <a href="http://www.pomodorotechnique.com/resources/cirillo/ThePomodoroTechnique_v1-3.pdf">free e-book</a> [PDF] if you are interested to know more.</p>
<p>This technique helped me quite well in accomplishing some of the tasks I have either been not focusing enough or procrastinating for various reasons.</p>
<p><a href="http://www.infoq.com/news/2010/02/pomodoro-critique">This InfoQ article</a> posed some interesting questions with some counter-arguments from Mario Fusco. Mario compares IT professionals with the professionals from other fields and says --</p>
<blockquote><p>So, why should our work be so different from the former ones? Why do we always think that our work is so special and unique to need a wide set of specific methodologies? Are we professionals or unexperienced kids playing with something bigger then them? I think that, like any other serious professional, I can stay concentrated on what I am doing for hours. I honestly don't need a pomodoro to keep myself focused for just 25 minutes. And if somebody can stay focused for no more than 25 minutes I am afraid that he should really rethink the way he works.</p></blockquote>
<p>To respond to that, I'm not so sure whether there is an apples-to-apples comparison between the professions and type of work performed. The basic goal is to be productive. Regardless which profession you are in, you find your own tools and techniques to accomplish that goal. I would treat this technique or something else as a chance to improve. Certainly with corporate emails, phone calls, and other interruptions it's certainly not easy to concentrate for a good chunk of time and being productive (I'm not even mentioning about Blogs/RSS readers, Twitter, etc.). As I already mentioned, if you think you are already productive and can concentrate quite well (without any new techniques), great, pat on your back.</p>
<p>On the drawbacks-front he says --</p>
<blockquote><p>Said that, in my opinion there are also other important drawbacks in the pomodoro technique. What should I reply to my customer who is calling me, possibly from the other side of the ocean? That I am in the middle of my pomodoro and I can't break it? ...</p></blockquote>
<p>I don't think the technique is that restrictive. Obviously if that call is important you would take it and discard that Pomodoro, attend the urgent task, and get back to Pomodoro when you are ready. Let's not complicate it more than what it is, this is just a way to being more productive cutting down on the distractions. I don't see this as a hindrance to the team work or on your efficiency to deal with more urgent matters.</p>
<p>Have you used Pomodoro technique, how do you like it?</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;title=Pomodoro%20Technique&amp;notes=A%20decade%20ago%20Joel%20Spolsky%20wrote%20an%20article%20titled%C2%A0Where%20do%20these%20people%20get%20their%20%28unoriginal%29%20ideas.%20What%20he%20has%20written%20is%20common%20sense%20and%20most%20of%20us%20who%20worked%20for%20a%20few%20years%20in%20a%20corporate%20environment%20would%20agree%20with%20%28I%27m%20talking%20based%20on%20my%20" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;title=Pomodoro%20Technique" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;title=Pomodoro%20Technique&amp;bodytext=A%20decade%20ago%20Joel%20Spolsky%20wrote%20an%20article%20titled%C2%A0Where%20do%20these%20people%20get%20their%20%28unoriginal%29%20ideas.%20What%20he%20has%20written%20is%20common%20sense%20and%20most%20of%20us%20who%20worked%20for%20a%20few%20years%20in%20a%20corporate%20environment%20would%20agree%20with%20%28I%27m%20talking%20based%20on%20my%20" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;title=Pomodoro%20Technique" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;title=Pomodoro%20Technique" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;t=Pomodoro%20Technique" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=Pomodoro%20Technique%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;title=Pomodoro%20Technique&amp;annotation=A%20decade%20ago%20Joel%20Spolsky%20wrote%20an%20article%20titled%C2%A0Where%20do%20these%20people%20get%20their%20%28unoriginal%29%20ideas.%20What%20he%20has%20written%20is%20common%20sense%20and%20most%20of%20us%20who%20worked%20for%20a%20few%20years%20in%20a%20corporate%20environment%20would%20agree%20with%20%28I%27m%20talking%20based%20on%20my%20" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=Pomodoro%20Technique&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;t=Pomodoro%20Technique&amp;s=A%20decade%20ago%20Joel%20Spolsky%20wrote%20an%20article%20titled%C2%A0Where%20do%20these%20people%20get%20their%20%28unoriginal%29%20ideas.%20What%20he%20has%20written%20is%20common%20sense%20and%20most%20of%20us%20who%20worked%20for%20a%20few%20years%20in%20a%20corporate%20environment%20would%20agree%20with%20%28I%27m%20talking%20based%20on%20my%20" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2010%2F02%2Fpomodoro-technique.html&amp;t=Pomodoro%20Technique" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/VocMWHsNHiY" height="1" width="1"/>]]></content:encoded><description>A decade ago Joel Spolsky wrote an article titled Where do these people get their (unoriginal) ideas. What he has written is common sense and most of us who worked for a few years in a corporate environment would agree with (I'm talking based on my IT background). Although the context of his article is different, [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2010/02/pomodoro-technique.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><enclosure url="http://www.pomodorotechnique.com/resources/cirillo/ThePomodoroTechnique_v1-3.pdf" length="511646" type="application/pdf" /><media:content url="http://www.pomodorotechnique.com/resources/cirillo/ThePomodoroTechnique_v1-3.pdf" fileSize="511646" type="application/pdf" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>A decade ago Joel Spolsky wrote an article titled Where do these people get their (unoriginal) ideas. What he has written is common sense and most of us who worked for a few years in a corporate environment would agree with (I'm talking based on my IT bac</itunes:subtitle><itunes:summary>A decade ago Joel Spolsky wrote an article titled Where do these people get their (unoriginal) ideas. What he has written is common sense and most of us who worked for a few years in a corporate environment would agree with (I'm talking based on my IT background). Although the context of his article is different, [...]</itunes:summary><itunes:keywords>General, PomodoroTechnique, Productivity</itunes:keywords><feedburner:origLink>http://www.suryasuravarapu.com/2010/02/pomodoro-technique.html</feedburner:origLink></item><item><title>2009 Roundup: Blog, Books and Twitter</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/WpRFqX9gYdQ/2009-roundup-blog-books-and-twitter.html</link><category>Roundup</category><category>BookReview</category><category>Twitter</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 29 Dec 2009 09:21:02 PST</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=958</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>It's that time of the year to review the progress, and to set the goals for the future. Firstly, I would like to thank all who have (directly or indirectly) helped me learn so much during the past year. It was a fun ride in many ways. In this post I would like to review about three items -- this blog, books that I read, and about my Twitter experience.</p>
<h3>Blog</h3>
<p>I have this blog up for a couple of years but it's in 2009 I've started taking it more seriously. My goal with the blog is straight and simple -- share what I learn, and in turn benefit from the collective wisdom of my readers, friends and fellow bloggers. Towards that effect, 2009 is a satisfactory year.</p>
<p>Here are the top posts of the year --</p>
<ul>
<li><a href="http://www.suryasuravarapu.com/2009/03/rest-crud-with-jax-rs-jersey.html">REST: CRUD with JAX-RS (Jersey)</a> and <a href="http://api.postrank.com/log?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F06%2Frest-crud-with-grails.html">REST: CRUD with Grails</a>: I did a lot of reading on REST this year. That reading along with discussions with some of the best in the industry helped significantly. Towards that effect, I've written two posts on the CRUD aspect -- using JAX-RS and Grails (just to clarify, REST is lot more than CRUD but these posts concentrated on performing CRUD operations using two most exciting frameworks, IMO). You can find all my posts related with REST <a href="http://www.suryasuravarapu.com/tag/rest">here</a>.</li>
<li><a href="http://www.suryasuravarapu.com/2009/04/open-source-software-model-a-positive-sum-game.html">Open Source Software Model - A Positive Sum Game:</a> Blogged about open source software and about a keynote talk that I attended at Philly ETE conference.</li>
<li><a href="http://www.suryasuravarapu.com/2009/05/subversion-ldap-integration-using-apache.html">Subversion: LDAP Integration using Apache:</a> I've achieved a good level of proficiency administering Subversion this year. This post discusses about LDAP integration. [Git is next in the list, look forward to work lot more with it in 2010].</li>
<li><a href="http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-across-the-projects.html">Jira Plugin: Unique Issue ID Across the Projects:</a> Developed a Jira plugin that assigns unique identifier to the issues across the projects. Further, <a href="http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-with-search-capability.html">this post</a> extends the functionality and make the IDs search-able.</li>
<li><a href="http://www.suryasuravarapu.com/2009/02/career-20-take-control-of-your-life.html">Career 2.0: Take control of your life:</a> Write up of an inspiring talk.</li>
</ul>
<h3>Books</h3>
<p>Regardless of the vast number of resources that are available online, a book is still my preferred choice. A good book helps in learning something new (or reinforce the concepts) in a systematic and a structured manner. A well-written book may not answer all the questions but helps in generating enough enthusiasm for further exploration.</p>
<p>Here is the list of books that I read in 2009. I could have done bit better on this front, but given all the constraints in place this may not be so bad --</p>
<ul>
<li><strong>Groovy in Action:</strong> Groovy has become one of my favorite scripting languages. [<a href="http://www.suryasuravarapu.com/2009/01/book-review-groovy-in-action.html">My review</a>]</li>
<li><strong>Career 2.0:</strong> As the name indicates, a career-oriented book from Pragmatic Bookshelf. [<a href="http://www.suryasuravarapu.com/2009/02/book-review-career-20.html">My review</a>]</li>
<li><strong>Grails in Action:</strong> An excellent book on Grails. [<a href="http://www.suryasuravarapu.com/2009/04/book-review-grails-in-action.html">My review</a>]</li>
<li><strong>Hello World:</strong> A cool book for Python beginners. [<a href="http://www.suryasuravarapu.com/2009/08/book-review-hello-world.html">My review</a>]</li>
<li><strong>The Passionate Programmer:</strong> The title says it all, a great read. [<a href="http://www.suryasuravarapu.com/2009/11/book-review-the-passionate-programmer.html">My review</a>]</li>
<li><strong>RESTful Web Services Cookbook:</strong> Not released yet, scheduled for the first quarter of 2010. I had great fun reading and reviewing this book. Watch out for it, has got <em>delicious</em> recipes for all REST enthusiasts. [<a href="http://oreilly.com/catalog/9780596801694">O'reilly link</a> and <a href="http://my.safaribooksonline.com/9780596809140">Safari online</a>]</li>
</ul>
<p>There are a few more books that I haven't finished reading yet. I will be writing about them soon.</p>
<h3>Twitter</h3>
<p>I've resisted so long to sign-up on Twitter. Primary reason for that resistance was I was not sure how that <em>140-character thing</em> would be transformed into something meaningful. That resistance broke down just over an year ago. 1700 tweets later, I'm here to report how much I learnt via Twitter for the last one year or so.</p>
<p>I use my Twitter account primarily to tweet about software, architecture, programming languages and the stuff related. Feel free to <a href="http://twitter.com/surya_s">follow me</a> there, if you are into it.</p>
<p>There are quite a few geeks out there, Twitter gives a great chance to <em>peek</em> into their thought process. It's also a great place to share the links and articles you are reading. I'm also glad that I gained some great friends and met some of my ex-colleagues with whom I lost touch a little while ago.</p>
<p>It is extremely easy to waste the time and not find any use of Twitter based on how you use it. For me, all that matters is to follow the folks who are willing to share their knowledge, and strictly stick to the passion -- technical topics. You don't see any tweets about what I ate for my lunch, etc. Not that anything wrong with it, I just don't find much value in providing that kind of information.</p>
<h3>Conclusion</h3>
<p>2009 is an year that I'm reasonably satisfied with some of the milestones that I've set out for myself. However, I know there are many more miles to go ...</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter&amp;notes=It%27s%20that%20time%20of%20the%20year%20to%20review%20the%20progress%2C%20and%20to%20set%20the%20goals%20for%20the%20future.%20Firstly%2C%20I%20would%20like%20to%20thank%20all%20who%20have%20%28directly%20or%20indirectly%29%20helped%20me%20learn%20so%20much%20during%20the%20past%20year.%20It%20was%20a%20fun%20ride%20in%20many%20ways.%20In%20this%20post%20I%20" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter&amp;bodytext=It%27s%20that%20time%20of%20the%20year%20to%20review%20the%20progress%2C%20and%20to%20set%20the%20goals%20for%20the%20future.%20Firstly%2C%20I%20would%20like%20to%20thank%20all%20who%20have%20%28directly%20or%20indirectly%29%20helped%20me%20learn%20so%20much%20during%20the%20past%20year.%20It%20was%20a%20fun%20ride%20in%20many%20ways.%20In%20this%20post%20I%20" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;t=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter&amp;annotation=It%27s%20that%20time%20of%20the%20year%20to%20review%20the%20progress%2C%20and%20to%20set%20the%20goals%20for%20the%20future.%20Firstly%2C%20I%20would%20like%20to%20thank%20all%20who%20have%20%28directly%20or%20indirectly%29%20helped%20me%20learn%20so%20much%20during%20the%20past%20year.%20It%20was%20a%20fun%20ride%20in%20many%20ways.%20In%20this%20post%20I%20" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;t=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter&amp;s=It%27s%20that%20time%20of%20the%20year%20to%20review%20the%20progress%2C%20and%20to%20set%20the%20goals%20for%20the%20future.%20Firstly%2C%20I%20would%20like%20to%20thank%20all%20who%20have%20%28directly%20or%20indirectly%29%20helped%20me%20learn%20so%20much%20during%20the%20past%20year.%20It%20was%20a%20fun%20ride%20in%20many%20ways.%20In%20this%20post%20I%20" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2F2009-roundup-blog-books-and-twitter.html&amp;t=2009%20Roundup%3A%20Blog%2C%20Books%20and%20Twitter" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>

<p><b>You may also like:</b><ol><li><a href='http://www.suryasuravarapu.com/2009/11/book-review-the-passionate-programmer.html' rel='bookmark' title='Permanent Link: Book Review: The Passionate Programmer'>Book Review: The Passionate Programmer</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/WpRFqX9gYdQ" height="1" width="1"/>]]></content:encoded><description>It's that time of the year to review the progress, and to set the goals for the future. Firstly, I would like to thank all who have (directly or indirectly) helped me learn so much during the past year. It was a fun ride in many ways. In this post I would like to review [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/11/book-review-the-passionate-programmer.html' rel='bookmark' title='Permanent Link: Book Review: The Passionate Programmer'&gt;Book Review: The Passionate Programmer&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/12/2009-roundup-blog-books-and-twitter.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/12/2009-roundup-blog-books-and-twitter.html</feedburner:origLink></item><item><title>WebDriver (Selenium 2.0): First Impressions</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/BmlRbEBX5g0/webdriver-selenium-2-0-first-impressions.html</link><category>Testing</category><category>Selenium</category><category>WebDriver</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Wed, 16 Dec 2009 05:49:06 PST</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=916</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I've been using <a href="http://seleniumhq.org/">Selenium</a> and <a href="http://watij.com/">Watij</a> for a while now (more Watij than Selenium). I've written about my prior experiences <a href="http://www.suryasuravarapu.com/2007/10/watij-and-selenium-are-they-ready-for-prime-usage.html">here</a> and <a href="http://www.suryasuravarapu.com/2008/12/test-automation-revisited.html">here</a>. Watij -- there is no significant development happening there for the last year or two. While Selenium Remote Control was nice, its IE support (especially IE 7) was not that great when I last evaluated (it may have improved since then).</p>
<p>I guess on Twitter, I first heard about <a href="http://code.google.com/p/webdriver/">WebDriver</a>, and accolades about its approach and its API design. So decided to give it a try. Best part is Selenium and WebDriver projects are joining forces with a merger in Selenium 2.0. Per my understanding, the plan is to provide both Selenium and WebDriver APIs under Selenium 2.0 umbrella. At the time of writing this post Selenium 2.0a1 (Alpha-release) was out.</p>
<p>So here are my first impressions:</p>
<ul>
<li><strong>Approach:</strong> At the outset WebDriver is similar to Selenium (Remote Control) and Watij -- developer-focused and API-driven. But the best part, for me at least, WebDriver doesn't take the approach of running as a Javascript application within the browser (like Selenium), rather it takes <a href="https://jna.dev.java.net/">JNA </a>approach interacting with the browser. That approach rules out <a href="http://en.wikipedia.org/wiki/Same_origin_policy">same origin issue</a> (a headache with Javascript approach).  Also this doesn't require native libraries installed and registered on the client (e.g: DLLs need to installed on the client for Watij).</li>
<li><strong>API:</strong> API is intuitive. For example, following code snippet finds the element (text box, in this case) by name and simulate the typing by the sendKeys() method.
<pre class="brush: java">
driver.findElement(By.name(&quot;full_name&quot;)).sendKeys(&quot;Joe Schmo&quot;);
</pre>
<p>Similarly,</p>
<pre class="brush: java">
driver.findElement(By.name(&quot;Details&quot;)).click();
</pre>
<p>finds the element (button, in this case) and clicks the button.</li>
<li><strong>Multiple drivers:</strong> Unlike Watij, which only supports IE at this time, WebDriver supports -- IE, Firefox, Chrome, and it also has a HtmlUnit version to run headless.</li>
<li><strong>Window/Frame handling:</strong> This is yet another area where WebDriver excels with a caveat (that I'll get into in a moment). When an operation like a button-click or a hyperlink-click opens a new pop-up browser, WebDriver provides an excellent way to get a handle to the new browser. Following call returns a set of all the window Ids.
<pre class="brush: java">
driver.getWindowHandles()
</pre>
<p>You can iterate over the Set to find which one is your new window and switch to that window for all future operations.</p>
<pre class="brush: java">
driver.switchTo().window(windowName)
</pre>
<p>Windows' handling is quite solid compared to handling of the Frames. In most of the situations it worked except when there are iFrames which load dynamically the behavior is not that consistent.</li>
<li><strong>Wait behavior:</strong> When a particular operation (like a button-click) is underway WebDriver waits for the operation to finish before it executes the next step of the test case. Although this sounds trivial, I've had issues with this while using other tools. In those cases I had to use Thread.sleep() to wait between the page load and the execution of the subsequent step.</li>
<li><strong>Alert Dialog:</strong> Couldn't find a way yet to handle alert dialogs. I have to dig a bit more into the API and forums to see if they are supported at this time.</li>
<li><strong>Mouse Events:</strong> I'd like to see more mouse events -- double click, hover over an element, page scrolling, right click, etc.</li>
</ul>
<p>Are you using WebDriver? What are your thoughts?</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 181px; width: 1px; height: 1px;">
<pre class="prettyprint"><span class="pln">driver</span><span class="pun">.</span><span class="pln">findElement</span><span class="pun">(</span><span class="typ">By</span><span class="pun">.</span><span class="pln">name</span><span class="pun">(</span><span class="str">"q"</span><span class="pun">));</span></pre>
</div>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions&amp;notes=I%27ve%20been%20using%20Selenium%20and%20Watij%20for%20a%20while%20now%20%28more%20Watij%20than%20Selenium%29.%20I%27ve%20written%20about%20my%20prior%20experiences%20here%20and%20here.%20Watij%20--%20there%20is%20no%20significant%20development%20happening%20there%20for%20the%20last%20year%20or%20two.%20While%20Selenium%20Remote%20Control" title="del.icio.us"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions" title="DZone"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions&amp;bodytext=I%27ve%20been%20using%20Selenium%20and%20Watij%20for%20a%20while%20now%20%28more%20Watij%20than%20Selenium%29.%20I%27ve%20written%20about%20my%20prior%20experiences%20here%20and%20here.%20Watij%20--%20there%20is%20no%20significant%20development%20happening%20there%20for%20the%20last%20year%20or%20two.%20While%20Selenium%20Remote%20Control" title="Digg"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions" title="StumbleUpon"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html" title="Technorati"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions" title="Reddit"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;t=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions" title="Facebook"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://twitter.com/home?status=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html" title="Twitter"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions&amp;annotation=I%27ve%20been%20using%20Selenium%20and%20Watij%20for%20a%20while%20now%20%28more%20Watij%20than%20Selenium%29.%20I%27ve%20written%20about%20my%20prior%20experiences%20here%20and%20here.%20Watij%20--%20there%20is%20no%20significant%20development%20happening%20there%20for%20the%20last%20year%20or%20two.%20While%20Selenium%20Remote%20Control" title="Google Bookmarks"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.friendfeed.com/share?title=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html" title="FriendFeed"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;t=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions&amp;s=I%27ve%20been%20using%20Selenium%20and%20Watij%20for%20a%20while%20now%20%28more%20Watij%20than%20Selenium%29.%20I%27ve%20written%20about%20my%20prior%20experiences%20here%20and%20here.%20Watij%20--%20there%20is%20no%20significant%20development%20happening%20there%20for%20the%20last%20year%20or%20two.%20While%20Selenium%20Remote%20Control" title="Tumblr"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F12%2Fwebdriver-selenium-2-0-first-impressions.html&amp;t=WebDriver%20%28Selenium%202.0%29%3A%20First%20Impressions" title="HackerNews"><img src="http://www.suryasuravarapu.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/BmlRbEBX5g0" height="1" width="1"/>]]></content:encoded><description>I've been using Selenium and Watij for a while now (more Watij than Selenium). I've written about my prior experiences here and here. Watij -- there is no significant development happening there for the last year or two. While Selenium Remote Control was nice, its IE support (especially IE 7) was not that great when [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/12/webdriver-selenium-2-0-first-impressions.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">12</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/12/webdriver-selenium-2-0-first-impressions.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>
