<?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>Deven Kalra's Weblog</title>
	<atom:link href="http://blog.devenkalra.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.devenkalra.com</link>
	<description>Software, Technology and Some Fun</description>
	<lastBuildDate>Sat, 16 Jan 2010 05:26:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Picasa&#8217;s Face Recognition works really well</title>
		<link>http://blog.devenkalra.com/2010/01/15/picasas-face-recognition-works-really-well/</link>
		<comments>http://blog.devenkalra.com/2010/01/15/picasas-face-recognition-works-really-well/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 05:17:49 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=18</guid>
		<description><![CDATA[I take a lot of picture. I have probably more than 10,000 pictures on my disk comprising almost 30 GB of storage. I have tried a number of photo organization tools and had finally settled on imatch from photools. This tool has very nice categorization features though it still requires a lot of manual work. [...]]]></description>
			<content:encoded><![CDATA[<p>I take a lot of picture. I have probably more than 10,000 pictures on my disk comprising almost 30 GB of storage. I have tried a number of photo organization tools and had finally settled on imatch from photools. This tool has very nice categorization features though it still requires a lot of manual work. </p>
<p>I had tried Picasa about two years ago and it seemed completely inadequate to me. It tried to do everything and it was hard for me make it do what I wanted. I tried Picasa 3.6 this week and I totally converted.</p>
<p>THe best feature that makes Picasa a winner is face recognition. It works amazingly well and it improves continuously. First it locates faces quite well. Secondly, it has a very efficient user interface that lets you tag photos with people&#8217;s names. Then, it finds matching faces with 90-95% accuracy and continously adds to the collection, seemingly improving its match algorithm. It even correctly identified pictures from people over 20 years of aging.</p>
<p>The naming tools are also quite efficient. For example, in the unnamed category, the tools similar faces close to each other so you can select multiple images and tag at once.</p>
<p>In addition, the photo processing tools it provides are quite good. It has the usual special effects tools such as contrast, sharpening, sepia etc. Another useful tools is cropping. It comes with some preset cropping ratios and even provides some cropping suggestions based on face placement.</p>
<p>Over all, a great improvement as compared to previous versions.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2010/01/15/picasas-face-recognition-works-really-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Powerpoint to Video</title>
		<link>http://blog.devenkalra.com/2010/01/12/powerpoint-to-video/</link>
		<comments>http://blog.devenkalra.com/2010/01/12/powerpoint-to-video/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 07:11:02 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Good Software]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=17</guid>
		<description><![CDATA[As part of a presentation for work, I was looking for a tool that could convert a powerpoint presentation to video. There are a number of tools out there but they cost between $49 to $399 or more. I eventually discovered a tool at http://www.effectmatrix.com/PowerPoint-Video-Converter/index.htm called E. M. Powerpoint converter. This tool lets you convert [...]]]></description>
			<content:encoded><![CDATA[<p>As part of a presentation for work, I was looking for a tool that could convert a powerpoint presentation to video. There are a number of tools out there but they cost between $49 to $399 or more. I eventually discovered a tool at <a href="http://www.effectmatrix.com/PowerPoint-Video-Converter/index.htm">http://www.effectmatrix.com/PowerPoint-Video-Converter/index.htm</a> called E. M. Powerpoint converter. This tool lets you convert to a limited but useful set of video formats for free without any water mark. You only pay for additional formats and if you need a command line utility. I used it to convert it to wmv format. Even in the set of of free formats, the tool supports a variety of sizes and qualities.</p>
<p>The tools works like a charm and I like their sales model in which you can use the tool for free for a one-off personal use. I highly recommend it and encourage you to try and buy it.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2010/01/12/powerpoint-to-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fun with &#8220;complex&#8221; Hindi</title>
		<link>http://blog.devenkalra.com/2010/01/12/fun-with-distorted-hindi/</link>
		<comments>http://blog.devenkalra.com/2010/01/12/fun-with-distorted-hindi/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 07:07:08 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Just Having Fun]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=16</guid>
		<description><![CDATA[Let me start by saying that I am a big fan of Hindi, fluent in the language myself and proud of it. I also believe in having fun and that the best humor comes from making fun of oneself. In that spirit, here are a few &#8220;hindi&#8221; phrases:
Game of Cricket: Gol guttam lakad battam de [...]]]></description>
			<content:encoded><![CDATA[<p>Let me start by saying that I am a big fan of Hindi, fluent in the language myself and proud of it. I also believe in having fun and that the best humor comes from making fun of oneself. In that spirit, here are a few &#8220;hindi&#8221; phrases:</p>
<p><strong>Game of Cricket</strong>: Gol guttam lakad battam de danadan pratiyogita</p>
<p><strong>Cricket Test Match</strong>: Pakad dandu, maar mandu, de danaadan pratiyogita</p>
<p><strong>Table Tennis </strong>: Lakdi ke phalak shetra pe le takaatak de takaatak</p>
<p><strong>Lawn Tennis</strong> : Harit Ghaas par le tada tad, de tada tad</p>
<p><strong>Light Bulb</strong>: Vidyut Prakashak Kanch golak</p>
<p><strong>Neck Tie</strong>: Kanth Langoti</p>
<p><strong>Match Box</strong>: Ragdampatti Agni Utpaadan Peti</p>
<p><strong>Traffic Signal</strong> : Aavat Jaavat Suchak Jhandaa</p>
<p><strong>Tea</strong>: Dugdh Jal Mishrit Sharkara Yukt Parvatiya(pahaadi) Booti</p>
<p><strong>Train</strong>: Sahasra Chakra Louh Path Gaamini</p>
<p><strong>All Route Pass</strong>: Yatra Tatra Sarvatra Gaman Aagya Patra</p>
<p><strong>Rail Signal</strong>: Louh path gaamini aawagaman suchak yantra</p>
<p><strong>(Another) Rail Signal</strong>: Agni Rath Aava Gaman Soochak Pattika</p>
<p><strong>Button for clothes</strong>: Ast Vyast Vastra Niyantrak</p>
<p><strong>Mosquito</strong>: Gunjanhaari Manav Rakt Pipasu Jeev</p>
<p><strong>Cigarette</strong>: Shweta patra mandit dhumra shalakha </p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2010/01/12/fun-with-distorted-hindi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Anti-Facebook</title>
		<link>http://blog.devenkalra.com/2009/12/07/the-anti-facebook/</link>
		<comments>http://blog.devenkalra.com/2009/12/07/the-anti-facebook/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 04:57:55 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=15</guid>
		<description><![CDATA[It is an understatement to say that Facebook is an exploding phenomenon. It is a great platform to share your pics and other tidbits with your circle of friends or the world in general.
But, there are large parts of your life you DO NOT want to share with the world. It is for yours to [...]]]></description>
			<content:encoded><![CDATA[<p>It is an understatement to say that Facebook is an exploding phenomenon. It is a great platform to share your pics and other tidbits with your circle of friends or the world in general.</p>
<p>But, there are large parts of your life you DO NOT want to share with the world. It is for yours to manage, preserve for when you want to look back at life and cherish. You want to be able to create and store information in a way that is easy available but is safe so you can always get to it and secure so no prying eyes can look into it.</p>
<p>Towards this end, a few friends of mine and I created a website called, <a href="http://bereadyforlife.com">bereadyforlife.com</a>. The idea was to enable a place on the web, or in the cloud as it is called nowadays, where we can keep our digital assets in a secure fashion. This could include</p>
<ul>
<li> Important documents such as copies of house deeds, tax returns, warranty information etc.</li>
<li> Your personal thoughts in the form of loose documents or as a journal or diary</li>
<li> Checklists such as important numbers, emergency preparedness lists etc.</li>
<li> List of assets and their value so you can easily create insurance claims</li>
<li> And we added interesting information management apps such as shopping list manager</li>
</ul>
<p>We then created security mechanisms such as high strength 256-bit encryption for your documents, journal, checklists etc. so that only you can get access to them. This is multi-level security. The site is first protected by your password. Then each area such as document vaults and diary is protected by separate keys. No one knows the keys except you. It is not stored anywhere on the site. So you can be assured that no one can compromise your data.</p>
<p>In fact, we keep our own data now on this site.</p>
<p>Check it out. I will welcome your comments on the beta version of the site at <a href="http://bereadyforlife.com">bereadyforlife.com</a>. And spread the word!</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2009/12/07/the-anti-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instaling SSL Certificate in Apache2</title>
		<link>http://blog.devenkalra.com/2009/11/08/instaling-ssl-certificate-in-apache2/</link>
		<comments>http://blog.devenkalra.com/2009/11/08/instaling-ssl-certificate-in-apache2/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 00:22:33 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Data Security]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=14</guid>
		<description><![CDATA[I went through a major process to set up an SSL certificate in a web server going through a number of error messages including:
Data Transfer Interrupted
The connection to  has terminated unexpectedly.
Some data may have been transferred.
and

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80

I am using a certificate from GoDaddy and running [...]]]></description>
			<content:encoded><![CDATA[<p>I went through a major process to set up an SSL certificate in a web server going through a number of error messages including:</p>
<p><strong>Data Transfer Interrupted</p>
<p>The connection to <site> has terminated unexpectedly.<br />
Some data may have been transferred.</strong></p>
<p>and</p>
<p><strong><br />
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80<br />
</strong></p>
<p>I am using a certificate from GoDaddy and running Apache2 on Ubuntu 8.04.</p>
<p>Not sure what series of corrections fixed the problem but the following configuration is now working:</p>
<p><strong>/etc/apache2/sites-enabled/000-default</strong></p>
<p><code><br />
NameVirtualHost <ipaddress of my server>:443<br />
NameVirtualHost <ipaddress of my server>:80</p>
<p><Directory "/var/app/public"><br />
    Options Indexes FollowSymLinks<br />
    AllowOverride All<br />
    Order allow,deny<br />
    Allow from all<br />
</Directory></p>
<p><VirtualHost <ipaddress of my server>:80><br />
    RewriteEngine On<br />
    RewriteOptions Inherit<br />
    DocumentRoot <docroot><br />
    ServerAdmin <email><br />
    ServerName <servername>:80<br />
</VirtualHost></p>
<p><VirtualHost <ipaddress of my server>:443><br />
    SSLEngine on<br />
    SSLOptions +StrictRequire</p>
<p>    SSLVerifyClient none<br />
    SSLProxyEngine off</p>
<p>    SSLProtocol -all +TLSv1 +SSLv3<br />
    SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM</p>
<p>    <IfModule mime.c><br />
        AddType application/x-x509-ca-cert      .crt<br />
        AddType application/x-pkcs7-crl         .crl<br />
    </IfModule></p>
<p>    RewriteEngine On<br />
    RewriteOptions Inherit<br />
    ServerAdmin <email><br />
    DocumentRoot /var/app/public<br />
    ServerName <servername>:443<br />
</VirtualHost></p>
<p></code><br />
And, the ssl.conf directory (/etc/apache2/mods-enabled/ssl.conf)</p>
<p><IfModule mod_ssl.c><br />
SSLRandomSeed startup builtin<br />
SSLRandomSeed startup file:/dev/urandom 512<br />
SSLRandomSeed connect builtin<br />
SSLRandomSeed connect file:/dev/urandom 512</p>
<p>##<br />
##  SSL Global Context<br />
##<br />
##  All SSL configuration in this context applies both to<br />
##  the main server and all SSL-enabled virtual hosts.<br />
##</p>
<p>#<br />
#   Some MIME-types for downloading Certificates and CRLs<br />
#<br />
AddType application/x-x509-ca-cert .crt<br />
AddType application/x-pkcs7-crl    .crl</p>
<p>#   Pass Phrase Dialog:<br />
#   Configure the pass phrase gathering process.<br />
#   The filtering dialog program (`builtin&#8217; is a internal<br />
#   terminal dialog) has to provide the pass phrase on stdout.<br />
SSLPassPhraseDialog  builtin</p>
<p>#   Inter-Process Session Cache:<br />
#   Configure the SSL Session Cache: First the mechanism<br />
#   to use and second the expiring timeout (in seconds).<br />
SSLSessionCache        shmcb:/var/run/apache2/ssl_scache(512000)<br />
SSLSessionCacheTimeout  300</p>
<p>#   Semaphore:<br />
#   Configure the path to the mutual exclusion semaphore the<br />
#   SSL engine uses internally for inter-process synchronization.<br />
SSLMutex  file:/var/run/apache2/ssl_mutex</p>
<p>#SSLEngine on<br />
SSLCertificateFile
<path to my cert>
SSLCertificateKeyFile
<path to my key>
SSLCertificateChainFile
<path to godaddy's apache2 intermediate cert>
<p>SSLRandomSeed startup file:/dev/urandom 1024<br />
SSLRandomSeed connect file:/dev/urandom 1024</p>
<p>SSLSessionCache shm:/usr/local/apache2/logs/ssl_cache_shm<br />
SSLSessionCacheTimeout 600</p>
<p></IfModule></p>
<p></code></p>
<p>Hope this helps some other soul having the same tribulations.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2009/11/08/instaling-ssl-certificate-in-apache2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium locators</title>
		<link>http://blog.devenkalra.com/2008/10/14/selenium-locators/</link>
		<comments>http://blog.devenkalra.com/2008/10/14/selenium-locators/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 19:28:49 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=13</guid>
		<description><![CDATA[I am a big fan of automated testing and have started to look at Selenium as an automation tool. I have used Watir before as a tool to drive the browser, but have found that the learning curve for Ruby is too much of an overhead for some QA engineers. Since Selenium has a good [...]]]></description>
			<content:encoded><![CDATA[<p>I am a big fan of automated testing and have started to look at <a href="http://selenium.openqa.org/">Selenium</a> as an automation tool. I have used Watir before as a tool to drive the browser, but have found that the learning curve for Ruby is too much of an overhead for some QA engineers. Since Selenium has a good IDE to capture and record actions, it is very easy to get started. It also has a rich set of functions that can be used to drive the browser. I also like the fact that every recorded action has a corresponding visible script text that can be edited by hand.</p>
<p>After you use the record and play for a few times, the next big road block that you have to get over is to learn how to select elements on the web page especially if it has a complicated nested structure, does not have an id or in case of using third party libraries such as extJS, the ids can change with each run. </p>
<p>In that case, I have found xpath to be very powerful. Below are some examples of the locators. Note that if an expression can return more than one element, the first element is returned by default. You can also use [1], [2] etc. to get a specific element.</p>
<ol>
<li>If you know attribute value of an element
<p>            //div[@id='xyz']: selects the div whose id is exactly xyz
        </li>
<li>If the attribute value should contain a string
<p>            //div[contains(@id, 'xyz')]: matches divs whose id attribute contains the string xyz
        </li>
<li>If you want to select an element inside another one
<p>            //div[contains(@id, 'xyz')]//div[@id='abc']: matches div whose id is abc and is contained in a div whose id contains the string xyz in it.
      </li>
<li>If you want to match on the text in an element
<p>            //a[text()='My Text']: matches a link whose text is &#8220;My Text&#8221;
        </li>
<li>If you want to match more than one string in attribute or text
<p>            //a[contains(text(),'Bill') &#038;&#038; contains(text(), 'Clinton')]: matches a link whose text contains both Bill and Clinton. You can use any xpath function or operator to create your expression
       </li>
<li>Find the nth element of a type
<p>       //div[position()=3]: matches the third div on the page</p>
<p>       //div[@id='abc']//table[position()=3]: matches the third table inside the div whose id is abc
</ol>
<p>As a complicated example consider</p>
<p>//div[@id='editClaimPopupPanelDiv']//div[contains(@class,'x-grid3-row')][1]//table//tr[1]/td[1]</p>
<p>This find the div whose id is editClaimPopupPanelDiv. Inside div(s), the first div whose class attribute contains x-grid3-row is matched. Inside this div the first table is matched inside which the the first row and then the first td is matched.</p>
<p>Some functions you might find useful are (excerpted from the w3 spec):<br />
<strong>String Functions</strong></p>
<ol>
<li><strong>string concat(string, string, string*)</strong> : The concat function returns the concatenation of its arguments.
</li>
<li>
<strong>boolean starts-with(string, string)</strong> : The starts-with function returns true if the first argument string starts with the second argument string, and otherwise returns false.
</li>
<li>
<strong>boolean contains(string, string) </strong>: The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.
</li>
<li>
<strong>string substring-before(string, string)</strong> : The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string.
</li>
<li>
<strong>string substring-after(string, string)</strong> : The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string.
</li>
<li>
<strong>string substring(string, number, number?) </strong>: The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument.
</li>
</ol>
<p><strong>Node Selection Functions<br />
</strong></p>
<ol>
<li><strong>number last()</strong> </li>
<li><strong>number position()</strong> : position of selected element</li>
</ol>
<p>For a detailed review of xpath see the <a href="http://www.w3.org/TR/xpath">w3 spec</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2008/10/14/selenium-locators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hiring by small companies for success in India</title>
		<link>http://blog.devenkalra.com/2007/12/03/hiring-by-small-companies-for-success-in-india/</link>
		<comments>http://blog.devenkalra.com/2007/12/03/hiring-by-small-companies-for-success-in-india/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 03:30:46 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=12</guid>
		<description><![CDATA[India has been in the limelight in the context of outsourcing of software development jobs for many years now. The outsourcing process started with business process outsourcing (BPO) with the activities like call centers. It expanded later to outsourcing software development, maintenance and QA jobs to India.
As more and more companies moved to India, a [...]]]></description>
			<content:encoded><![CDATA[<p>India has been in the limelight in the context of outsourcing of software development jobs for many years now. The outsourcing process started with business process outsourcing (BPO) with the activities like call centers. It expanded later to outsourcing software development, maintenance and QA jobs to India.</p>
<p>As more and more companies moved to India, a major issue has been and still is being felt in the areas of hiring and retaining good people. Culturally, Indian engineers have gravitated towards larger companies like IBM, Oracle, Google. And due to the huge demand for limited talent, typical engineers have developed a knack for jumping jobs to gain increases in their compensation packages. In this context, smaller companies including startups are finding it hard to acquire good people.</p>
<p>I am experiencing similar issues in the hiring for people for my company, Arlak. We develop web applications hosted at infodoro.com. I have had some early successes. The strategy that has worked for me is to hire people who are early in their careers. The key is to look for people who are hungry to grow and hungry to learn. Find people who have the fire in their belly even though their skills are still not yet up to par. Then, nurture them, mentor them and educate them just like you would a young engineer in the US. Treat them with respect as people and as professionals. Give them challenges and important work, not just work that you don&#8217;t want your US engineers not to do. In one of my previous jobs, we outsourced mundane work that we wanted to protect our US engineers from and the low quality of people and the work produced was a reflection of this attitude.</p>
<p>In some ways, the selection of enthusiastic and willing people for small companies is a self-selecting process. Given the current environment, the people whom you will be able to attract to your small company will be the ones who are hungry to grow. You have to make sure that you have the commitment and the will to mentor these cubs. </p>
<p><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script> <a href="http://www.stumbleupon.com/submit?url=http://blog.devenkalra.com/?p=12&#038;title=Hiring%20In%20India"><img src="icon_su.gif"> Stumble it!</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2007/12/03/hiring-by-small-companies-for-success-in-india/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Development Tools and Infrastructure</title>
		<link>http://blog.devenkalra.com/2007/10/23/software-development-tools-and-infrastructure/</link>
		<comments>http://blog.devenkalra.com/2007/10/23/software-development-tools-and-infrastructure/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 23:57:44 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=11</guid>
		<description><![CDATA[Creating an effective infrastructure for the software development process can make a huge difference in the productivity of any team. In today&#8217;s environment of distributed and global development, it is even more important that the right tools for the creation, capture and preservation of knowledge and intellectual property are put in place from the outset. [...]]]></description>
			<content:encoded><![CDATA[<p>Creating an effective infrastructure for the software development process can make a huge difference in the productivity of any team. In today&#8217;s environment of distributed and global development, it is even more important that the right tools for the creation, capture and preservation of knowledge and intellectual property are put in place from the outset. </p>
<p>We have found the following tools to be help teams of software developers.<br />
<strong><br />
Source Control System (SCS)</strong></p>
<p>The product of a software development process is source code. All the investment and effort of the process ultimately goes towards producing this asset. Therefore, it is important that the source code is protected on an ongoing basis. However, a source control system is more than just a backup. It needs to aid in the development process by providing features such version management, roll-back, and support for branching. </p>
<p>A set of desirable features for a source control system are:</p>
<ul>
<li>Maintenance of version history: The SCS should be able to maintain the version of each check-in to the code so that the state of the code as it existed at an earlier time can be recreated as necessary.</li>
<li>Atomic commits: The SCS should support atomic commit so that a commit failure does not leave the SCS in an inconsistent state.</li>
<li>Support secure Internet access: The SCS should support access in a secure manner over the Internet so that distributed teams can collaborate.</li>
<li>Efficient Branching and Tagging: The development team should be able to tag any revision as a significant revision. During the development process, it will be necessary to branch the code for operations such as development of a new version and bug fixing. The SCS should provide support for creating and new branches and for merging. In particular, good SCSs will create a lazy copy for a branch so that multiple identical copies of files are not created.</li>
</ul>
<p>There are a number of commercial SCS (Perforce, Clear Case, Microsoft Source Safe) as well open source SCSs (Subversion, CVS). </p>
<p>We have used Subversion with success in co-located as well as distributed teams.</p>
<p><strong>Bug or Issue Tracker</strong></p>
<p>Where there is code, there are bugs! </p>
<p>An effective bug and issue tracking system is critical to build and maintain quality of code. It is important to be able to log issues and defects as they arise so that decisions as to the priority and scheduling of the issue can be made. </p>
<p>A good bug/defect/issue tracker system should support:</p>
<ol>
<li>Simple user interface</li>
<li>Search and filtering capability</li>
<li>Notification system</li>
<li>Support for work flows</li>
<li>Access control</li>
<li>Integration with source control system</li>
<li>Custom Fields</li>
<li>Monitoring capability</li>
</ol>
<p>There are a number of commercial (ClearQuest, BMC Desk Express, JIRA) and open-source issue tracking (e.g., Bugzilla, Mantis) systems</p>
<p>We have found Mantis, an open-source tracking system to be an effective system providing all of the above features.</p>
<p><strong>Continuous Integration</strong></p>
<p>The traditional model of breaking your development into modules, developing the modules independently and then, late in the development cycle, integrating them into one whole system is fraught with finding incompatibilities and system-level issues late in the process when everyone is in a crunch. Most often, it leads to schedule slippages, buggy software and unhappy customers.</p>
<p>Continuous Integration (CI) is a means of reducing the chances of finding surprises late in the development cycle. CI involves building the latest code into a package to make sure that the code at least compiles and any recent changes have not caused compile failures. In addition, a good CI process should deploy the code as well as run automated tests to catch regression failures due to new changes in the code.</p>
<p>CruiseControl is a popular continuous integration tool that supports automated builds and test integration. It also supports a web-based console for the tool.</p>
<p><strong>Wiki</strong></p>
<p>A wiki is a collaborative communication tool. Simply put, it is a website that can be edited by authorized users using the web interface itself. Most wikis support versioning so that any old version of the edited page can be viewed or recovered.  Wikis provide a simplified mark up language so that an editor can created a formatted page with different formatting elements such font styles, indentations, and tables.</p>
<p>A wiki provides a mechanism for the team to create areas of discussion. The informal nature of content creation on a Wiki encourages team members to create content more rapidly and keep them more current than in more formal documents. In addition, the web nature of the tool make the wiki available to every member of the team irrespective of location and time. In addition, a wiki always provides the latest version of the document as opposed to documents created as MS Word files or in some such desktop tool.</p>
<p>There are a variety of commercial (Confluence, SocialText) as well as open-source  (e.g., MediaWiki) wikis.</p>
<p><strong>Automated Testing System</strong></p>
<p>For any project of significant value, the number of tests to perform feature, acceptance and regression testing will grow in to  the thousands. In many cases, the ability of the QA team to run these tests becomes a gating factor for how quickly and how often new features can be released. I speak from experience!</p>
<p>The good news is that a large percentage of these test can be automated resulting in significant savings in human effort. And since it is much cheaper and easier to put additional computers into service than hiring new QA personnel, automating tests has a great return on investment.</p>
<p>There are a number of test automation levels (unit testing, acceptance testing) and tools (Junit, Winrunner, WATIR).</p>
<p><strong>Test Tracking System</strong></p>
<p>A test tracking system is an important tool for a Quality Assurance (QA) team. This tool lets the QA team keep track of the test cases to test a product in a systematic manner. These tools let the team organize the test cases in test scripts and test plans. Good test tracking systems also integrate with the bug tracking system This way  failed tests can be linked to bugs when when fixed get reflected in the test case. Also, integration into a test automation system enables the running of the test cases and updating the pass/fail status of the system.</p>
<p>In summary, installing a set of collaboration tools and using them in a disciplined manner can increase the productivity of a software development team significantly. And, most tools are now available in open source form, there by reducing the investment into these tools.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2007/10/23/software-development-tools-and-infrastructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Development Methodology</title>
		<link>http://blog.devenkalra.com/2007/10/23/software-development-methodology/</link>
		<comments>http://blog.devenkalra.com/2007/10/23/software-development-methodology/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 23:53:40 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=10</guid>
		<description><![CDATA[Developing a significant software product with quality requires that a set of processes are established in any organization. There are several phases of the software development life cycle (SDLC).
In the traditional SDLC methodology, sometimes also referred to as Waterfall method, the SDLC is divided up into multiple phases that are performed in sequence. The phases [...]]]></description>
			<content:encoded><![CDATA[<p>Developing a significant software product with quality requires that a set of processes are established in any organization. There are several phases of the software development life cycle (SDLC).</p>
<p>In the traditional SDLC methodology, sometimes also referred to as Waterfall method, the SDLC is divided up into multiple phases that are performed in sequence. The phases are:</p>
<p><strong>Requirements Gathering</strong></p>
<p>In this phase, the idea for the product or release is explored. Representatives from multiple cross-functional teams including marketing and engineering discuss the business and technical feasibility of the product.  Product management will translate market needs into product requirements and features. Working jointly with Engineering to estimate costs of these features, Marketing will prioritize the features so that the appropriate set can be selected for a release and a release horizon can be created.</p>
<p><strong>Design</strong></p>
<p>In this phase, the Engineering team will design the product. A new architecture or enhancements to the current architecture will be created. Appropriate technologies and components will be selected. The components that are available off the shelf (preferred!) will be evaluated for feasibility. Components that need to be built out will be designed. Typically, a high level and a detailed design is created. The high level design defines the system level description of the component and how it interacts with other parts of the system. The low-level design will describe the detailed APIs and software modules that comprise the component.</p>
<p><strong>Implementation</strong></p>
<p>Using the output of the design phase (high-level and low-level designs), the engineering team will start implementing the components that are required to build the product. As the implementation progresses, there will usually be changes to the design based on the new findings. These changes will be incorporated in the design and any effects of these changes on other modules will be communicated to the relevant sub-teams. </p>
<p><strong>Integration</strong></p>
<p>Once the modules are completed, the integration of the modules to build out the complete release will be undertaken. Representatives from various sub-teams will integrate the modules created by their teams. In theory, if the modules have been build according to the specifications that were created for them, they will integrate quickly and well to create the software. In practice, this phase brings forth a number of issues of incompatibility. The common cause of this is the inevitable inadequate communication of changes to the design as each team was developing their own components and making changes to incorporate new findings.</p>
<p><strong>Verification or QA</strong></p>
<p>After the modules have been integrated, the software will be release to QA who will perform testing on the system. During this phase, the QA team will find bugs and defects in the product which the development team will fix. Frequent updates to the software are released to the QA team incorporating the fixes for the bugs. </p>
<p>This phase continues until no more high severity bugs remain in the product. The Engineering and Marketing team will decide if the product is at acceptable level of quality to release to the market by evaluating the severity of the remaining bugs.</p>
<p><strong>Release and Maintenance</strong></p>
<p>Once the product has reached an acceptable level of quality, the product will be released. Depending on the type of product, the release team might burn master CDs, deploy the release on web servers or post the package on a website.</p>
<p>After the product hits the market, the customers during the use of the product may also discover more issues which will be reported back to the Marketing and Engineering teams. These changes will be factored into the product road map and minor releases might be created to take care of the issues that cannot wait for the next major release.</p>
<ul><strong>Agile Development</strong></ul>
<p>The method described above, the Waterfall method, has multiple phases. Each phase is completed one by one and the output of each phase drives the next phase. This method is easy to understand and to communicate, especially for scheduling and budgeting purposes. Gross mistakes can usually be caught earlier and phase milestones can be approve by customers. </p>
<p>However, in practice things don&#8217;t work as well as one might imagine. In a dynamic market where new business realities make changes necessary in a product under development, it is hard to incorporate changes in this phased model. A discovery in a later phase can invalidate earlier decisions. Since each phase can last many months, customers have to wait for a long time before working product can be reviewed. Also, since not all people are needed in each phase, some resource are wasted as they are waiting for other resources to generate the deliverables.</p>
<p>To address these shortcomings, an Agile Development Methodology has been developed in recent years. There are several types of agile methodologies. Most of them share similar principles. They emphasize</p>
<ul>
<li> Individuals and interactions over processes and tools</li>
<li> Working software over comprehensive documentation</li>
<li> Customer collaboration over contract negotiation</li>
<li> Responding to change over following a plan</li>
</ul>
<p>The items on the right of each statement are important and will be needed in the process, but more value is put on the items on the left.</p>
<p>At its basic level, agile development turns the waterfall method into an iterative and incremental model. That is, small chunks of functionality is developed incrementally in separate iterations. This functionality is released to QA and demonstrated to customers. In this process, changes are made to the code as feedback is received from QA and customers. This is in contrast to getting feedback from QA in the QA phase and from the customers after release. </p>
<p>The main benefits for Agile are:</p>
<ul>
<li>Deliver working code and valuable features to customers fast</li>
<li>Continuous and better visibility for customers and stake holders</li>
<li>Better productivity, quality and happiness in software development organizations</li>
</ul>
<p>Since frequent and constant communication is essential to make Agile development work effectively,  a number of tools and processes can be utilized including:</p>
<ol>
<li>A central source control system</li>
<li>A bug tracking system </li>
<li>A test case management system </li>
<li>Insistence on writing unit tests </li>
<li>An automated test suite and harness </li>
<li>A continuous code integration system with the unit tests and the automated test suite integrated in </li>
<li>A wiki, task management and messaging system </li>
</ol>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2007/10/23/software-development-methodology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile in a global development scenario</title>
		<link>http://blog.devenkalra.com/2007/10/03/agile-in-a-global-development-scenario/</link>
		<comments>http://blog.devenkalra.com/2007/10/03/agile-in-a-global-development-scenario/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 00:26:23 +0000</pubDate>
		<dc:creator>Deven Kalra</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.devenkalra.com/?p=9</guid>
		<description><![CDATA[Agile in a distributed environment
I had spent 4 years at my last job at VeriSign and the urge to do another startup started to gather steam. I left VeriSign in November 2006 and decided to strike out on my own. This time though, I decided to take a different tack. 
In my previous two startups, [...]]]></description>
			<content:encoded><![CDATA[<p>Agile in a distributed environment</p>
<p>I had spent 4 years at my last job at VeriSign and the urge to do another startup started to gather steam. I left VeriSign in November 2006 and decided to strike out on my own. This time though, I decided to take a different tack. </p>
<p>In my previous two startups, I had raised millions of dollars in venture money and taken the conventional route of building a company. I started my first company, Adaptive Media, in 1996 and my second company, Langoo.com in 2000. The computing environment, the development tools, and the availability of global development talent has changed considerably since then. My gut feeling, when I was thinking of my third company, was that the cost of development for most web-based applications is now significantly lower and one can make a lot more progress with limited capital. I decided to test this hypothesis by self-funding some ideas of my own. I registered a domain name  (<a href="http://infodoro.com">infodoro.com</a>) and  made the plunge.</p>
<p>While at VeriSign, I also got quite interested and gained experience in the Agile methodology for software development. VeriSign, being a 10 year old company, already had a number of processes and tools in place. Based on the different trainings on Agile methodologies as well as internal reasons, the focus of Agile at VeriSign at the outset was on the daily scrum, creating backlog and tracking the backlog (in that order). </p>
<p>When I started to develop software for my new company (<a href="http://infodoro.com">infodoro.com</a>), I started to work with a distributed team in eastern Europe and India and the daily scrum was not as practical. During that time, I realized that Agile is a lot more than the daily scrum. And it is quite practical and effective to do Agile development in the true sense.</p>
<p>Agile development is really about iterative and incremental development (IID). And, it is about avoiding surprises. And, it is incorporating change continuously into the development process and in to the code. Towards that, from almost the beginning we made sure that we had</p>
<ol>
<li> A central globally available source control system
<li> A globally available bug tracking system
<li> A globally available test case management system
<li> Insistence on writing unit tests
<li> An automated test suite and harness
<li> A continuous code integration system with the unit tests and the automated test suite integrated in
<li> A globally available wiki, task management and messaging system
</ol>
<p>And we were able to do all of the above with just a few hundred dollars of infrastructure cost by leveraging open source where we  could. I will write separately about the tools we used and the setup we created.</p>
<p>We still have daily meeting with one team (India). We have frequent communication with the developers in eastern Europe. </p>
<p>The results of this upfront work have been very encouraging with the quality of code produced and the quick turn around on features.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.devenkalra.com/2007/10/03/agile-in-a-global-development-scenario/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
