<?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>Tue, 23 Feb 2010 07:17:13 PST</lastBuildDate><generator>http://wordpress.org/?v=2.9.2</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>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&#8217;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 &#8211;</p>
<blockquote><p>Here&#8217;s the trouble. We all know that knowledge workers work best by getting into &#8220;flow&#8221;, also known as being &#8220;in the zone&#8221;, 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 &#8230;</p>
<blockquote><p>The other trouble is that it&#8217;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 &#8212; ESPECIALLY interruptions by coworkers &#8212; all knock you out of the zone. &#8230;</p></blockquote>
<p>As Joel rightly points out in the article getting into that &#8220;zone&#8221; 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&#8217;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 &#8211;</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&#8217;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&#8217;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&#8217;s certainly not easy to concentrate for a good chunk of time and being productive (I&#8217;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 &#8211;</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&#8217;t break it? &#8230;</p></blockquote>
<p>I don&#8217;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&#8217;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&#8217;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&amp;#8217;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&amp;#8217;m talking based on my </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&amp;#8217;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&#8217;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 &#8212; 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&#8217;s in 2009 I&#8217;ve started taking it more seriously. My goal with the blog is straight and simple &#8212; 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 &#8211;</p>
<ul>
<li><a href="../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&#8217;ve written two posts on the CRUD aspect &#8212; 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 &#8211; 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&#8217;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 &#8211;</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&#8217;t finished reading yet. I will be writing about them soon.</p>
<h3>Twitter</h3>
<p>I&#8217;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&#8217;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&#8217;s also a great place to share the links and articles you are reading. I&#8217;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 &#8212; technical topics. You don&#8217;t see any tweets about what I ate for my lunch, etc. Not that anything wrong with it, I just don&#8217;t find much value in providing that kind of information.</p>
<h3>Conclusion</h3>
<p>2009 is an year that I&#8217;m reasonably satisfied with some of the milestones that I&#8217;ve set out for myself. However, I know there are many more miles to go &#8230;</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/08/book-review-hello-world.html' rel='bookmark' title='Permanent Link: Book Review: Hello World!'>Book Review: Hello World!</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/WpRFqX9gYdQ" height="1" width="1"/>]]></content:encoded><description>It&amp;#8217;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/08/book-review-hello-world.html' rel='bookmark' title='Permanent Link: Book Review: Hello World!'&gt;Book Review: Hello World!&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/">0</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&#8217;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&#8217;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 &#8212; 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 &#8212; developer-focused and API-driven. But the best part, for me at least, WebDriver doesn&#8217;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&#8217;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 &#8212; 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&#8217;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&#8217; 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&#8217;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&#8217;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&#8217;d like to see more mouse events &#8212; 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&amp;#8217;ve been using Selenium and Watij for a while now (more Watij than Selenium). I&amp;#8217;ve written about my prior experiences here and here. Watij &amp;#8212; 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/">7</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/12/webdriver-selenium-2-0-first-impressions.html</feedburner:origLink></item><item><title>Book Review: The Passionate Programmer</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/22j1dxjyKh4/book-review-the-passionate-programmer.html</link><category>BookReview</category><category>Career</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 17 Nov 2009 05:13:28 PST</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=890</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="alignleft" title="ThePassionateProgrammer-Cover" src="http://ecx.images-amazon.com/images/I/41fyjTVARFL._SL500_AA240_.jpg" alt="" width="240" height="240" />The Book</h3>
<p><strong>Title:</strong> <a href="http://www.pragprog.com/titles/cfcar2/the-passionate-programmer">The Passionate Programmer</a></p>
<p><strong>Author: </strong>Chad Fowler<strong><br />
</strong></p>
<p><strong>Publisher:</strong> <a href="http://www.pragprog.com/">The Pragmatic Bookshelf</a></p>
<h3>Review</h3>
<p>This is the second edition of the book that was titled as &#8216;<em>My Job Went to India (And All I Got Was This Lousy Book): 52 Ways to Save Your Job</em>&#8216; in the inaugural edition. As the author admitted in the first few pages of the book, that title gave some impressions that the book is only about how to <em>merely save the job</em>.</p>
<p>The title for the second edition is more apt considering the intent of the author. If you read Andy Hunt&#8217;s books on Career Development, this book by Chad Fowler falls into the similar genre.</p>
<p>The key emphasis of the book is &#8211;</p>
<blockquote><p>Think of your career as if it is the life cycle of a product that you are creating. That product is made up of you and your skills.</p></blockquote>
<h4>From My Notes</h4>
<p>There are a lot of useful tips and sound advice in the book, just want to touch on a few of them &#8211;</p>
<p>How to choose a technology stack to work with and how to choose a business domain is discussed. I completely agree with the author&#8217;s view on how many of us end up doing whatever comes our way. In the author&#8217;s own words &#8212; &#8220;<strong>Our career is one big series of undirected coincidences</strong>&#8220;.</p>
<p>Fowler says that both ends of the technology adoption curve might prove to be lucrative. I see where he is coming from, although I haven&#8217;t seen many people intentionally taking up gigs to work on old/outgoing technology. Even the ones who take up such jobs, they are doing so because they can do only that.</p>
<p>These kind of folks they may call themselves specialists, but Fowler says that too many of us seem to believe that <strong>specializing in something simply means not knowing about other things</strong>. A very good case is made in the book why you want to be a generalist and at the same time being a specialist!</p>
<p>Fowler (being a musician in his past life) says it may be a good thing for being the worst guy in every band you are in &#8212; which translates to <strong>work and hang around with people who are smarter than you</strong>. Great advice, I can attest to that from my own experiences, especially from the early phases of my career.</p>
<p>Simply being good at programming alone is not good enough. You ought to make sure that you understand the business domain well enough. Without understanding the business domain is it even possible to do justice to the job &#8212; either making or saving money for the business.</p>
<p>One of the suggestions was to <strong>practice coding and read the open source code to learn new tricks of the trade</strong>. Great advice, but open source community is not immune from bad code, so choose your projects wisely!</p>
<p>There are some execution tips &#8212; productivity boost from do-it-now mentality, push yourself to accomplish something every day, working towards a team goal (your managers&#8217; successes are your successes), don&#8217;t panic. Another important aspect is to question yourself <strong>are you adding enough value to justify your worth</strong>. Author suggests that there will be many opportunities that you can spot if you ask such questions.</p>
<p>Fowler explains why marketing one&#8217;s skills is important &#8212; <strong>If you kick ass and no one is there to see, did you really kick ass? Who cares? No one</strong>. Perceptions do matter and it&#8217;s not a wrong thing to manage perceptions. Build your brand (this concept is also explained well in <a href="http://www.suryasuravarapu.com/2009/02/book-review-career-20.html">Career 2.0 book by Jared Richardson</a>. Richardson explains quite well the importance of writing and public speaking activities as a part of brand building).</p>
<h4>Organization</h4>
<p>The book is organized into short chapters under five broad categories / sections &#8212; <strong>Choosing your Market</strong>, <strong>Investing in your Product</strong>, <strong>Executing</strong>, <strong>Marketing</strong>, <strong>Maintaining your Edge</strong>. Each chapter ends with an &#8216;Act on It&#8217; section. Author suggests a few items in this part of the chapter on how you can act based on the content discussed. Although they are nice, the real &#8220;act on it&#8221; is on the readers, coming up with the action items that is more specifically tailored for them.</p>
<p>You may actually finish reading this book in a few hours, perhaps in one sitting. I&#8217;d rather suggest taking your time, and go with a cycle similar to:</p>
<p>read_a_chapter &#8211;&gt; introspect &#8211;&gt; prepare_a_plan [act_on_it, of course]</p>
<h3>Conclusion</h3>
<p>As Chad Fowler suggests, this book isn’t about struggling to maintain the level of mediocrity required not to get fired. It’s about being awesome. <strong>It’s about winning</strong>. I remember Uncle Bob saying &#8212; <strong>you employer is not your mom</strong>. True. You have to make your choices and treat your job as a career, and develop the skills needed to keep you up-to-date. If you are currently looking for some inspiration or not so passionate about your career, then this book is for you.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F11%2Fbook-review-the-passionate-programmer.html&amp;title=Book%20Review%3A%20The%20Passionate%20Programmer&amp;notes=The%20Book%0D%0ATitle%3A%20The%20Passionate%20Programmer%0D%0A%0D%0AAuthor%3A%20Chad%20Fowler%0D%0A%0D%0A%0D%0APublisher%3A%20The%20Pragmatic%20Bookshelf%0D%0AReview%0D%0AThis%20is%20the%20second%20edition%20of%20the%20book%20that%20was%20titled%20as%20%27My%20Job%20Went%20to%20India%20%28And%20All%20I%20Got%20Was%20This%20Lousy%20Book%29%3A%2052%20Ways%20to%20Save%20Yo" 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%2F11%2Fbook-review-the-passionate-programmer.html&amp;title=Book%20Review%3A%20The%20Passionate%20Programmer" 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%2F11%2Fbook-review-the-passionate-programmer.html&amp;title=Book%20Review%3A%20The%20Passionate%20Programmer&amp;bodytext=The%20Book%0D%0ATitle%3A%20The%20Passionate%20Programmer%0D%0A%0D%0AAuthor%3A%20Chad%20Fowler%0D%0A%0D%0A%0D%0APublisher%3A%20The%20Pragmatic%20Bookshelf%0D%0AReview%0D%0AThis%20is%20the%20second%20edition%20of%20the%20book%20that%20was%20titled%20as%20%27My%20Job%20Went%20to%20India%20%28And%20All%20I%20Got%20Was%20This%20Lousy%20Book%29%3A%2052%20Ways%20to%20Save%20Yo" 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%2F11%2Fbook-review-the-passionate-programmer.html&amp;title=Book%20Review%3A%20The%20Passionate%20Programmer" 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%2F11%2Fbook-review-the-passionate-programmer.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%2F11%2Fbook-review-the-passionate-programmer.html&amp;title=Book%20Review%3A%20The%20Passionate%20Programmer" 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%2F11%2Fbook-review-the-passionate-programmer.html&amp;t=Book%20Review%3A%20The%20Passionate%20Programmer" 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=Book%20Review%3A%20The%20Passionate%20Programmer%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F11%2Fbook-review-the-passionate-programmer.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%2F11%2Fbook-review-the-passionate-programmer.html&amp;title=Book%20Review%3A%20The%20Passionate%20Programmer&amp;annotation=The%20Book%0D%0ATitle%3A%20The%20Passionate%20Programmer%0D%0A%0D%0AAuthor%3A%20Chad%20Fowler%0D%0A%0D%0A%0D%0APublisher%3A%20The%20Pragmatic%20Bookshelf%0D%0AReview%0D%0AThis%20is%20the%20second%20edition%20of%20the%20book%20that%20was%20titled%20as%20%27My%20Job%20Went%20to%20India%20%28And%20All%20I%20Got%20Was%20This%20Lousy%20Book%29%3A%2052%20Ways%20to%20Save%20Yo" 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=Book%20Review%3A%20The%20Passionate%20Programmer&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F11%2Fbook-review-the-passionate-programmer.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%2F11%2Fbook-review-the-passionate-programmer.html&amp;t=Book%20Review%3A%20The%20Passionate%20Programmer&amp;s=The%20Book%0D%0ATitle%3A%20The%20Passionate%20Programmer%0D%0A%0D%0AAuthor%3A%20Chad%20Fowler%0D%0A%0D%0A%0D%0APublisher%3A%20The%20Pragmatic%20Bookshelf%0D%0AReview%0D%0AThis%20is%20the%20second%20edition%20of%20the%20book%20that%20was%20titled%20as%20%27My%20Job%20Went%20to%20India%20%28And%20All%20I%20Got%20Was%20This%20Lousy%20Book%29%3A%2052%20Ways%20to%20Save%20Yo" 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%2F11%2Fbook-review-the-passionate-programmer.html&amp;t=Book%20Review%3A%20The%20Passionate%20Programmer" 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/04/book-review-grails-in-action.html' rel='bookmark' title='Permanent Link: Book Review: Grails in Action'>Book Review: Grails in Action</a></li>
<li><a href='http://www.suryasuravarapu.com/2009/08/book-review-hello-world.html' rel='bookmark' title='Permanent Link: Book Review: Hello World!'>Book Review: Hello World!</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/22j1dxjyKh4" height="1" width="1"/>]]></content:encoded><description>The Book
Title: The Passionate Programmer
Author: Chad Fowler

Publisher: The Pragmatic Bookshelf
Review
This is the second edition of the book that was titled as &amp;#8216;My Job Went to India (And All I Got Was This Lousy Book): 52 Ways to Save Your Job&amp;#8216; in the inaugural edition. As the author admitted in the first few pages of the [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/04/book-review-grails-in-action.html' rel='bookmark' title='Permanent Link: Book Review: Grails in Action'&gt;Book Review: Grails in Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/08/book-review-hello-world.html' rel='bookmark' title='Permanent Link: Book Review: Hello World!'&gt;Book Review: Hello World!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/11/book-review-the-passionate-programmer.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/11/book-review-the-passionate-programmer.html</feedburner:origLink></item><item><title>REST: DELETE operation and tunneling</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/fDKxLyx2Vx4/rest-delete-operation-and-tunneling.html</link><category>REST</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Thu, 22 Oct 2009 07:06:58 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=864</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I was looking at some presentation slides on REST vs SOAP and one of the major drawbacks listed for REST approach is &#8212; lack of ability to use a message body for DELETE operations. I was not sure when I read that, why that would be a drawback.  (Discussion on the listed drawbacks will be a separate post by itself for another day).</p>
<p>A DELETE operation might look something like the following, where 123 is the ID of the customer:</p>
<pre>DELETE /customers/123
Host: example.com</pre>
<p>I was thinking about some use cases where a server might need more information for deletion. Thinking along the lines I <a href="http://twitter.com/surya_s/status/4924011668">tweeted</a> this primarily to contest the presenter&#8217;s belief that it is such a huge drawback that you use that as a strike against REST-based approach.</p>
<p><a href="http://twitter.com/sallamar">Subbu Allamaraju</a> responded. He says that the the question is a valid one.  Subbu said that:</p>
<blockquote><p>That is a good question. Think of any case where client has to explain why the resource needs to be DELETEd. This is not uncommon.</p></blockquote>
<p>Assuming that&#8217;s a valid concern I was thinking of ways to do that in a RESTy manner. Only way that I could think of at that point was whether we could use POST and perform DELETE. That sounded to me like tunneling. Tunneling is hiding operations from HTTP. There is no way to know whether the operation is &#8212; <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1">safe</a>, <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2">idempotent</a>, both safe and idempotent, neither safe nor idempotent. </p>
<p>As we continue discussing this on <a href="http://twitter.com/">Twitter</a> I&#8217;ve asked how different this scenario would be from tunneling via GET, something like the following:</p>
<pre>
GET /customer?method=delete&amp;id=123
Host: example.com
</pre>
<p>The above GET is a clear example of tunneling. Similarly, SOAP-way of POST is another good example of tunneling.</p>
<pre>
POST /CustomerService HTTP/1.1
Host: example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

&lt;?xml version="1.0"?&gt;
&lt;soap:Envelope
 xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
 soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"&gt;
    &lt;soap:Body xmlns:m="http://example.com/customer"&gt;
        &lt;m:deleteCustomer&gt;
            &lt;m:id&gt;123&lt;/m:id&gt;
        &lt;/m:deleteCustomer&gt;
    &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<h3>Approach</h3>
<p>An approach that sounded reasonable: <strong>use POST with a distinct URI when in doubt</strong>. That way you would avoid tunneling by making it a distinct resource. </p>
<pre>
POST /customers/123/deleteme
Host: example.com
Content-type: xxx

[send reasoning to the server why the resource is being deleted in the body]
</pre>
<p>This provides some visibility into the operation, via a URI that conveys the intention.</p>
<p>One downside of this approach is caches will not see the resource being deleted. In spite of that, this approach seems reasonable when you have a specific need to address the use case in question.</p>
<p>Thanks to Subbu for suggesting this approach. Provide your comments if you know of any other approaches.</p>
<p><strong>P.S:</strong> Just one more reason why I like Twitter! Feel free to <a href="http://twitter.com/surya_s">follow me</a> there.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F10%2Frest-delete-operation-and-tunneling.html&amp;title=REST%3A%20DELETE%20operation%20and%20tunneling&amp;notes=I%20was%20looking%20at%20some%20presentation%20slides%20on%20REST%20vs%20SOAP%20and%20one%20of%20the%20major%20drawbacks%20listed%20for%20REST%20approach%20is%20--%20lack%20of%20ability%20to%20use%20a%20message%20body%20for%20DELETE%20operations.%20I%20was%20not%20sure%20when%20I%20read%20that%2C%20why%20that%20would%20be%20a%20drawback.%C2%A0%20%28Dis" 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%2F10%2Frest-delete-operation-and-tunneling.html&amp;title=REST%3A%20DELETE%20operation%20and%20tunneling" 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%2F10%2Frest-delete-operation-and-tunneling.html&amp;title=REST%3A%20DELETE%20operation%20and%20tunneling&amp;bodytext=I%20was%20looking%20at%20some%20presentation%20slides%20on%20REST%20vs%20SOAP%20and%20one%20of%20the%20major%20drawbacks%20listed%20for%20REST%20approach%20is%20--%20lack%20of%20ability%20to%20use%20a%20message%20body%20for%20DELETE%20operations.%20I%20was%20not%20sure%20when%20I%20read%20that%2C%20why%20that%20would%20be%20a%20drawback.%C2%A0%20%28Dis" 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%2F10%2Frest-delete-operation-and-tunneling.html&amp;title=REST%3A%20DELETE%20operation%20and%20tunneling" 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%2F10%2Frest-delete-operation-and-tunneling.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%2F10%2Frest-delete-operation-and-tunneling.html&amp;title=REST%3A%20DELETE%20operation%20and%20tunneling" 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%2F10%2Frest-delete-operation-and-tunneling.html&amp;t=REST%3A%20DELETE%20operation%20and%20tunneling" 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=REST%3A%20DELETE%20operation%20and%20tunneling%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F10%2Frest-delete-operation-and-tunneling.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%2F10%2Frest-delete-operation-and-tunneling.html&amp;title=REST%3A%20DELETE%20operation%20and%20tunneling&amp;annotation=I%20was%20looking%20at%20some%20presentation%20slides%20on%20REST%20vs%20SOAP%20and%20one%20of%20the%20major%20drawbacks%20listed%20for%20REST%20approach%20is%20--%20lack%20of%20ability%20to%20use%20a%20message%20body%20for%20DELETE%20operations.%20I%20was%20not%20sure%20when%20I%20read%20that%2C%20why%20that%20would%20be%20a%20drawback.%C2%A0%20%28Dis" 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=REST%3A%20DELETE%20operation%20and%20tunneling&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F10%2Frest-delete-operation-and-tunneling.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%2F10%2Frest-delete-operation-and-tunneling.html&amp;t=REST%3A%20DELETE%20operation%20and%20tunneling&amp;s=I%20was%20looking%20at%20some%20presentation%20slides%20on%20REST%20vs%20SOAP%20and%20one%20of%20the%20major%20drawbacks%20listed%20for%20REST%20approach%20is%20--%20lack%20of%20ability%20to%20use%20a%20message%20body%20for%20DELETE%20operations.%20I%20was%20not%20sure%20when%20I%20read%20that%2C%20why%20that%20would%20be%20a%20drawback.%C2%A0%20%28Dis" 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%2F10%2Frest-delete-operation-and-tunneling.html&amp;t=REST%3A%20DELETE%20operation%20and%20tunneling" 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/06/rest-crud-with-grails.html' rel='bookmark' title='Permanent Link: REST: CRUD with Grails'>REST: CRUD with Grails</a></li>
<li><a href='http://www.suryasuravarapu.com/2009/03/rest-crud-with-jax-rs-jersey.html' rel='bookmark' title='Permanent Link: REST: CRUD with JAX-RS (Jersey)'>REST: CRUD with JAX-RS (Jersey)</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/fDKxLyx2Vx4" height="1" width="1"/>]]></content:encoded><description>I was looking at some presentation slides on REST vs SOAP and one of the major drawbacks listed for REST approach is &amp;#8212; lack of ability to use a message body for DELETE operations. I was not sure when I read that, why that would be a drawback.  (Discussion on the listed drawbacks will be [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/06/rest-crud-with-grails.html' rel='bookmark' title='Permanent Link: REST: CRUD with Grails'&gt;REST: CRUD with Grails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/03/rest-crud-with-jax-rs-jersey.html' rel='bookmark' title='Permanent Link: REST: CRUD with JAX-RS (Jersey)'&gt;REST: CRUD with JAX-RS (Jersey)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/10/rest-delete-operation-and-tunneling.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/10/rest-delete-operation-and-tunneling.html</feedburner:origLink></item><item><title>Java’s HTTP Handler and Cache Validation Issues</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/2ibsKJnLCuk/javas-http-handler-and-cache-validation-issues.html</link><category>Caching</category><category>Java</category><category>REST</category><category>Ehcache</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Thu, 08 Oct 2009 05:00:26 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=830</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Background</h3>
<p>A little while ago I&#8217;ve mentioned that I was working on <a href="http://www.suryasuravarapu.com/2009/05/http-response-caching-with-ehcache.html">client-side HTTP caching</a> (using <a href="http://ehcache.org/">Ehcache</a>) for REST clients. After a little hiatus, I&#8217;m back to complete the unfinished business, precisely dealing with <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.3">cache validation</a> support (using <code>ETag</code>, <code>Last-Modified</code>, <code>If-None-Match</code>, <code>If-Modified-Since</code> headers). I&#8217;ve also explained the <a href="http://www.suryasuravarapu.com/2009/04/http-response-cache-mechanism-in-java.html">approach</a> I was taking to implement the solution, using Java&#8217;s <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/ResponseCache.html">ResponseCache</a> mechanism.</p>
<p>However, I think I&#8217;ve hit a dead end implementing the solution using that approach. I will try to explain it here and hope that smarter people out there provide their thoughts.</p>
<h3>Overview</h3>
<p>Let&#8217;s start with a simple straightforward scenario. Quick control flow of the Java protocol handler approach:</p>
<ol>
<li>A client application gets an instance of <code>sun.net.www.protocol.http.HttpUrlConnection</code>, which extends <a href="http://www.j2ee.me/j2se/1.5.0/docs/api/java/net/HttpURLConnection.html">java.net.HttpUrlConnection</a>, via <code>url.openConnection()</code>. This hanlder instantiates a registered instance of <a href="http://www.j2ee.me/j2se/1.5.0/docs/api/java/net/ResponseCache.html">java.net.ResponseCache</a>, if there is one available.</li>
<li>When a request is sent to the server via HttpUrlConnection, protocol handler first checks whether the representation is present in the cache by calling the get() method of the ResponseCache. If it is in the cache send it to the client, else send the request to the origin server.</li>
<li>If the request is sent to the origin server, and if the response is any of 200, 301, or other &#8220;cache-able&#8221; statuses, the handler then calls the put() method of the ResponseCache to potentially cache the representation.</li>
<li>ResponseCache would store the element in the cache. It uses <code>Expires</code>, <code>Date</code>, <code>Cache-Control</code> headers to determine time to live and set it on the element. Let&#8217;s ignore <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2">expiration model</a> for this post as the focus is on <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.3">validation</a>.</li>
</ol>
<p><strong>Note:</strong> You have to write your own concrete implementation for ResponseCache to store and retrieve elements from the cache. Java doesn&#8217;t provide an out-of-the-box implementation for it, but it provides a framework for doing so.</p>
<h3>Validating Cached Element</h3>
<p>Now let’s look at a scenario that does cache validation. First, what is validation? There are two headers a server may send for validating the resource: a timestamp (<strong>Last-Modified</strong>) indicating when the resource was last changed, and an entity tag value (<strong>ETag</strong>). Server may choose to send only one of these headers, as both of them try to achieve the same purpose.</p>
<p>Responding to a request for resource X, a server sends along one or both these headers to the client along with X’s representation. On any subsequent request for resource X &#8212; the client <em>may</em> honor these response headers, and sends two of its own headers: <strong>If-Modified-Since</strong> (with the value of the <code>Last-Modified</code> header) and <strong>If-None-Match</strong> (with the value of <code>ETag</code> header). Former requests the server to send the representation only if the resource is modified since the <code>Last-Modified</code> time it has got, and the latter asks to send the representation only on the change of <code>ETag</code> value that it supplied.</p>
<p>If there is a change in the resource, a server sends an updated representation, with new values for <code>ETag</code> and/or <code>Last-Modified</code> headers. This scenario works fine with no issues as you get a <code>200</code> response back, and the protocol handler handles this just fine (similar to the straightforward scenario mentioned above). The issue that I&#8217;m going to mention is with the case in which the server determines that there is no change with the resource, and sends back a status <code>304, NOT MODIFIED</code>, with no body in the content.</p>
<p>See the following sequence of events that end up with a status code <code>304</code> from the server (click on the image to enlarge):</p>
<p><a href="http://www.suryasuravarapu.com/wp-content/uploads/2009/10/cdraw.png" rel="lightbox[830]"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-849" title="Conditional GET" src="http://www.suryasuravarapu.com/wp-content/uploads/2009/10/cdraw-272x300.png" alt="Conditional GET" width="272" height="300" /></a></p>
<p style="text-align: center;">
<h3>Issues with Java&#8217;s HTTP Handler</h3>
<ul>
<li>A client or client-side cache should first check whether a cached representation is available before sending a conditional GET of this sort. (There is no point sending <code>Not-Modified-Since</code> and/or <code>If-None-Match</code> headers if it doesn’t have a representation to fall back on). Java’s cache handler framework using <code>HttpUrlConnection</code> does not provide an option to do so.Let&#8217;s see the relevant source code of <a href="http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules-sun/net/sun/net/www/protocol/http/HttpURLConnection.java.htm">sun.net.www.protocol.http.HttpUrlConnection</a>, lines 399-410:
<pre class="brush: java">
// Set modified since if necessary
long modTime = getIfModifiedSince();
if (modTime != 0) {
    Date date = new Date(modTime);
    //use the preferred date format according to RFC 2068(HTTP1.1),
    // RFC 822 and RFC 1123
    SimpleDateFormat fo = new SimpleDateFormat(
        &quot;EEE, dd MMM yyyy HH:mm:ss &#039;GMT&#039;&quot;, Locale.US);
    fo.setTimeZone(TimeZone.getTimeZone(&quot;GMT&quot;));
    requests.setIfNotSet(&quot;If-Modified-Since&quot;, fo
        .format(date));
}
</pre>
<p>The above block of code adds <code>If-Modified-Since</code> header but makes no checks whatsoever whether the representation is available in the cache.</li>
<li>I don&#8217;t see a reference to <code>If-None-Match</code> header in the source. So if the client sends that header, it will be sent to the origin server without an availability check</li>
<li>In case, if there is no representation in the cache, the cache must have an ability to remove the validation headers from the request before sending the request to the origin server. I don&#8217;t see this framework supporting such a behavior.</li>
</ul>
<p>Thoughts??</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1313px; width: 1px; height: 1px;">
<h1>
<pre><code><span style="color: #3f7f5f;">// Set modified since if necessary</span>
<span style="color: gray;">0400:</span>                    <span style="color: #7f0055;"><strong>long</strong></span> modTime = getIfModifiedSince();
<span style="color: gray;">0401:</span>                    <span style="color: #7f0055;"><strong>if</strong></span> (modTime != <span style="color: #990000;"><strong>0</strong></span>) {
<span style="color: gray;">0402:</span>                        <a href="http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/Collections-Jar-Zip-Logging-regex/java/util/Date.java.htm"><strong>Date</strong></a> date = <span style="color: #7f0055;"><strong>new</strong></span> <a href="http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/Collections-Jar-Zip-Logging-regex/java/util/Date.java.htm"><strong>Date</strong></a>(modTime);
<span style="color: gray;">0403:</span>                        <span style="color: #3f7f5f;">//use the preferred date format according to RFC 2068(HTTP1.1),</span>
<span style="color: gray;">0404:</span>                        <span style="color: #3f7f5f;">// RFC 822 and RFC 1123</span>
<span style="color: gray;">0405:</span>                        <a href="http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/text/java/text/SimpleDateFormat.java.htm"><strong>SimpleDateFormat</strong></a> fo = <span style="color: #7f0055;"><strong>new</strong></span> <a href="http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/text/java/text/SimpleDateFormat.java.htm"><strong>SimpleDateFormat</strong></a>(
<span style="color: gray;">0406:</span>                                <span style="color: #2a00ff;">"EEE, dd MMM yyyy HH:mm:ss 'GMT'"</span>, Locale.US);
<span style="color: gray;">0407:</span>                        fo.setTimeZone(TimeZone.getTimeZone(<span style="color: #2a00ff;">"GMT"</span>));
<span style="color: gray;">0408:</span>                        requests.setIfNotSet(<span style="color: #2a00ff;">"If-Modified-Since"</span>, fo
<span style="color: gray;">0409:</span>                                .format(date));
<span style="color: gray;">0410:</span>                    }
</code></pre>
</h1>
</div>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;title=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues&amp;notes=Background%0D%0AA%20little%20while%20ago%20I%27ve%20mentioned%20that%20I%20was%20working%20on%20client-side%20HTTP%20caching%20%28using%20Ehcache%29%20for%20REST%20clients.%20After%20a%20little%20hiatus%2C%20I%27m%20back%20to%20complete%20the%20unfinished%20business%2C%20precisely%20dealing%20with%20cache%20validation%20support%20%28using" 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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;title=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues" 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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;title=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues&amp;bodytext=Background%0D%0AA%20little%20while%20ago%20I%27ve%20mentioned%20that%20I%20was%20working%20on%20client-side%20HTTP%20caching%20%28using%20Ehcache%29%20for%20REST%20clients.%20After%20a%20little%20hiatus%2C%20I%27m%20back%20to%20complete%20the%20unfinished%20business%2C%20precisely%20dealing%20with%20cache%20validation%20support%20%28using" 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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;title=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues" 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%2F10%2Fjavas-http-handler-and-cache-validation-issues.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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;title=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues" 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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;t=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues" 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=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F10%2Fjavas-http-handler-and-cache-validation-issues.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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;title=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues&amp;annotation=Background%0D%0AA%20little%20while%20ago%20I%27ve%20mentioned%20that%20I%20was%20working%20on%20client-side%20HTTP%20caching%20%28using%20Ehcache%29%20for%20REST%20clients.%20After%20a%20little%20hiatus%2C%20I%27m%20back%20to%20complete%20the%20unfinished%20business%2C%20precisely%20dealing%20with%20cache%20validation%20support%20%28using" 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=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F10%2Fjavas-http-handler-and-cache-validation-issues.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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;t=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues&amp;s=Background%0D%0AA%20little%20while%20ago%20I%27ve%20mentioned%20that%20I%20was%20working%20on%20client-side%20HTTP%20caching%20%28using%20Ehcache%29%20for%20REST%20clients.%20After%20a%20little%20hiatus%2C%20I%27m%20back%20to%20complete%20the%20unfinished%20business%2C%20precisely%20dealing%20with%20cache%20validation%20support%20%28using" 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%2F10%2Fjavas-http-handler-and-cache-validation-issues.html&amp;t=Java%27s%20HTTP%20Handler%20and%20Cache%20Validation%20Issues" 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/04/http-response-cache-mechanism-in-java.html' rel='bookmark' title='Permanent Link: HTTP Response Cache Mechanism in Java'>HTTP Response Cache Mechanism in Java</a></li>
<li><a href='http://www.suryasuravarapu.com/2009/05/http-response-caching-with-ehcache.html' rel='bookmark' title='Permanent Link: HTTP Response Caching with Ehcache'>HTTP Response Caching with Ehcache</a></li>
<li><a href='http://www.suryasuravarapu.com/2009/03/rest-crud-with-jax-rs-jersey.html' rel='bookmark' title='Permanent Link: REST: CRUD with JAX-RS (Jersey)'>REST: CRUD with JAX-RS (Jersey)</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/2ibsKJnLCuk" height="1" width="1"/>]]></content:encoded><description>Background
A little while ago I&amp;#8217;ve mentioned that I was working on client-side HTTP caching (using Ehcache) for REST clients. After a little hiatus, I&amp;#8217;m back to complete the unfinished business, precisely dealing with cache validation support (using ETag, Last-Modified, If-None-Match, If-Modified-Since headers). I&amp;#8217;ve also explained the approach I was taking to implement the solution, using [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/04/http-response-cache-mechanism-in-java.html' rel='bookmark' title='Permanent Link: HTTP Response Cache Mechanism in Java'&gt;HTTP Response Cache Mechanism in Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/05/http-response-caching-with-ehcache.html' rel='bookmark' title='Permanent Link: HTTP Response Caching with Ehcache'&gt;HTTP Response Caching with Ehcache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/03/rest-crud-with-jax-rs-jersey.html' rel='bookmark' title='Permanent Link: REST: CRUD with JAX-RS (Jersey)'&gt;REST: CRUD with JAX-RS (Jersey)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/10/javas-http-handler-and-cache-validation-issues.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/10/javas-http-handler-and-cache-validation-issues.html</feedburner:origLink></item><item><title>Book Review: Hello World!</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/D0l1EEVLYAM/book-review-hello-world.html</link><category>BookReview</category><category>Python</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Thu, 27 Aug 2009 06:28:01 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=785</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="alignleft" title="Hello World - Cover" src="http://ecx.images-amazon.com/images/I/51z45gYPovL._SL500_AA240_.jpg" alt="" width="151" height="151" /></p>
<h3>The Book</h3>
<p><strong>Title:</strong> <a href="http://www.amazon.com/Hello-World-Computer-Programming-Beginners/dp/1933988495/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251333312&amp;sr=8-1">Hello World! Computer Programming for Kids and Other Beginners</a></p>
<p><strong>Authors:</strong> Warren D. Sande and Carter Sande</p>
<p><strong>Publishers:</strong> Manning Publications</p>
<h3>Review</h3>
<p>As I reviewed couple of Manning books earlier, they contacted me recently to find out whether I was interested in reading this book and provide feedback. I was not sure at that point. Later on I read somewhere that a dad and his 12-year old son have written this book, and that too using Python to explain the concepts of programming. So that background tempted me into reading this book.</p>
<p>I&#8217;m here to report that I do not regret that decision. In fact, I&#8217;ve enjoyed the entertaining narration of the book. Concentrating on the fundamentals of a programming language is essential, especially if you are about to begin learning the art of programming. The authors did a great job explaining the basics in simple terms.</p>
<p>After hearing rave reviews about Python, couple of months ago, I&#8217;ve ventured into learning it. I started to appreciate the beauty of the language. Python as a language of choice is a great one, that too if you are learning your first programming language. Python, in my opinion, is an easy to learn language relatively speaking. Authors made a great choice and introduced the concepts in a systematic way &#8212; variables,  Math functions, decisions, looping, lists, functions, objects, modules.</p>
<p>As a kid or an adult beginner you don&#8217;t want a book to overwhelm you with lofty jargon. What you need is a book that keeps you interested just enough so that you can learn the concepts, play with the language, and take out any fear you may have about programming. This book, I think, succeeds in doing just that.</p>
<p>Every chapter has got some assignment questions. A nice way to learn a programming language; learn the concepts and test your knowledge. Although I&#8217;m not a big fan of games, children would certainly love to learn a language and develop their own games. They can certainly take clues from the gaming examples provided in the book. Drawing, animation, sounds and events are all covered.</p>
<p>As this book is meant for beginners it doesn&#8217;t cover topics that a more advanced user would otherwise like to see. It would not be fair to compare this book with a book like  <a href="http://www.amazon.com/Learning-Python-Animal-Guide-Mark/dp/0596158068/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251334562&amp;sr=8-1">Learning Python</a> (O&#8217;Reilly).</p>
<p>Last but not the least, illustrations in the book are really nice and will also play a major part through out the book and provide some interesting tidbits. I have no hesitation to say that this book would be a perfect gift for any 12-year old (or for any beginner) interested in learning a programming language but doesn&#8217;t know where to start.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F08%2Fbook-review-hello-world.html&amp;title=Book%20Review%3A%20Hello%20World%21&amp;notes=%0D%0AThe%20Book%0D%0ATitle%3A%20Hello%20World%21%20Computer%20Programming%20for%20Kids%20and%20Other%20Beginners%0D%0A%0D%0AAuthors%3A%20Warren%20D.%20Sande%20and%20Carter%20Sande%0D%0A%0D%0APublishers%3A%20Manning%20Publications%0D%0AReview%0D%0AAs%20I%20reviewed%20couple%20of%20Manning%20books%20earlier%2C%20they%20contacted%20me%20recently%20to%20f" 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%2F08%2Fbook-review-hello-world.html&amp;title=Book%20Review%3A%20Hello%20World%21" 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%2F08%2Fbook-review-hello-world.html&amp;title=Book%20Review%3A%20Hello%20World%21&amp;bodytext=%0D%0AThe%20Book%0D%0ATitle%3A%20Hello%20World%21%20Computer%20Programming%20for%20Kids%20and%20Other%20Beginners%0D%0A%0D%0AAuthors%3A%20Warren%20D.%20Sande%20and%20Carter%20Sande%0D%0A%0D%0APublishers%3A%20Manning%20Publications%0D%0AReview%0D%0AAs%20I%20reviewed%20couple%20of%20Manning%20books%20earlier%2C%20they%20contacted%20me%20recently%20to%20f" 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%2F08%2Fbook-review-hello-world.html&amp;title=Book%20Review%3A%20Hello%20World%21" 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%2F08%2Fbook-review-hello-world.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%2F08%2Fbook-review-hello-world.html&amp;title=Book%20Review%3A%20Hello%20World%21" 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%2F08%2Fbook-review-hello-world.html&amp;t=Book%20Review%3A%20Hello%20World%21" 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=Book%20Review%3A%20Hello%20World%21%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F08%2Fbook-review-hello-world.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%2F08%2Fbook-review-hello-world.html&amp;title=Book%20Review%3A%20Hello%20World%21&amp;annotation=%0D%0AThe%20Book%0D%0ATitle%3A%20Hello%20World%21%20Computer%20Programming%20for%20Kids%20and%20Other%20Beginners%0D%0A%0D%0AAuthors%3A%20Warren%20D.%20Sande%20and%20Carter%20Sande%0D%0A%0D%0APublishers%3A%20Manning%20Publications%0D%0AReview%0D%0AAs%20I%20reviewed%20couple%20of%20Manning%20books%20earlier%2C%20they%20contacted%20me%20recently%20to%20f" 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=Book%20Review%3A%20Hello%20World%21&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F08%2Fbook-review-hello-world.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%2F08%2Fbook-review-hello-world.html&amp;t=Book%20Review%3A%20Hello%20World%21&amp;s=%0D%0AThe%20Book%0D%0ATitle%3A%20Hello%20World%21%20Computer%20Programming%20for%20Kids%20and%20Other%20Beginners%0D%0A%0D%0AAuthors%3A%20Warren%20D.%20Sande%20and%20Carter%20Sande%0D%0A%0D%0APublishers%3A%20Manning%20Publications%0D%0AReview%0D%0AAs%20I%20reviewed%20couple%20of%20Manning%20books%20earlier%2C%20they%20contacted%20me%20recently%20to%20f" 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%2F08%2Fbook-review-hello-world.html&amp;t=Book%20Review%3A%20Hello%20World%21" 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/04/book-review-grails-in-action.html' rel='bookmark' title='Permanent Link: Book Review: Grails in Action'>Book Review: Grails in Action</a></li>
<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>
<li><a href='http://www.suryasuravarapu.com/2009/12/2009-roundup-blog-books-and-twitter.html' rel='bookmark' title='Permanent Link: 2009 Roundup: Blog, Books and Twitter'>2009 Roundup: Blog, Books and Twitter</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/D0l1EEVLYAM" height="1" width="1"/>]]></content:encoded><description>The Book
Title: Hello World! Computer Programming for Kids and Other Beginners
Authors: Warren D. Sande and Carter Sande
Publishers: Manning Publications
Review
As I reviewed couple of Manning books earlier, they contacted me recently to find out whether I was interested in reading this book and provide feedback. I was not sure at that point. Later on I read [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/04/book-review-grails-in-action.html' rel='bookmark' title='Permanent Link: Book Review: Grails in Action'&gt;Book Review: Grails in Action&lt;/a&gt;&lt;/li&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;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/12/2009-roundup-blog-books-and-twitter.html' rel='bookmark' title='Permanent Link: 2009 Roundup: Blog, Books and Twitter'&gt;2009 Roundup: Blog, Books and Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/08/book-review-hello-world.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/2009/08/book-review-hello-world.html</feedburner:origLink></item><item><title>Who’s At Fault, Developer or Tester?</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/fgc5vn0cyc4/whos-at-fault-developer-or-tester.html</link><category>SoftwareDevelopment</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 11 Aug 2009 06:41:00 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=742</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="alignleft" title="finger-pointing" src="http://farm4.static.flickr.com/3437/3244332524_cd99603589_t.jpg" alt="" width="95" height="100" />A few articles that I read recently and <a href="http://software-testing-zone.blogspot.com/2008/10/software-testing-add-value-to-project.html">one</a> specifically in the recent past is the motivation for this post. When a defect is identified in production, it is not uncommon for somebody to question why it happened (of course, if nobody is questioning, that would be a bigger issue)? Also, it is not that uncommon to hear developers pointing fingers at testers. In turn a tester may say it&#8217;s your code and you messed it up, my dear developer!</p>
<p>No software can be 100% bug-free, we all know that. But the kind of issues that we are talking about here are the ones that are avoidable. The kind of issues that you see and say &#8212; ah! as a developer I should have taken care of proper null checks OR I shouldn&#8217;t have made that assumption about a scenario, etc. As a tester you may think I should have used a different set of inputs OR I should have better tested the boundary conditions, etc.</p>
<p>Several years ago I was first shocked when a developer friend of mine said &#8216;why should I test, that&#8217;s the job of the QA group&#8217;. That was his response to my innocuous  inquiry on &#8216;you just committed some code to the repository, are you done with unit testing?&#8217;. Situation, based on my own experiences, has improved from those days.  There is some awareness in terms of unit testing and in terms of the developer&#8217;s responsibility.</p>
<p>Having said that, there is still a belief that QA is more responsible for the quality or somehow testers can magically achieve quality. Don&#8217;t get me wrong, there is significant benefit that can be achieved with testing. However, a false expectation to start with is &#8212; if you don&#8217;t do your job well in terms of designing, implementation, code reviews, etc. but you expect the quality can be improved downstream by testing (and more testing). On the flip side it may not be fair to a developer if a tester says &#8212; the primary artifact is the code, and it is your problem not mine.</p>
<p>I&#8217;m fortunate enough to work with some wonderful testers. Some times I wonder whether it is some kind of &#8220;genetic trait&#8221; that they could come up with some of the scenarios that I would have otherwise missed. At the same time I have seen some mediocre testers who are laid back shrugging off any kind of responsibility. To be fair, we have this kind of people in every functionality of the software development.</p>
<p>The following points may make some sense in this context:</p>
<ol>
<li><strong>Competence:</strong> Without competent people any set of constraints or processes would fail. You may not have super stars in your team but you need a majority of people working with little or no managing, knowing their job responsibilities well enough. This may sound too basic to get into this list, but in reality competency is one of the core issues of software development. For testers, it is very important to train and provide enough support to help them catch up with the pace of new technologies used in the development.</li>
<li><strong>Work as a team:</strong> A whole-team approach is a more desirable one. The individuals involved have only one target set &#8212; achieve better quality. Find issues sooner in the development process and effectively address them. If an issue arises at a later point of time it is everyone&#8217;s responsibility. In <a href="http://www.amazon.com/Agile-Testing-Practical-Addison-Wesley-Signature/dp/0321534468/ref=sr_1_1?ie=UTF8&amp;qid=1249987494&amp;sr=8-1">Agile Testing</a> book Lisa Crispin and Janet Gregory aptly said:<br />
<blockquote><p>When the whole development team takes responsibility for testing and quality, you have large variety of skill sets and experience levels taking on whatever testing issues might arrive. Test automation isn&#8217;t a big problem for a group of skilled programmers. When testing is a team priority, and anyone can sign up for testing tasks, the team designs testable code.</p></blockquote>
</li>
<li><strong>Management failure:</strong> If there is more frequent bickering in terms of who&#8217;s at fault, a possible reason could be that the managers are somewhere losing their grip on setting constraints. As Jurgen Appelo <a href="http://www.noop.nl/2009/06/three-levels-of-control.html">pointed out</a> recently:<br />
<blockquote><p>The good-to-great companies built a consistent system with clear constraints, but they also gave people freedom and responsibility within the framework of that system. They hired self-disciplined people who didn&#8217;t need to be managed, and then managed the system, not the people.</p></blockquote>
</li>
<li><strong>Root-cause Analysis:</strong> A very important step in my opinion that is frequently been discarded; many places it is not even considered. Regardless of who made the mistake or which part of the process has leaks &#8212; the focus must be on learning from those failures. Only when you understand what went wrong you can plan accordingly on rectifying it. I have written earlier about <a href="http://www.suryasuravarapu.com/2009/01/root-cause-analysis-found-a-bug-now-what.html">root cause analysis</a>. Here is another nice article on <a href="http://startuplessonslearned.blogspot.com/2008/11/five-whys.html">Five whys</a> that I stumbled on recently. Do not treat the symptom, treat the underlying cause which will take care of the symptom.</li>
</ol>
<p>Please feel free to provide your inputs (in the comments section) as to what worked for your organization, how you perform root cause analysis, and anything else that adds value to this discussion.</p>
<p><small>photo credit: <a title="purpleslog" href="http://www.flickr.com/photos/93453114@N00/3244332524/" target="_blank">purpleslog</a></small></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><img src="file:///C:/DOCUME%7E1/ssuravar/LOCALS%7E1/Temp/moz-screenshot-3.jpg" alt="" /></div>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;title=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20&amp;notes=A%20few%20articles%20that%20I%20read%20recently%20and%20one%20specifically%20in%20the%20recent%20past%20is%20the%20motivation%20for%20this%20post.%20When%20a%20defect%20is%20identified%20in%20production%2C%20it%20is%20not%20uncommon%20for%20somebody%20to%20question%20why%20it%20happened%20%28of%20course%2C%20if%20nobody%20is%20questioning%2C%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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;title=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20" 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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;title=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20&amp;bodytext=A%20few%20articles%20that%20I%20read%20recently%20and%20one%20specifically%20in%20the%20recent%20past%20is%20the%20motivation%20for%20this%20post.%20When%20a%20defect%20is%20identified%20in%20production%2C%20it%20is%20not%20uncommon%20for%20somebody%20to%20question%20why%20it%20happened%20%28of%20course%2C%20if%20nobody%20is%20questioning%2C%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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;title=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20" 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%2F08%2Fwhos-at-fault-developer-or-tester.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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;title=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20" 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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;t=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20" 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=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F08%2Fwhos-at-fault-developer-or-tester.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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;title=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20&amp;annotation=A%20few%20articles%20that%20I%20read%20recently%20and%20one%20specifically%20in%20the%20recent%20past%20is%20the%20motivation%20for%20this%20post.%20When%20a%20defect%20is%20identified%20in%20production%2C%20it%20is%20not%20uncommon%20for%20somebody%20to%20question%20why%20it%20happened%20%28of%20course%2C%20if%20nobody%20is%20questioning%2C%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=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F08%2Fwhos-at-fault-developer-or-tester.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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;t=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20&amp;s=A%20few%20articles%20that%20I%20read%20recently%20and%20one%20specifically%20in%20the%20recent%20past%20is%20the%20motivation%20for%20this%20post.%20When%20a%20defect%20is%20identified%20in%20production%2C%20it%20is%20not%20uncommon%20for%20somebody%20to%20question%20why%20it%20happened%20%28of%20course%2C%20if%20nobody%20is%20questioning%2C%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%2F08%2Fwhos-at-fault-developer-or-tester.html&amp;t=Who%27s%20At%20Fault%2C%20Developer%20or%20Tester%3F%20" 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/fgc5vn0cyc4" height="1" width="1"/>]]></content:encoded><description>A few articles that I read recently and one specifically in the recent past is the motivation for this post. When a defect is identified in production, it is not uncommon for somebody to question why it happened (of course, if nobody is questioning, that would be a bigger issue)? Also, it is not that [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/08/whos-at-fault-developer-or-tester.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><feedburner:origLink>http://www.suryasuravarapu.com/2009/08/whos-at-fault-developer-or-tester.html</feedburner:origLink></item><item><title>Jira Plugin: Unique Issue ID with Search Capability</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/v7S6vYo8Msc/jira-plugin-unique-issue-id-with-search-capability.html</link><category>Jira</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Thu, 23 Jul 2009 03:06:11 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=706</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>In a <a href="http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-across-the-projects.html">previous post</a> I&#8217;ve explained how to create a Jira plugin for a unique issue ID across the projects. I&#8217;d recommend reading that post before this one. The issue ID, a unique one is useful (if that is your requirement, of course) but would be even more useful if you could search for that.</p>
<p>According to the documentation the <a href="http://docs.atlassian.com/software/jira/docs/api/latest/com/atlassian/jira/issue/customfields/CustomFieldSearcher.html">CustomFieldSearcher</a> interface defines <a href="http://docs.atlassian.com/software/jira/docs/api/latest/com/atlassian/jira/issue/search/searchers/IssueSearcher.html">IssueSearcher</a> that&#8217;s usable by the custom field objects. IssueSearcher in turn is responsible for all search related activities in the Issue Navigator.</p>
<p>Like pre-configured custom field implementations, you will find several implementations packaged out of the box for searchers. More often than not you may have to just pick which searcher implementation suits the data type of your custom field. In this case, our unique issue ID custom field is a number, and so we can pick either <a href="http://docs.atlassian.com/software/jira/docs/api/latest/com/atlassian/jira/issue/customfields/searchers/ExactNumberSearcher.html">ExactNumberSearcher</a> or a <a href="http://docs.atlassian.com/software/jira/docs/api/latest/com/atlassian/jira/issue/customfields/searchers/NumberRangeSearcher.html">NumberRangeSearcher</a>. I picked the latter.</p>
<p>So to add the search functionality there are two pieces to it:<br />
- define it in the the descriptor<br />
- add views so that search fields show up for searching, and also for viewing the search criteria. </p>
<h3>Plugin Descriptor</h3>
<p>Only the additions made for the search functionality is displayed below, for the actual custom field definition please refer to the <a href="http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-across-the-projects.html">previous post</a>.</p>
<pre>
&lt;atlassian-plugin&gt;
...
...
    &lt;customfield-searcher key=&quot;uniqueIssueIdSearcher&quot; name=&quot;Unique Issue Id Searcher&quot;
	class=&quot;com.atlassian.jira.issue.customfields.searchers.NumberRangeSearcher&quot;&gt;
       &lt;description&gt;Allows search for unique issue ID.&lt;/description&gt;
       &lt;resource type=&quot;velocity&quot; name=&quot;view&quot;
   		location=&quot;templates/plugins/fields/view-searcher/view-searcher-number-range.vm&quot; /&gt;
       &lt;resource type=&quot;velocity&quot; name=&quot;search&quot;
   		location=&quot;templates/plugins/fields/edit-searcher/search-number-range.vm&quot; /&gt;
       &lt;valid-customfield-type package=&quot;com.suryasuravarapu.jira.plugins&quot; key=&quot;uniqueIssueId&quot; /&gt;
    &lt;/customfield-searcher&gt;
&lt;/atlassian-plugin&gt;
</pre>
<p>A searcher is defined with <code>NumberRangeSearcher</code>. Resources locations are provided for view and search. The last line specifies what are the valid custom field types for this searcher. You may add one ore more types here.</p>
<h3>Velocity Templates</h3>
<p>The two velocity templates needed for search and view are provided below. They are self-explanatory.</p>
<p><strong>search-number-range.vm</strong></p>
<pre class="brush: text">
#searcherEditHeader (${customField.id} ${customField.name})

&lt;span class=&quot;lead&quot;&gt;$i18n.getText(&#039;common.words.between&#039;)&lt;/span&gt;

&lt;input type=&quot;text&quot;
       name=&quot;${customField.id}:greaterThan&quot;
       id=&quot;${customField.id}:greaterThan&quot;
       class=&quot;smallInputField&quot;
       value=&quot;$!value.getFirstValueForKey(&#039;greaterThan&#039;)&quot;
/&gt;

$i18n.getText(&#039;common.words.and&#039;)

&lt;input type=&quot;text&quot;
       name=&quot;${customField.id}:lessThan&quot;
       id=&quot;${customField.id}:lessThan&quot;
       class=&quot;smallInputField&quot;
       value=&quot;$!value.getFirstValueForKey(&#039;lessThan&#039;)&quot;
/&gt;

#searcherEditFooter (${customField.id} $customField.description)
</pre>
<p><strong>view-searcher-number.vm</strong></p>
<pre class="brush: text">
#searcherHeader ($customField)
    &lt;span class=&quot;lead&quot;&gt;$i18n.getText(&#039;common.words.between&#039;)&lt;/span&gt;
    #if ($value.getFirstValueForKey(&#039;greaterThan&#039;))
    	$value.getFirstValueForKey(&#039;greaterThan&#039;)
    #else
    	${i18n.getText(&quot;common.filters.any.value&quot;)}
    #end

    ${i18n.getText(&quot;common.words.and&quot;)}
    #if ($value.getFirstValueForKey(&#039;lessThan&#039;))
    	$value.getFirstValueForKey(&#039;lessThan&#039;)
    #else
    	${i18n.getText(&quot;common.filters.any.value&quot;)}
    #end
#searcherFooter ($customField)
</pre>
<p><strong>Note:</strong> Just make sure that you select your new searcher template in the custom field you defined in the Jira Administration section.</p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability&amp;notes=In%20a%20previous%20post%20I%27ve%20explained%20how%20to%20create%20a%20Jira%20plugin%20for%20a%20unique%20issue%20ID%20across%20the%20projects.%20I%27d%20recommend%20reading%20that%20post%20before%20this%20one.%20The%20issue%20ID%2C%20a%20unique%20one%20is%20useful%20%28if%20that%20is%20your%20requirement%2C%20of%20course%29%20but%20would%20be%20even%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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability" 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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability&amp;bodytext=In%20a%20previous%20post%20I%27ve%20explained%20how%20to%20create%20a%20Jira%20plugin%20for%20a%20unique%20issue%20ID%20across%20the%20projects.%20I%27d%20recommend%20reading%20that%20post%20before%20this%20one.%20The%20issue%20ID%2C%20a%20unique%20one%20is%20useful%20%28if%20that%20is%20your%20requirement%2C%20of%20course%29%20but%20would%20be%20even%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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability" 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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability" 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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;t=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability" 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=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability&amp;annotation=In%20a%20previous%20post%20I%27ve%20explained%20how%20to%20create%20a%20Jira%20plugin%20for%20a%20unique%20issue%20ID%20across%20the%20projects.%20I%27d%20recommend%20reading%20that%20post%20before%20this%20one.%20The%20issue%20ID%2C%20a%20unique%20one%20is%20useful%20%28if%20that%20is%20your%20requirement%2C%20of%20course%29%20but%20would%20be%20even%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=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;t=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability&amp;s=In%20a%20previous%20post%20I%27ve%20explained%20how%20to%20create%20a%20Jira%20plugin%20for%20a%20unique%20issue%20ID%20across%20the%20projects.%20I%27d%20recommend%20reading%20that%20post%20before%20this%20one.%20The%20issue%20ID%2C%20a%20unique%20one%20is%20useful%20%28if%20that%20is%20your%20requirement%2C%20of%20course%29%20but%20would%20be%20even%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%2F07%2Fjira-plugin-unique-issue-id-with-search-capability.html&amp;t=Jira%20Plugin%3A%20Unique%20Issue%20ID%20with%20Search%20Capability" 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/07/jira-plugin-unique-issue-id-across-the-projects.html' rel='bookmark' title='Permanent Link: Jira Plugin: Unique Issue ID Across the Projects'>Jira Plugin: Unique Issue ID Across the Projects</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/v7S6vYo8Msc" height="1" width="1"/>]]></content:encoded><description>In a previous post I&amp;#8217;ve explained how to create a Jira plugin for a unique issue ID across the projects. I&amp;#8217;d recommend reading that post before this one. The issue ID, a unique one is useful (if that is your requirement, of course) but would be even more useful if you could search for that.
According [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-across-the-projects.html' rel='bookmark' title='Permanent Link: Jira Plugin: Unique Issue ID Across the Projects'&gt;Jira Plugin: Unique Issue ID Across the Projects&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-with-search-capability.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/2009/07/jira-plugin-unique-issue-id-with-search-capability.html</feedburner:origLink></item><item><title>Jira Plugin: Unique Issue ID Across the Projects</title><link>http://feedproxy.google.com/~r/SuryaSuravarapusBlog/~3/8ahS0P2-13U/jira-plugin-unique-issue-id-across-the-projects.html</link><category>Jira</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Surya Suravarapu</dc:creator><pubDate>Tue, 14 Jul 2009 18:59:42 PDT</pubDate><guid isPermaLink="false">http://www.suryasuravarapu.com/?p=658</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Overview</h3>
<p><a href="http://www.atlassian.com/software/jira/">Jira</a> is an excellent issue tracking tool, and that needs no further introduction. Jira has a concept of <a href="http://www.atlassian.com/software/jira/docs/v3.13.4/project_management.html">Projects</a> and each issue that is logged under a project has a pattern &#8212; <em>[project_key]-[id]</em>, e.g: ABC-202. The id is unique only for that project, that is ABC-202 and DEF-202 are two issues which have an id of 202, unique within their own project context. If you have a requirement of displaying a unique issue Id across all the projects then that involves some work, writing a plugin, that I try to explain in this post.</p>
<p><a href="http://jira.atlassian.com/browse/JRA-7777">JRA-7777</a> is an issue that was logged a while ago on Atlassian&#8217;s issue tracking site for this specific purpose.</p>
<h3>Prerequisite</h3>
<p>Atlassian&#8217;s Developer Network site has detailed steps on <a href="http://confluence.atlassian.com/display/DEVNET/How+to+Build+an+Atlassian+Plugin">setting up your environment and more</a>. Good resource, and no need to duplicate that here.</p>
<h3>Approach</h3>
<p>If you look at the <a href="http://confluence.atlassian.com/display/JIRA/Database+Schema">Jira database schema</a>, <code>JiraIssue</code> table has a unique identifier column (ID). The value of that field is unique across the system. So for ABC-202 this ID could be 14500 and DEF-202 it could be 15202. So the goal is to expose this value as a read-only <a href="http://www.atlassian.com/software/jira/docs/v3.13.4/customfields/overview.html">custom field</a> on the Jira UI.</p>
<p>Other characteristics of this ID that I have observed are &#8212;<br />
- the value starts at 10000, and<br />
- if you restart the servlet container hosting Jira the ID (for the next row) jumps to next 10&#8217;s. If the last value was 10256 before restart, after restart the ID for the subsequent row is 10260 (instead of 10257, that one may usually expect). Still unique, and serves the purpose.</p>
<p><strong>Update:</strong> Matt Doar provided an explanation for this behavior in his comments:<br />
According to <a href="http://confluence.atlassian.com/display/JIRA/Change+History">Jira&#8217;s documentation</a> it’s Ofbiz that allocates IDs in batches of 10, so the SEQ_ID is the next available ID rounded up to the nearest 10. So I would expect that restarting the servlet would just round it up, not increment it on every restart.</p>
<h3>Plugin Development</h3>
<p><strong>Plugin Descriptor (atlassian-plugin descriptor)</strong></p>
<p>An XML file that describes about the plugin and the modules contained in it. It is placed right under the root folder of the project. In this file the new custom field type is defined. <em>atlassian-plugin-key</em> is the name of the Java package under which the plugin class is placed. <em>key</em> of the <em>custom-field-type</em> is the unique name of the plugin, and provide the associated fully qualified plugin Class name.  </p>
<pre>
&lt; ?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!-- the plugin key must be unique, think of it as the 'package' of the plugin --&gt;
&lt;atlassian-plugin key=&quot;com.suryasuravarapu.jira.plugins&quot; name=&quot;Unique Id Plugin&quot;&gt;
    &lt;!-- a short block describing the plugin itself --&gt;
    &lt;plugin-info&gt;
        &lt;description&gt;A unique issue id for the Jira issue&lt;/description&gt;
        &lt;!-- the version of the plugin --&gt;
        &lt;version&gt;1.0&lt;/version&gt;
        &lt;!-- the versions of the application this plugin is for --&gt;
        &lt;application-version min=&quot;3.13&quot; max=&quot;3.13&quot;/&gt;
        &lt;!-- details of the plugin vendor --&gt;
        &lt;vendor name=&quot;SPS&quot; url=&quot;http://suryasuravarapu.com&quot;/&gt;
    &lt;/plugin-info&gt;

    &lt;customfield-type key=&quot;uniqueIssueId&quot; name=&quot;Jira Internal Id&quot;
        class=&quot;com.suryasuravarapu.jira.plugins.UniqueIssueId&quot;&gt;
        &lt;description&gt;
        Unique issue id correlates to the ID in the JIRAISSUE table
        &lt;/description&gt;

        &lt;!-- this template is used on the view issue page --&gt;
        &lt;resource type=&quot;velocity&quot; name=&quot;view&quot;
            location=&quot;templates/plugins/fields/view/view-uniqueIssueId.vm&quot; /&gt;
    &lt;/customfield-type&gt;

&lt;/atlassian-plugin&gt;
</pre>
<p><strong>Plugin Java Code</strong><br />
Fortunately, you don&#8217;t have to write this plugin from the scratch. Jira ships with quite a few concrete implementations. A custom field class extends <a href="http://docs.atlassian.com/software/jira/docs/api/latest/com/atlassian/jira/issue/customfields/CustomFieldType.html">CustomFieldType</a>, but we can extend a more concrete implementation for numeric fields <a href="http://docs.atlassian.com/software/jira/docs/api/latest/com/atlassian/jira/issue/customfields/impl/NumberCFType.html">NumberCFType</a>.</p>
<p><code>getValueFromIssue</code> is the only method that you need to implement and return the auto-increment Id.</p>
<pre class="brush: java">
public class UniqueIssueId extends NumberCFType {
	public UniqueIssueId(CustomFieldValuePersister customFieldValuePersister,
			DoubleConverter doubleConverter,
			GenericConfigManager genericConfigManager) {
		super(customFieldValuePersister, doubleConverter, genericConfigManager);
	}

	public Object getValueFromIssue(CustomField field, Issue issue) {
            return issue.getId();
	}
}
</pre>
<p><strong>Velocity Templates</strong><br />
<code>view-uniqueIssueId.vm</code> that we have described above in the plugin descriptor takes care of displaying the field value. One notable item below is we are displaying the <code>value.longValue()</code> as the value that is being returned by the <code>NumberCFType</code> is of type <code>java.lang.Double</code>. Without that conversion you would see values like 10380.0 instead of 10380, little annoyance!</p>
<pre class="brush: text">
#if($value &amp;amp;&amp;amp; !$value.equals(&quot;&quot;))
	#set ($displayValue = ${value.longValue()})
#else
	#set ($displayValue = &#039;N/A&#039;)
#end
$!displayValue
</pre>
<h3>Deployment</h3>
<p>From Eclipse, export the JAR or use the Maven build scripts to generate one. Place that JAR under application&#8217;s <code>WEB-INF/lib</code> folder, and restart the container. You should be able to see your Plugin under Jira&#8217;s <code>Administration -> Plugins</code>.</p>
<p>All the hard work is done! Display the field value. For that, create a custom field using the type defined above and add it to the desired screens for display. </p>



Share and Enjoy:


	<a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects&amp;notes=Overview%0D%0AJira%20is%20an%20excellent%20issue%20tracking%20tool%2C%20and%20that%20needs%20no%20further%20introduction.%20Jira%20has%20a%20concept%20of%20Projects%20and%20each%20issue%20that%20is%20logged%20under%20a%20project%20has%20a%20pattern%20--%20%5Bproject_key%5D-%5Bid%5D%2C%20e.g%3A%20ABC-202.%20The%20id%20is%20unique%20only%20for%20that" 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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects" 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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects&amp;bodytext=Overview%0D%0AJira%20is%20an%20excellent%20issue%20tracking%20tool%2C%20and%20that%20needs%20no%20further%20introduction.%20Jira%20has%20a%20concept%20of%20Projects%20and%20each%20issue%20that%20is%20logged%20under%20a%20project%20has%20a%20pattern%20--%20%5Bproject_key%5D-%5Bid%5D%2C%20e.g%3A%20ABC-202.%20The%20id%20is%20unique%20only%20for%20that" 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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects" 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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects" 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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;t=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects" 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=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects%20-%20http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;title=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects&amp;annotation=Overview%0D%0AJira%20is%20an%20excellent%20issue%20tracking%20tool%2C%20and%20that%20needs%20no%20further%20introduction.%20Jira%20has%20a%20concept%20of%20Projects%20and%20each%20issue%20that%20is%20logged%20under%20a%20project%20has%20a%20pattern%20--%20%5Bproject_key%5D-%5Bid%5D%2C%20e.g%3A%20ABC-202.%20The%20id%20is%20unique%20only%20for%20that" 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=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects&amp;link=http%3A%2F%2Fwww.suryasuravarapu.com%2F2009%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;t=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects&amp;s=Overview%0D%0AJira%20is%20an%20excellent%20issue%20tracking%20tool%2C%20and%20that%20needs%20no%20further%20introduction.%20Jira%20has%20a%20concept%20of%20Projects%20and%20each%20issue%20that%20is%20logged%20under%20a%20project%20has%20a%20pattern%20--%20%5Bproject_key%5D-%5Bid%5D%2C%20e.g%3A%20ABC-202.%20The%20id%20is%20unique%20only%20for%20that" 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%2F07%2Fjira-plugin-unique-issue-id-across-the-projects.html&amp;t=Jira%20Plugin%3A%20Unique%20Issue%20ID%20Across%20the%20Projects" 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/07/jira-plugin-unique-issue-id-with-search-capability.html' rel='bookmark' title='Permanent Link: Jira Plugin: Unique Issue ID with Search Capability'>Jira Plugin: Unique Issue ID with Search Capability</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/SuryaSuravarapusBlog/~4/8ahS0P2-13U" height="1" width="1"/>]]></content:encoded><description>Overview
Jira is an excellent issue tracking tool, and that needs no further introduction. Jira has a concept of Projects and each issue that is logged under a project has a pattern &amp;#8212; [project_key]-[id], e.g: ABC-202. The id is unique only for that project, that is ABC-202 and DEF-202 are two issues which have an id [...]


&lt;b&gt;You may also like:&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-with-search-capability.html' rel='bookmark' title='Permanent Link: Jira Plugin: Unique Issue ID with Search Capability'&gt;Jira Plugin: Unique Issue ID with Search Capability&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.suryasuravarapu.com/2009/07/jira-plugin-unique-issue-id-across-the-projects.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/2009/07/jira-plugin-unique-issue-id-across-the-projects.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>
