<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hrishikesh Barua &#124; code@deepinspace</title>
	<atom:link href="http://code.deepinspace.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://code.deepinspace.net</link>
	<description></description>
	<lastBuildDate>Mon, 24 May 2010 06:50:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Instance Initializers in Java</title>
		<link>http://code.deepinspace.net/2010/05/22/instance-initializers-in-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=instance-initializers-in-java</link>
		<comments>http://code.deepinspace.net/2010/05/22/instance-initializers-in-java/#comments</comments>
		<pubDate>Sat, 22 May 2010 16:27:11 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=101</guid>
		<description><![CDATA[Take a look at this simple code Code Snippet 1 public class Init { { System.out.println(&#34;In the beginning was the command line&#34;); } public Init() { System.out.println(&#38;quot;Created an instance&#38;quot;); } public static void main(String[] args) { Init init = new Init(); } } What do you think the output is? It&#8217;s this - In the [...]]]></description>
			<content:encoded><![CDATA[<p>Take a look at this simple code</p>
<p><span style="color: #0000ff;">Code Snippet 1</span></p>
<pre class="brush: java;">
public class Init {
    {
        System.out.println(&quot;In the beginning was the command line&quot;);
    }

    public Init()
    {
        System.out.println(&amp;quot;Created an instance&amp;quot;);
    }

    public static void main(String[] args)
    {
        Init init = new Init();
    }
}
</pre>
<p>What do you think the output is? It&#8217;s this -</p>
<pre>    In the beginning was the command line
    Created an instance
</pre>
<p>The &#8216;hanging&#8217; braces at the start of the class definition are instance initializers. Most of us are more familiar with static initializers -</p>
<p><span style="color: #0000ff;">Code Snippet 2</span></p>
<pre class="brush: java;">
static
{
    //Do stuff
}
</pre>
<p>Instance initializers (II) are not seen often in everyday Java code &#8211; so they might seem odd at first. They are executed every time an instance of that class is created, before the statements in the constructor are executed. (See <em>The Java Language Specification 3 </em>section 8.6).</p>
<p>One use of IIs can be to execute something whenever an instance is created, and the class has multiple constructors, without calling it in every single constructor.<br />
Another one which has become popular is populating collections during declaration, in the style of Ruby or Python single-line initializers -</p>
<p><span style="color: #0000ff;">Code Snippet 3</span></p>
<pre class="brush: java;">
private Set&lt;String&gt; names = new HashSet&lt;String&gt;() {
    {
        add(&quot;Rigel&quot;);
        add(&quot;Vega&quot;);
        add(&quot;Antares&quot;);
    }
};
</pre>
<p>This idiom was how I encountered IIs first while reading somebody&#8217;s blog.<br />
What is actually happening here?</p>
<ol>
<li>An anonymous inner class is created.</li>
<li>An instance initializer block is added to the anon inner class.</li>
<li>Objects are added to the instance of that class when the names variable is initialized.</li>
</ol>
<p>Now take this scenario<br />
<span style="color: #0000ff;">Code Snippet 4</span></p>
<pre class="brush: java;">
public class WrongUsage {

    private Set&lt;String&gt; names;

    {
        add(&quot;pleiades&quot;);
    }

    public void WrongUsage()
    {
        names = new HashSet&lt;String&gt;();
    }

    public void add(String name)
    {
        names.add(name);
    }
}
</pre>
<p>Based on what we have seen above, the names set is used before it&#8217;s initialized. So this throws a NullPointerException.<br />
Let&#8217;s take another case &#8211; similar to the above but involving inheritance.</p>
<p><span style="color: #0000ff;">Code Snippet 5</span></p>
<pre class="brush: java;">
public class MyHashSet extends HashSet {
    {
        add(&quot;pleiades&quot;);
        System.out.println(&quot;Added&quot;);
    }

    public MyHashSet()
    {
        super();
        System.out.println(&quot;After calling super&quot;);
    }

    public static void main(String[] args)
    {
        Set set = new MyHashSet();
    }
}
</pre>
<p>This runs, with the output being</p>
<pre>    Added
    After calling super
</pre>
<p>In this case, add() internally uses the inner HashMap inside HashSet which is initialized in the HashSet constructor. This implies that the instance initializer is invoked before the class constructor, but after the superclass constructor (The super call is redundant here. It will be called anyway).</p>
<p>So the sequence is</p>
<ol>
<li> Superclass initialization (this includes superclass instance initializers and constructor)</li>
<li> Current class&#8217;s Instance initializers</li>
<li> Current class&#8217;s Constructor</li>
</ol>
<p>This is why the code in Code Snippet 3 does not throw an NPE &#8211; because it&#8217;s a case of inheritance (the anon inner class is a subclass of HashSet)</p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2010%2F05%2F22%2Finstance-initializers-in-java%2F', 'Instance+Initializers+in+Java')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2010%2F05%2F22%2Finstance-initializers-in-java%2F', title: 'Instance+Initializers+in+Java' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2010/05/22/instance-initializers-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Not to do Customer Service</title>
		<link>http://code.deepinspace.net/2010/04/19/how-not-to-do-customer-service/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-not-to-do-customer-service</link>
		<comments>http://code.deepinspace.net/2010/04/19/how-not-to-do-customer-service/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 10:50:24 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[customers]]></category>
		<category><![CDATA[India]]></category>
		<category><![CDATA[online bookstores]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=89</guid>
		<description><![CDATA[Anybody doing online business knows the importance of retaining and keeping their customers happy. How you do that depends on your specific business &#8211; but the starting point is always the same &#8211; Respond! Respond &#8211; on time, with a clear actionable, and follow up. This post is about how not to do customer service [...]]]></description>
			<content:encoded><![CDATA[<p>Anybody doing online business knows the importance of retaining and keeping their customers happy. How you do that depends on your specific business &#8211; but the starting point is always the same &#8211; Respond!</p>
<blockquote><p>Respond &#8211; on time, with a clear actionable, and follow up.</p></blockquote>
<p>This post is about how not to do customer service &#8211; and I am going to take a recent bad experience with one of India&#8217;s top online stores &#8211; <a href="http://www.indiaplaza.in">http://www.indiaplaza.in</a>. They sell books, among a lot of other things, and I have been buying from them since 2007.</p>
<p>I had ordered 4 books from them last month. 3 of them were shipped on time. When there was no news of the 4th one, I checked the Pending Orders page. It was not updated and stated that the book will be shipped by x &#8211; a date 4 days in the past. &#8220;Ok&#8221;, I thought, &#8220;let&#8217;s contact them&#8221;.</p>
<p>I sent off a mail to their customer service ID &#8211; which I had been using earlier. An autoreply came back saying that they do not respond to queries anymore from that ID, and I have to fill out a form on their site. That would raise a support ticket.</p>
<p>Which I did. And the form&#8217;s response promised that I would get a response within 24 hours.<br />
Which did not happen. And their phone number is hidden in a small Contact Us link &#8211; I did not find it.<br />
So I raised another ticket after waiting for a day. </p>
<p>Nothing happened.</p>
<p>At this point <em>I had no visible working way of contacting them</em> (apart from the phone number which I could not find. I attribute this to the fact that the most prominent &#8220;Help&#8221; link on their site is &#8220;Customer Support&#8221; &#8211; which points to the form mentioned above. That is what most people would click on).</p>
<p>So I went and posted my case on www.consumercourt.in &#8211; a site where consumers can go and post their grievances. Apparently that worked &#8211; for within 4 hours I got a call from Indiaplaza about the non-availability of the book. There was no apology, though. They promised to deliver it after 7 days. Now, this was extremely surprising. It indicated that their support team checks online complaint sites for issues with Indiaplaza, but do not check their own support system!</p>
<p>Anyways, nothing happened after 7 days &#8211; so I went through the same ticketing system again. This time there was a delayed response (thank goodness!) stating that the book was not available. &#8220;Fine&#8221;, I said, &#8220;Just refund my money&#8221;. They agreed to do it within 5 days.</p>
<p>Nothing happened (Do you see a pattern here?) . So I raised another ticket&#8230;and so on.</p>
<h3><strong>Four things they could have done better</strong></h3>
<ol>
<li>The deployment of a well thought out customer support system, which is convenient to use and not just built out of considerations like it&#8217;s easy to use for their support group or helps in cost cutting.</li>
<li>Responding to my query on their ticketing system within the promised time.</li>
<li>After not doing (2), followed by the incidents mentioned above, they could have taken extra care about this case. Once you piss off a customer, you have to do extra work to get him where he was before, and still more work to make him happy.</li>
<li>Build a better online buying system where the status of the order is updated automatically.</li>
</ol>
<p>The feeling that I have as a customer that I am being ignored, and especially after I have been billed, with prior experience not helping me to restore trust, is a damning indicator of what Indiaplaza lacks. They have just lost an old customer, and with the power of word of mouth these days, a lot of potential future customers as well.</p>
<p>Update: After raising another ticket, I finally got my refund. But I am not going back there <img src='http://code.deepinspace.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2010%2F04%2F19%2Fhow-not-to-do-customer-service%2F', 'How+Not+to+do+Customer+Service')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2010%2F04%2F19%2Fhow-not-to-do-customer-service%2F', title: 'How+Not+to+do+Customer+Service' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2010/04/19/how-not-to-do-customer-service/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Dreaming in Code</title>
		<link>http://code.deepinspace.net/2010/02/28/dreaming-in-code/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dreaming-in-code</link>
		<comments>http://code.deepinspace.net/2010/02/28/dreaming-in-code/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 13:06:46 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[chandler]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=78</guid>
		<description><![CDATA[I finished reading Dreaming in Code last week. It&#8217;s Scott Rosenberg&#8217;s account of a software development team&#8217;s effort to build the ultimate Personal Information Manager (PIM). Led and funded by Mitch Kapor of Lotus 1-2-3 fame, the team goes through endless cycles of redesigns, people issues and other upheavals. Rosenberg follows the team very closely, [...]]]></description>
			<content:encoded><![CDATA[<p>I finished reading <a title="http://www.dreamingincode.com/" href="http://www.dreamingincode.com/" target="_blank">Dreaming in Code</a> last week. It&#8217;s Scott Rosenberg&#8217;s account of a software development team&#8217;s effort to build the ultimate Personal Information Manager (PIM). Led and funded by Mitch Kapor of Lotus 1-2-3 fame, the team goes through endless cycles of redesigns, people issues and other upheavals.</p>
<p>Rosenberg follows the team very closely, participating in their meetings, interviewing them and filling the narrative with his own insights.</p>
<p>If a developer were to read this book, s/he would recognize the events in it this as standard stuff when developing a product, and s/he would also identify with the team itself, with the occasional shaking of the head <img src='http://code.deepinspace.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The software they set out to develop was based on Kapor&#8217;s vision of Kapor&#8217;s of a game-changing PIM. They called it <a title="http://chandlerproject.org/" href="http://chandlerproject.org/" target="_blank">Chandler</a>, after one of Kapor&#8217;s loved crossbred dogs.</p>
<p><a href="http://www.chandlerproject.org/" target="_blank"><img class="alignright" title="Chandler Logo" src="http://chandlerproject.org/pub/Main/OsafSkin/chandler-project-logo-wiki.png" alt="" width="192" height="39" /></a></p>
<p>This was the pre-Web 2.0 era, where most things, including product releases took longer to happen. The browser had not yet become the first medium for delivering any consumer facing application. Desktop applications for collaboration still looked as if they had potential.</p>
<p>Chandler&#8217;s ultimate aim was to be a all-in-one tool where users could access their email, personal notes, calendar events and to do lists through one interface. Kapor visualized all these different data collections as isolated information silos. Chandler would break open and combine them. It would let you view and move around all these disparate things in a unified manner. You could tag a note with labels, and then put a date on it and make it a calendar event, or send it off as an email. Grand vision? Yes. It&#8217;s something I would personally prefer to have around to manage things.</p>
<p>Due to numerous reasons, Chandler was late in delivering its promise. Gmail came in 2004, and opened the floodgates of what was possible using new Web technologies. Firefox arrived, and forced Microsoft to relook at IE (and make it better). Chandler was yet to release its 1.0 version. The browser was fast overtaking the desktop.</p>
<p>We have been spoilt by the seamless interconnectivity provided by the Internet &#8211; it&#8217;s always there &#8211; home or office or a mountaintop &#8211; and with it, our data. Chandler did attempt a Web interface where you could access your data (which would be synced between your desktop and a central server), but it was too late.</p>
<p>The Chandler project is still on with many faithful developers. I tried out the latest version after finishing the book. My impressions? It still has a long way to go, going by the number of bugs I encountered, and assuming it can convince the Web 2.0 crowd to switch to a desktop application by the sheer force of its design and the things it is supposed to do.</p>
<p>The most interesting chapter in the book is &#8220;Methods&#8221; &#8211; where Rosenberg does a brief and very readable survey of the evolution of development methods over the years. This chapter can be read standalone even if you don&#8217;t read the whole book.</p>
<address>Note: The Chandler logo image linked to here is used under a <a title="http://creativecommons.org/licenses/by/3.0/" href="http://creativecommons.org/licenses/by/3.0/" target="_blank">Creative Commons Attribution License 3.0</a>.</address>
<address> </address></p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2010%2F02%2F28%2Fdreaming-in-code%2F', 'Dreaming+in+Code')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2010%2F02%2F28%2Fdreaming-in-code%2F', title: 'Dreaming+in+Code' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2010/02/28/dreaming-in-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Ruby script to search bookstores online</title>
		<link>http://code.deepinspace.net/2009/12/26/a-ruby-script-to-search-bookstores-online/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=a-ruby-script-to-search-bookstores-online</link>
		<comments>http://code.deepinspace.net/2009/12/26/a-ruby-script-to-search-bookstores-online/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 12:11:09 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=72</guid>
		<description><![CDATA[I started dabbling in Ruby some weeks back. The initial interest was sparked after reading &#8220;Treating Code as an Essay&#8221; (Yukihiro Matsumoto) &#8211; one of the chapters in Beautiful Code. So I started doing these bootstrapping exercises in Ruby. Some of the exercises are good &#8211; but nothing beats doing a small project to learn [...]]]></description>
			<content:encoded><![CDATA[<p>I started dabbling in Ruby some weeks back. The initial interest was sparked after reading &#8220;Treating Code as an Essay&#8221; (Yukihiro Matsumoto) &#8211; one of the chapters in <a title="Beautiful Code" href="http://www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047" target="_blank">Beautiful Code</a>. So I started doing these <a id="tgx1" title="www.knowing.net" href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-1/" target="_blank">bootstrapping</a> exercises in Ruby. Some of the exercises are good &#8211; but nothing beats doing a small project to learn a new language.</p>
<p>I buy a lot of books, mostly online. There are a few good online bookstores in India, notably Flipkart.com, Infibeam.com and Indiaplaza.in (Sadly, Amazon does not have full-fledged shipping to India yet). The way I usually search for a book in online bookstores is (was, till now)</p>
<ol>
<li>Go to books.google.com and enter the book title</li>
<li>Click on the best match</li>
<li>Click on &#8216;All Sellers&#8217; on the left of the page</li>
<li>The Indian bookstores are usually listed towards the bottom. It does not include all stores, and sometimes the prices are not listed. I have to go to each individual site and check them out.</li>
</ol>
<p>I wanted to collapse these steps into one &#8211; a simple script that would accept the name of the book and show results from all these bookstores, with comparative pricing. And the result was this</p>
<p><a id="cb6." title="http://github.com/talonx/book-search" href="http://github.com/talonx/book-search" target="_blank">http://github.com/talonx/book-search</a></p>
<p>It&#8217;s in Ruby, runs from the command line and writes the output to an HTML in the same directory called &#8216;search.html&#8217;. Much needs to be done, like</p>
<ul>
<li>Price based listing with the lowest on top</li>
<li>A web interface for the search</li>
<li>Add more bookstores &#8211; it&#8217;s only Flipkart.com, Infibeam.com, Indiaplaza and Bookadda.com right now.</li>
</ul>
<p>To run the script, type this (you need Ruby 1.8.x, available from <a title="http://www.ruby-lang.org/en/downloads/" href="http://www.ruby-lang.org/en/downloads/" target="_blank">http://www.ruby-lang.org/en/downloads/</a> and the Hpricot HTML parser library, available from <a title="http://github.com/whymirror/hpricot" href="http://github.com/whymirror/hpricot" target="_blank">http://github.com/whymirror/hpricot</a>)</p>
<blockquote><p>ruby lib\book-search.rb &#8220;&lt;book title (in quotes if it has spaces)&gt;&#8221;</p></blockquote>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F12%2F26%2Fa-ruby-script-to-search-bookstores-online%2F', 'A+Ruby+script+to+search+bookstores+online')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F12%2F26%2Fa-ruby-script-to-search-bookstores-online%2F', title: 'A+Ruby+script+to+search+bookstores+online' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/12/26/a-ruby-script-to-search-bookstores-online/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Do that side project</title>
		<link>http://code.deepinspace.net/2009/12/12/do-that-side-project/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=do-that-side-project</link>
		<comments>http://code.deepinspace.net/2009/12/12/do-that-side-project/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 09:09:19 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[grok]]></category>
		<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=62</guid>
		<description><![CDATA[Do that side project. How many times have you told yourself I&#8217;ll start that open source project I&#8217;ve been thinking of I&#8217;ll write that utility which will make my job easier I&#8217;ll enroll for that course on Artificial Intelligence and write that amazing recommendation system and then did nothing? Well, guess what. Time passes. Yes, [...]]]></description>
			<content:encoded><![CDATA[<p>Do that side project.</p>
<p>How many times have you told yourself</p>
<ul>
<li> I&#8217;ll start that open source project I&#8217;ve been thinking of</li>
<li>I&#8217;ll write that utility which will make my job easier</li>
<li>I&#8217;ll enroll for that course on Artificial Intelligence and write that amazing recommendation system</li>
</ul>
<p>and then did nothing?</p>
<p>Well, guess what. Time passes. Yes, really.</p>
<p>Anne Dillard said</p>
<blockquote>
<p style="text-align: center;">&#8220;How we spend our days is, of course, how we spend our lives.&#8221;</p>
</blockquote>
<p>Think about that for a moment.</p>
<p>Don&#8217;t waste time on thinking about when to think about planning to think about thinking about when to start thinking about doing it. Do it now.</p>
<p>Here are some more resources on the subject -</p>
<ol>
<li>Shut up and Hack &#8211; <a title="http://www.slideshare.net/bluesmoon/shut-up-and-hack" href="http://www.slideshare.net/bluesmoon/shut-up-and-hack" target="_blank">http://www.slideshare.net/bluesmoon/shut-up-and-hack</a></li>
<li>Do it Now &#8211; <a title="http://www.stevepavlina.com/articles/do-it-now.htm" href="http://www.stevepavlina.com/articles/do-it-now.htm" target="_blank">http://www.stevepavlina.com/articles/do-it-now.htm</a></li>
<li>Do it Fucking now &#8211; <a title="http://seoblackhat.com/2007/01/29/do-it-fucking-now/" href="http://seoblackhat.com/2007/01/29/do-it-fucking-now/" target="_blank">http://seoblackhat.com/2007/01/29/do-it-fucking-now/</a></li>
<li>Chris Wanstrath&#8217;s keynote &#8211; <a title="http://gist.github.com/6443" href="http://gist.github.com/6443" target="_blank">http://gist.github.com/6443</a></li>
</ol>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F12%2F12%2Fdo-that-side-project%2F', 'Do+that+side+project')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F12%2F12%2Fdo-that-side-project%2F', title: 'Do+that+side+project' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/12/12/do-that-side-project/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Adding MySQL server instances using mysqlmanager</title>
		<link>http://code.deepinspace.net/2009/12/06/adding-mysql-server-instances-to-a-mysql-installation-using-mysqlmanager/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adding-mysql-server-instances-to-a-mysql-installation-using-mysqlmanager</link>
		<comments>http://code.deepinspace.net/2009/12/06/adding-mysql-server-instances-to-a-mysql-installation-using-mysqlmanager/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 14:26:33 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[mysqlmanager]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=50</guid>
		<description><![CDATA[The MySQL instance manager &#8211; mysqlmanager &#8211; provides a way to manage multiple MySQL server instances on the same installation. All these instances use a common my.cnf file &#8211; but each can be configured individually (using the same file). mysqlmanager itself provides a command line interface to control the individual instances. Part of a sample [...]]]></description>
			<content:encoded><![CDATA[<p>The MySQL instance manager &#8211; <a href="http://dev.mysql.com/doc/refman/5.1/en/instance-manager.html" target="_blank">mysqlmanager</a> &#8211; provides a way to manage multiple MySQL server instances on the same installation. All these instances use a common my.cnf file &#8211; but each can be configured individually (using the same file). mysqlmanager itself provides a command line interface to control the individual instances.</p>
<p>Part of a sample mysql.cnf with multiple mysql instances</p>
<p><code>[mysqld1]<br />
user    = mysql<br />
datadir = /data/mysql-1<br />
socket  = /tmp/mysql-1.sock<br />
port    = 3306<br />
</code><br />
<code>[mysqld2]<br />
user    = mysql<br />
datadir = /data/mysql-2<br />
socket  = /tmp/mysql-2.sock<br />
port    = 3307<br />
</code><br />
The ability to setup multiple database servers fast is particularly useful in development boxes where fresh DBs need to be created often. In my team, we often need to do this. Every time a new DB has to be setup, we have to go through the steps of creating a datadir, installing the system tables, adding a root password, adding the entries to the my.cnf file and starting the instance using the mysqlmanager shell.</p>
<p>So I whipped up a small Linux shell script which automates this process.</p>
<p><a href="http://code.deepinspace.net/p/add-mysql-instance.sh" target="_blank">Here it is</a>.</p>
<p>It&#8217;s still in a quite primitive state &#8211; but it works!</p>
<p>Usage is simple -<br />
<code>add-mysql-instance.sh mysql config-file-location datadir groupname username password instance port instance-name mysqlmanager-user mysqlmanager-password mysqlmanager-socket-file<br />
</code><br />
Of course, mysqlmanager has to be running for this to work.</p>
<p>I&#8217;ll be adding improvements to this script &#8211; like the ability to generate a mysql instance name based on existing instances (instance names are usually mysqld1, mysqld2 etc), picking up the user name from the file itself etc.</p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F12%2F06%2Fadding-mysql-server-instances-to-a-mysql-installation-using-mysqlmanager%2F', 'Adding+MySQL+server+instances+using+mysqlmanager')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F12%2F06%2Fadding-mysql-server-instances-to-a-mysql-installation-using-mysqlmanager%2F', title: 'Adding+MySQL+server+instances+using+mysqlmanager' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/12/06/adding-mysql-server-instances-to-a-mysql-installation-using-mysqlmanager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>India Needs an AntiSpam Law</title>
		<link>http://code.deepinspace.net/2009/09/10/india-needs-an-antispam-law/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=india-needs-an-antispam-law</link>
		<comments>http://code.deepinspace.net/2009/09/10/india-needs-an-antispam-law/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 14:57:20 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[grok]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[India]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=45</guid>
		<description><![CDATA[The Problem I dread it whenever I have to enter my email address at an Indian ecommerce site. It&#8217;s mandatory if I am buying something, and I do it reluctantly. After the product is bought, I go to the My Account link if there is one on the site and unsubscribe from all marketing notifications [...]]]></description>
			<content:encoded><![CDATA[<p><strong>The Problem</strong><br />
I dread it whenever I have to enter my email address at an Indian ecommerce site. It&#8217;s mandatory if I am buying something, and I do it reluctantly. After the product is bought, I go to the My Account link if there is one on the site and unsubscribe from all marketing notifications (because most of the times they do not bother to tell you at the time of registering or entering your email address that you have been autosubscribed to such mails).<br />
Note that I do not mind receiving notifications from system administrators and mails related to the delivery of the product I bought. But I do not want to keep on receiving general mails about things I am not interested in.</p>
<p>The inevitable happens after a couple of weeks. I get emails from the site offering me discounts on new products, new deals; in short, commercial email. Unsolicited – because I did not opt in. And in some cases I opted out explicitly. In other words, Spam. Some of these mails have an Unsubscribe link at the bottom. After you have apparently &#8216;Unsubscribed&#8217; using the said link, one of the following things happen -</p>
<p>1. <em>Similar mails keep coming, with the same Unsubscribe link</em>. Most of these links are just mailto: links as opposed to an http: link. An http: link usually means it’s a mailing list manager software, which actually works. But a mailto: link more often than not means that somebody has to manually do the removal. Which does not happen.</p>
<p>2. <em>The Unsubscribe mail bounces</em>. Either because the Unsubscribe mailbox does not exist (Surprise!) or it has exceeded its quota because people keep on Unsubscribing and nobody reads or deletes them (Surprise!)</p>
<p>Here are some sites that do not have a working Unsubscribe link in their emails. All my efforts to Unsubscribe from their unwanted mails have failed. Most of these are commercial sites I use regularly.</p>
<p><a href="http://www.sulekha.com" target="_blank">http://www.sulekha.com</a><br />
<a href="http://www.pvrcinemas.com" target="_blank"> http://www.pvrcinemas.com</a><br />
<a href="http://www.citibank.co.in" target="_blank"> http://www.citibank.co.in</a> (These guys take the cake as far as repeated requests to remove my address and repeated responses that they have done so and the and sorry-sir-it-won&#8217;t-happen-again routine are concerned)<br />
<a href="http://www.siliconindia.com" target="_blank"> http://www.siliconindia.com</a><br />
<a href="http://www.indiaplaza.in" target="_blank"> http://www.indiaplaza.in</a><br />
<a href="http://www.bookmyshow.com" target="_blank"> http://www.bookmyshow.com</a></p>
<p>At this point I would distinguish between two kinds of spamming -</p>
<p><strong>1.</strong> The kind I describe above. You cannot mark them as spam since you might be getting legitimate mails from the same address in future (like when you buy another product and there is a confirmation) and cannot afford to miss them.<br />
<strong> </strong></p>
<p><strong>2.</strong> The &#8216;normal&#8217; spam that you get everyday in your junk mail folder. All mail providers detect and mark them as spam automatically. These are sent by people whose only job is to spam others, usually sitting in a country whose laws are lenient enough to allow it.<br />
To start with, ecommerce sites need to understand that giving my email address for a necessary purpose does not imply that it entitles them send any email to that address.</p>
<p><strong>My email address has a privacy status similar to my telephone number.</strong></p>
<p>It’s like calling up someone every week with irrelevant news just because you happen to have their phone number. (On a related note, the Indian NDNC – National Do Not Call Registry – is a step in the right direction as far as controlling whom telemarketeers in India can call is concerned).</p>
<p>How do other countries deal with this?</p>
<p>Almost all progressive countries have laws and directives dealing with this explicitly.</p>
<p>EU : <a href="http://en.wikipedia.org/wiki/Directive_on_Privacy_and_Electronic_Communications" target="_blank">http://en.wikipedia.org/wiki/Directive_on_Privacy_and_Electronic_Communications</a><br />
Aus : <a href="http://www.dbcde.gov.au/online_safety_and_security/spam" target="_blank">http://www.dbcde.gov.au/online_safety_and_security/spam</a><br />
NZ : <a href="http://www.dia.govt.nz/DIAwebsite.nsf/wpg_URL/Services-Anti-Spam-Index" target="_blank">http://www.dia.govt.nz/DIAwebsite.nsf/wpg_URL/Services-Anti-Spam-Index</a><br />
US : <a href="http://en.wikipedia.org/wiki/CAN-SPAM_Act_of_2003" target="_blank">http://en.wikipedia.org/wiki/CAN-SPAM_Act_of_2003</a></p>
<p>Here is a more comprehensive list maintained by SpamLinks.<br />
<a href="http://spamlinks.net/legal-laws.htm#country" target="_blank"> http://spamlinks.net/legal-laws.htm#country</a></p>
<p><strong>More…</strong></p>
<p>Then there are the ISPs (Internet Service Providers).</p>
<p>I have a Tata Indicom broadband connection. From time to time, these guys feel I need to know about their latest antivirus offerings, or some cool deal they have for the festive season. These mails don&#8217;t even have an Unsubscribe option. When I call them up and ask to be removed from receiving these mails, the customer service people are initially clueless, and on further pressing inform me that these mails are to keep me informed. Er, what? And what if I don’t want to receive them? They say they cannot remove my email.</p>
<p>India needs an enforceable AntiSpam law, and now.</p>
<p><strong>The Indian IT Act of 2000 and its 2008 Amendment:</strong></p>
<p><em>Disclaimer: I am not a lawyer nor do I claim to understand law well. The views below are based on a reading and an attempt to understand publicly available documents.</em></p>
<p>The only section in the Indian IT Act – the only law in the country that deals with cyber offences – that I could find dealing with unwanted email is Section 66(A).</p>
<pre>        any electronic mail or electronic mail message for the purpose of causing
        annoyance or inconvenience or to deceive or to mislead the addressee or recipient
        about the origin of such messages</pre>
<p>Section 66(A) does not even begin to address the spam problems I describe above.</p>
<p>Either the existing law needs to include sections for dealing more specifically with spam or we need a standalone set of laws for making this kind of unsolicited email criminally prosecutable.</p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F09%2F10%2Findia-needs-an-antispam-law%2F', 'India+Needs+an+AntiSpam+Law')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F09%2F10%2Findia-needs-an-antispam-law%2F', title: 'India+Needs+an+AntiSpam+Law' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/09/10/india-needs-an-antispam-law/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wondering about the state of Java Developers</title>
		<link>http://code.deepinspace.net/2009/08/29/wondering-about-the-state-of-java-developers/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=wondering-about-the-state-of-java-developers</link>
		<comments>http://code.deepinspace.net/2009/08/29/wondering-about-the-state-of-java-developers/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 17:41:15 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[interview]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=38</guid>
		<description><![CDATA[A friend of mine forwarded this article by Yakov Fain on sys-con.com - http://in.sys-con.com/node/1040135 The essence of the article is this The author interviewed a lot of people for developer positions, and most of them who call themselves Java developers and cite extensive experience in J2EE lack basic knowledge of core Java. This might sound [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine forwarded this article by Yakov Fain on sys-con.com -</p>
<p><a title="http://in.sys-con.com/node/1040135" href="http://in.sys-con.com/node/1040135" target="_blank">http://in.sys-con.com/node/1040135</a></p>
<p>The essence of the article is this</p>
<p><em>The author interviewed a lot of people for developer positions, and most of them who call themselves Java developers and cite extensive experience in J2EE lack basic knowledge of core Java</em>.</p>
<p>This might sound suspiciously like a gross generalization, but I believe that&#8217;s not the case. I had a similar experience when I interviewed people for developer positions on my team last month. The position called for both Java and Javascript experience. These are the things I encountered -</p>
<ul>
<li>Most people who have worked solely on services (read outsourced) projects list all J* technologies on their resume, but know very little in depth of Java programming.</li>
<li>There are people who lack any kind of programmer mentality or skills at all and put their current role as something like Programmer Analyst, and this fact cannot be ascertained from their resume alone. They often try to highlight other (non-software development) achievements.</li>
<li>SCJP certification is no guarantee that a person can code in Java (Surprise? Not at all)</li>
<li>There are people who have 3.5 years of experience, with multiple services projects under their belts, and familiarity with a host of technologies, who cannot write a Java class which will print out the prime numbers between 0 and 100.</li>
<li>Most core CS concepts are forgotten after 2-3 years of working in services projects.</li>
</ul>
<p>Please note that I am not generalizing, but these facts do indicate a problem somewhere. These developers actually a represent a very small distinct sample of the worldwide developer community, since all my interviews were done in India (both face to face in my Hyderabad office and over the phone).</p>
<p>Another interesting point I noted was that most non-Javascript developers think that Javascript is used only for form validation. Such usage also qualifies as &#8216;extensive Javascript knowledge&#8217; in their resumes. <br/><br />
What should I conclude from this? Is this malaise widespread in other parts of the world as well? Is it specific to developers in India working on outsourced projects? (No, as the link by Yakov Fain shows) Is it a result of outsourcing, leading to a lack of innovation? Or is the innovation there, but the signal to noise ratio too low?<br/><br/></p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F08%2F29%2Fwondering-about-the-state-of-java-developers%2F', 'Wondering+about+the+state+of+Java+Developers')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F08%2F29%2Fwondering-about-the-state-of-java-developers%2F', title: 'Wondering+about+the+state+of+Java+Developers' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/08/29/wondering-about-the-state-of-java-developers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Consistency in Development</title>
		<link>http://code.deepinspace.net/2009/07/11/consistency-in-development/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=consistency-in-development</link>
		<comments>http://code.deepinspace.net/2009/07/11/consistency-in-development/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 16:12:03 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[consistency]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=23</guid>
		<description><![CDATA[Consistency in Development? Simply put, it means following a set of basic guidelines in all development activities, from coding to deployment. This does not imply having rigid protocols and processes, because immutable rules don&#8217;t help development but obstruct it. What it does imply is having simple, tried and tested conventions and some formal processes that [...]]]></description>
			<content:encoded><![CDATA[<p>Consistency in Development?</p>
<p>Simply put, it means <strong><em>following a set of basic guidelines in all development activities, from coding to deployment</em></strong>. This does not imply having rigid protocols and processes, because immutable rules don&#8217;t help development but obstruct it. What it does imply is having simple, tried and tested conventions and some formal processes that people are comfortable with &#8211; &#8216;Whatever works best for the team&#8217;. The key to getting the most out of consistency is to arrive at these rules by consensus and making sure everyone follows them.</p>
<p>It has to start at the very bottom.</p>
<p><strong>Coding Standards</strong><br />
I cannot stress this enough. While there is no such thing as a perfect code convention, there should definitely be an agreed upon convention for a team &#8211; where everyone follows the coding standards agreed upon. This is true for any language. Imagine the plight of a developer who has to work on code originally written by someone else, and it takes him hours to figure out what the code does because the coding style followed by the original author is completely different. Junior developers often don&#8217;t get this. The standards can be chosen democratically by involving every member of the team, freezing the conventions and applying it to everyone&#8217;s IDE (Most IDEs support code style import/export). Ideally I would trust the developers to follow this, but it can also be enforced at the source control level where style checks can fail a checkin in case somebody messes up. <strong><em>Speak the same dialect so that others understand you and vice versa</em></strong>. Maintenance becomes much easier.</p>
<p><strong>Architecture<br />
</strong>Don&#8217;t run and start to hack away the moment you get the requirements. Stop for a moment &#8211; think awhile. Put your thoughts on the whiteboard and discuss with your peers. Run through your design with somebody who knows the big picture. Come up with atleast two or three different solutions to the problem &#8211; that way you would know that you have looked at it from various angles and chosen the right one.</p>
<p><strong>Application Structure<br />
</strong>You might have multiple web applications in your project, differing in configuration files, HTMLs, images, css, libraries, server side scripts etc. Storing them in a consistent manner across applications helps keep them organized and makes it easier for developers to find things, especially new ones. You will not be surprised by the completely different disk layout of an application if it follows the same directory structure as all the others. Deep down it also appeals to the organized mindset that most good developers have.</p>
<p><strong>Issue Tracking</strong><br />
<span style="font-weight: normal;">New bugs/features come up every day. Small teams can probably manage these for sometime with sticky notes and paper and pen. Some developers have their own ways of keeping track of their ToDo lists &#8211; but without a unified interface, you are not going to scale. You will have chaos &#8211; files missed in checkins, people clueless about who is looking into a particular issue, wondering about the status of a critical bug. When your team grows large, you need some kind of tracking system to track milestones and open issues, tasks to do, assign issues to developers and prioritize them. There are lots of good bug tracking systems out there &#8211; get one which works best for you. </span><em><strong>Track issues in the same way across people</strong></em></p>
<p><strong>Deployment<br />
<span style="font-weight: normal;">Web applications will need to scale somewhere in their lifetimes, especially if they are successful. Think about your initial deployment environment &#8211; one webserver and one database server (on the same machine). As time goes by and your app becomes popular, you add servers. And features. New features translate to new application modules and new databases. The simple script you used to upload and deploy your small app is useless now.</span></strong></p>
<p>At this point, scaling has multiple meanings</p>
<pre>    <em>    The ability to handle increasing load and maintain baselevel performance, and

        The ability to push code into deployment quickly.</em></pre>
<p>Both of these are affected by having (or not having) a consistent model.</p>
<p>The first point is <em><strong>actual application scaling</strong></em> &#8211; the complexity of your infrastructural setup is going to increase hugely as it grows. The second point has to do with <em><strong>how your team scales to increasing demands</strong></em>.</p>
<p>They are related. Critical fixes and features might need to be pushed immediately. These demands would reach proportions where you cannot afford to spend time figuring out why Server No 6 in your cluster does not have the latest changes. Automation is the key here. Automation demands formal well defined processes (for making builds, uploading to production servers etc).         Formal deployment processes imply consistency. They do not mean a bureaucracy – just well followed and automated rules about how to deploy a change into production. As your app and infrastructure grows, it becomes more and more important to be able to rollback changes if necessary. This is possible only if you have well defined deployment paths and scripts.</p>
<p>Automate wherever possible. Minimize the number of things you have to keep in your head. And in the process, lower your stress levels!</p>
<p><em><strong>Note</strong>: These thoughts are not entirely mine &#8211; these are the culmination of what I feel about consistency after having read the experiences and opinions of many others in blogs, books and articles, coupled with my own experiences in developing products. Also, you might have noted that I have been talking of web application development in some of the sections above, but these apply to any kind of software development.</em></p>
<p><em><br />
</em></p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F07%2F11%2Fconsistency-in-development%2F', 'Consistency+in+Development')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F07%2F11%2Fconsistency-in-development%2F', title: 'Consistency+in+Development' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/07/11/consistency-in-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First post! Well, not quite</title>
		<link>http://code.deepinspace.net/2009/06/28/first-post/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=first-post</link>
		<comments>http://code.deepinspace.net/2009/06/28/first-post/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 03:36:44 +0000</pubDate>
		<dc:creator>hrish</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://code.deepinspace.net/?p=6</guid>
		<description><![CDATA[Just moved this blog to my own domain here from JRoller. I can&#8217;t think of any good reason why I had kept it there so long. JRoller does not score on any points &#8211; be it reliability of the server, ease of editing posts or look and feel. All my old entries remain there &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Just moved this blog to my own domain here from <a href="http://www.jroller.com/">JRoller</a>. I can&#8217;t think of any good reason why I had kept it there so long. JRoller does not score on any points &#8211; be it reliability of the server, ease of editing posts or look and feel.</p>
<p>All my old entries remain there &#8211; at <a title="http://www.jroller.com/talonx" href="http://www.jroller.com/talonx" target="_blank">http://www.jroller.com/talonx</a>.</p>
<script type="text/javascript" src="http://cdn.socialtwist.com/2008071112-2/script.js"></script><a class="st-taf" href="http://tellafriend.socialtwist.com" onclick="return false;" style="border:0;padding:0;margin:0;"><img alt="SocialTwist Tell-a-Friend" style="border:0;padding:0;margin:0;" src="http://images.socialtwist.com/2008071112-2/button.png"onmouseout="STTAFFUNC.hideHoverMap(this)" onmouseover="STTAFFUNC.showHoverMap(this, '2008071112-2', 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F06%2F28%2Ffirst-post%2F', 'First+post%21+Well%2C+not+quite')" onclick="STTAFFUNC.cw(this, {id:'2008071112-2', link: 'http%3A%2F%2Fcode.deepinspace.net%2F2009%2F06%2F28%2Ffirst-post%2F', title: 'First+post%21+Well%2C+not+quite' });"/></a>]]></content:encoded>
			<wfw:commentRss>http://code.deepinspace.net/2009/06/28/first-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
