<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ck4FQHs5cSp7ImA9Wx5RGEo.&quot;"><id>tag:blogger.com,1999:blog-11200164</id><updated>2010-08-26T21:01:51.529-04:00</updated><title>Nirav's Contemplations</title><subtitle type="html">Thoughts on Programming, Eclipse and Open Source.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.nirav.name/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.nirav.name/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/nirav" /><feedburner:info uri="blogspot/nirav" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2Fnirav" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2Fnirav" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2Fnirav" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/blogspot/nirav" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2Fnirav" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2Fnirav" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2Fnirav" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry gd:etag="W/&quot;CE8BR3k6eyp7ImA9WxFRGUU.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-8161252017475363531</id><published>2010-05-01T12:34:00.006-04:00</published><updated>2010-05-04T10:20:56.713-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-04T10:20:56.713-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Future" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Future of a Java programmer</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/8161252017475363531/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=8161252017475363531" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8161252017475363531?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8161252017475363531?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/nQnef2IOIKk/future-of-java-programmer.html" title="Future of a Java programmer" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>5</thr:total><content type="html">As a long time Java only programmer professionally, I have been pondering about how things are changing around me as a Java programmer. Ever since I remember I had no choice but to use subset of C++ dialect (Java lang) with an extremely rich class library and ecosystem (Java platform).

In last few years there has been a drastic shift in number of languages targeting JVM. For example: dynamic (&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=nQnef2IOIKk:5Hw7jg0xFxA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=nQnef2IOIKk:5Hw7jg0xFxA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=nQnef2IOIKk:5Hw7jg0xFxA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=nQnef2IOIKk:5Hw7jg0xFxA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=nQnef2IOIKk:5Hw7jg0xFxA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=nQnef2IOIKk:5Hw7jg0xFxA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/nQnef2IOIKk" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2010/05/future-of-java-programmer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cCSXczeCp7ImA9WxBUGUU.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-5609066850391656326</id><published>2010-03-07T12:58:00.004-05:00</published><updated>2010-03-07T13:04:28.980-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-07T13:04:28.980-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scala" /><category scheme="http://www.blogger.com/atom/ns#" term="Refactoring" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><title>Eclipse Refactoring for legacy code</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/5609066850391656326/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=5609066850391656326" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/5609066850391656326?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/5609066850391656326?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/Mr-DIlQXecg/eclipse-refactoring-for-legacy-code.html" title="Eclipse Refactoring for legacy code" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>4</thr:total><content type="html">It has been quite sometime since I wrote anything on this blog, twitter probably spoiled me. If you are following me on twitter, you probably noticed announcement of  a small eclipse plugin for automated refactoring for Legacy Code. 


Before few months, I wrote an LTK refactoring mainly in Scala (yes, eclipse plugin in Scala language) to forward static method calls in a Java method to an &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Mr-DIlQXecg:qO3IoF--ANY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Mr-DIlQXecg:qO3IoF--ANY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Mr-DIlQXecg:qO3IoF--ANY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Mr-DIlQXecg:qO3IoF--ANY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Mr-DIlQXecg:qO3IoF--ANY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Mr-DIlQXecg:qO3IoF--ANY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/Mr-DIlQXecg" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2010/03/eclipse-refactoring-for-legacy-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8GR3w4eCp7ImA9WxNTEk8.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-4079223988553714376</id><published>2009-08-13T21:00:00.012-04:00</published><updated>2009-08-14T00:23:46.230-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-14T00:23:46.230-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Refactoring" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Pragmatic" /><title>Real Refactoring</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/4079223988553714376/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=4079223988553714376" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4079223988553714376?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4079223988553714376?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/Aw2a0QX0Hrs/real-refactoring.html" title="Real Refactoring" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>2</thr:total><content type="html">A lot of really good material has been written about refactoring. However, just like a lot of other things in software development, refactoring is also victimized by becoming the buzzword implying 'rewrites' and every other thing that is not refactoring. A lot of people really don't understand what they mean when they refer to 'refactoring', this post aims to provide a systematic explanation of &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Aw2a0QX0Hrs:-ViSe5L5AjY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Aw2a0QX0Hrs:-ViSe5L5AjY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Aw2a0QX0Hrs:-ViSe5L5AjY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Aw2a0QX0Hrs:-ViSe5L5AjY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Aw2a0QX0Hrs:-ViSe5L5AjY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Aw2a0QX0Hrs:-ViSe5L5AjY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/Aw2a0QX0Hrs" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/08/real-refactoring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIEQ3o7fSp7ImA9WxJREUU.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-1203632720875867405</id><published>2009-05-12T22:01:00.010-04:00</published><updated>2009-05-13T00:21:42.405-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-13T00:21:42.405-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scala" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Scala v/s Java arrays</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/1203632720875867405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=1203632720875867405" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/1203632720875867405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/1203632720875867405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/k5N35zT7mfs/scala-vs-java-arrays.html" title="Scala v/s Java arrays" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>10</thr:total><content type="html">Here's a Java puzzler for the curious (and a good interview question too!). Given a array merge method below, what will be the output of following program? public class Generics { static class A { } static class B extends A { } public static void main(String[] args) {  A[] copy = merge(new B[] { new B() }, new A[] { new A() }, new B[1]);  System.out.println(copy.length != 1); } static  Z[] merge(&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=k5N35zT7mfs:Up2oO0q5EAU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=k5N35zT7mfs:Up2oO0q5EAU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=k5N35zT7mfs:Up2oO0q5EAU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=k5N35zT7mfs:Up2oO0q5EAU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=k5N35zT7mfs:Up2oO0q5EAU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=k5N35zT7mfs:Up2oO0q5EAU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/k5N35zT7mfs" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/05/scala-vs-java-arrays.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFSHg5eCp7ImA9WxJSFEQ.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-3242915400405752701</id><published>2009-05-05T22:23:00.000-04:00</published><updated>2009-05-05T00:18:39.620-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-05T00:18:39.620-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scala" /><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency" /><category scheme="http://www.blogger.com/atom/ns#" term="Java VM" /><title>Fork/Join Concurrency with Scala Actors</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/3242915400405752701/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=3242915400405752701" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/3242915400405752701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/3242915400405752701?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/Nc9G63q_1Zg/forkjoin-concurrency-with-scala-actors.html" title="Fork/Join Concurrency with Scala Actors" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>1</thr:total><content type="html">Have you ever wondered why there are no special  frameworks to address concurrency in a Java based application? Considering Java's rich (NIH) ecosystem, I do wonder why I have to write same old state management code while introducing even a small amount of concurrency in Java application.The reason why I think it is almost impossible to consider concurrency as an aspect in arbitrary application &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Nc9G63q_1Zg:TnpL3b8-QV4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Nc9G63q_1Zg:TnpL3b8-QV4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Nc9G63q_1Zg:TnpL3b8-QV4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Nc9G63q_1Zg:TnpL3b8-QV4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Nc9G63q_1Zg:TnpL3b8-QV4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Nc9G63q_1Zg:TnpL3b8-QV4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/Nc9G63q_1Zg" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/04/forkjoin-concurrency-with-scala-actors.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EBR3s7fyp7ImA9WxJTFk8.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-2056609480094935089</id><published>2009-04-21T22:29:00.015-04:00</published><updated>2009-04-24T23:20:56.507-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-24T23:20:56.507-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scala" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="Design" /><title>How Scala's pattern matching can replace Visitors</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/2056609480094935089/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=2056609480094935089" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/2056609480094935089?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/2056609480094935089?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/dH4mYR3Aqqg/how-scalas-pattern-matching-can-replace.html" title="How Scala's pattern matching can replace Visitors" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>1</thr:total><content type="html">The primary motivation of Visitor design pattern is to separate model traversal from operational logic. A visitable model takes the responsibility of model navigation while the behavior is defined by arbitrary visitors. In this post I will try to explain problems associated with Visitors in general and how Scala's pattern matching feature can eliminate such problems cleanly.Consider a simplified &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=dH4mYR3Aqqg:kuOy6Ro9oXE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=dH4mYR3Aqqg:kuOy6Ro9oXE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=dH4mYR3Aqqg:kuOy6Ro9oXE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=dH4mYR3Aqqg:kuOy6Ro9oXE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=dH4mYR3Aqqg:kuOy6Ro9oXE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=dH4mYR3Aqqg:kuOy6Ro9oXE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/dH4mYR3Aqqg" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/04/how-scalas-pattern-matching-can-replace.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCRnc_fip7ImA9WxVaGU4.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-8929183270216800599</id><published>2009-04-16T21:38:00.003-04:00</published><updated>2009-04-16T22:47:47.946-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-16T22:47:47.946-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java VM" /><category scheme="http://www.blogger.com/atom/ns#" term="Loud Thinking" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Your Language is not SLOW!</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/8929183270216800599/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=8929183270216800599" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8929183270216800599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8929183270216800599?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/vMP_2DrIpXY/your-language-is-not-slow.html" title="Your Language is not SLOW!" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>7</thr:total><content type="html">Do you really give a thought when you say "Ruby is slow or Python is slow"? Just because Twitter moved their back end messaging to JVM doesn't necessarily make Ruby any slower than it already was. If a language runtime can't handle concurrent load or long running processes it is not a limitation of the language!This is dejavu for me as Java was considered "a slow language" back in 1.1 days when &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=vMP_2DrIpXY:FlIrDYADiPg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=vMP_2DrIpXY:FlIrDYADiPg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=vMP_2DrIpXY:FlIrDYADiPg:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=vMP_2DrIpXY:FlIrDYADiPg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=vMP_2DrIpXY:FlIrDYADiPg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=vMP_2DrIpXY:FlIrDYADiPg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/vMP_2DrIpXY" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/04/your-language-is-not-slow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQEQXw5eCp7ImA9WxVaE04.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-9052335280081205316</id><published>2009-04-09T22:21:00.004-04:00</published><updated>2009-04-10T00:21:40.220-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-10T00:21:40.220-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scala" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Scala: First impression</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/9052335280081205316/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=9052335280081205316" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/9052335280081205316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/9052335280081205316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/psGlXJIggXc/scala-first-impression.html" title="Scala: First impression" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>1</thr:total><content type="html">If you are curious enough about programming languages then you probably have  heard about Scala - the  'statically typed' functional and object oriented language. Scala is the new sun rising to balance 'the burn factor' between functional and object oriented schools of thoughts.Unlike what this paper suggests[pdf], The reason why I think Scala exists is because functional v/s object oriented &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=psGlXJIggXc:OU74563L2VQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=psGlXJIggXc:OU74563L2VQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=psGlXJIggXc:OU74563L2VQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=psGlXJIggXc:OU74563L2VQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=psGlXJIggXc:OU74563L2VQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=psGlXJIggXc:OU74563L2VQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/psGlXJIggXc" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/04/scala-first-impression.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYERn0_eip7ImA9WxVbEE4.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-6651224569871712906</id><published>2009-03-24T23:04:00.010-04:00</published><updated>2009-03-25T23:11:47.342-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T23:11:47.342-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="OPath" /><title>OPath ported for Java object model</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/6651224569871712906/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=6651224569871712906" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/6651224569871712906?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/6651224569871712906?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/lFAJGxH922k/opath-port-for-java-object-model.html" title="OPath ported for Java object model" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>0</thr:total><content type="html">I have been thinking about alternate uses of OPath I created for EVars plug-in.  And it occurred to me that I can very well use it for my unit testing (which involves pretty complex insurance object model) and for things like JSPs where I really hate to write ten lines of Java code just to display some value.So I wrote a port of OPath for Java object model (less than 200 lines of real code). &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=lFAJGxH922k:YwofiMigKZw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=lFAJGxH922k:YwofiMigKZw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=lFAJGxH922k:YwofiMigKZw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=lFAJGxH922k:YwofiMigKZw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=lFAJGxH922k:YwofiMigKZw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=lFAJGxH922k:YwofiMigKZw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/lFAJGxH922k" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/03/opath-port-for-java-object-model.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NR3c4fyp7ImA9WxVUF0o.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-9137207996289952548</id><published>2009-03-22T22:58:00.005-04:00</published><updated>2009-03-22T23:29:56.937-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-22T23:29:56.937-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Evars" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="OPath" /><title>EVars Update</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/9137207996289952548/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=9137207996289952548" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/9137207996289952548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/9137207996289952548?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/iTf0_P46CPw/evars-update.html" title="EVars Update" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>0</thr:total><content type="html">Based on the awesome feedback, I have been doing some offline development on EVars plug-in lately. I have added some basic documentation on wiki. Installation is now easy, let P2 do the work to install/update the plug-in (it's a struggle to host update-site with google code).One of the most exciting feature (Which I can't stop talking about) is value based filtering. Now you can have all the &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=iTf0_P46CPw:h68tzoXEP1U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=iTf0_P46CPw:h68tzoXEP1U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=iTf0_P46CPw:h68tzoXEP1U:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=iTf0_P46CPw:h68tzoXEP1U:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=iTf0_P46CPw:h68tzoXEP1U:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=iTf0_P46CPw:h68tzoXEP1U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/iTf0_P46CPw" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/03/evars-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGQX86fyp7ImA9WxVVGEw.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-4319881878720535329</id><published>2009-03-10T19:37:00.012-04:00</published><updated>2009-03-11T20:55:20.117-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-11T20:55:20.117-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Evars" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><title>Improve your debugging speed with EVars Eclipse plugin</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/4319881878720535329/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=4319881878720535329" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4319881878720535329?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4319881878720535329?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/LThatxY3V_s/improve-your-debugging-speed-with-evars.html" title="Improve your debugging speed with EVars Eclipse plugin" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>9</thr:total><content type="html">Update: Added alternate link to screen-cast. Workaround to start plug-inI have been debugging a lot lately which included open source libraries, closed source web-service engine and parts of closed source application server (WebLogic). During this painful debug-fest I felt a strong need for several features missing in Eclipse (NetBeans as well, for that matter) . Debugging closed applications is &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=LThatxY3V_s:AM3w8fEvNcU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=LThatxY3V_s:AM3w8fEvNcU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=LThatxY3V_s:AM3w8fEvNcU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=LThatxY3V_s:AM3w8fEvNcU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=LThatxY3V_s:AM3w8fEvNcU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=LThatxY3V_s:AM3w8fEvNcU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/LThatxY3V_s" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/03/improve-your-debugging-speed-with-evars.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcMQ30zeyp7ImA9WxVVFkg.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-4940222218178113666</id><published>2009-03-09T20:05:00.000-04:00</published><updated>2009-03-10T00:08:02.383-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-10T00:08:02.383-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pragmatic" /><category scheme="http://www.blogger.com/atom/ns#" term="Loud Thinking" /><title>Two types of Architects</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/4940222218178113666/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=4940222218178113666" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4940222218178113666?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4940222218178113666?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/72BXKwyrL4M/two-types-of-architects.html" title="Two types of Architects" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>2</thr:total><content type="html">I am amused by these creatures called 'Architects' in software development. In recent phenomena, They are available under numerous headings such as 'Software architect', 'Solution architect', 'Front end architect', 'Enterprise architect' and so on. To me, in what they really do, there are only two broad types of architects. My brain timed out while guessing fancy names for them so their &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=72BXKwyrL4M:DDnl8YMUUt4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=72BXKwyrL4M:DDnl8YMUUt4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=72BXKwyrL4M:DDnl8YMUUt4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=72BXKwyrL4M:DDnl8YMUUt4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=72BXKwyrL4M:DDnl8YMUUt4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=72BXKwyrL4M:DDnl8YMUUt4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/72BXKwyrL4M" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/03/two-types-of-architects.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4CRX49cCp7ImA9WxVQE0o.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-7284279705953595576</id><published>2009-01-30T18:49:00.015-05:00</published><updated>2009-01-30T22:36:04.068-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T22:36:04.068-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Parsing" /><title>Formal grammars, parsing etc. for dummies</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/7284279705953595576/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=7284279705953595576" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/7284279705953595576?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/7284279705953595576?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/esYh2YqHXiA/formal-grammars-parsing-etc-for-dummies.html" title="Formal grammars, parsing etc. for dummies" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>1</thr:total><content type="html">I thought it may be useful to post summaries of what I have been reading recently. In this post, I will try to explain some basic grammar and parsing stuff in as simple way as I can (omitting all the academic complacency) .A grammar defines a language with a set of rules of type x -&amp;gt; y, where x is left hand side of the rule and y is right hand side of the rule. x and y can be either expandable or&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=esYh2YqHXiA:6yKe7yiZcdM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=esYh2YqHXiA:6yKe7yiZcdM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=esYh2YqHXiA:6yKe7yiZcdM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=esYh2YqHXiA:6yKe7yiZcdM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=esYh2YqHXiA:6yKe7yiZcdM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=esYh2YqHXiA:6yKe7yiZcdM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/esYh2YqHXiA" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/01/formal-grammars-parsing-etc-for-dummies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4MRHY4eip7ImA9WxVRFUU.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-2921994332252923070</id><published>2009-01-21T19:22:00.012-05:00</published><updated>2009-01-21T20:33:05.832-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-21T20:33:05.832-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><title>Mutual recursion fun with Eclipse Debug model</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/2921994332252923070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=2921994332252923070" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/2921994332252923070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/2921994332252923070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/t7O1YA0SyNE/mutual-recursion-fun-with-eclipse-debug.html" title="Mutual recursion fun with Eclipse Debug model" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PebfjbIpLKY/SXfHIJkpH_I/AAAAAAAABxM/aCOz9U1TSFA/s72-c/first.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">  &amp;lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }  --&amp;gt;   I rarely come across real-world data structures which are inherently mutually recursive (a.k.a. Daisy chain recursion in CS literature). Recently, while writing a plug-in related to eclipse.debug, I came across this interesting data structure.  Source Eclipse.orgObserve the IVariable ←→  IValue  relationship (although most &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=t7O1YA0SyNE:1HbDrJ43Kzg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=t7O1YA0SyNE:1HbDrJ43Kzg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=t7O1YA0SyNE:1HbDrJ43Kzg:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=t7O1YA0SyNE:1HbDrJ43Kzg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=t7O1YA0SyNE:1HbDrJ43Kzg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=t7O1YA0SyNE:1HbDrJ43Kzg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/t7O1YA0SyNE" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2009/01/mutual-recursion-fun-with-eclipse-debug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MRnY5eSp7ImA9WxRaEUk.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-4507697987575822798</id><published>2008-12-05T23:37:00.004-05:00</published><updated>2008-12-13T00:08:07.821-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-13T00:08:07.821-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tooling" /><category scheme="http://www.blogger.com/atom/ns#" term="PyConsole" /><category scheme="http://www.blogger.com/atom/ns#" term="Open Source" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Introducing PyConsole!</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/4507697987575822798/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=4507697987575822798" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4507697987575822798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4507697987575822798?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/RTtJL_zyD3g/introducing-pyconsole.html" title="Introducing PyConsole!" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>4</thr:total><content type="html">I have been pretty inactive this year, unlike what I planned (yawn, haven't heard from DLTK since June either) . I started learning Python earlier this year and felt the need of an embedded python shell inside Eclipse. This was something PyDev is missing [Edit: Simone pointed out that PyDev already has this neat feature, I was late to discover it] as compared to other python tools in Linux such &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=RTtJL_zyD3g:lAuhNiua_SA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=RTtJL_zyD3g:lAuhNiua_SA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=RTtJL_zyD3g:lAuhNiua_SA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=RTtJL_zyD3g:lAuhNiua_SA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=RTtJL_zyD3g:lAuhNiua_SA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=RTtJL_zyD3g:lAuhNiua_SA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/RTtJL_zyD3g" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/12/introducing-pyconsole.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08FSX08eSp7ImA9WxVSGEQ.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-8530473775346689807</id><published>2008-08-16T14:35:00.008-04:00</published><updated>2009-01-13T20:16:58.371-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-13T20:16:58.371-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><title>Productive keyboard shortcuts for Eclipse Editors</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/8530473775346689807/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=8530473775346689807" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8530473775346689807?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8530473775346689807?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/I9nWKWAW-AU/productive-keyboard-shortcuts-for.html" title="Productive keyboard shortcuts for Eclipse Editors" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>5</thr:total><content type="html">I've seen very few developers using true power of Eclipse editors, so I thought of listing few very handy shortcuts that can significantly improve your source editing and navigation speed with Eclipse.1. Ctrl + J / Ctrl + Shift + J : Inline search, meaning you can type on the fly to search text in current editor. You can use Up/Down arrow keys to navigate between matching text fragment in forward&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=I9nWKWAW-AU:qhraW3i7M8o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=I9nWKWAW-AU:qhraW3i7M8o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=I9nWKWAW-AU:qhraW3i7M8o:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=I9nWKWAW-AU:qhraW3i7M8o:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=I9nWKWAW-AU:qhraW3i7M8o:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=I9nWKWAW-AU:qhraW3i7M8o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/I9nWKWAW-AU" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/08/productive-keyboard-shortcuts-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUHQ344fyp7ImA9WxdbEEg.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-1299188962363284607</id><published>2008-08-06T11:08:00.005-04:00</published><updated>2008-08-06T15:50:32.037-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-06T15:50:32.037-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Synchronizing client requests using Ajax</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/1299188962363284607/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=1299188962363284607" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/1299188962363284607?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/1299188962363284607?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/3Kf6oCJ0Cl8/synchronizing-client-requests-using.html" title="Synchronizing client requests using Ajax" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>2</thr:total><content type="html">Before few months I was dealing with a problem where I needed to synchronize the server call sequence on browser. The problem was something like this: Client code will open new window navigating to a different page, but that should happen only after post on current page. The link that new window was opening needed to be server synchronized because of database updates etc. on server.

Being &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=3Kf6oCJ0Cl8:K58i7dCDDk0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=3Kf6oCJ0Cl8:K58i7dCDDk0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=3Kf6oCJ0Cl8:K58i7dCDDk0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=3Kf6oCJ0Cl8:K58i7dCDDk0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=3Kf6oCJ0Cl8:K58i7dCDDk0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=3Kf6oCJ0Cl8:K58i7dCDDk0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/3Kf6oCJ0Cl8" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/08/synchronizing-client-requests-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUCRnYzeyp7ImA9WxVSGEQ.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-773264659314821129</id><published>2008-08-05T17:00:00.006-04:00</published><updated>2009-01-13T20:24:27.883-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-13T20:24:27.883-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Frustrations" /><title>What's wrong with HP Quality Center?</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/773264659314821129/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=773264659314821129" title="15 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/773264659314821129?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/773264659314821129?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/g5H597kxKUc/whats-wrong-with-hp-quality-center.html" title="What's wrong with HP Quality Center?" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>15</thr:total><content type="html">This entry is rant so you might just want to skip it.HP Quality Center (formerly Mercury) is a,  how so amusingly called, web-based test management tool. You will find a lot of marketing information if you ask Google, most of which is irrelevant and may only have 1-800 number for support; because they know when you are looking for it on web, you are in trouble and no one can help you. &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=g5H597kxKUc:cvFMcJZ_uwU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=g5H597kxKUc:cvFMcJZ_uwU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=g5H597kxKUc:cvFMcJZ_uwU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=g5H597kxKUc:cvFMcJZ_uwU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=g5H597kxKUc:cvFMcJZ_uwU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=g5H597kxKUc:cvFMcJZ_uwU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/g5H597kxKUc" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/08/whats-wrong-with-hp-quality-center.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUARHk_cCp7ImA9WxZaEEs.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-4572657121733935396</id><published>2008-04-24T15:40:00.007-04:00</published><updated>2008-04-24T16:17:25.748-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-24T16:17:25.748-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="How-to" /><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate" /><title>How to: Always eagerly load objects from database with Hibernate 3 (without changing configuration xmls)</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/4572657121733935396/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=4572657121733935396" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4572657121733935396?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/4572657121733935396?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/5lBD2yoT7TI/how-to-always-eagerly-load-objects-from.html" title="How to: Always eagerly load objects from database with Hibernate 3 (without changing configuration xmls)" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>3</thr:total><content type="html">So it was getting annoying to debug my app. with Hibernate 3 for it's 'lazy load everything by default' feature. Every time I wanted to see what's the value of some collection I will see these weird CGLIB proxy members lurking in debug views.CGLIB$CALLBACK_0    org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer@9be3aaclass$net$sf$cglib$proxy$InvocationHandler    interface &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=5lBD2yoT7TI:oCP9qKyCYJc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=5lBD2yoT7TI:oCP9qKyCYJc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=5lBD2yoT7TI:oCP9qKyCYJc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=5lBD2yoT7TI:oCP9qKyCYJc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=5lBD2yoT7TI:oCP9qKyCYJc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=5lBD2yoT7TI:oCP9qKyCYJc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/5lBD2yoT7TI" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/04/how-to-always-eagerly-load-objects-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCSHk7cSp7ImA9WxZWFE4.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-6800153662986150374</id><published>2008-03-13T09:19:00.004-04:00</published><updated>2008-03-13T14:37:49.709-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-13T14:37:49.709-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Refactoring" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Unusual tip to find refactoring hot-spot</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/6800153662986150374/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=6800153662986150374" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/6800153662986150374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/6800153662986150374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/PUyp8nzl24k/unusual-tip-to-find-refactoring-hot.html" title="Unusual tip to find refactoring hot-spot" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>0</thr:total><content type="html">Disclaimer: This post contains generalization based on my experience, it may or may not be applicable in every state of code-base resembling this situation.Most of you have probably been through this list of smells to refactoring. In Recent refactoring sessions I discovered a new (at least unusually new) way to identify "hot-spot" needing refactoring.This might be in turn related to some other &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=PUyp8nzl24k:Ad0uIBg35LA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=PUyp8nzl24k:Ad0uIBg35LA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=PUyp8nzl24k:Ad0uIBg35LA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=PUyp8nzl24k:Ad0uIBg35LA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=PUyp8nzl24k:Ad0uIBg35LA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=PUyp8nzl24k:Ad0uIBg35LA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/PUyp8nzl24k" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/03/unusual-tip-to-find-refactoring-hot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYESX48eyp7ImA9WxZXFks.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-6076460868105737645</id><published>2008-03-04T16:39:00.002-05:00</published><updated>2008-03-04T17:01:48.073-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-04T17:01:48.073-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>How to find which jar file contains your class at 'runtime'</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/6076460868105737645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=6076460868105737645" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/6076460868105737645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/6076460868105737645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/b4DKY7Hv9N0/how-to-find-which-jar-file-contains.html" title="How to find which jar file contains your class at 'runtime'" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>3</thr:total><content type="html">If you ever wanted to know which jar your class belongs, or wanted to access the meta-information from that jar file (such as certs from Manifest.mf etc.), here's how you can do it.    public URL getJarURL() {       URL clsUrl = getClass().getResource(getClass().getSimpleName() + ".class");       if (clsUrl != null) {           try {               URLConnection conn = clsUrl.openConnection();&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=b4DKY7Hv9N0:5Ywva9MfF0Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=b4DKY7Hv9N0:5Ywva9MfF0Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=b4DKY7Hv9N0:5Ywva9MfF0Y:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=b4DKY7Hv9N0:5Ywva9MfF0Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=b4DKY7Hv9N0:5Ywva9MfF0Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=b4DKY7Hv9N0:5Ywva9MfF0Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/b4DKY7Hv9N0" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/03/how-to-find-which-jar-file-contains.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cERXc7fCp7ImA9WxZQGUQ.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-8471535258310120167</id><published>2008-02-25T20:44:00.005-05:00</published><updated>2008-02-25T20:56:44.904-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-25T20:56:44.904-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tooling" /><category scheme="http://www.blogger.com/atom/ns#" term="Loud Thinking" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Six reasons why you should know internals of your IDE</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/8471535258310120167/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=8471535258310120167" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8471535258310120167?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8471535258310120167?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/0D8UgcACV1A/six-reasons-why-you-should-know.html" title="Six reasons why you should know internals of your IDE" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>0</thr:total><content type="html">May be this is overwhelmingly obvious to geeks, but I am going to describe it nonetheless. This might not significantly impress non-developers or the people and programmers (yes, they are different) who can't describe the word 'tooling'. A developer's productivity is highly dependent on the tools they use, whether it's a fancy big fat IDE platform or an editor as abstemious as VI.Apparently, the &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=0D8UgcACV1A:0Qv4eQc026w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=0D8UgcACV1A:0Qv4eQc026w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=0D8UgcACV1A:0Qv4eQc026w:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=0D8UgcACV1A:0Qv4eQc026w:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=0D8UgcACV1A:0Qv4eQc026w:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=0D8UgcACV1A:0Qv4eQc026w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/0D8UgcACV1A" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/02/six-reasons-why-you-should-know.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMDQX86fip7ImA9WxZRGEs.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-8202152181758801373</id><published>2008-02-12T18:39:00.000-05:00</published><updated>2008-02-12T19:44:30.116-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-12T19:44:30.116-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tooling" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>State of Eclipse based Python Development Tools</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/8202152181758801373/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=8202152181758801373" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8202152181758801373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/8202152181758801373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/GsufbzT2yVw/state-of-eclipse-based-python.html" title="State of Eclipse based Python Development Tools" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>2</thr:total><content type="html">For starters, Python Interpreter console isn't a bad place for trying hands on the language. But if you plan on building larger programs with it you will need a good development environment, There are plenty of integrated development environments for Python today. Most of them are freely available open source projects, some have specialized support for GUI building while some are general &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=GsufbzT2yVw:Nsy7cisWCTA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=GsufbzT2yVw:Nsy7cisWCTA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=GsufbzT2yVw:Nsy7cisWCTA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=GsufbzT2yVw:Nsy7cisWCTA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=GsufbzT2yVw:Nsy7cisWCTA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=GsufbzT2yVw:Nsy7cisWCTA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/GsufbzT2yVw" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/02/state-of-eclipse-based-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAGQHgyeyp7ImA9WxZRF0o.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-3634324662469349694</id><published>2008-02-11T09:01:00.000-05:00</published><updated>2008-02-11T19:38:41.693-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-11T19:38:41.693-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pragmatic" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Community" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Climbing the Python hill</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/3634324662469349694/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=3634324662469349694" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/3634324662469349694?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/3634324662469349694?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/tf9znnb4IWE/climbing-python-hill.html" title="Climbing the Python hill" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>1</thr:total><content type="html">Finally I have started working on new year's resolution. As a part of it, I'm learning a dynamic language called Python.There are several reasons why I'm a new Python convert. One of them is not because blogosphere keeps intimidating Java programmers that they are writing crap. And I've honest sympathy for those who hold the assumption that Java is dead and other strangling naive opinions like &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=tf9znnb4IWE:Er6AWb4Gl5A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=tf9znnb4IWE:Er6AWb4Gl5A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=tf9znnb4IWE:Er6AWb4Gl5A:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=tf9znnb4IWE:Er6AWb4Gl5A:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=tf9znnb4IWE:Er6AWb4Gl5A:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=tf9znnb4IWE:Er6AWb4Gl5A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/tf9znnb4IWE" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/02/climbing-python-hill.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcAR3w5cCp7ImA9WxZRE04.&quot;"><id>tag:blogger.com,1999:blog-11200164.post-1877592053724871231</id><published>2008-02-06T16:25:00.000-05:00</published><updated>2008-02-06T17:14:06.228-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-06T17:14:06.228-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ant" /><title>How to Auto Increment version (build id) with Ant</title><link rel="replies" type="application/atom+xml" href="http://blog.nirav.name/feeds/1877592053724871231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11200164&amp;postID=1877592053724871231" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/1877592053724871231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11200164/posts/default/1877592053724871231?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/nirav/~3/Z_Aof-0oyj0/how-to-auto-increament-version-build-id.html" title="How to Auto Increment version (build id) with Ant" /><author><name>Nirav Thaker</name><uri>http://www.blogger.com/profile/07204297663478577248</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13398947556794333606" /></author><thr:total>2</thr:total><content type="html">For those who are still stuck with manual ant builds, this tiny little tip will tell you how to auto increment the version number with each Ant build. Follow the steps:1. Create a file say build.number  (or change the name to one which gives you pride)2. Add the following target to your build.xml file, change entry key to whatever you want the property name to be:&amp;lt;target name="&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Z_Aof-0oyj0:8SKo6nfF1Fo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Z_Aof-0oyj0:8SKo6nfF1Fo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Z_Aof-0oyj0:8SKo6nfF1Fo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Z_Aof-0oyj0:8SKo6nfF1Fo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?i=Z_Aof-0oyj0:8SKo6nfF1Fo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/nirav?a=Z_Aof-0oyj0:8SKo6nfF1Fo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/nirav?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/nirav/~4/Z_Aof-0oyj0" height="1" width="1"/&gt;</content><feedburner:origLink>http://blog.nirav.name/2008/02/how-to-auto-increament-version-build-id.html</feedburner:origLink></entry></feed>
