<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.3.1" --><rss 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/" version="2.0">

<channel>
	<title>Rajith's Column</title>
	<link>http://rajith.2rlabs.com</link>
	<description>Freeman, Hacker, Artist</description>
	<pubDate>Wed, 03 Mar 2010 16:54:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rajith" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rajith" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Apache Qpid - Securing Connections With SSL</title>
		<link>http://rajith.2rlabs.com/2010/03/01/apache-qpid-securing-connections-with-ssl/</link>
		<comments>http://rajith.2rlabs.com/2010/03/01/apache-qpid-securing-connections-with-ssl/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 23:25:34 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[JMS]]></category>

		<category><![CDATA[Qpid]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2010/03/01/apache-qpid-securing-connections-with-ssl/</guid>
		<description><![CDATA[In some cases you may want to allow connections to your brokers from outside the firewall. For obvious security reasons it&#8217;s recommended to use some form of encryption for such connections. Apache Qpid provides two options for securing connections.

 SSL
 SASL security layer

This articles focuses on how to secure your connections between the C++ broker [...]]]></description>
			<content:encoded><![CDATA[<p>In some cases you may want to allow connections to your brokers from outside the firewall. For obvious security reasons it&#8217;s recommended to use some form of encryption for such connections. Apache Qpid provides two options for securing connections.</p>
<ul>
<li> SSL</li>
<li> SASL security layer</li>
</ul>
<p>This articles focuses on how to secure your connections between the C++ broker (on Linux) and the JMS and C++ clients  with SSL.<br />
I plan to write an entry explaining how to use the SASL security layer in the future.</p>
<p><strong><em>Disclaimer : The SSL tools/techniques used below for creating certificates are for illustration/testing purposes only. For production you need to use certificates from a competent third-party CA or use Professional grade CA software.</em></strong></p>
<p><strong>1.0 Installing SSL Support</strong></p>
<p><strong>1.1 Installing SSL Support For C++ Broker &amp; Client</strong><br />
The C++ Broker/Client uses Mozilla&#8217;s Network Security Services Library (SSL) for SSL support. </p>
<p><strong>1.1.1 Installing From RPMs</strong><br />
For Broker support</p>
<pre>yum install qpidd-ssl</pre>
<p>For Client</p>
<pre>yum install qpidc</pre>
<p><strong>1.1.2 Building From Source</strong></p>
<ul>
<li>Download a released source tarball from <a href="http://qpid.apache.org/download.html">here</a></li>
<li>Make sure you have the following dependencies installed
<ul>
<li> nss <http://www.mozilla.org/projects/security/pki/nss/> </li>
<li> nspr <http://www.mozilla.org/projects/nspr/> </li>
</ul>
</li>
<li>Follow the build instructions given in the INSTALL file located in the source directory</li>
</ul>
<p><strong>1.2 Installing Java Client</strong><br />
Download the Java client from <a href="http://qpid.apache.org/download.html">here</a>.</p>
<p><strong>2.0 Creating the SSL Certificates For Testing</strong><br />
Lets create the required certificates for testing our SSL setup.  For this purpose we are using the Mozilla <a href="http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html">certutil</a> tool.<br />
For more details please read <a href="http://www.mozilla.org/projects/security/pki/nss/ref/ssl/gtstd.html">[1]</a>.</p>
<p><strong>2.1 Setting Up The CA</strong><br />
We need to setup the CA and the self signed root CA certificate.</p>
<ul>
<li>Create a new certificate database in the CA_db directory.
<pre>
             >mkdir CA_db
             >certutil -N -d CA_db
             </pre>
</li>
<li> Create the self-signed Root CA certificate, specifying the subject name for the certificate.
<pre>
             >certutil -S -d CA_db -n "MyRootCA" -s "CN=MyRootCA,O=ACME,ST=Ontario,C=CA" -t "CT,," -x -2
            </pre>
<ul>
<li>It will prompt you for a password. Enter the password you specified when creating the root CA database.</li>
<li>Type &#8220;y&#8221; for &#8220;Is this a CA certificate [y/N]?&#8221;</li>
<li>Press enter for &#8220;Enter the path length constraint, enter to skip [&lt;0 for unlimited path]: &gt;&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
</ul>
</li>
<li> Extract the CA certificate from the CA&#8217;s certificate database to a file.
<pre>
           >certutil -L -d CA_db -n "MyRootCA" -a -o CA_db/rootca.crt
          </pre>
</li>
</ul>
<p><strong>2.2 Creating The Certificates For The Server (Qpid Broker)</strong></p>
<ul>
<li>Create a certificate database for the Qpid Broker.
<pre>
              >mkdir server_db
              >certutil -N -d server_db
             </pre>
</li>
<li>Import the CA certificate into the broker&#8217;s certificate database, and mark it trusted for issuing certificates for SSL client and server authentication.
<pre>
            >certutil -A -d server_db -n "MyRootCA" -t "TC,," -a -i CA_db/rootca.crt
            </pre>
</li>
<li>Create the server certificate request, specifying the subject name for the server certificate. We make the common name (CN) be identical to the hostname of the server. Note that this step generates the server&#8217;s private key, so it must be done in the server&#8217;s database directory.
<pre>
             >certutil -R -d server_db -s "CN=localhost.localdomain,O=ACME,ST=Ontario,C=CA" -a -o server_db/server.req
             </pre>
</li>
<li>This step simulates the CA signing and issuing a new server certificate based on the server&#8217;s certificate request. The new cert is signed with the CA&#8217;s private key, so this operation uses the CA&#8217;s databases. This step leaves the server&#8217;s new certificate in a file.
<pre>
            >certutil -C -d CA_db -c "MyRootCA" -a -i server_db/server.req -o server_db/server.crt -2 -6
            </pre>
<ul>
<li>Select &#8220;0 - Server Auth&#8221; at the prompt</li>
<li>Press 9 at the prompt</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a CA certificate [y/N]?&#8221;</li>
<li>Enter &#8220;-1&#8243; for &#8220;Enter the path length constraint, enter to skip [&lt;0 for unlimited path]: &gt;&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
<li>When prompted password, enter the password you specified when creating the root CA database.</li>
</ul>
</li>
<li>Import (Add) the new server certificate to the broker&#8217;s certificate database in the server_db directory with the appropriate nickname. Notice that no trust is explicitly needed for this certificate.
<pre>
           >certutil -A -d server_db -n localhost.localdomain -a -i server_db/server.crt -t ",,"
           </pre>
</li>
</ul>
<p><strong>2.3 Creating The Certificates For The C++ Client</strong></p>
<ul>
<li>Create a new certificate database in the client_db directory.
<pre>
              >mkdir client_db
              >certutil -N -d client_db
        </li>
<li> Import the CA certificate into the client&#8217;s certificate database, and mark it trusted for issuing certificates for SSL client and server authentication.
<pre>
              >certutil -A -d client_db -n "MyRootCA" -t "TC,," -a -i CA_db/rootca.crt
             </pre>
</li>
<li>Create the client certificate request, specifying the subject name for the certificate.
<pre>
              >certutil -R -d client_db -s "CN=CppClient,O=ACME,ST=Ontario,C=CA" -a -o client_db/client.req
              </pre>
</li>
<li>This step simulates the CA signing and issuing a new client certificate based on the client&#8217;s certificate request. The new cert is signed with the CA&#8217;s private key, so this operation uses the CA&#8217;s databases. This step leaves the client&#8217;s new certificate in a file.
<pre>
             >certutil -C -d CA_db -c "MyRootCA" -a -i client_db/client.req -o client_db/client.crt -2 -6
             </pre>
<ul>
<li>Select &#8220;1 - Client Auth&#8221; at the prompt</li>
<li>Press 9 at the prompt</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a CA certificate [y/N]?&#8221;</li>
<li>Enter &#8220;-1&#8243; for &#8220;Enter the path length constraint, enter to skip [&lt;0 for unlimited path]: &gt;&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
<li>When prompted password, enter the password you specified when creating the root CA database.</li>
</ul>
</li>
<li>Add the new client certificate to the client&#8217;s certificate database in the client_db directory with the appropriate nickname. Notice that no trust is required for this certificate.
<pre>
             >certutil -A -d client_db -n "CppClient" -a -i client_db/client.crt -t ",,"
             </pre>
</li>
</ul>
<p><strong>2.4 Creating The Certificates For The JMS Client</strong></p>
<ul>
<li>Import the CA certificate in to the trust store.
<pre>
             keytool -import -v -keystore trust-store.jks -storepass password -alias RootCA -file CA_db/rootca.crt
             </pre>
</li>
<li>Import the CA certificate in to the key store.  (need for client authentication)
<pre>
             keytool -import -v -keystore key-store.jks -storepass password -alias RootCA -file CA_db/rootca.crt
             </pre>
</li>
<li>Generate keys for the client certificate.
<pre>
             keytool -genkey -alias java-client -keyalg RSA -sigalg MD5withRSA -validity 356 -keystore key-store.jks -storepass password
             </pre>
<p>            Answer the questions accordingly and press enter when prompted for the password to select the same password as the key-store.
       </li>
<li>Create a certificate request.
<pre>
             keytool -certreq -alias java-client -sigalg MD5withRSA -keystore key-store.jks -storepass password -v -file java-client.req
             </pre>
<p>            Answer the questions accordingly and press enter when prompted for the password to select the same password as the key-store.
       </li>
<li>Create a certificate request.
<pre>
             keytool -certreq -alias java-client -sigalg MD5withRSA -keystore key-store.jks -storepass password -v -file java-client.req
             </pre>
<p>            Answer the questions accordingly and press enter when prompted for the password to select the same password as the key-store.
       </li>
<li>Sign the certificate request using CA certificate.
<pre>
             certutil -C -d CA_db -c "MyRootCA" -a -i java-client.req -o java-client.crt  -2 -6
             </pre>
<ul>
<li>Select &#8220;1 - Client Auth&#8221; at the prompt</li>
<li>Press 9 at the prompt</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a CA certificate [y/N]?&#8221;</li>
<li>Enter &#8220;-1&#8243; for &#8220;Enter the path length constraint, enter to skip [&lt;0 for unlimited path]: &gt;&#8221;</li>
<li>Type &#8220;n&#8221; for &#8220;Is this a critical extension [y/N]?&#8221;</li>
<li>When prompted password, enter the password you specified when creating the root CA database.</li>
</ul>
</li>
<li>Import the certificate into the key store.
<pre>
             keytool -import -v -alias java-client -keystore key-store.jks -storepass password -file java-client.crt
             </pre>
</li>
</ul>
<p><strong>3.0 Configuring The C++ Broker To Use SSL</strong></p>
<ul>
<li>The $CERT_LOC denotes the directory where we created the CA_db, server_db, client_db, trust-store.jks and key-store.jks</li>
<li>The broker-pfile needs to contain the password you entered while creating the server_db</li>
<li>If you want to use client authentication, add &#8211;ssl-require-client-authentication to the broker options</li>
</ul>
<p>If starting the broker from an installation.</p>
<pre>
/usr/sbin/qpidd --ssl-cert-db $CERT_LOC/server_db/ \
                       --ssl-cert-password-file $CERT_LOC/broker-pfile \
                       --ssl-cert-name localhost.localdomain \
                       --ssl-port 5674
</pre>
<p>If starting the broker from a source build</p>
<pre>
./src/qpidd --load-module ./src/.libs/ssl.so
                 --ssl-cert-db $CERT_LOC/server_db/ \
                 --ssl-cert-password-file $CERT_LOC/broker-pfile \
                 --ssl-cert-name localhost.localdomain \
                 --ssl-port 5674
</pre>
<p><strong>4.0 Configuring The C++ Client To Use SSL</strong><br />
The following steps needs to be followed to enable SSL on the C++ client side.<br />
The client side options are specified using environment variables.</p>
<ol>
<li> Load the SslConnector.so<br />
              If running from source</p>
<pre>
                       export QPID_LOAD_MODULE=./src/.libs/sslconnector.so
              </pre>
</li>
<li> To open an SSL enabled connection, set the protocol to ssl in the ConnectionSettings passed to Connection::open():
<pre>
                #include <qpid/client/ConnectionSettings.h>
                #include <qpid/client/Connection.h>
                #include <qpid/client/Session.h>

                using namespace qpid::client;

                int main(int , char** ) {

                ConnectionSettings connectionSettings;
                connectionSettings.host = &#8220;localhost&#8221;;
                connectionSettings.port = 5674;
                connectionSettings.protocol=&#8221;ssl&#8221;;

                Connection connection;
                try {
                     connection.open(connectionSettings);
                &#8230;&#8230;
            </pre>
</li>
<li>If client authentication is used, then we need to specify the clients certificate.
<pre>
                 export QPID_SSL_CERT_DB=$CERT_LOC/client_db/
                 export QPID_SSL_CERT_NAME=CppClient
                 export QPID_SSL_CERT_PASSWORD_FILE=$CERT_LOC/cpfile
             </pre>
</li>
</ol>
<p><strong>4.0 Configuring The JMS Client To Use SSL</strong><br />
The following steps needs to be followed to enable SSL on the JMS client side.</p>
<ol>
<li>You need to specify the ssl option and the correct port in the Connection URL
<pre>
                 amqp://guest:guest@test/?brokerlist='tcp://localhost:5674?ssl='true''
              </pre>
</li>
<li>Specify the trust store which contains the CA certificate
<pre>
                -Djavax.net.ssl.trustStore=$CERT_LOC/trust-store.jks \
                -Djavax.net.ssl.trustStorePassword=password \
            </pre>
</li>
<li>If client authentication is used, you need to specify the trust store and the key store which contains the client&#8217;s certificate
<pre>
                -Djavax.net.ssl.keyStore=$CERT_LOC/key-store.jks \
                -Djavax.net.ssl.keyStorePassword=password \
                -Djavax.net.ssl.trustStore=$CERT_LOC/trust-store.jks \
                -Djavax.net.ssl.trustStorePassword=password \
            </pre>
</li>
<li>In case you run into issues adding &#8220;-Djavax.net.debug=ssl&#8221; will enable logging in the Java SSL code</li>
</ol>
<p>If you have any questions please feel free to contact us at users@qpid.apache.org.</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2010/03/01/apache-qpid-securing-connections-with-ssl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>97 Things Every Programmer Should Know</title>
		<link>http://rajith.2rlabs.com/2010/02/10/97-things-every-programmer-should-know/</link>
		<comments>http://rajith.2rlabs.com/2010/02/10/97-things-every-programmer-should-know/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 00:03:10 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[Announcements]]></category>

		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2010/02/10/97-things-every-programmer-should-know/</guid>
		<description><![CDATA[I am honoured to have been able to contribute two chapters (entries) for the book &#8220;97 Things Every Programmer Should Know&#8221; that&#8217;s scheduled to be released this month.
There is nothing really ground breaking here, but rather short useful tips that could help in your goal in becoming a better programmer.  Some of the advice [...]]]></description>
			<content:encoded><![CDATA[<p>I am honoured to have been able to contribute two chapters (entries) for the book <a href="http://oreilly.com/catalog/9780596809492">&#8220;97 Things Every Programmer Should Know&#8221;</a> that&#8217;s scheduled to be released this month.<br />
There is nothing really ground breaking here, but rather short useful tips that could help in your goal in becoming a better programmer.  Some of the advice given is obvious (or even trivial), but they are also what we normally take for granted. While some of those nuggets could potentially save you some trouble, others merely point out a different perspective about an aspect of programming that we may have failed to see. All in all I think it&#8217;s well worth a read. It&#8217;s also available on the wiki <a href="http://programmer.97things.oreilly.com/wiki/index.php/Contributions_Appearing_in_the_Book">here</a>.</p>
<p>This book is part of a new series started by O`reilly where the chapters (or entries) are chosen from a series of contributions (short essays) made by many individuals. The contributions are collected via a wiki and goes through an editing process via a designated editor. Once submissions are edited and agreed upon by the editor and the contributor they get added to a separate section from where the final contributions are chosen. This type of book offers the reader an opportunity to see multiple and varied perspectives of many individuals about the subject as opposed to a single authors perspective. The format of the book also allows for easy reading and the short concise entries are easy to digest. AFAIK there are two other books in the series, <a href="http://oreilly.com/catalog/9780596522704">97 Things Every Software Architect Should Know</a> and <a href="http://oreilly.com/catalog/9780596804169/">97 Things Every Project Manager Should Know</a>.</p>
<p>My contributions were motivated by the daily challenges I faced as a programmer. Refactoring and testing are topics that are relevant to any programmer.<br />
<a href="http://programmer.97things.oreilly.com/wiki/index.php/Before_You_Refactor">Before You Refactor</a> and <a href="http://programmer.97things.oreilly.com/wiki/index.php/Test_While_You_Sleep_%28and_over_Weekends%29">Test While You Sleep (and over Weekends)</a> are based on my humble experience working in the industry for over 10 years. I hope it helps another programmer to avoid the pain I had to go through by learning things the hard way.  <a href="http://www.two-sdg.demon.co.uk/curbralan/kevlin.html">Kevlin Henny</a> was the editor for this book and it was a pleasure to have had the opportunity to work with him. Sometimes it&#8217;s amazing to note how a little bit of editing could make a world of difference. During the process I learnt a few things about writing from Kevlin for which I am very grateful for.</p>
<p>And here is the <a href="http://covers.oreilly.com/images/9780596809492/lrg.jpg">cover page</a> with my mug shot <img src='http://2rlabs.com/rajith/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2010/02/10/97-things-every-programmer-should-know/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello 2010 And My Rant For 2009</title>
		<link>http://rajith.2rlabs.com/2010/01/07/hello-2010-and-my-rant-for-2009/</link>
		<comments>http://rajith.2rlabs.com/2010/01/07/hello-2010-and-my-rant-for-2009/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 17:34:17 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2010/01/07/hello-2010-and-my-rant-for-2009/</guid>
		<description><![CDATA[It&#8217;s never to late to say &#8220;Happy New Year&#8221; !!!
I would like to take this opportunity to wish everybody the very best for 2010.
2009 have been a very busy and an eventful year.  My wife graduated and thus ended our 2 year stay at the university residences at UTM. All though a small townhouse [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s never to late to say &#8220;Happy New Year&#8221; !!!<br />
I would like to take this opportunity to wish everybody the very best for 2010.</p>
<p>2009 have been a very busy and an eventful year.  My wife graduated and thus ended our 2 year stay at the university residences at <a href="http://www.utm.utoronto.ca/">UTM</a>. All though a small townhouse (albeit with 4 bedrooms - no idea how they fit them all in that tiny space) it was nestled in a lovely location. There was greenery all around and our townhouse backed into a wooded lot where there was deer with plenty of raccoons and the occasional rabbit. The campus had clearly paid a lot of attention to maintaining a healthy balance with nature, so there was plenty of tress around the area.  I am not really a shutter bug, but we did take a few pictures here and there. Sadly I can&#8217;t seem to find them, so I&#8217;m linking with a few photos (<a href="http://www.flickr.com/photos/queencindy/2943044810/">pic1</a>, <a href="http://www.flickr.com/photos/queencindy/2942184517/in/photostream/">pic2</a>, <a href="http://www.flickr.com/photos/queencindy/2943043192/in/photostream/">pic3</a>) I found on the net taken by one <a href="http://www.flickr.com/photos/queencindy/">QueenCindy</a>. My kid loved this place as there was plenty of room to run around and play.</p>
<p>      After my wife graduated we had to moved into another place and after a very exhaustive search we found our selves back in the northern edge of Brampton,ON.  House hunting was no fun and we spent countless hours running around looking for a place that fits our whims and fancies and also within our budget.  Once we found the house it was a mad rush to find a mortgage at a suitable rate as we had only a few days. At the time the rates were very attractive, but the lending institutions were very thorough with so many requirements for various kinds of documents. I just about managed to get all the paper work done in time, but not without a last minute scare where for reason only known to them the bank refused to work with my lawyer. So I found another one at the eleventh hour that had a good working relationship with the bank which ensured we closed on time. All this happened while my wife was doing her final exams and I had to work on site with a customer that had a fairly aggressive schedule. My interactions with customers were mostly via email or phone calls, so being onsite was a new experience, all though I have to admit it was fairly stressful as well. I have blogged on my experience about it <a href="http://rajith.2rlabs.com/2009/09/09/survival-tips-for-software-engineers-in-a-customer-facing-role/">here</a>. By the time the gig came to an end, I had lost quite a few hair.</p>
<p>    The university gave us a one month grace period as there was nobody waiting to lease our townhouse. It allowed us some flexibility in the closing schedule. We have moved 5 times during the last 6 years, where one move was from Ottawa to Brampton (in Greater Toronto Area) !!!. So the very thought of moving again itself was a dreadful experience. I managed the last 5 moves on my own by renting a UHaul trunk. It wasn&#8217;t fun and I had enough, so this time I hired a mover. It took us quite a bit of time to get everything unpacked and settled in.</p>
<p>    I started playing cricket in earnest  during the last season (2009) for the Toronto and District Cricket League. It was an up and down season ending with me breaking my finger pretty badly during the last match of the regular season. The finger was dislocated and had a volar plate chip fracture. My finger is still in a pretty bad shape with a real possibility of it not attaining at least a 70% of what it used to be. One highlight of the season was facing <a href="http://www.cricinfo.com/westindies/content/player/371989.html">Navin Stewart</a> from Trinidad (who came to Canada to play club cricket during his off season). He plays for Trinidad and Tobago and featured in the <a href="http://en.wikipedia.org/wiki/Stanford_Super_Series">Stanford Super Series</a> and the esteemed <a href="http://www.clt20.com/">Champions League</a> in India. The bastard bowled two bouncers the second of which hit my glove, ricocheted off my helmet before being caught at the slips. He had decent pace and it was difficult to pick the red ball against the fading light. I hope I had better luck this coming season, but not sure if I am able to play at all due to the finger injury.</p>
<p>   With all the madness happening around I had managed to post a grand total of 3 blog entries for 2009. I am certainly hoping to improve on that in the coming year. Again I wish everybody the very best for 2010 !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2010/01/07/hello-2010-and-my-rant-for-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft contributes WCF client for Apache Qpid</title>
		<link>http://rajith.2rlabs.com/2009/09/29/microsoft-contributes-wcf-client-for-apache-qpid/</link>
		<comments>http://rajith.2rlabs.com/2009/09/29/microsoft-contributes-wcf-client-for-apache-qpid/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 23:05:42 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[AMQP]]></category>

		<category><![CDATA[Announcements]]></category>

		<category><![CDATA[Middleware]]></category>

		<category><![CDATA[Qpid]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2009/09/29/microsoft-contributes-wcf-client-for-apache-qpid/</guid>
		<description><![CDATA[Since joining the Apache Qpid project around Nov 2008 Microsoft has been helping with the windows port of the C++ broker. They also worked on a WCF client based on the C++ client libraries. Recently (about 2 weeks back) they contributed the code (QPID-2065). The examples could be found here.
From the read me the following [...]]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://rajith.2rlabs.com/2008/11/07/microsoft-joining-apache-qpid-and-the-amqp-working-group/">joining</a> the Apache Qpid project around Nov 2008 Microsoft has been helping with the windows port of the C++ broker. They also worked on a WCF client based on the C++ client libraries. Recently (about 2 weeks back) they contributed the <a href="https://issues.apache.org/jira/browse/QPID-2065">code (QPID-2065)</a>. The examples could be found <a href="http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/samples/">here</a>.</p>
<p>From the read me the following features are available,<br />
1.  WCF service model programming using one way contracts<br />
2.  WCF channel model programming using IInputChannel and IOutputChannel based factories<br />
3.  Programmatic access to AMQP message properties on WCF messages<br />
4.  AMQP version 0-10 (as provided by the Qpid C++ native client library)<br />
5.  Shared connections for multiple channels based on binding parameters<br />
6.  WCF to WCF applications (using SOAP message encoders)<br />
7.  WCF to non-WCF applications (using raw content encoders)<br />
8.  Rudimentary AMQP type support for headers (Int and String)<br />
9.  Channel functional tests using NUnit<br />
10. Programming samples</p>
<p>There are several opportunities for folks to collaborate in this area. Cliff Jansen who worked with Qpid on the code drop identified the following areas as potential areas for contributions.</p>
<p>From qpid/wcf/ReadMe.txt:</p>
<p> 2. Planned features (not yet available)<br />
 =======================================</p>
<p> 1.  Full AMQP type support, including maps and arrays<br />
 2.  System.Transactions integration (local and distributed with dynamic escalation)<br />
 3.  Prefetch window for inbound messages<br />
 4.  Shared sessions<br />
 5.  Connection failover with AMQP broker clusters<br />
 6.  Temporary queues<br />
 7.  Broker management<br />
 8.  System logging and tracing<br />
 9.  CMake build system support<br />
 10. Transport and message based security</p>
<p>One item that I would like to add to the above list is documentation for the WCF client and it&#8217;s examples.</p>
<p>If you are interested in contributing please join us by sending an email to dev-subscribe@qpid.apache.org<br />
You are most welcomed to contribute by way of code, testing, providing feedback or documentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2009/09/29/microsoft-contributes-wcf-client-for-apache-qpid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Survival tips for software engineers in a customer facing role</title>
		<link>http://rajith.2rlabs.com/2009/09/09/survival-tips-for-software-engineers-in-a-customer-facing-role/</link>
		<comments>http://rajith.2rlabs.com/2009/09/09/survival-tips-for-software-engineers-in-a-customer-facing-role/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 15:10:19 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2009/09/09/survival-tips-for-software-engineers-in-a-customer-facing-role/</guid>
		<description><![CDATA[It is not often a software engineer has to engage in a customer facing role. In most organizations there is a tiered support structure between a customer and the software engineer. However in certain circumstances a software engineer may end up in a customer facing role. For example if you work for a startup you [...]]]></description>
			<content:encoded><![CDATA[<p>It is not often a software engineer has to engage in a customer facing role. In most organizations there is a tiered support structure between a customer and the software engineer. However in certain circumstances a software engineer may end up in a customer facing role. For example if you work for a startup you may have to juggle multiple roles, including a customer facing role until a proper support structure is put in place. Even in an established organization, when a new product is introduced the engineering team may need to handle support issues initially until the support organization gets up to speed with it.</p>
<p>In any case it is important that software engineers develop necessary skills to handle such situations effectively. Some of these skills will help when communicating within your organization and some for life in general.<br />
Following are some tips that may help you to make your engagement a productive and a pleasant one.</p>
<ol>
<li>.<strong> Pay attention to the subtleties when communicating over email.</strong><br />
It is often easy for people to misunderstand you when communicating over email as opposed to phone or in person. The tone could be easily misunderstood as being aggressive or rude as the person reading is unable to gauge your emotions or see your body language. This is especially important if you haven&#8217;t met them in person or spoken to them over the phone. Generally once a person can put a face to a name it becomes a bit more easy.</p>
<p>I have had several instances where this has happened and I now pay close attention to any email I send out to ensure that I communicate exactly what I intended.</p>
<p>Also it is important to state the obvious at least for completeness sake. What is obvious to you may not be to others. This especially important when using emails as there is no opportunity for instant feedback/questions. Otherwise it will result in lengthy email threads.</li>
<p></br></p>
<li><strong>Respect the people you are dealing with and try to build good working relationships</strong><br />
Telling a customer to RTFM is probably not a good idea. Even if you are frustrated due to repeated questions that you have answered a 100 times to several people during the last few days, it is best to answer it one more time. Even when you have no choice but to tell them to RTFM, do so in a respectful manner which doesn&#8217;t make people feel bad. Nobody in this world wants to be belittled or disrespected. When egos are hurt it creates a very unpleasant work environment.</p>
<p>In fact good healthy relationship can go a long way in making sure the project runs smoothly and successfully.</li>
<p></br></p>
<li><strong>Your code vs my code -  avoid the customary finger pointing</strong><br />
Most people are very passionate about the code they write. And often when there is a problem we tend to take a defensive stand. Anybody who has seen a conversation between a programmer and QA engineer would know what I am talking about.<br />
But when you are dealing with a customer, you need to be extra careful about how you look at a problem. <em>Even if the issue is not in your product you need to control your urge to point it in the same emphatic way you do so with your QA folks</em>. You need to be more diplomatic in how you point out the bug on their side and try to avoid using words like &#8220;your code&#8221; or &#8220;our code&#8221;.</li>
<p></br></p>
<li><strong>We can&#8217;t reproduce in our lab environment is not a good answer.</strong><br />
Certain problems may not be possible to reproduce (in the exact form), outside the customers environment as it is difficult to replicate the exact environment due to differences in hardware and not having access to their application binaries due to security, legal and other issues. . But it is important to identify the issues at a more deeper level. Perhaps if you understand the root cause, you maybe able to simulate the issue in a different way.<br />
Take the time to understand the issue and try to talk to all people involved to get a complete and accurate picture. From experience I have seen that sometimes you want get all relevant information the first time you talk to people. People often forget unless you ask probing questions. Most times the first reactions from people capture the symptoms rather than the root cause. So a careful analysis maybe need to nail the real issue.</li>
<p></br></p>
<li><strong>Encourage the use of proper support procedures right from the beginning. Never take short cuts.</strong><br />
I have been burned several times by not following this. When an issue happens it is important that you encourage your customers to follow the correct procedure. For example the use of a bug tracking tool instead of a series of adhoc emails. It is often tempting to ask customers to email log files, or if you are on site to walk over to their desk and try to investigate.<br />
But if you encourage the use of a bug reporting tool it will have several benefits. It will force the person reporting the issue to think through in a methodical way and capture all the right information while it is still fresh in their mind. For example most bug reporting tools have fields to capture version information, a problem description, a component, steps to reproduce (if any), expected and observed result and provisions to attach log files ..etc. Once information is captured in a central location it is easy to share that information with your engineering team rather than digging through a series of adhoc emails.</li>
<p></br></p>
<li><strong>Proactively educate the people you work with</strong><br />
By experience I have found it is helpful to have a meeting as soon as possible with all involved parties and educate them on the following. Some of these may have already being communicated to them. But most may have forgotten or in some cases not being given to them at all.</p>
<ul>
<li>Provide links to documentation, training slides ..etc</li>
<li>Educate them on the proper procedure to follow when reporting issues (can&#8217;t stress this enough)</li>
<li>Based on the most frequent questions, try to provide an faq that is tailored to their environment</li>
<li>Once you identify the full system setup provide a basic trouble shooting guide for them to isolate if the issue is related to your organizations product or not. This I found reduced a lot of pain and non issues being reported.</li>
<li>Provide useful links to other skills involved in the project. For example I sometimes encountered folks who work mostly in a windows environment, but now dragged into a product being deployed in a unix environment. So links on basic unix skills would make it easy on everybody in such a situation.</li>
</ul>
</li>
<p></br></p>
<li><strong>Don&#8217;t babysit the people you work with</strong><br />
Initially you may get into the habit of spoon feeding information and babysitting them. This may seem like an easy option rather than trying to get them involved in the process. But it is in everybody&#8217;s best interest to get the customer to gain as much confidence in getting to know how to install, debug and use your product. This will reduce a load of pain later on in the process. Also try to,</p>
<ul>
<li> Avoid getting sucked into debugging the customers code.</li>
<li>Avoid the temptation to debug or fix an issue on your own. Try as much as possible to get them involved in the process.</li>
<li>Document trouble shooting attempts and consolidate them into a trouble shooting guide. Most products have official trouble shooting guides, but a supplementary trouble shooting guide tailored to their environment and using terminology familiar to them will make them more comfortable.</li>
</ul>
</li>
<p></br></p>
<li><strong>It is helpful if you have multiple programming language skills</strong><br />
Since you write code, the customer will expect you to answer questions at the code level. Sometimes you may have to review code segments and provide an opinion. However if your product is providing clients in different languages, these questions may be in a language that is outside of your core competencies. Therefore it is important that you have a at least some knowledge using those languages.<br />
In general the ability to write code in several languages is always an added bonus as you will be a valuable asset to the company.</li>
<p></br></p>
<li><strong>Know thy unix tools</strong><br />
   Also if you are in the unix world it is nice to have some skills in basic unix tools like top, vmstat, pmap, netstat, sar, lsof ..etc and text processing languages like perl, awk, sed etc. These tools can help you diagnose issues and obtain important information about the env. The text processing tools will be invaluable  when you need to make sense out of massive log files or other text processing tasks. These skills will make you more productive by allowing you to extract information  quickly and efficiently than just using grep or crunching numbers using a spreadsheet. </li>
<p></br></p>
<li><strong>Keep your conversations professional and never take things personal</strong><br />
You always need to remember that you are representing your company/product and the team you work with. Therefore the people you work with at a customer&#8217;s site may directly vent their frustration at you. This may manifest in the form of rude comments, lack of cooperation and in rare situations a bit of yelling (Fortunately I&#8217;ve only seen only one such incident that happened a few years back) .  Never take them personally or get into any sort of argument. It is best not to take anything personal or get emotionally involved. When the stakes are high and push comes to shove, humans will react and we need to understand that and continue to behave professionally. Sometimes all they expect is for you to keep quiet, listen to them and empathize with their situation. And something simple as &#8220;I hear your point/understand your frustration. We are doing all we can to help&#8221; is all it takes. </p>
<p>However if you are finding it difficult to cope, it is best to bring it to your managers attention and discuss possible measures to address the situation. It&#8217;s a bad idea to just keep quiet and bottle them inside, as you run the risk of an emotional outburst. Let your manager help you by dealing with the management on the customers side. All though the customer is the king, it is not acceptable for anybody to be treated badly.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2009/09/09/survival-tips-for-software-engineers-in-a-customer-facing-role/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apache Qpid M4 Released</title>
		<link>http://rajith.2rlabs.com/2009/01/28/apache-qpid-m4-released/</link>
		<comments>http://rajith.2rlabs.com/2009/01/28/apache-qpid-m4-released/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:54:25 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[AMQP]]></category>

		<category><![CDATA[Announcements]]></category>

		<category><![CDATA[JMS]]></category>

		<category><![CDATA[Middleware]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Qpid]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2009/01/28/apache-qpid-m4-released/</guid>
		<description><![CDATA[The Apache Qpid community is pleased to announce the release of Apache Qpid M4!
Apache Qpid (http://qpid.apache.org) is a cross platform enterprise messaging solution which implements the Advanced Message Queueing Protocol (http://www.amqp.org). 
It provides brokers written in Java and C++ and clients in C++, Java (including a JMS implementation), .Net, Python, and Ruby.
New features included in [...]]]></description>
			<content:encoded><![CDATA[<p>The Apache Qpid community is pleased to announce the release of Apache Qpid M4!</p>
<p><strong>Apache Qpid (http://qpid.apache.org)</strong> is a cross platform enterprise messaging solution which implements the <strong><em>Advanced Message Queueing Protocol (http://www.amqp.org). </em></strong><br />
It provides brokers written in Java and C++ and clients in C++, Java (including a JMS implementation), .Net, Python, and Ruby.</p>
<p>New features included in this release are:</p>
<ul>
<li> .NET, WCF and excel support for AMQP 0-10</li>
<li>SSL added for C++ broker and all clients</li>
<li>Windows port for C++ client &#038; broker</li>
<li>C++ Broker
<ul>
<li>ACL</li>
<li>Active-Active clustering</li>
<li>Federation, push bridges &#038; dynamic routes</li>
<li>RDMA for C++ broker &#038; C++ client (70-80us, yes us max latency on a well setup machines)</li>
<li>Support for message TTL</li>
<li>Queue options
<ul>
<li>added RING/ STRICT ring</li>
<li>LVQ</li>
</ul>
</li>
<li>Exchange options
<ul>
<li>LVE</li>
<li>message sequencing</li>
</ul>
</li>
<li> XQuery based XML Exchange now as plugin</li>
</ul>
</li>
<li>Performance work</li>
<li>Management for AMQP 0-10
<ul>
<li>QMF C updates (console)
<ul>
<li>Python</li>
<li>C++</li>
</ul>
</li>
<li>QMF Agent
<ul>
<li>C++</li>
</ul>
</li>
<li>QMan JMX bridge for QMF</li>
<li>Alerts/ logger for QMF events</li>
</ul>
</li>
<li>JMSXUserId</li>
<li>Java broker
<ul>
<li>Message Priority</li>
<li>bug fixes</li>
<li>some prep work for AMQP 0-10</li>
</ul>
</li>
</ul>
<p>It is available to download from:<br />
http://www.apache.org/dist/qpid/M4/</p>
<p>Complete release notes are available here:<br />
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310520&#038;styleName=Html&#038;version=12313279</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2009/01/28/apache-qpid-m4-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The art of spin bowling</title>
		<link>http://rajith.2rlabs.com/2008/12/23/the-art-of-spin-bowling/</link>
		<comments>http://rajith.2rlabs.com/2008/12/23/the-art-of-spin-bowling/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 02:58:31 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[cricket]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2008/12/23/the-art-of-spin-bowling/</guid>
		<description><![CDATA[I was always fascinated about spin bowling. I followed Shane Warne and Murali very closely over the years and tried to understand what made a spin bowler great. When YouTube came around there was plenty of videos to study. Then came Ajantha Mendis, who bought a completely different perspective to spin bowling and bamboozled batsmen [...]]]></description>
			<content:encoded><![CDATA[<p>I was always fascinated about spin bowling. I followed Shane Warne and Murali very closely over the years and tried to understand what made a spin bowler great. When YouTube came around there was plenty of videos to study. Then came Ajantha Mendis, who bought a completely different perspective to spin bowling and bamboozled batsmen and pundits alike. </p>
<p>Spin bowling is more art than science. The principles of spin bowling are very simple. One could learn to bowl spin by learning these principles, but mastering them is an art. A closer look at spinners who were successful at their trade, shows that each made an art out of these principles. They had something unusual to offer that set them apart from the rest of the pack.</p>
<p>Looking at some of the greatest spinners, for example <a href=”http://content-usa.cricinfo.com/india/content/player/27591.html”>Bhagwat Chandrasekhar</a> had an unusually whippy action due to a withered arm which was a result of childhood polio. It is said that he delivered googlies, topspinners and leg breaks at near medium pace and eventually producing an unplayable delivery.<a href=”http://content-usa.cricinfo.com/pakistan/content/player/38973.html”> Abdul Qadir</a> had a fancy run up, the temperament of a fast bowler and good variety to back it up. His googly was probably the best. <a href=”http://content-usa.cricinfo.com/ci/content/player/49636.html”>Muttiah Muralitharan</a> was a vicious spinner of the ball on any type of surface.  <a href=”http://content-www.cricinfo.com/ci/content/player/42628.html”>Saqlain Mushtaq</a> was probably the first to use the “doosra” effectively. <a href=”http://content-usa.cricinfo.com/australia/content/player/8166.html”>Shane Warne</a> undoubtedly the best leg spinner we have seen so far, has quite a bit of variation. Then finally you have <a href=”http://content-usa.cricinfo.com/srilanka/content/player/268739.html”>Ajantha Mendis</a> who uses variation as his main weapon. All these folks mixed their unique talent (and their deformity in the case of Mural and Bhagawat) with these principles to create an art form that is almost magical. (For the die hard fans, the above is not an exhaustive list of great spinners. So if your favorite is not listed there please do not think I have thought less about your favorite spinner).</p>
<p>As a bowler you need to consistently beat a variety of batsmen to become a successful bowler. Sure you may get a few freebies when the batsmen eventually makes a mistake (every human is going to make a mistake at some point) or due to pressure at the other end. But if you need to improve your wickets column and become a champion spinner, then you have to ensure that the batsmen makes those mistakes while you are bowling. </p>
<p>There are several ways to beat a batsmen and more often than not a combination of those techniques is what buys you a wicket. Most of these techniques are intertwined. One technique is to try and out think a batsmen. For example Shane Warne always tried to anticipate a batsman&#8217;s move and bowled accordingly. Creating doubts in a batsman&#8217;s mind is another way. Ajantha Mendis is a master at this as he bowls very accurately with subtle changes in the direction where the ball spins. Bhagwat Chandrasekhar didn&#8217;t even know what would happens when he bowled and never planned his deliveries. When a batsman is not picking up the variations he begins to doubt and his confidence suffers, effectively stifling the scoring and increasing the chances of making a mistake. Deceiving a batsmen is another way. You could deceive a batsmen through changes in the amount of spin imparted, pace, line, length , flight or direction of spin by cleverly disguising your variations off the hand. For example a spinner could bowl a quick top spinner, a cleverly disguised googly or an arm ball. The batsmen depending on his ability and concentration level may not pick the subtle change in your action, the pace or the direction it takes off the pitch,  Yet another way is to setup and lead a batsmen into a trap. For example a leg spinner or an off spinner could use their stock ball on a given line and length and then stealthily produce a googly or a doosra on the same line and length inviting the batsmen to make a mistake. Or the trap could come in the way of a cleverly placed field setting.</p>
<p>If we look closely most of the great spinners, have devised their own way of executing those techniques.  The rest are ordinary bowlers who approach spin bowling mechanically as a science and most with a bit of coaching can get there. But the legendary spinners used what ever skill they had to transform spin bowling into an art of it&#8217;s own. Great spinners are not made, they are born.</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2008/12/23/the-art-of-spin-bowling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft joining Apache Qpid and the AMQP working group</title>
		<link>http://rajith.2rlabs.com/2008/11/07/microsoft-joining-apache-qpid-and-the-amqp-working-group/</link>
		<comments>http://rajith.2rlabs.com/2008/11/07/microsoft-joining-apache-qpid-and-the-amqp-working-group/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 22:42:03 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[AMQP]]></category>

		<category><![CDATA[Announcements]]></category>

		<category><![CDATA[Middleware]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Qpid]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2008/11/07/microsoft-joining-apache-qpid-and-the-amqp-working-group/</guid>
		<description><![CDATA[I guess by now many have heard that Microsoft is joining the Apache Qpid project and the AMQP Working Group. Sam Ramji mentioned this during his key note at the Apache Con US 2008. This is indeed great news for both the AMQP working group as well as the Apache Qpid community.
One of the engineers [...]]]></description>
			<content:encoded><![CDATA[<p>I guess by now many have heard that Microsoft is joining the <a href="http://cwiki.apache.org/qpid/index.html">Apache Qpid project</a> and the <a href="http://www.amqp.org">AMQP Working Group</a>. <a href="http://apacheconus2008.crowdvine.com/talks/show/2775">Sam Ramji</a> mentioned this during his key note at the <a href="http://www.us.apachecon.com/c/acus2008/">Apache Con US 2008</a>. This is indeed great news for both the AMQP working group as well as the Apache Qpid community.</p>
<p>One of the engineers from Microsoft <a href="http://port25.technet.com/members/anandeep.aspx">Anandeep Pannu</a>, has <a href="http://port25.technet.com/archive/2008/11/07/finally-dive-into-the-deep-participation.aspx">written very excitedly</a> about participating in Qpid. </p>
<p>In July Sam Ramji <a href="http://port25.technet.com/archive/2008/07/25/oscon2008.aspx">announced a sponsorship</a> for the Apache Software Foundation. It kind of signaled about their intent to get their feet wet with playing an active role in open source. It seems that most large vendors have realized the importance of participating and promoting open source on one hand and also harnessing the power of open source on the other hand. IBM for instance played this strategy very well over the last decade or so. This is very good PR for the Qpid project and hopefully attract more participants and end users to the project. Definitely looking forward to working them in Qpid and the AMQP working group.</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2008/11/07/microsoft-joining-apache-qpid-and-the-amqp-working-group/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AMQP in 10 mins - update</title>
		<link>http://rajith.2rlabs.com/2008/11/07/amqp-in-10-mins-update/</link>
		<comments>http://rajith.2rlabs.com/2008/11/07/amqp-in-10-mins-update/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 16:32:17 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[AMQP]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2008/11/07/amqp-in-10-mins-update/</guid>
		<description><![CDATA[A lot of folks have asked me as to why I have not written the next part in the series after Oct,2007. So I think I owe an explanation.
I guess I started the series a bit early, and at that time the protocol was going through a phase of rapid changes. So I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of folks have asked me as to why I have not written the next part in the series after Oct,2007. So I think I owe an explanation.<br />
I guess I started the series a bit early, and at that time the protocol was going through a phase of rapid changes. So I decided to wait until the dust has settled, as there is no point in writing about something that may change within a short time. However it took the working group a bit longer than expected to thrash out the 0-10 version.<br />
Now the AMQP working group is working towards a 1.0 release. So I think it would be worthwhile to wait until we have firmed up the 1.0 spec as it makes sense to write about a final 1.0 release than an interim version. I don&#8217;t expect a lot to change between 0-10 and 1.0, and most changes would be to remove certain unnecessary complexity in the 0-10 version and also to incorporate any feedback from the folks who worked on implementing the 0-10 version.</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2008/11/07/amqp-in-10-mins-update/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gartner Hype Cycle</title>
		<link>http://rajith.2rlabs.com/2008/10/21/gartner-hype-cycle/</link>
		<comments>http://rajith.2rlabs.com/2008/10/21/gartner-hype-cycle/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 14:08:35 +0000</pubDate>
		<dc:creator>rajith</dc:creator>
		
		<category><![CDATA[cartoon]]></category>

		<guid isPermaLink="false">http://rajith.2rlabs.com/2008/10/21/gartner-hype-cycle/</guid>
		<description><![CDATA[

Art work is licensed under Creative Commons Attribution-NonCommercial 2.5 License.
]]></description>
			<content:encoded><![CDATA[<p><img width="550" height="504" src='http://2rlabs.com/rajith/blog/wp-content/uploads/2008/10/gartner_hype_cycle_cartooon.jpg'' alt='Gartner Hype Cycle' /><br />
<br />
Art work is licensed under <a href="http://creativecommons.org/licenses/by-nc/2.5/">Creative Commons Attribution-NonCommercial 2.5 License</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rajith.2rlabs.com/2008/10/21/gartner-hype-cycle/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
