<?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>Me.Tech()</title>
	<atom:link href="http://riteshnayak.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://riteshnayak.com/blog</link>
	<description>my technology blog</description>
	<lastBuildDate>Wed, 08 Feb 2012 08:01:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Design improvements to car and bike headlights</title>
		<link>http://riteshnayak.com/blog/2012/02/08/design-improvements-to-car-and-bike-headlights/</link>
		<comments>http://riteshnayak.com/blog/2012/02/08/design-improvements-to-car-and-bike-headlights/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 07:54:55 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[bmw]]></category>
		<category><![CDATA[car]]></category>
		<category><![CDATA[inventions]]></category>
		<category><![CDATA[safety]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=541</guid>
		<description><![CDATA[There are many unlit roads and curbs in Bangalore and other places. I have had lots of near-miss accidents while turning into a dark curb or alley. The reason for this is that the headlights on a car and bike don&#8217;t light the way in the direction of your turn. Let me explain with a [...]]]></description>
			<content:encoded><![CDATA[<p>There are many unlit roads and curbs in Bangalore and other places. I have had lots of near-miss accidents while turning into a dark curb or alley. The reason for this is that the headlights on a car and bike don&#8217;t light the way in the direction of your turn. Let me explain with a diagram.<br />
<center><br />
<div id="attachment_542" class="wp-caption aligncenter" style="width: 310px"><a href="http://riteshnayak.com/blog/wp-content/uploads/adaptive_headlights-Copy.jpg"><img class="size-medium wp-image-542 " title="adaptive_headlights - Copy" src="http://riteshnayak.com/blog/wp-content/uploads/adaptive_headlights-Copy-300x113.jpg" alt="Representation of car hadlights " width="300" height="113" /></a><p class="wp-caption-text">Image courtesy bmw.com </p></div><br />
</center></p>
<p>Given above is a diagram of traditional car headlights. The red cone represents my field of vision when I am about to turn and the green cone represents what I should be seeing. When I am turning right, I need to see what&#8217;s on my right, along with what is in front.</p>
<p>Given that we use a steering wheel in a car and handle bars on a bike,  both motion based electromechanical systems which control indicators and speed, why not make that work for lights as well?</p>
<p>Well it turns out, only BMW comes with an optional feature for this, called adaptive headlights. I don&#8217;t know if it is patents that is holding back other companies from doing this, but like seatbelts, this needs to become essential for all vehicles on the road. Here are some thoughts around this:</p>
<p>1. It is important for a car/bike to let the person coming in front know that he/she is about to turn. We have indicators but when people drive on Dip lights, it&#8217;s hard to spot certain sleek looking indicators. One design improvment can be to automatically switch lights to the dim mode while turning or after switching on indicators. Serves two purposes: firstly, the person on the oppposite side can see the indicators, secondly, because of the DIM mode, drivers will natually slow down while taking sharp turns.</p>
<p>2. Another possible implication of having lights that spread to the side of turn is that you might blind the person coming on that road. The automatic dimming of the lights should stop that as well.</p>
<p>If any of this doesn&#8217;t make sense or if I have missed out on something, please let me know. Here is a video of the BMW adaptive lights in action. Isn&#8217;t this something that should be available by default?<br />
<center><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/LdyNdlw8zaA" frameborder="0" allowfullscreen></iframe><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2012/02/08/design-improvements-to-car-and-bike-headlights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to pick a domain name for your next web product  &#8211; Tips</title>
		<link>http://riteshnayak.com/blog/2012/01/20/how-to-pick-a-domain-name-for-your-next-web-product-tips/</link>
		<comments>http://riteshnayak.com/blog/2012/01/20/how-to-pick-a-domain-name-for-your-next-web-product-tips/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 11:54:47 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=534</guid>
		<description><![CDATA[Picking an effective domain name for your web product/service/company is currently at the top of on my list of the hardest things to do for a web startup. For a web startup, domain names can make or break a business. You don&#8217;t want a name like expertsexchange (figure this out). Here is a simple checklist [...]]]></description>
			<content:encoded><![CDATA[<p>Picking an effective domain name for your web product/service/company is currently at the top of on my list of the hardest things to do for a web startup. For a web startup, domain names can make or break a business. You don&#8217;t want a name like expertsexchange (figure this out). Here is a simple checklist for picking a good name:</p>
<ul>
<li>Sit with 3 people at least, preferably from different backgrounds. They will tell you what a shortlisted name signifies to them. <a href="http://flagtrue.com" target="_blank">FlagTrue</a>, the name of my company was picked by a biased set of Computer Science students, but we did it specifically to appeal to the computer science audience. I had a hard time explaining it to my mom.</li>
<li>Use a bulk name checker instead of trying a single one each time. It can get annoying and demotivating trying out individual names. GoDaddy has a Bulk Search option. Works well but doesn&#8217;t store stuff.</li>
<li>Every domain name you can think of will be taken. Domain squatters  are the plague of this earth, but you cannot do anything. Don&#8217;t fret. Try combination of words or clever plays on words.</li>
<li>A good domain name is one which is <strong>short</strong> (preferably under 10 characters), <strong>sticky</strong> (meaning people will not easily forget it), <strong>unique in the line of business</strong> and something that<strong> conveys what the product is about</strong>. Keep a score board of all these attributes for each domain name you pick.</li>
<li>Do not use numbers or short forms. People won&#8217;t know whether the number is a number or characters. For ex: If I saw level3.com on the phone, the other person might think it is levelthree.com. If you are going with the name level3 then ensure you buy levelthree also and redirect it back to the original name.</li>
<li>Same goes for names in languages other than english. When we picked the name Samparkh, we aded the trailing &#8216;H&#8217; but a lot were expecting the domain to just be Sampark. These minor cultural differences can send traffic to a totally different website. A classic example of this is to spell &#8220;Agarwal&#8221;.</li>
<li>Check if there are any premium names that squatters are selling for a good deal. It might be worth investing in a good domain name if it can mean better reach. Also, it&#8217;s better if you can negotiate something before your product/service/company launches and makes some noise.</li>
<li>Try to get a .COM as most people and browsers default to it. Del.icio.us with its quirky and confusing name was still a hit.</li>
<li>Once you decide on a name, disable auto transfer and buy it for 2 to 3 years.  Most popular domain provider&#8217;s mails are borderline spam and you might miss important renewal mails. It is always good to add a reminder on your calendar about 10 days before the domain expires.</li>
</ul>
<p>These are just suggestions. This template is what has helped me and many others pick a good name for their web business. Best of luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2012/01/20/how-to-pick-a-domain-name-for-your-next-web-product-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Robotics &#8211; Awe inspiring demonstrations</title>
		<link>http://riteshnayak.com/blog/2011/12/12/robotics-awe-inspiring-demonstrations/</link>
		<comments>http://riteshnayak.com/blog/2011/12/12/robotics-awe-inspiring-demonstrations/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 17:11:21 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=532</guid>
		<description><![CDATA[The advancement in robotics is breathtaking. Take a look at these two videos, the first one show a robot that flies like a bird. This next video is what I have nightmares about. A humanoid robot that runs at 6 Kms per hour. Reminds me of the Terminator series. Watch this TED talk where Robert [...]]]></description>
			<content:encoded><![CDATA[<p>The advancement in robotics is breathtaking. Take a look at these two videos, the first one show a robot that flies like a bird.<br />
<center><br />
<object width="526" height="374"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talk/stream/2011G/Blank/MarkusFischer_2011G-320k.mp4&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/MarkusFischer-2011G.embed_thumbnail.jpg&#038;vw=512&#038;vh=288&#038;ap=0&#038;ti=1195&#038;lang=&#038;introDuration=15330&#038;adDuration=4000&#038;postAdDuration=830&#038;adKeys=talk=a_robot_that_flies_like_a_bird;year=2011;theme=animals_that_amaze;theme=what_s_next_in_tech;theme=tales_of_invention;event=TEDGlobal+2011;tag=Design;tag=Technology;tag=animals;tag=biomechanics;tag=biomimicry;tag=robots;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2011G/Blank/MarkusFischer_2011G-320k.mp4&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/MarkusFischer-2011G.embed_thumbnail.jpg&#038;vw=512&#038;vh=288&#038;ap=0&#038;ti=1195&#038;lang=&#038;introDuration=15330&#038;adDuration=4000&#038;postAdDuration=830&#038;adKeys=talk=a_robot_that_flies_like_a_bird;year=2011;theme=animals_that_amaze;theme=what_s_next_in_tech;theme=tales_of_invention;event=TEDGlobal+2011;tag=Design;tag=Technology;tag=animals;tag=biomechanics;tag=biomimicry;tag=robots;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"></embed></object></p>
<p></center></p>
<p>This next video is what I have nightmares about. A humanoid robot that runs at 6 Kms per hour. Reminds me of the Terminator series.<br />
<center><br />
<iframe width="480" height="360" src="http://www.youtube.com/embed/FAcgSi6pzv4" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p><br/><br />
Watch this TED talk where Robert Full explains robots that can climb walls, navigate underwater and practically tread any surface or obstacle. He also ends his talk by saying that we must conserve ecology to ensure these secrets from the biological world are not lost. </p>
<p><center><br />
<object width="398" height="374"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talk/stream/2005/Blank/RobertFull_2005-320k.mp4&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/RobertFull-2005.embed_thumbnail.jpg&#038;vw=384&#038;vh=288&#038;ap=0&#038;ti=195&#038;lang=&#038;introDuration=15330&#038;adDuration=4000&#038;postAdDuration=830&#038;adKeys=talk=robert_full_on_animal_movement;year=2005;theme=animals_that_amaze;theme=evolution_s_genius;theme=what_s_next_in_tech;event=TED2005;tag=Design;tag=Science;tag=Technology;tag=evolution;tag=robots;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="398" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2005/Blank/RobertFull_2005-320k.mp4&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/RobertFull-2005.embed_thumbnail.jpg&#038;vw=384&#038;vh=288&#038;ap=0&#038;ti=195&#038;lang=&#038;introDuration=15330&#038;adDuration=4000&#038;postAdDuration=830&#038;adKeys=talk=robert_full_on_animal_movement;year=2005;theme=animals_that_amaze;theme=evolution_s_genius;theme=what_s_next_in_tech;event=TED2005;tag=Design;tag=Science;tag=Technology;tag=evolution;tag=robots;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"></embed></object></p>
<p></center></p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/12/12/robotics-awe-inspiring-demonstrations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Nexus S &#8211; My Experience</title>
		<link>http://riteshnayak.com/blog/2011/10/19/google-nexus-s-my-experience/</link>
		<comments>http://riteshnayak.com/blog/2011/10/19/google-nexus-s-my-experience/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 15:53:53 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=527</guid>
		<description><![CDATA[I ordered my first Android phone, the Google Nexus S about a 4 months ago. Part of my phone was paid for using the prize money I won for building our Augmented Reality Android application. This is my first smart phone and I thought I should share my experiences around my phone. I live in [...]]]></description>
			<content:encoded><![CDATA[<p>I ordered my first Android phone, the Google Nexus S about a 4 months ago. Part of my phone was paid for using the prize money I won for building our <a href="http://riteshnayak.com/blog/2011/07/10/panacea-augmented-reality-contacts-management-and-location-service/" target="_blank">Augmented Reality Android application</a>.</p>
<p>This is my first smart phone and I thought I should share my experiences around my phone.</p>
<div id="attachment_528" class="wp-caption aligncenter" style="width: 410px"><a href="http://riteshnayak.com/blog/wp-content/uploads/large.png"><img class="size-full wp-image-528" title="large" src="http://riteshnayak.com/blog/wp-content/uploads/large.png" alt="" width="400" height="400" /></a><p class="wp-caption-text">Google Nexus S </p></div>
<p>I live in India, a country with an abundance of power outages in the name of load shedding and repair. A feature that I never thought I would use came to my rescue during these dark times. The Wifi hotspot tethering feature. With my 2G connection, on multiple occasions, I was able to connect my laptop to the internet to do some just in time work.</p>
<p>I also use Twitter a lot, so without question the Twitter android app has probably been my most used application. I was able to use applications like <a href="http://foursquare.com" target="_blank">FourSquare</a>, <a href="http://picplz.com/user/itsmeritesh/" target="_blank">PicPlz</a> etc to post pictures and to check for tips and tricks at a given location. My wife and I went to this place where I ordered a dish from a FourSquare tip and loved it.</p>
<p>I have also started fulltime on my own software venture. With my Android, I have been able to stay on top of all the important emails that I get. Helped me a lot when I was meeting investors and prospective customers; Blackberry wielding folk who prefer Email to texting or calls.</p>
<p>I cannot forget Google Maps, that has helped many a times when I was lost in the outskirts of Bangalore and Pune(A city which I knew nothing about, direction wise). I also downloaded an app to control PowerPoint slides which I used once. And thanks to that critical <a href="https://market.android.com/details?id=com.rackspace.cloud.android" target="_blank">Rackspace app</a> that I once used to restart a cloud server in distress. Special mention to <a href="http://shazam.com" target="_blank">Shazam</a> and <a href="http://www.soundhound.com/" target="_blank">SoundHound </a>that I use ever so often to identify those familiar sounding tunes I overhear.</p>
<p>Now with the new Ice Cream Sandwich launch, I am really excited about the reworked OS and can&#8217;t wait to get it on my phone.</p>
<p>Go Android!</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/10/19/google-nexus-s-my-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Panacea &#8211; Augmented Reality Contacts Management and Location Service</title>
		<link>http://riteshnayak.com/blog/2011/07/10/panacea-augmented-reality-contacts-management-and-location-service/</link>
		<comments>http://riteshnayak.com/blog/2011/07/10/panacea-augmented-reality-contacts-management-and-location-service/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 07:13:39 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Architecture - Design]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[socionets]]></category>
		<category><![CDATA[Unsolved problems]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[augmented_reality]]></category>
		<category><![CDATA[contacts]]></category>
		<category><![CDATA[couchDB]]></category>
		<category><![CDATA[face.com]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[ThoughtWorks]]></category>
		<category><![CDATA[vcard]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=514</guid>
		<description><![CDATA[Panacea was the first android application that I helped envision and build. The obnoxious sounding name stems from the fact that we were trying to solve a lot of problems using the application. The team comprised of Navneet, Manohar and Nikhil and I. Here is what the application does. &#8220;Panace is an Augmented Reality application [...]]]></description>
			<content:encoded><![CDATA[<p>Panacea was the first android application that I helped envision and build. The obnoxious sounding name stems from the fact that we were trying to solve a lot of problems using the application. The team comprised of <a title="Navneet Kumar" href="http://www.facebook.com/neet.iitk" target="_blank">Navneet</a>, <a title="Manohar Akula" href="http://www.facebook.com/profile.php?id=711406764" target="_blank">Manohar</a> and <a title="Nikhil Nulkar" href="http://twitter.com/#!/nikhilnulkar" target="_blank">Nikhil </a>and I. Here is what the application does.</p>
<blockquote><p>
&#8220;Panace is an Augmented Reality application that uses real time face/image recognition technology, and provides for Contacts Management and HyperLocal communities inside an Enterprise.&#8221;
</p></blockquote>
<p>You can find the presentation about Panacea below, or find it on Slideshare <a target="_blank" href="http://www.slideshare.net/itsmeritesh/panacea-augmented-reality">here</a>.</p>
<p><center></p>
<div style="width:425px" id="__ss_7233224"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/itsmeritesh/panacea-augmented-reality" title="Panacea - Augmented Reality " target="_blank">Panacea &#8211; Augmented Reality </a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7233224" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/itsmeritesh" target="_blank">itsmeritesh</a> </div>
</p></div>
<p></center></p>
<p>The core idea behind the product is that, inside a closed community, it should be really easy to exchange contact and schedule information. Just like how inside an enterprise there is a Global Address Book and also shared calendaring. Panacea extends that by associating a facial identity with each person in the closed community. I mention closed community a number of times, for even I cannot fathom the privacy implications such an application will have in the public domain. We used <a title="Face.com" href="http://face.com" target="_blank">Face.com</a>&#8216;s face recognition technology to aid in Face Recognition and used <a href="http://opencv.willowgarage.com/wiki/FaceDetection" target="_blank">OpenCV&#8217;s face detection</a> algorithm by accessing their compiled libraries via JNI calls on the android platform.</p>
<p><strong>Scenario 1</strong>: You meet a colleague in your organization or at your local community meet. You need exchange contact information. Now, instead of exchanging visiting cards, you could just switch on our app, point the camera at the person, wait till the algorithm recognizes the person, and then add the person&#8217;s contact information via a single click. Better explained by a video demo of the solution.</p>
<p><center><br />
<iframe width="425" height="355" src="http://www.youtube.com/embed/njxyXry4LuQ" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>Like any pattern matching algorithm, face.com&#8217;s algorithm is also a trained algorithm. Better the sample set or the reference set, better the matching. To make the algorithm work consistently, we need to train the service by sending at least 7 to 8 different photos of the person and associate a unique identifier for that set. When a candidate input is presented, the image clicked via the camera on the phone is sent to face.com and we get back that unique identifier with a matched probability score. Now, this unique identifier could be anything from your corporate id or your twitter handle. The important thing is that there is a backend system which you can query using that unique identifier and retrieve contact details associated with that id.</p>
<p>There is a problem though &#8211; I cannot ask every person in the community to upload 10 mugshots to our system to be included in the training set. I would need a more scalable solution. We solved this problem by providing a training mode in the app itself.</p>
<p><strong>Scenario 2</strong>: If you realized that one of your colleagues or friends isn&#8217;t registered on the service, you can switch on the app and switch to training mode. Start the training by pointing the camera to the person and associate the unique identifier for the person. You can then fill in the contact details yourself or fetch it from the centralized contacts store. Follow the progress bar in the training mode and wait for the training to complete. Once done, any user of the app can now add your recently added contact using the mechanism described in scenario 1. Adding a new user to the application &#038; service is crowdsourced. Again, better explained with a Video demo.</p>
<p><center><br />
<iframe width="425" height="355" src="http://www.youtube.com/embed/j-2LYWieKkM" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>Now that we had sort of envisioned this technology and its working, fleshed out some initial prototypes, we brainstormed about how this technology can be used to solve other problems. I was also in the market to buy a smart phone myself. I did some research and found out that smart phones in India, with Assisted GPS support, started at around Rs 12,000. But high resolution camera phones were selling as low as 6. Also, I was fascinated by the whole location service apps like FourSquare and Gowalla. It turned out that only 13% of all smart phones sold in the world were location aware. This means there was a big market for location based services for non GPS enabled smart phones.  This is how we tried to crack this problem.</p>
<p><strong>Scenario 3</strong>: You have a smart phone with an internet connection but no GPS. You want to use a location based service to get some deals on items, check into the place, or just give some feedback or tips for other travelers.  Our application defines what we call as a PlaceMark, a unique image of some sort which is linked to a location in our service. To perform any of these functions, open our app, point to the place mark and wait for the location features to load up. You will now get a feed of past conversations, tips, tricks shared by people at that place. The owner of the location can also target people by providing them deals for checking in and giving a social recommendation of sorts. You can even use these as mechanisms to receive feedback, complaints or engage in a Q&amp;A at a large conference. The possibilities are endless. The example video shows a distributed discussion happening on the wikileaks issue. You can join this discussion by using our app and start conversing. The app even sends notifications to your phone when new messages come in.</p>
<p><center><br />
<iframe width="425" height="355" src="http://www.youtube.com/embed/7PoLU2rr7IE" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>This was mostly what we came up with. There are plenty more things that can be done with this application, and this, or a similar technology, can be used to solve many other problems.  We also want to take this product to the market and see what responses it receives. Feel free to leave comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/07/10/panacea-augmented-reality-contacts-management-and-location-service/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My new machine &#8211; Thinkpad T410</title>
		<link>http://riteshnayak.com/blog/2011/04/08/my-new-machine-thinkpad-t410/</link>
		<comments>http://riteshnayak.com/blog/2011/04/08/my-new-machine-thinkpad-t410/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 08:58:06 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=509</guid>
		<description><![CDATA[I got myself a new PC.  Most of my friends and acquaintances already know that I am a big Thinkpad fan, and a thinkpad is what I got myself. What I like about the thinkpad : its sturdy build, really crispy keyboard with a high action, the infamous trackball and the battery life. I started [...]]]></description>
			<content:encoded><![CDATA[<p>I got myself a new PC.  Most of my friends and acquaintances already know that I am a big Thinkpad fan, and a thinkpad is what I got myself. What I like about the thinkpad : its sturdy build, really crispy keyboard with a high action, the infamous trackball and the battery life. I started liking the Thinkpad even more after a <a href="http://twitter.com/mhabibp" target="_blank">friend of mine</a> introduced me to the Hardware maintenance manual and all the hardware hackery. This is my machine configuration.</p>
<ul>
<li>Intel i7-620M dual core 2.7GHz</li>
<li>8GB DDR3 RAM</li>
<li>60GB OCZVertex2 SSD 2.5&#8243; with Max Read: up to 280 MB/s and Max Write: up to 270 MB/s</li>
<li>I plan to mount 320GB 7200rpm HDD that shipped with the laptop on the Ultrabay which currently houses the DVD-RW drive using an adapter</li>
<li>NVIDIA NVS™ 3100M, PCI Express® x16 graphics card with 512MB memory (popularly known as Nvidia Optimus)</li>
<li>14.1&#8243; (358mm) WXGA+ (1440&#215;900) display</li>
<li>Dimensions 13.2&#8243; x 9.4&#8243; x 1.1–1.3&#8243; weighing approx 2.3 Kgs</li>
</ul>
<p>Personal win: The SSD rocks. Applications are extremely responsive and boot time for Win7 is averaging at about 10 seconds. I am waiting for the 11.04 release of Ubuntu so that I can dual boot it and test it out.<br />
<center><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/JVaSMMHOBYI" frameborder="0" allowfullscreen></iframe></center><br />
Attached below is a review of the laptop.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/04/08/my-new-machine-thinkpad-t410/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>On the importance of Legacy and being open minded</title>
		<link>http://riteshnayak.com/blog/2011/03/06/on-the-importance-of-legacy-and-being-open-minded/</link>
		<comments>http://riteshnayak.com/blog/2011/03/06/on-the-importance-of-legacy-and-being-open-minded/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 16:28:20 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[rant]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[social office]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=506</guid>
		<description><![CDATA[&#8220;You never know where you are going, until you know where you&#8217;ve been&#8221; There is a big message in that quote. The message being, never underestimate the historical context behind a certain field of study. Take any occupation, a student starts out learning the history behind the field and understands why certain things are done [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;You never know where you are going, until you know where you&#8217;ve been&#8221;</p></blockquote>
<p>There is a big message in that quote. The message being, never underestimate the historical context behind a certain field of study. Take any occupation, a student starts out learning the history behind the field and understands why certain things are done a certain way. The pressure for jobs and commercialization of college education has completely ignored the importance of the historical context and are running with (what educators term as) nextGen syllabus, which helps students secure jobs in the industry.</p>
<p>Just yesterday, I was involved in a debate about doing away with C and C++ in Under graduate Computer Science in favor of languages like Ruby and Lisp. Learning Ruby and Lisp will guarantee you jobs, but not the understanding of why those programming paradigms are so powerful. One can never understand why C++ was a game changer if they didn&#8217;t know C, or why Java was so much better compared to C++. Same is the case with the Ruby. One will never understand the power of  a dynamic language unless they have used static  compiled languages. In the recent past I have met fresh graduates who have not done either C/C++ or Java but have directly used Ruby and NoSql stores instead of a RDBMS. Would I be comfortable recruiting such folk? I don&#8217;t really know. But one thing is for certain, the historical context should almost be an imperative when it comes to technology. In a talk by a senior consultant in my company, he highlighted how they would write code on paper and pass it to a typist who would type on a terminal and run the program. I developed a whole new respect for IDEs.</p>
<p>There is a completely orthogonal view of the world. People with a lot of historical context become really close minded to change and picking up newer technologies, and newer ways of working. During the last two months, I have also been working on a social collaboration platform to be deployed as a platform for knowledge management in my company. The early reactions from youngsters has been phenomenal. The 30+ crowd is still trying to get their head around this concept and in more than one occasion, I have found myself trying to explain how this would be a new way of working and dealing with information overload. I am reminded of reading books about how people were averse to the introduction of the Typewriter, or how in the later part of the 20th century, people were skeptical about the introduction of PC&#8217;s in offices. Industrial automation also created a similar furore as most experts (at that time) thought it would displace human labor and create massive unemployment.</p>
<p>Knowing all of this historical context helps me understand that skeptics aside, the new social way of working will definitely redefine the way of working in an enterprise. In my opinion, the power users of any sort of information system (be it consumption or delivery) will be uncomfortable with the thought of losing their way of consuming information. Picking up a new technology would mean learning new tricks, skills and reworking to get to the status of a power user. But change is inevitable. One has to trust the wisdom of the crowd and become more open minded to change, and accept changes in the way of working, technologies used and so on.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/03/06/on-the-importance-of-legacy-and-being-open-minded/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Continuous Deployment : My first experience</title>
		<link>http://riteshnayak.com/blog/2011/01/30/continuous-deployment-my-first-experience/</link>
		<comments>http://riteshnayak.com/blog/2011/01/30/continuous-deployment-my-first-experience/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 10:26:50 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Architecture - Design]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[continuous delivery]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=495</guid>
		<description><![CDATA[After following a lot of discussions around the devops role, I was eager to put my new found knowledge to use. After i attended a talk by Jez Humble about his new book Continuous Delivery, I was fascinated by the concept of a fully automated deployment script for applications. I am still yet to get [...]]]></description>
			<content:encoded><![CDATA[<p>After following a lot of discussions around the devops role, I was eager to put my new found knowledge to use. After i attended a talk by <a href="http://twitter.com/#!/jezhumble" target="_blank">Jez Humble</a> about his new book<a href="http://continuousdelivery.com/" target="_blank"> Continuous Delivery</a>, I was fascinated by the concept of a fully automated deployment script for applications. I am still yet to get my hands dirty with infrastructure automation tools like <a href="http://www.puppetlabs.com/puppet/introduction/" target="_blank">Puppet</a> and <a href="http://www.opscode.com/chef" target="_blank">Chef</a> but wanted to give Continuous Deployment a shot. Eventually, I hope to utilize this deployment script , along with Puppet and Chef code, and make a self deploying machine configuration. First, the problem.</p>
<p>One of my side projects has a very active code base. We use <a href="http://git-scm.org" target="_blank">Git</a> as our Source Code Management system and <a href="http://hudson-ci.org/" target="_blank">Hudson</a> for Continuous Integration. Since most of the application backend is pretty stable, the bulk of the changes on our trunk are mostly changes in logic, new features , enhancements and bug fixes. We also run a dogfooding instance where we push the latest changes and test our changes. On our Linux server, we use Tomcat as our app container, MySql and <a href="http://cassandra.apache.org" target="_blank">Cassandra</a> for datastores, Solr for indexing and all builds use <a href="http://gradle.org" target="_blank">Gradle</a>. Till now, pushing changes was a manual task. Here is how I automated this task. @<a href="http://twitter.com/prateeksha" target="_blank">prateeksha</a> , who is a unix command line ninja, was kind enough to guide me through the entire process.</p>
<p>Pushing changes involved , updating the code base to the latest master branch, doing the database migrations and restarting the App Container. Though I still have to get my head around database migrations, here is where automation stands now.</p>
<p>- The continuous deployment script can either be triggered by a git Post-Receive hook or by using a Cron Job.</p>
<p>-  If triggered by a Cron job, we need to poll git for changes. I found this neat little script that figures out whether there have been changes to the source repository and prints out the status of the repository.The script is shown below:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
        <span style="color: #007800;">remote</span>=$<span style="color: #000000;">1</span>
        <span style="color: #007800;">o</span>=.git<span style="color: #000000; font-weight: bold;">/</span>remote_cache.<span style="color: #007800;">$remote</span>
        <span style="color: #007800;">n</span>=<span style="color: #007800;">$o</span>.new<span style="color: #007800;">$$</span>
        git ls-remote <span style="color: #007800;">$remote</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #007800;">$n</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$o</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
        <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #007800;">$o</span> <span style="color: #007800;">$n</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
                <span style="color: #000000; font-weight: bold;">then</span>
                        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;No Changes&quot;</span>
                <span style="color: #000000; font-weight: bold;">else</span>
                        <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$n</span> <span style="color: #007800;">$o</span>
                        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Updated&quot;</span>
                <span style="color: #000000; font-weight: bold;">fi</span>
        <span style="color: #000000; font-weight: bold;">else</span>
                <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$n</span> <span style="color: #007800;">$o</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;New remote remembered...&quot;</span>
        <span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>If the return value from this script is &#8220;Updated&#8221; then changes from Git are pulled, Gradle build scripts are run, and the app container(Tomcat) is restarted. Using Hudson&#8217;s wonderful API&#8217;s, you can check whether the latest build of the entire project is successful or not. If it is successful, we can either take Hudson&#8217;s build artifact, or build the project again and deploy it.  Also, a small little utility extracts the log information, date and time of the push and presents it on the App itself. At any point in time, if you want to know what version of the App is actually deployed, you can see a version page which displays deployment time and commit log. Screen shot below.</p>
<div id="attachment_500" class="wp-caption aligncenter" style="width: 310px"><a href="http://riteshnayak.com/blog/wp-content/uploads/Selection_002.png"><img class="size-medium wp-image-500" title="Version infomration of the Continuously deployed Application" src="http://riteshnayak.com/blog/wp-content/uploads/Selection_002-300x71.png" alt="Version infomration of the Continuously deployed Application" width="300" height="71" /></a><p class="wp-caption-text">Click to Enlarge - Version info of the App</p></div>
<p>This has been my first experiment with Continuous deployment, I still need to understand and solve the migrations issue. Next? More experiments with Chef and Puppet coming up.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/01/30/continuous-deployment-my-first-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shutter &#8211; open source alternative to skitch</title>
		<link>http://riteshnayak.com/blog/2011/01/08/shutter-open-source-alternative-to-skitch/</link>
		<comments>http://riteshnayak.com/blog/2011/01/08/shutter-open-source-alternative-to-skitch/#comments</comments>
		<pubDate>Sat, 08 Jan 2011 09:48:11 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[UX-Design-Usability]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=490</guid>
		<description><![CDATA[Shutter is an open source alternative to Skitch, which is a mac only advanced Screenshot utility. This tool will help you capture screenshots  in sections, full screen or multi-monitor mode. You can then do some minor modifications such as adding annotations, highlighting specific regions, adding small icons , free form drawing , cropping etc. It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://shutter-project.org/" target="_blank"><img class="alignleft" title="Shutter Webiste" src="http://shutter-project.org/wp-content/themes/TheProfessional/images/logo.png" alt="Shutter for Ubuntu" width="568" height="56" /></a></p>
<p><a href="http://shutter-project.org/" target="_blank">Shutter</a> is an open source alternative to <a href="http://skitch.com" target="_blank">Skitch</a>, which is a mac only advanced Screenshot utility. This tool will help you capture screenshots  in sections, full screen or multi-monitor mode. You can then do some minor modifications such as adding annotations, highlighting specific regions, adding small icons , free form drawing , cropping etc. It&#8217;s a great utility especially on Ubuntu and will save you the time learning other advanced tools like Gimp. It is also well maintained and is a fairly small install with all its dependencies. I use it intensively especially my work involves a lot of Prototyping, User Experience Design and WireFraming. Great find indeed!</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2011/01/08/shutter-open-source-alternative-to-skitch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De-Google yourself</title>
		<link>http://riteshnayak.com/blog/2010/12/16/de-google-yourself/</link>
		<comments>http://riteshnayak.com/blog/2010/12/16/de-google-yourself/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 05:17:57 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[Trends-Predictions-Inferences]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=486</guid>
		<description><![CDATA[A trend I am seeing nowadays involves people De-Googling themselves. The intention is to not let one public company own all of your private data. By data, I mean everything from your private Email, Calendar , Blog feeds, web search personalization, facebook tracking etc. Luckily I happen to know a few of them who de-googled [...]]]></description>
			<content:encoded><![CDATA[<p>A trend I am seeing nowadays involves people De-Googling themselves. The intention is to not let one public company own all of your private data. By data, I mean everything from your private Email, Calendar , Blog feeds, web search personalization, facebook tracking etc. Luckily I happen to know a few of them who de-googled themselves. Here&#8217;s how they did it, and the tools they used.</p>
<p>- E-mail : It is very hard to let go of Gmail, its wonderful conversation threading and spam filter, but it is possible. For a meager $6 a year you get your<a href="http://godaddy.com" target="_blank"> own custom domain name</a>, something like mine, riteshnayak.com. Then comes the $24 a year email hosting account. You can run multiple email clients like <a href="http://squirrelmail.org/" target="_blank">SquirrelMail</a>, <a href="http://www.horde.org/webmail/" target="_blank">Horde</a> or <a href="http://roundcube.net/" target="_blank">Roundcube</a>. Rackspace also provides their own <a href="http://www.rackspace.com/apps" target="_blank">web + desktop email and calendar </a>services for $2 a month.</p>
<p>-  For reading blog subscriptions (via RSS) there are multiple desktop clients that are available. Newsgator and Opera&#8217;s Blog reader come to mind immediately. If you want a web based solution just like Google reader, try the self hosted <a href="http://feedonfeeds.com/" target="_blank">Feed on Feeds</a>.</p>
<p>- Another important thing would be to make sure your activities are not tracked while you are online. There are multiple ways of achieving this. You could start by using the private browsing mode on Firefox, IE and Chrome. You could also get extensions like <a href="http://www.disconnectere.com/" target="_blank">Disconnect</a>, which disables any third party tracking.</p>
<p>Thats it for now! If you have tools of your own that you use, please share them via comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2010/12/16/de-google-yourself/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Interviews Schminterviews</title>
		<link>http://riteshnayak.com/blog/2010/04/27/interviews-schminterviews/</link>
		<comments>http://riteshnayak.com/blog/2010/04/27/interviews-schminterviews/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 10:53:19 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=482</guid>
		<description><![CDATA[In the last three weeks, I have panel interviewed about 3 people and have reviewed about 4 others in their interview process. I must say, I am surprised at the level of technical skill most of these candidates exhibit during the interviews. People with lot more years of experience than me go dumb founded when [...]]]></description>
			<content:encoded><![CDATA[<p>In the last three weeks, I have panel interviewed about 3 people and have reviewed about 4 others in their interview process. I must say, I am surprised at the level of technical skill most of these candidates exhibit during the interviews. People with lot more years of experience than me go dumb founded when asked trivial questions. I handled interviews for  developer positions and have found it extremely difficult to spot talented people.  There are some, who are really talented,  but cannot express themselves. And then, there are people, who don&#8217;t know shit, but act all Chuck Norris on the interviewers. Are you really determined to find talented people? Then here is what you do. Here are some things that you might <a href="http://www.codeanthem.com/blog/2010/04/how-to-hire-crappy-programmers-the-job-post/" target="_blank">like </a> to <a href="http://www.codeanthem.com/blog/2010/04/how-to-keep-crappy-programmers/" target="_blank">read</a> as well.</p>
<ul>
<li>The Resume: Oh! this one is tricky. Instant brownie points if the resume is LaTex generated. Reason? Well any person who has worked with LaTex would have had to do it for authoring a paper. Any person who understands the effort and rigor involved in authoring papers surely deserves points.   I like a resume to be simple, short and precise. A 7 page resume isn&#8217;t something that I am interested in seeing.  Two or three pages at most.  Here is what I look in a resume: The objective should not look copy pasted and should be something original. I also like to see hyperlinks on a resume; I would definitely like to explore a little more about the stuff that you mentioned in brief. It builds curiosity and that&#8217;s good. And no, I don&#8217;t care if you won the second place in your high school bharatnatyam competition or if you organized your college fest.</li>
</ul>
<ul>
<li>My first question would be the <a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html" target="_blank">fizz buzz</a> question. The question loosely reads as follows: &#8220;<em> Your task is to print numbers from 1 to n. For every multiple of 3, instead of the number you print <strong>fizz</strong> and for every multiple of 5 <strong>buzz</strong>, and for every multiple of 3 and 5, you print<strong> fizz buzz</strong></em>&#8220;.  Take any language that you comfortable with and solve this problem. This is like a tard filter which will let me not waste my time with posers. You will be surprised at the number of people who fumble doing this.</li>
<li>I wont really care if you have worked with JMS, XML, J2ME, AJAX, SSRS, SSIS, JSB, WCS, JSTL, HTML, DHTML, XHTML,  MOSS, SOAP, BO, WPF or any other such acronym. These are just technological deltas which you will eventually have to use. My question will always be as to why did you use such a thing. What were the benefits and such.</li>
<li>If you are interviewing for the role of a developer who works on web technologies, get your basic HTML, JS and CSS right. Brush up on some HTML5, learn about the different security models of browsers, cross site scripting etc And please, for gods sake, know what the boundaries of a web application are. I am sure to throw in the &#8221; Can you connect to a android phone using Javascript&#8221; question and I don&#8217;t expect the answer to be YES.</li>
<li>I have always felt writing programs is always about algorithmic aptitude, intelligent manipulation and handling of data and optimization. So there will be one question in each one of these topics, at least. Make sure you know your data structures really well. I have heard answers about hashmaps being stored sequentially, binary search time complexity being O(n), hashtable complexity being O(n) and so on. According to me programming is all about data structures and making conscious and intelligent choices about them. Also, knowing how to solve a problem is not an end to a problem. See how you can optimize your solution. I am sure to ask an optimization question.</li>
<li>Design : If the position is for a senior developer, I will surely ask an Object Oriented Design question and on conceptual modeling of data. If you don&#8217;t know normalization , ACID properties of data , then read up. Its used in the real world and if you cannot model a student-library database, you seriously have to consider an alternate career.</li>
<li>Off beat:  I am always pushing to see if a developer is passionate about his or her work. I am sure to ask the person, &#8220;What according to you is the best project you have done and why do you think its awesome?&#8221;. This you should answer for at least 5 minutes and should do so passionately.</li>
<li>Contributions to Open Source is definitely a plus. Even if you released a project that no one other than you downloaded and used, its better to put that in your resume to earn brownie points.</li>
<li>If I have the time and the resources, I would encourage another round of coding. In their favorite language and IDE, but without being connected to the internet. Or I would love to give them pre written buggy code that they should help me debug. That&#8217;s more of a hands on approach and it helps in a couple of ways.</li>
<blockquote>
<li>1. Most dev&#8217;s like to write code and would not like to read pre-existing code. Most of the times though, its not possible to keep writing new code, you will have to look at old code and debug it.</li>
<li>2. A developer good at debugging is always an asset to a teaam.</li>
</blockquote>
</ul>
<p>Well, this mostly what I tend to do in an interview. If you have more interviewer/interviewee specific points, questions, share them with me.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2010/04/27/interviews-schminterviews/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Extending jQuery validation plugin &#8211; custom validation</title>
		<link>http://riteshnayak.com/blog/2010/01/05/extending-jquery-validation-plugin-custom-validation/</link>
		<comments>http://riteshnayak.com/blog/2010/01/05/extending-jquery-validation-plugin-custom-validation/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 09:27:50 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=479</guid>
		<description><![CDATA[JQuery validation plugin has saved me hours of development time on projects. It contains definitions for most validation tasks that you would need, including AJAX based validations. But if you have to do anything more than the ordinary, you have extend the library yourself. Here&#8217;s an example of an extension I wrote : Functionality : [...]]]></description>
			<content:encoded><![CDATA[<p>JQuery validation plugin has saved me hours of development time on projects. It contains definitions for most validation tasks that you would need, including AJAX based validations. But if you have to do anything more than the ordinary, you have extend the library yourself. Here&#8217;s an example of an extension I wrote :</p>
<p>Functionality : I want to capture the twitter handle of a user on a form. Most users will enthusiastically enter the entire URL like http://twitter.com/itsmeritesh, some will leave out the http:// and enter the rest. I wanted to validate that the username was a single word, didn&#8217;t contain parts of a URL (mainly slashes) and didn&#8217;t mind it being empty.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> <span style="color: #006600; font-style: italic;">// HTML Code</span>
<span style="color: #006600; font-style: italic;">// &lt;form name=&quot;myform&quot;&gt; </span>
<span style="color: #006600; font-style: italic;">// &lt;input type=&quot;text&quot; id=&quot;twitterUrl&quot;&gt; &lt;label for=&quot;twitterUrl&quot; /&gt;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> isEmpty<span style="color: #009900;">&#40;</span>Val<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>Val.<span style="color: #660066;">length</span><span style="color: #339933;">==</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	      <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span> Val.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	      <span style="color: #009900;">&#123;</span>
	            <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">&quot; <span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span> Val.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span> <span style="color: #009900;">&#41;</span> 
	            <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	      <span style="color: #009900;">&#125;</span>
	       <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
 jQuery.<span style="color: #660066;">validator</span>.<span style="color: #660066;">addMethod</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;handleOnly&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		 <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>isEmpty<span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
		 <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>value.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot; &quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>value.<span style="color: #660066;">search</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		 <span style="color: #000066; font-weight: bold;">else</span>
			 <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>	  
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Please specify only one word&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#myform&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">validate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    	rules<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>		
    		twitterUrl <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>  handleOnly<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #009900;">&#125;</span>
                 <span style="color: #009900;">&#125;</span>
      messages<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
		twitterUrl<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span> handleOnly <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Only your twitter handle &quot;</span> <span style="color: #009900;">&#125;</span>
               <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>handleOnly is a new extension written by using the jQuery.validator.addMethod() method. The rule then specifies whether the return from the function must be true or false, in my case its true. The message is displayed when the condition is not met by the value. </p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2010/01/05/extending-jquery-validation-plugin-custom-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bookmarklets are as bad as software on a CD</title>
		<link>http://riteshnayak.com/blog/2009/12/19/bookmarklets-are-as-bad-as-software-on-a-cd/</link>
		<comments>http://riteshnayak.com/blog/2009/12/19/bookmarklets-are-as-bad-as-software-on-a-cd/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 07:57:54 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Architecture - Design]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=467</guid>
		<description><![CDATA[Bookmarklets are funny pieces of software. Even though its primarily used in the web browser, mainly to perform small nifty tasks, its one resource that you have no control over after its deployed. Unlike Mozilla addon&#8217;s that prompt for an update, general websites which update when refreshed, bookmarklets are almost as archaic as delivering software [...]]]></description>
			<content:encoded><![CDATA[<p>Bookmarklets are funny pieces of software. Even though its primarily used in the web browser, mainly to perform small nifty tasks, its one resource that you have no control over after its deployed. Unlike Mozilla addon&#8217;s that prompt for an update, general websites which update when refreshed, bookmarklets are almost as archaic as delivering software over a CD. Lets take an example of a badly designed bookmarklet: The example below is the Press This bookmarklet distributed by wordpress initially. ( I have changed some of the values of course)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">javascript<span style="color: #339933;">:</span>
   <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">userAgent</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Safari'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>20<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=%</span>200<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
         Q<span style="color: #339933;">=</span>getSelection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
    Q<span style="color: #339933;">=</span>document.<span style="color: #660066;">selection</span><span style="color: #339933;">?</span>document.<span style="color: #660066;">selection</span>.<span style="color: #660066;">createRange</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #339933;">:</span>document.<span style="color: #660066;">getSelection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
   location.<span style="color: #660066;">href</span><span style="color: #339933;">=</span><span style="color: #3366CC;">'http://wordpress.php?username=blah&amp;amp;text='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">&#40;</span>Q<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&amp;amp;popupurl='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">&#40;</span>location.<span style="color: #660066;">href</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>You will see that this is calling a RESTful implementation of some service with query parameters and the whole code is stored and rendered from inside the bookmarklet. Lets leave the security aspects of this implementation aside, that will require another post in itself. Such a bookmark is a nightmare waiting to happen. Imagine the trouble you would face if you changed the implementation tomorrow. You will have to write to ensure backward compatibility or take the user to a page where he/she can upgrade to the newest version of the bookmarklet. This is a bad way of delivering software.  </p>
<p> Ideally, the bookmarklet in accordance with a shortcut/bookmark must mainly be a pointer to the actual web resource. Even for trivial bookmarklets, make sure you follow this design principle because you might want to do something different or more advanced later on. I am sure you have come across situations where you realized the bookmarklet you wrote didn&#8217;t work on a browser like Opera or Safari. It may be too late to correct it later on if people have already installed it on their browsers. </p>
<p>Lets now take a bookmarklet that loads the code to be executed from a script on the web. This is now the preferred means of deploying bookmarklets as it puts the control back into the hands of the web developer. This example is from the Friendfeed bookmarklet that lets you share things on FriendFeed.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> javascript<span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    var<span style="color: #339933;">%</span>20e<span style="color: #339933;">=</span>document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    e.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'type'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'text/javascript'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    e.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'src'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'http://someserver.com/bookmarkletcode.js'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   document.<span style="color: #660066;">body</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>All this bookmarklet does is to append a new script tag in your html page and assigns the source to the bookmarklet source. The difference now is that there is no code on the client side that is tied to an implementation. You can change the code in the bookmarkletcode.js as and when you feel necessary and be assured that the people using your bookmarklet will always use the latest version. </p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/12/19/bookmarklets-are-as-bad-as-software-on-a-cd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whats common between Free online ads and Open source</title>
		<link>http://riteshnayak.com/blog/2009/08/07/whats-common-between-free-online-ads-and-open-source/</link>
		<comments>http://riteshnayak.com/blog/2009/08/07/whats-common-between-free-online-ads-and-open-source/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 12:20:04 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[rant]]></category>
		<category><![CDATA[socionets]]></category>
		<category><![CDATA[Unsolved problems]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=464</guid>
		<description><![CDATA[Disclaimer: I am not an Open Source hater. In fact, I am quite the opposite. I believe that for a innovative software marketplace to exist, there must be an equal mix of open and closed source softwares. This also borders on a project that I did on multiagent systems. There are claims that Open Source [...]]]></description>
			<content:encoded><![CDATA[<p><em>Disclaimer: I am not an Open Source hater. In fact, I am quite the opposite. I believe that for a innovative software marketplace to exist, there must be an equal mix of open and closed source softwares. This also borders on a project that I did on multiagent systems. </em></p>
<p>There are claims that Open Source will one day completely displace closed software. Same goes with free online advertising, sometimes also referred to as ad exchanges, where a person places an ad on his/her site and in turn gets his/her ad placed on somebody else&#8217;s site. There are claims that free online advertising will one day displace Google&#8217;s monopolistic hold on online advertising. Frankly I think most of these claims are exaggerated and baseless to a certain extent.</p>
<p>Am I the only one who has a problem with transactions that do not obey the traditional laws of Economics? The market, or as Adam Smith would say &#8211; the foundations of human society,  runs on the buy-sell model. When something is free, it means other non quantifiable commodities get traded, like goodwill and trust.  In such circumstances fairness is the biggest casualty. But is there really a model which can ensure fairness in these situations ?</p>
<p>Yes, there are plenty of trust based networks at play in our real life, but they all reach a saturation point. A typical game theoretic scenario, the person to defect first gets a very high payoff ; In a network, everyone else suffers. People will cheat, one way or another. Like I mentioned before, fairness becomes a higly debatable issue. Though, the <a href="http://en.wikipedia.org/wiki/Categorical_imperative" target="_blank">categorical imperative </a>bestows humans with decision making powers, it doesn&#8217;t state the thresholding for these decisions. The only final outcome of these networks is that one person is going to hit it big and make the others suffer.</p>
<p>Naturally the follow up question will be:  how does Open source survive? I explain this using results from game theory. In any homogeneous population, ie either a defecting or a co-operating , a small group of people,  co-operating with each other while defecting against the general consensus , always has the ability to hold their own and, in some cases, even win against the entire population. Examples of this are plenty in real life,  for ex: corruption or the mafia. So, as long as that small bunch of people stay loyal to each other, such networks will continue. Open Source, is slightly a more complex beast than I described it to be, but it broadly falls into the category I mentioned.</p>
<p>Incentive mechanisms like reputation points, virtual currency etc usually try and emulate a real world materialistic economy, but they are limited in their reach and appeal. Eventually, people loose the initiative to compete for these non materialistic resources. Besides, in a medium such as the internet, where identity itself is questionable, how will people trust each other. Has anyone ever wondered if those mails, which inform you of the billions you have won, were ever real? I guess not.</p>
<p>In conclusion,  I ask, is there some mechanism design or a strategy that can ensure fairness (provided its defined accurately) whilst ensuring the continuing growth of such trust based networks ?</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/08/07/whats-common-between-free-online-ads-and-open-source/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>One Decade of Programming</title>
		<link>http://riteshnayak.com/blog/2009/07/24/one-decade-of-programming/</link>
		<comments>http://riteshnayak.com/blog/2009/07/24/one-decade-of-programming/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 06:41:41 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[funny]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[Suggested Reading]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=458</guid>
		<description><![CDATA[Sometime around July 1999 was the time I wrote my first &#8220;Hello World&#8221; program.  Yes, its been 10 years since I started programming, and I dont mean L R L T of Logo. In fact, I wrote some BASIC code as early as 1995-96, but I will skip that for reasons beyond the scope of [...]]]></description>
			<content:encoded><![CDATA[<p>Sometime around July 1999 was the time I wrote my first &#8220;Hello World&#8221; program.  <strong>Yes, its been 10 years since I started programming</strong>, and I dont mean L R L T of Logo. In fact, I wrote some BASIC code as early as 1995-96, but I will skip that for reasons beyond the scope of this post.</p>
<p>I remember liking programming for lots of reasons, but one which I particularly remember. Unlike the other subjects in school, like math or physics,  programming had no boundaries or a legacy to deal with. By legacy, I mean there were no equations, constraints and I didn&#8217;t have to reciprocate what some mathematician proved 400 years ago. I have always enjoyed freedom and programming gave me that freedom to express myself.  I guess, I can claim that <strong>most good programmers have taken up programming because it lets them play God or be creationists of some complex entity</strong>.</p>
<p>Anyway, there are a lot of interesting and fun facts through these ten years and I shall pen some down.</p>
<ol>
<li><strong>BASIC</strong> was my first programming language. <strong>PASCAL was probably my first compiled language</strong>.</li>
<li>I wrote my first sorting routine (<em> an act I call, truly understanding the programming abstraction</em>) sometime during Jan 2000.</li>
<li>I got my first computer in 2001. AMD Athlon 1.7 GHz with 256 MB Ram and 40 Gb harddisk . &#8220;<strong>OMG 40GB</strong>&#8221; , was my friends reaction.</li>
<li><strong>I disliked C early on</strong>, due to my PASCAL roots, but grew fond of it later on when I completed my first large scale project ( A linux text editor, which I proudly wanted to call, <strong>&#8220;Better than VI</strong>&#8220;). This is also where I wrote <strong>my first recursive functionality</strong> which resulted in people actually wanting to read and understand my code.</li>
<li><strong>My first exposure to Linux and OSS was in 2002</strong>, I think it was <strong>RedHat linux 7.1</strong> with running Xwindows.</li>
<li>I almost lost my entire project due to a floppy malfunction. USB&#8217;s were expensive and uncommon then. CD writers expensive.</li>
<li>I <strong>learnt about data structures in 2002</strong>.  My lecturer, one of the few good ones, was kind enough to teach us the intuition behind data structures and write the implementations ourselves. Our other lecturers taught programming from a book and expected us to replicate the programs written in the book.</li>
<li>I would like to thank  my data structures lecturer who spent hours helping me debug and correct programs. It was probably the first time I looked at code from an outside perspective and yes, I realized the importance of indenting code then and there. <strong>I have never not indented my code again.</strong> (Remember we are still in 2002).</li>
<li>I learnt about OO during christmas vacations of 2002. Loved it. Loved the paradigm shift in the way I thought about programs</li>
<li><strong>My first OO program was one class with 50+ methods in it (Yup, there was nothing OO about it, but its a start)</strong></li>
<li>My first large scale OO project was building a <strong>Paint like utility using C++</strong>. I am still proud of this work because I learnt about programming abstractions and class reponsibilities here. I still remember writing<strong> my first button class </strong>which was fully reponsible for itself.</li>
<li>I <strong>learnt PERL in 2004</strong> and wrote my first web application. An online messaging, calendar and collaboration utility for friends and corporates. ( <strong>yes, this was my first social app</strong>). When I saw Myspace very soon after that ( MySpace was still pretty bare in terms of features then) the only difference I saw was that other people could see who my contacts(friends) were and network with them.</li>
<li>When I first discovered databases (2003), I thought, &#8220;wow, somebody made my file I/O&#8217;s really easy&#8221;. It was also an amazement because I had thought of a unified file writing and reading mechanism to solve all my I/O woes. Problem was getting it to work with many languages. I couldn&#8217;t get my head around it and thats when I learnt about databases. Imagine my surprise and rejoice. <strong>The first database I used was Oracle and later MySQL </strong><strong>( it wasn&#8217;t even relational then)</strong>. <strong>My database project earned me 100/100 in my finals. </strong></li>
<li><strong>Compiler Design was one of my favorite subjects</strong>. I loved the fact that I could understand how they build programming languagues. Lex Yacc was probably the best thing that ever happened to programming.<strong> <a href="http://prateekshac.com" target="_blank">Prateeksha </a>and I wrote the specifications for a shift reduce parser for C++.</strong> We used an A1 sized sheet of paper to write down the shift reduce matrix. After two full days writing the Shift Reduce rules, we realized we had messed up somewhere.</li>
<li>I wrote a prototype of my CASE tool in 2004.  My proud entry to the world of .NET. I had my official copy of Visual Studio.NET 2003 and .NET 1.1 . <strong>This CASE tool would eventually become my fnal semester project and also enter Microsoft&#8217;s Imagine Cup.</strong> We reached the Nationals for the competition. I called it <a href="http://dzine.sourceforge.net" target="_blank">Dzine</a>.</li>
<li>Even though I had learnt java in 2004, I didnt use J2EE till late 2005. when I started writing simple J2EE apps. I also figured that javascript, that language I had used to validate my controls in HTML (in 2004) , had suddenly taken the world by storm. <strong>Everybody was talking about it. Web 2.0. </strong></li>
<li>I sat for two whole days to figure out how yahoo mail was autocompleting email addresses I typed. After two days and a whole lot of searching, <strong>I learnt about AJAX</strong>. I was already on Gmail by then and didnt really understand the underlying plumbing that was holding the application together.</li>
<li>Within the next 4 months I put AJAX and J2EE together to work on <a title="Samparkh" href="http://samparkh.com" target="_blank">Samparkh </a>with <a href="http://prateekshac.com" target="_blank">Prateeksha</a>.<strong> I wrote an online chat application using AJAX ( inspired by Meebo)</strong>. Remember this was a time when <a title="firebug" href="http://getfirebug.com" target="_blank">firebug</a> wasn&#8217;t around and I used a tool called <a href="http://www.mozilla.org/projects/venkman/" target="_blank">Venkman</a>, which I am sure many of you haven&#8217;t even heard of.</li>
<li>Then, Grad school happened and so did Microsoft, and the list of wonderful projects that I did during the two years I spent there.</li>
<li>Special mention to <a title="The Big Kahuna" href="http://riteshnayak.com/bigkahuna.html" target="_blank">BigKahuna</a>, which took almost two years to perfect and won the <a href="http://www.google.co.in/intl/en/productprodigy/awards09.html" target="_blank">Google Product Engineering Competition</a> 2009.</li>
</ol>
<p>Am I a good programmer? I dont know. But, I will continue to remain a programmer. Most of my friends know that I dont take sides. By sides, I mean OSS v/s Closed source, Linux vs Windows , Google vs Yahoo, and this is because of the vast and varied experiences I have had with all these different entities during programming. They all have a special place in my heart and I cannot choose one over the other. Programming is changing fast, and all I can hope for is that that I dont wear out of ideas or skills to call myself a programmer in the years to come.</p>
<p><a title="All my projects" href="http://riteshnayak.com/mywork.html" target="_blank">A list of all the wonderful projects that I have pursued over the years is available here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/07/24/one-decade-of-programming/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>State of higher education in India with a focus on Computer Science</title>
		<link>http://riteshnayak.com/blog/2009/06/15/state-of-higher-education-in-india-with-a-focus-on-computer-science/</link>
		<comments>http://riteshnayak.com/blog/2009/06/15/state-of-higher-education-in-india-with-a-focus-on-computer-science/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 09:50:17 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=452</guid>
		<description><![CDATA[I came back from attending a session which spoke about the state of graduate education in India and here is the summary: Just over 450,000 students in India graduate with an Engineering degree 150,000 students amongst them with a degree in either Computer Science or Information Technology. There are about 1500 Engineering colleges in India. [...]]]></description>
			<content:encoded><![CDATA[<p>I came back from attending a session which spoke about the state of graduate education in India and here is the summary:</p>
<ul>
<li>Just over 450,000 students in India graduate with an Engineering degree</li>
<li>150,000 students amongst them with a degree in either Computer Science or Information Technology.</li>
<li>There are about 1500 Engineering colleges in India.</li>
<li>Many of these colleges don&#8217;t even have a full professor on their rolls.</li>
<li>Currently there are about 750 students pursuing a Phd in 15 of the most reputed institutions in the country which means that, about 80 to 90 students graduate with a Phd from one of the 15 reputed institutions in India.</li>
<li>The 15 reputed institutions include the IIT&#8217;s, NIT&#8217;s, two of the IIIT&#8217;s (Hyderabad and Bangalore) and some autonomous institutions like BITS and Vellore.</li>
<li>The percentage of students who take up graduate education after their engineering in India is drastically low.</li>
<li>About a quarter of the students who secure Phd&#8217;s from universities from the US are Indians.</li>
<li>Students of Indian and Chinese origin make up half the graduate schools students in America.</li>
<li>Most people who secure their Phd&#8217;s from universities in India either join small and focused research groups in IT companies or take up faculty positions.</li>
<li>This year the amount of students applying for graduate education has increased dramatically, which only is reassuring evidence that graduate education is seen as a substitute for jobs and not as something of value.</li>
<li>A couple of IIT&#8217;s got about 700 applications for masters and phd positions.</li>
</ul>
<p>Apart from all this the research output in India is not very high. Groups doing theory are considered to be doing some of the state of the art research, the other departments are not very highly regarded (I have a problem with this generalization, but we will keep that for another discussion). The researchers present in the discussion had plenty of points to contribute for the dismal state of higher education and some of the points mentioned were :</p>
<ul>
<li>Lack of good, trained and motivated faculty members. This was attributed to the fact that salaries in academia were not on par with that of the industry. (pay commission&#8217;s revisions should do some good in this direction)</li>
<li>Lack of exposure to opportunities, challenges and rewards of research careers. ( this is true for colleges that are not very reputed, the quality of the faculty members are not up to the mark, which means they don&#8217;t have enough exposure &#8230; you get the point)</li>
<li>Societal pressures for securing jobs, that too through college placements, rather than pursuing something that the student really wants to do. A survey of the choices of the students during the engineering seat selection process will ascertain this fact. I even know of people who took up courses they had no interest in just because it was in a college where the placements were good.</li>
<li>Lack of funding for graduate students to attend conferences, workshops etc. ( though this was contested by a lot of people, I think , the problem lies in making the students aware of the funds that are available for such purposes )</li>
<li>Discrimination against the students who graduate from the IIT&#8217;s versus other institutions. (though strong alumni networks are not anything new, other colleges should target to strengthen their alumni networks and not work as silo&#8217;s )</li>
</ul>
<p>This is where I found the IIIT&#8217;s (particularly Hyderabad and Bangalore) to be very innovative in their approach. They are situated in the heartland of what can be considered seat of innovation in India. Both of them have strong collaboration with the Indigenous and multinational companies based out of their respective cities and provide for a wonderful platform for students to explore a mix of both academic research and industry relevant parts of the information technology industry. Both IIIT-H and IIIT-Bangalore have achieved recognition for their quality in the industry and academia, and that too in good time. I am positive that in a few years time, these institutions will be deeply connected to the research and development communities of the information technology industry in India  and will contribute significantly to the intellectual output of the country.</p>
<p><em>disclaimer : the numbers mentioned in this post are thanks to Ashwani Sharma, part of the External Research Programs  team at Microsoft Research India. </em></p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/06/15/state-of-higher-education-in-india-with-a-focus-on-computer-science/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Design Patterns Quick Reference</title>
		<link>http://riteshnayak.com/blog/2009/05/26/design-patterns-quick-reference/</link>
		<comments>http://riteshnayak.com/blog/2009/05/26/design-patterns-quick-reference/#comments</comments>
		<pubDate>Tue, 26 May 2009 10:10:30 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Architecture - Design]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=447</guid>
		<description><![CDATA[I am back to designing some software and want to use all my knowledge of Object Orientation and patterns to tackle common problems with design. I found this great reference for the most commonly used design patterns that I must share. It lists all of the core design patterns, all 23 of them,  listed in [...]]]></description>
			<content:encoded><![CDATA[<p>I am back to designing some software and want to use all my knowledge of Object Orientation and patterns to tackle common problems with design. I found this great reference for the most commonly used design patterns that I must share. It lists all of the core design patterns, all 23 of them,  listed in the gang of four book. If you know what this is, take a print out of this and revisit your designs. Thanks to Mark Turansky for the <a href="http://blog.markturansky.com/archives/32" target="_blank">original upload</a>.</p>
<table border="0">
<tbody>
<tr>
<td>
<p><div id="attachment_449" class="wp-caption alignnone" style="width: 236px"><a href="http://riteshnayak.com/blog/wp-content/uploads/designpatterns2_sm.jpg"><img class="size-medium wp-image-449" title="designpatterns2_sm" src="http://riteshnayak.com/blog/wp-content/uploads/designpatterns2_sm-226x300.jpg" alt="Design Patterns card 2" width="226" height="300" /></a><p class="wp-caption-text">Design Patterns card 2</p></div></td>
<td>
<p><div id="attachment_448" class="wp-caption alignnone" style="width: 238px"><a href="http://riteshnayak.com/blog/wp-content/uploads/designpatterns1_sm.jpg"><img class="size-medium wp-image-448" title="designpatterns1_sm" src="http://riteshnayak.com/blog/wp-content/uploads/designpatterns1_sm-228x300.jpg" alt="Design patterns card 1" width="228" height="300" /></a><p class="wp-caption-text">Design patterns card 1</p></div></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/05/26/design-patterns-quick-reference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What goes into a good resume</title>
		<link>http://riteshnayak.com/blog/2009/04/28/what-goes-into-a-good-resume/</link>
		<comments>http://riteshnayak.com/blog/2009/04/28/what-goes-into-a-good-resume/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 13:10:44 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=444</guid>
		<description><![CDATA[I will be graduating soon and I am looking out for good positions in Bangalore. My areas of interest can be found here. As a result, its time for me to do my resume again. I have always wondered as to what makes a good resume. Should there be an objective? I mean, its a [...]]]></description>
			<content:encoded><![CDATA[<p>I will be graduating soon and I am looking out for good positions in Bangalore. My areas of interest can be found <a title="About me" href="http://riteshnayak.com/about.html" target="_blank">here</a>. As a result, its time for me to do my resume again. I have always wondered as to what makes a good resume. Should there be an objective? I mean, its a resume and it means you are looking for a job, so why the objective? Or should you put your achievements ? The right question would be, what have you achieved that will be looked upon as achievements by others? Should I put experience above education? Should I put that section called personal info at the end?</p>
<p>Give me your inputs as to what should go into a resume and what shouldn&#8217;t. If this turns out to be a good discussion, I am sure it will help out a lot of people like me.</p>
<p>Update: After receiving some feedback about my own resume, I am adding some more tips.</p>
<ul>
<li>Even if you don&#8217;t believe that technology matters ( like I do), you have to put technologies that you know in your resume. This is required as the HR&#8217;s who look at the resume&#8217;s usually filter out resumes based on skills mentioned. Not having the skills column is only going to get your resume away from good opportunities.</li>
<li>Its very important that you provide your contact information in multiple forms. Phone number, at least two email id&#8217;s, home phone etc.</li>
<li>Nobody cares that you won a first prize in your school&#8217;s annual dancing competition or that you have helped organize your college fest. A recruiter told me that such things are good only if you are applying for BPO jobs where you have to prove your leadership skills.</li>
<li>Do not write essays about your projects. Leave it short and let the recruiters/interviewers quiz you about the same. This gives more time for conversation and a healthy dialogue.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/04/28/what-goes-into-a-good-resume/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Limitations and Challenges in Cloud Computing for Applications</title>
		<link>http://riteshnayak.com/blog/2009/04/13/limitations-and-challenges-in-cloud-computing-for-applications/</link>
		<comments>http://riteshnayak.com/blog/2009/04/13/limitations-and-challenges-in-cloud-computing-for-applications/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 14:06:04 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Architecture - Design]]></category>
		<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[Trends-Predictions-Inferences]]></category>
		<category><![CDATA[Unsolved problems]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=441</guid>
		<description><![CDATA[I was supposed to be involved in a discussion about cloud computing at Cloudcamp Bangalore, but due to other commitments, I could not attend the event. I had a small writeup about the limitations and challenges in Application clouds. Here is the full text of it. Cloud Computing is a way of providing dynamically scalable [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>I was supposed to be involved in a discussion about cloud computing at Cloudcamp Bangalore, but due to other commitments, I could not attend the event. I had a small writeup about the limitations and challenges in Application clouds. Here is the full text of it.</em></p></blockquote>
<p>Cloud Computing is a way of providing dynamically scalable and available resources such as computation, storage etc as a service to users who can use it to deploy their applications and data. Cloud Computing can handle data in both the public and the private domain. But this seemingly harmless way of thinking about building applications has its own set of issues.I am primarily referring to application cloud providers, the kind where you deploy your applications. Not storage and service clouds. Google AppEngine would be a good example for the cloud that I am describing. I note some of them here :</p>
<p><strong>From the Users perspective:</strong></p>
<ol>
<li>New unstructured and non standard paradigm of programming: Each cloud has its own supported programming language and syntax requirements for programming, though most of these clouds expose the typical hashtable based cache and datastore interfaces. There is an urgent need for standardization of interfaces and methods of programming them. One of the reasons why shared hosting environments work great is because , as a programmer, I know that I can move my PHP/PERL code to another server and it will work without too much of a fuss. Moving from one of the dozen odd cloud providers to another requires considerable developmental efforts, not to forget time (for businesses, this could spell doom).  A look back at history shows languages like SQL, C etc being standardized to stop exactly this sort of undesirable proliferation.</li>
<li>Restrictions on the programming model : For cloud based applications to be highly available, they must be easy to dynamically mirror on multiple machines. Once these applications are mirrored, they can be served on demand by load balancing servers which makes them highly available and the user doesn&#8217;t face delays in being serviced. This is an old trick used by busy websites from the early days of web publishing but these solutions were custom built for websites. So, extending this concept to cloud based platforms, servicing thousands of applications, mandates the platform providers to automate this task of replication and mirroring. This job is easier said than done. This process can be made seamless when the program stores as little state information as possible. By state, I mean transactional variables, static variables, variables in the context of the entire application etc. These things are almost a given in traditional programming environments but are very hard to come by in cloud based environments. The unnatural way of dealing with this situation is using the datastore or the cache to store state of an application. There are a lot of restrictions like lack of privileges to install third party libraries, no access to file system to write files etc ( which forces you to use the datastore and pay for it)</li>
<li>A good local debugging experience: A good local development environment, debugging experience is a must for programming on the cloud. Most cloud providers do not provide good local development environments. There is also a lack of good IDE&#8217;s that can help with programming and debugging programs written for the cloud. The providers that do provide a local debug experience, do not simulate real cloud like conditions. Both from my personal experience and from conversations with other developers, I have come to realize that most people face problems when moving code from their local development servers to the actual cloud. This is only due to inconsistencies in the behavior of the local dev env compared to the cloud.</li>
<li>Appropriate metrics and documentation of programming best practices : On a cloud, since a user pays for almost every CPU cycle, appropriate metrics on usage of processing time and memory must be presented to the users. Typically a profile of the application with function names and their corresponding time taken, memory used, processing cycles used will definitely help the developer tune his/her code to optimize on usage of processing power. The best solution for this is for cloud providers to abstract common code patterns into optimal libraries so that the users can be assured that they are running the most optimal code for a certain operation. An example of this is Apache PIG, which gives a scripting like interface to Apache Hadoop&#8217;s HDFS for data analysis. Also, Most cloud providers do not provide enough statistics and also profiling capabilities.</li>
</ol>
<p><strong>From the providers perspective:</strong></p>
<p>Here I look at challenges that cloud providers have to face:</p>
<ol>
<li>Ensuring availability of the cloud: This proves to be crucial as Clouds host critical business applications, for whom, downtime would mean monetary losses. Effective monitoring and load balancing solutions are to be built. Most clouds employ virtualization technology to get the most out of any resource. In such cases, tools should be written to figure out a resource hog early and move the application to a more powerful grid or a machine, so that the other users get their share of the cloud without delays.</li>
<li>Ensuring Consistency: Both the data and code is replicated on the cloud and maintaining consistency of data is extremely crucial. This is the reason why most transactional updates are not allowed on the cloud. Example: sequence objects, which are almost a given in traditional databases are not provided, probably because maintaining state across machines for such statements is non trivial. Problems like distributed updates, locking, partitioning, sharding etc  arise when dealing with data. Such constructs are to be provided to the users as most of it is given in the non cloud deployment space.<br />
Most datastores provided by cloud vendors (except the ones that provide cloud based database services) do not support relational models. Which means all object relations have to be programmatically established. This could always lead to bad code, unnecessary joins, cascading problems and tons of other problems that developers faced before working with relational datastores.</li>
<li>Program verification : One of the biggest worries about deploying applications on the cloud is the correctness of the program in execution. Erroneous conditions, like infinite loops, can not only put the machine at the risk of being overloaded and unavailable, but also cost the user a significant amount of money. Tools like static analysis should be used to analyze code uploaded on the cloud and it should be checked for infinite loops, possible race conditions,  null references, unreachable code etc. The code uploaded should also be optimized or suggestions should be provided to the users about how they could optimize code to best utilize the available resources.</li>
</ol>
<p><strong>Conclusion </strong>: The cloud should become a complete nonrestrictive platform for applications. There should be no restrictions on the constructs, functionality and privileges on the cloud. Also, it should be dead simple to move everyday applications onto the cloud without too much of rework. This could mean writing migration utilities, import/export options and other artifacts that make the transition to a cloud much easier.  This will prove essential as most live applications, at least currently, do not run on a cloud and helping them migrate easily will mean more revenue and adoption.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/04/13/limitations-and-challenges-in-cloud-computing-for-applications/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Moffe &#8211; My own friendfeed emulator.</title>
		<link>http://riteshnayak.com/blog/2009/03/27/moffe-my-own-friendfeed-emulator/</link>
		<comments>http://riteshnayak.com/blog/2009/03/27/moffe-my-own-friendfeed-emulator/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 10:40:58 +0000</pubDate>
		<dc:creator>Ritesh</dc:creator>
				<category><![CDATA[Tips,Tricks and code]]></category>
		<category><![CDATA[Unsolved problems]]></category>

		<guid isPermaLink="false">http://riteshnayak.com/blog/?p=435</guid>
		<description><![CDATA[I started using friendfeed recently and have been using ff to post links and other interesting artifacts I find on the net. The ease with which I can post links from ff not only  increased my posts on ff, and indirectly on twitter, but also the frustration of my friends. Now instead of going directly [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://riteshnayak.com/moffe/" target="_blank"><img class="alignnone size-full wp-image-438" title="moffe" src="http://riteshnayak.com/blog/wp-content/uploads/moffe.gif" alt="moffe" width="173" height="66" /></a>I started using <a title="friendfeed" href="http://friendfeed.com" target="_blank">friendfeed</a> recently and have been using ff to post links and other interesting artifacts I find on the net. The ease with which I can post links from ff not only  increased my posts on ff, and indirectly on twitter, but also the frustration of my friends. Now instead of going directly to the link I share, they now had to go to friendfeed and then after another click go the address that I had shared.</p>
<p>I used friendfeed because I wanted to start a conversation based on the items I shared. But, again like all social media sites, my ability to get the conversation started depended directly on the number of people who were using friendfeed. So, I sat down to fix the problem myself and after one nights work, <a title="Moffe" href="http://riteshnayak.com/moffe" target="_blank">Moffe</a> was born.</p>
<p>For the unitiated moffe stands for <strong>My Own FriendFeed Emulator</strong>. It gives the same features that friendfeed provides and also provides an easy way for people to leave comments on the items I share. Plus, the link that I shared, is federated directly into the page. The outcome is that now people can leave comments on items I share plus see the page all with one click. I have also incorporated canned comments for that restless user who doesn&#8217;t have time to write in comments. Plus, I get to monitor moffe on this cool <a href="http://riteshnayak.com/moffe">dashboard</a>.</p>
<p>In essence, its a microsharing service which lets me keep my content on my site and not rely on other services like friendfeed ,twitblogs etc. Thanks to Easy on the Slaw for giving me the <a href="http://blog.slawcup.com/2007/04/full-twitter-php-library-ver-01/" target="_blank">twitter wrapper in PHP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://riteshnayak.com/blog/2009/03/27/moffe-my-own-friendfeed-emulator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

