<?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>geekraj</title>
	<atom:link href="http://geekraj.com/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://geekraj.com/wordpress</link>
	<description>68 65 6C 6C 6F 20 77 6F 72 6C 64 21</description>
	<lastBuildDate>Sat, 25 Feb 2012 07:42:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>NXT Virtual Piano &#8211; Fail!</title>
		<link>http://geekraj.com/wordpress/?p=688</link>
		<comments>http://geekraj.com/wordpress/?p=688#comments</comments>
		<pubDate>Sat, 25 Feb 2012 07:33:03 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mindstorms]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=688</guid>
		<description><![CDATA[Well, this was my plan &#8211; to create an extremely simple virtual piano with Lego Mindstorms, just by using the ultrasonic sensor in the manner below: To play the correct frequency for the detected key, I first tried a ladder if-then-else within the Mindstorms visual programming environment, and it absolutely tanked! For every if-then-else path, [...]]]></description>
			<content:encoded><![CDATA[<p>Well, this was my plan &#8211; to create an extremely simple virtual piano with Lego Mindstorms, just by using the ultrasonic sensor in the manner below:</p>
<p><a href="http://geekraj.com/wordpress/wp-content/uploads/2012/02/piano1.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2012/02/piano1.png" alt="" title="piano" width="746" height="337" class="alignleft size-full wp-image-694" /></a></p>
<p>To play the correct frequency for the detected key, I first tried a ladder if-then-else within the Mindstorms visual programming environment, and it absolutely tanked! For every if-then-else path, it was doubling the height and before I reached 5 such paths, the exponential growth of vertical screen height made it pathetically slow and unbelievably difficult to scroll. So I ditched it, flashed LeJos on the brick and wrote a teeny meeny Java code which worked brilliantly! or so I thought&#8230; </p>
<p>It was playing tunes alright, but they were not the correct ones! After a couple of rounds of troubleshooting, I quickly realized it was not any programming error, but one that I totally ignored &#8211; the resolution of the sensor!! It turns out that the <a href="http://legoengineering.com/nxt-sensors-2.html">precision</a> of the sensor is +/- 3 cms, and I had the bars at 2 cm widths. </p>
<p>So the moral of the story is &#8211; before trying out things with sensors, make sure to read the specifications thoroughly!</p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=688</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PlotterBot!</title>
		<link>http://geekraj.com/wordpress/?p=612</link>
		<comments>http://geekraj.com/wordpress/?p=612#comments</comments>
		<pubDate>Sat, 14 Jan 2012 05:12:45 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=612</guid>
		<description><![CDATA[I wanted to create a robot that can draw something on a paper. Searching for some inspirations, I found on YouTube, a variety of very amazing and cool implementations. Yet, they all drew on a horizontal plane, and were mechanically complex. I wanted something that I could mount on my son&#8217;s easel, and draw like [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to create a robot that can draw something on a paper. Searching for some inspirations, I found on YouTube, a variety of very amazing and cool implementations. Yet, they all drew on a horizontal plane, and were mechanically complex. I wanted something that I could mount on my son&#8217;s easel, and draw like a painter. Being a complete mechanical noob and only 2 days of robotics experience behind me, I set out to design a very light contraption that would draw something interesting. During my research, I was heavily influenced by this <a href="http://youtu.be/dPZ-Mpbn37U">non-lego robot</a>. First I played with a few technic pieces to model the arms and then hooked it up to couple of servo motors. The result is what I call a PlotterBot!. </p>
<p><a href="http://geekraj.com/wordpress/wp-content/uploads/2012/01/plotterbot1.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2012/01/plotterbot1-145x300.png" alt="" title="plotterbot1" width="145" height="300" class="size-medium wp-image-645" /></a></p>
<p>As you can see, it is very simple. Two motors drive a <a href="http://en.wikipedia.org/wiki/Pantograph">pantograph</a> mechanism. A pen is taped to the tip of the pantograph. </p>
<p>Following are some of the patterns it drew:</p>
<table>
<tr>
<td>
<a href="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic1.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic1-300x150.png" alt="" title="pic1" width="300" height="150" class="alignleft size-medium wp-image-625" /></a>
  </td>
<td>
<a href="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic2.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic2-300x145.png" alt="" title="pic2" width="300" height="145" class="alignleft size-medium wp-image-626" /></a>
 </td>
</tr>
<tr>
<td>
<a href="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic3.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic3-300x139.png" alt="" title="pic3" width="300" height="139" class="alignleft size-medium wp-image-628" /></a>
  </td>
<td>
<a href="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic4.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2012/01/pic4-300x127.png" alt="" title="pic4" width="300" height="127" class="alignleft size-medium wp-image-629" /></a>
 </td>
</tr>
</table>
<p>Here is the PlotterBot in action!</p>
<p><iframe width="630" height="472" src="http://www.youtube.com/embed/iNtAQQkpOAo" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=612</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy NXT Holidays!</title>
		<link>http://geekraj.com/wordpress/?p=592</link>
		<comments>http://geekraj.com/wordpress/?p=592#comments</comments>
		<pubDate>Sat, 31 Dec 2011 23:25:50 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=592</guid>
		<description><![CDATA[Last weekend we walked into Fry&#8217;s to find an awesome deal for Lego Mindstorms NXT 2.0. Mindstorms is a robotics system for kids 10+ years, and it comes with 3 servo motors and 4 sensors (1 ultrasonic sensor, 1 color sensor and 2 touch sensors), and a wide variety of Lego technic pieces. I had [...]]]></description>
			<content:encoded><![CDATA[<p>Last weekend we walked into Fry&#8217;s to find an awesome deal for Lego Mindstorms NXT 2.0. Mindstorms is a robotics system for kids 10+ years, and it comes with 3 servo motors and 4 sensors (1 ultrasonic sensor, 1 color sensor and 2 touch sensors), and a wide variety of Lego technic pieces. I had always wanted to buy one for my son Kevin (and for me too, he he), so couldn&#8217;t pass up this deal!</p>
<p>Getting back home, Kevin and I immediately got to work, and he was able to build the shooter bot quite easily with little help from me on the programming side. Shooterbot is one of the examples that come with the NXT software. </p>
<p><a href="http://geekraj.com/wordpress/wp-content/uploads/2011/12/shooterbot.png"><img src="http://geekraj.com/wordpress/wp-content/uploads/2011/12/shooterbot-300x217.png" alt="" title="shooterbot" width="300" height="217" class="alignleft size-medium wp-image-609" /></a></p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/3KnQ7kMx2gA" frameborder="0" allowfullscreen></iframe></p>
<p>Next couple of days, I was pretty much occupied with it and built a robot that would paint geometric patterns! Expect more details, pictures and videos in my next post!!</p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=592</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>node.js based CORS proxy</title>
		<link>http://geekraj.com/wordpress/?p=580</link>
		<comments>http://geekraj.com/wordpress/?p=580#comments</comments>
		<pubDate>Mon, 07 Nov 2011 05:54:49 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=580</guid>
		<description><![CDATA[Recently I found that a WebGL program I wrote earlier was not working anymore due to CORS restriction. To get around this, I wrote up an extremely simple proxy using node.js and hosted it on the amazing nodester service. You can access the service like this: http://corsproxy.nodester.com/?src=&#60;image url&#62; It just fetches the data from remote [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I found that a WebGL program I wrote earlier was not working anymore due to <a href="http://hacks.mozilla.org/2011/06/cross-domain-webgl-textures-disabled-in-firefox-5/">CORS restriction</a>. To get around this, I wrote up an extremely simple proxy using node.js and hosted it on the amazing <a href="http://nodester.com/">nodester </a> service.</p>
<p>You can access the service like this:</p>
<p><code>http://corsproxy.nodester.com/?src=&lt;image url&gt;</code></p>
<p><img src="http://corsproxy.nodester.com/?src=farm7.static.flickr.com/6048/6250681839_7574c8c4b6_m.jpg"></p>
<p>It just fetches the data from remote url and streams it back, after adding the following two headers:</p>
<p><code><br />
Access-Control-Allow-Origin: *<br />
Access-Control-Allow-Headers: X-Requested-With<br />
</code></p>
<p>You can see the source code here:</p>
<p><a href="https://github.com/rmadhuram/corsproxy/blob/master/server.js">https://github.com/rmadhuram/corsproxy/blob/master/server.js</a></p>
<p>I tested it on Aurora (Firefox 9.0a2) and it works fine with a modified Three.js sample.<br />
<b>Note: Please use the nodester link for demonstration purposes only. Don&#8217;t use it in production!</b></p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=580</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Seven Segment Display Widget with YUI 3 and Raphaël</title>
		<link>http://geekraj.com/wordpress/?p=458</link>
		<comments>http://geekraj.com/wordpress/?p=458#comments</comments>
		<pubDate>Sat, 30 Oct 2010 00:21:09 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=458</guid>
		<description><![CDATA[Electronics used to be my hobby while I was growing up, and one of the components that always fascinated me was the seven segment display. So when I wanted to get my feet wet on YUI 3 couple of weeks ago, I thought how cool would it be to develop a widget that renders a [...]]]></description>
			<content:encoded><![CDATA[<p>Electronics used to be my hobby while I was growing up, and one of the components that always fascinated me was the seven segment display. So when I wanted to get my feet wet on <a href="http://developer.yahoo.com/yui/3/">YUI 3</a> couple of weeks ago, I thought how cool would it be to develop a widget that renders a seven segment display. To make things interesting, I decided to bring <a href="http://raphaeljs.com/">Raphaël</a> in the mix, and thus was born the YUI 3 seven segment display widget! In this article, I&#8217;ll explain how I went about developing this widget.</p>
<p><a target="_ext" href="http://geekraj.com/sevenseg/src/sevenseg.html">See the widget in action<br />
</a> (Note: Works on FF3 and IE8. Does not work on IE7)</p>
<p><a href="http://geekraj.com/sevenseg/sevenseg.zip">Download source files</a></p>
<p><span id="more-458"></span><br />
<img src="http://geekraj.com/wordpress/wp-content/uploads/2010/10/clock1.jpg" alt="" title="clock1" width="700" height="193" class="aligncenter size-full wp-image-498" /></p>
<p>One of the nice things that YUI gives us is a rich Object Oriented Programming (OOP) framework. When we model an entity as an object, we essentially group together properties and methods that pertains to the object. This abstraction makes building large software systems easier. Nowadays, more and more applications are being built to run on the browser and the richness of these keep increasing. Hence, an OOP approach is required to manage the complexity. YUI 3 provides the OOP capability via the <a href="http://developer.yahoo.com/yui/3/examples/yui/yui-extend.html">extend</a> function.</p>
<p>For building the seven segment widget, we will also use the widget framework provided by YUI 3. For drawing the segments, we will use a fantastic JavaScript library called Raphaël. It allows us to draw vector graphics on the browser using SVG and VML, and is cross browser compatible.</p>
<p>To understand more on the YUI widget framework, view the excellent <a href="http://developer.yahoo.com/yui/3/widget/">presentation</a> by Satyen Desai. </p>
<h3>Attributes</h3>
<p>The logical model for a 7 segment display is rather simple. We will have three attributes &#8220;value&#8221; , &#8220;scale&#8221; and &#8220;colors&#8221;. The &#8220;value&#8221; attribute determines what digit is displayed. &#8220;scale&#8221; will determine the dimensions of the display. &#8220;colors&#8221; will determine the colors of the lighted up and inactive segments.</p>
<pre class="brush: java;">

 function SevenSeg(config) {
     SevenSeg.superclass.constructor.apply(this, arguments);
 }

 SevenSeg.NAME = &quot;sevenseg&quot;;

 SevenSeg.ATTRS = {
     /**
      * Value of the seven segment display. This can be set to change
      * the displayed digit. Default value is 8 (all segments light up)
      */
     value : {
         value: 8
     },

     scale: {
         value: 50  // default scale is 50x.
     },

     colors: {
           value: {
                 active: {
                    fill: &quot;#000&quot;,
                    outline: &quot;#eee&quot;
                 },
                 inactive: {
                     fill: &quot;#fff&quot;,
                     outline: &quot;#eee&quot;
                 }
           }
     }
 };
</pre>
<h3>Segment Mapping</h3>
<p><img src="http://geekraj.com/wordpress/wp-content/uploads/2010/10/sevenseg11.png" alt="" title="sevenseg1" width="90" height="150" class="alignnone size-full wp-image-561" /></p>
<p>We have two static variables, SEGIDX, which is an array of segment indices, and DIGITMAP, which maps the digit to the segments which need to be lit. For instance, to display the digit 1, segments &#8220;b&#8221; &#038; &#8220;c&#8221; need to be lit up.</p>
<pre class="brush: java;">
  SevenSeg.SEGIDX = ['a','b','c','d','e','f','g'];

  // Map of digits to segments that are lit.
  SevenSeg.DIGITMAP = {
      &quot;0&quot;: &quot;abcdef&quot;, &quot;1&quot;: &quot;bc&quot;, &quot;2&quot;: &quot;abged&quot;, &quot;3&quot;: &quot;abcdg&quot;,
      &quot;4&quot;: &quot;bcfg&quot;, &quot;5&quot;: &quot;afgcd&quot;, &quot;6&quot;: &quot;afedcg&quot;, &quot;7&quot;: &quot;abc&quot;,
      &quot;8&quot;: &quot;abcdefg&quot;, &quot;9&quot;: &quot;abcdfg&quot;, &quot;&quot;:&quot;&quot;
  };
</pre>
<h3>Drawing the Seven Segment Display</h3>
<p>In order to draw the seven segment display, we will use the magic of Raphaël. First a Raphaël canvas is created. On that canvas, a unit length horizontal segment is drawn a prototype, and all other segments are created by scaling, rotating and translating the prototype segment. The prototype segment is drawn like below:</p>
<p><code><br />
var seg = paper.path("M 0 0 L 0.15 0.1 L 0.85 0.1 L 1.0 0 L 0.85 -0.1 L 0.15 -0.1 Z");<br />
</code></p>
<p>In case if you are wondering what the &#8220;M 0 0 L 0.15&#8243; stuff means, it is the path specification for the horizontal prototype segment. For more details, read the SVG specification <a href="http://www.w3.org/TR/SVG/paths.html">here</a>. </p>
<p>The above segment is cloned seven times, scaled and then the individual display segments are stored in an array. Once these display segments are constructed, the prototype segment is removed. After that each display segment is rotated and translated according to its position on the seven segment display. </p>
<pre class="brush: java;">
         /**
          * Draw a 7 segment display using Raphael canvas.
          */
         _draw7seg: function() {
             var contentBox = this.get(&quot;contentBox&quot;);
             var scale = this.get(&quot;scale&quot;);
             var paper = Raphael(contentBox._node, scale*1.3, scale*2.3);
             var seg = paper.path(&quot;M 0 0 L 0.15 0.1 L 0.85 0.1 L 1.0 0 L 0.85 -0.1 L 0.15 -0.1 Z&quot;);

             var tx = 0.15*scale;
             var ty = 0.15*scale;

             this.segments = new Array();
             for (var i=0; i&lt;7; i++) {
                var thisseg = this.segments[SevenSeg.SEGIDX[i]] = seg.clone();
                thisseg.scale(scale, scale);
             }

             seg.remove();             

             var segs = this.segments;
             segs['a'].translate(tx + scale/2, ty);

             segs['b'].rotate(90);
             segs['b'].translate(tx + scale, scale/2 + ty);

             segs['c'].rotate(90);
             segs['c'].translate(tx + scale, scale/2 + ty + scale);

             segs['d'].translate(tx + scale/2, 2*scale + ty);

             segs['e'].rotate(90);
             segs['e'].translate(tx + 0, scale/2 + ty + scale);

             segs['f'].rotate(90);
             segs['f'].translate(tx, scale/2 + ty);

             segs['g'].translate(tx + scale/2, ty + scale);
         }
</pre>
<h3>Methods</h3>
<p>The methods to implement the widget are fairly straightforward. The _setDigit() method does the actual job of lighting up the appropriate segments for the given digit. The _clear() method clears all segments (filled with inactive color).</p>
<p>The bindUI() method hooks the &#8220;valueChange&#8221; event to _afterValueChange() handler, that takes the current value and sets the appropriate digit. Note that the clients should not call _setDigit() method to set the value. Instead, it would be done by just setting the &#8220;value&#8221; attribute and then the <a href="http://developer.yahoo.com/yui/3/attribute/">Attribute</a> infrastructure takes care of the rest by firing the &#8220;valueChange&#8221; event!</p>
<pre class="brush: java;">
         renderUI : function() {
             this._draw7seg();
         },

         bindUI : function() {
             this.after(&quot;valueChange&quot;, this._afterValueChange);
         },

         syncUI : function() {
             this._setDigit(this.get(&quot;value&quot;));
         },

         _afterValueChange : function(e) {
             this._setDigit(e.newVal);
         },

         _clear: function() {
             for (var i=0; i&lt;7; i++) {
                 var thisseg = this.segments[SevenSeg.SEGIDX[i]];
                 thisseg.attr(&quot;fill&quot;, this.get(&quot;colors.inactive.fill&quot;));
                 thisseg.attr(&quot;stroke&quot;, this.get(&quot;colors.inactive.outline&quot;));
              }
         },

         _setDigit: function(n) {
             this._clear();
             var chosenSegs = SevenSeg.DIGITMAP[n];
             for (var i=0; i&lt;chosenSegs.length; i++) {
                var x = chosenSegs.charAt(i);
                var thisseg = this.segments[x];
                thisseg.attr(&quot;fill&quot;, this.get(&quot;colors.active.fill&quot;));
                thisseg.attr(&quot;stroke&quot;, this.get(&quot;colors.active.outline&quot;));
             }
          }
</pre>
<h3>Demos</h3>
<p>Click <a target="_ext" href="http://geekraj.com/sevenseg/src/sevenseg.html">here</a> to see the widget in action.</p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=458</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery Mobile alpha is released &#8211; and it is awesome!</title>
		<link>http://geekraj.com/wordpress/?p=454</link>
		<comments>http://geekraj.com/wordpress/?p=454#comments</comments>
		<pubDate>Mon, 18 Oct 2010 23:32:07 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=454</guid>
		<description><![CDATA[Today, I casually went to see what&#8217;s new on jQuery mobile and was treated with a wonderful surprise. The alpha is released! I immediately fired up my stock browser on droid and tried it out. It is so beautiful and I can&#8217;t believe its not a native app! It worked great when the device orientation [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I casually went to see what&#8217;s new on <a href="http://jquerymobile.com">jQuery mobile</a> and was treated with a wonderful surprise. The alpha is released! I immediately fired up my stock browser on droid and tried it out. It is so beautiful and I can&#8217;t believe its not a native app!</p>
<p>It worked great when the device orientation changed, immediately re-laying out the components in a jiffy. The only cause for confusion seems to be the &#8220;Back&#8221; button, which seems to mirror the back functionality of the browser. When you fire up multiple dialogs on the sample page and try it out, you have to unwind to go back to the previous screen. </p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=454</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Swype &#8211; don&#8217;t type!</title>
		<link>http://geekraj.com/wordpress/?p=445</link>
		<comments>http://geekraj.com/wordpress/?p=445#comments</comments>
		<pubDate>Fri, 26 Feb 2010 07:13:38 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=445</guid>
		<description><![CDATA[I&#8217;ve never been excited about typing text on my mobile, but a new technology called swype well might change that, and I bet is going to revolutionize the way we all input text on mobiles. Unlike tapping a series of softkeys, you enter text by &#8220;connecting&#8221; keys. You should check out the demo videos! When [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never been excited about typing text on my mobile, but a new technology called <a href="http://www.swypeinc.com/" target="_blank">swype</a> well might change that, and I bet is going to revolutionize the way we all input text on mobiles. Unlike tapping a series of softkeys, you enter text by &#8220;connecting&#8221; keys. You should check out the demo videos! When I first saw it, it was a &#8220;why didn&#8217;t anyone think of that before?&#8221; moment!</p>
<p><img class="alignnone" src="http://www.swypeinc.com/i/what-is-swype.jpg" alt="" width="483" height="175" /></p>
<p>Character recognition has been around for a while, and I have used it on my Palm and iPaq devices previously, but this is a very smart idea. What would take like 6 to 7 strokes for a word using character recognition can be done on a single stroke with swype! This is a game changer. In computer science terms, it is like optimizing from O(n^2) to O(n)!</p>
<p>I was a bit disappointed to see they did not have one for droid, but taking hint from a tech video, I googled it and bingo! there was one unofficial pre-release available. So inspite of the &#8220;It might burn down your house or eat your dog&#8221; caveat, I downloaded and installed on my droid, and I&#8217;m in so love with it!</p>
<p>Now I wonder what will happen if <a href="http://www.engadget.com/2010/01/15/pedro-matias-sets-new-texting-record-at-lg-mobile-world-cup-vid/" target="_blank">these kids</a> gets a hand on one of these!</p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=445</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profanity in Eclipse Plugin!</title>
		<link>http://geekraj.com/wordpress/?p=429</link>
		<comments>http://geekraj.com/wordpress/?p=429#comments</comments>
		<pubDate>Sun, 21 Feb 2010 05:34:23 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=429</guid>
		<description><![CDATA[I was trying to associate specific file type with PHP editor when I noticed some profane text in Eclipse! There is a content type called &#8220;s**t happens&#8221;, tied to .sql files. Can you believe it? See screenshot.  I traced it to DBEdit plugin. I like humor in code, but I am strongly against profanity, even [...]]]></description>
			<content:encoded><![CDATA[<p>I was trying to associate specific file type with PHP editor when I noticed some profane text in Eclipse! There is a content type called &#8220;s**t happens&#8221;, tied to .sql files. Can you believe it? See <a href="http://geekraj.com/wordpress/wp-content/uploads/2010/02/screenshot2.png" target="_blank">screenshot</a>.  I <a href="http://geekraj.com/wordpress/wp-content/uploads/2010/02/screenshot3.png" target="_blank">traced</a> it to DBEdit plugin.</p>
<p>I like <a href="http://geekraj.com/wordpress/?p=71" target="_blank">humor</a> in code, but I am strongly against profanity, even in its mildest form. Please let us keep it professional!</p>
<p><strong>Update: </strong>Initially I thought it was part of PDT distro, but thanks to Wayne, who pointed out it could not be, I verified that it was not by downloading and checking the plugins. I apologize for the error.</p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=429</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Let It Snow! v1.0 Update &#8211; Thank You!</title>
		<link>http://geekraj.com/wordpress/?p=427</link>
		<comments>http://geekraj.com/wordpress/?p=427#comments</comments>
		<pubDate>Thu, 11 Feb 2010 16:49:53 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=427</guid>
		<description><![CDATA[With your support for Let It Snow! application, we were able to raise USD 750 for Myrtle! This will go a long way in supporting the educational expenses of many underprivileged kids, and also raise HIV/AIDS awareness in rural Chennai. Thank you, thank you! Also, the number of application downloads is 1042 as of today. [...]]]></description>
			<content:encoded><![CDATA[<p>With your support for Let It Snow! application, we were able to raise USD 750 for Myrtle! This will go a long way in supporting the educational expenses of many underprivileged kids, and also raise HIV/AIDS awareness in rural Chennai. Thank you, thank you!</p>
<p>Also, the number of application downloads is 1042 as of today. Glad to have crossed the 1000 mark :)</p>
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=427</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let It Snow! v1.0 for Android Phones</title>
		<link>http://geekraj.com/wordpress/?p=379</link>
		<comments>http://geekraj.com/wordpress/?p=379#comments</comments>
		<pubDate>Wed, 23 Dec 2009 09:41:10 +0000</pubDate>
		<dc:creator>Raj Madhuram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://geekraj.com/wordpress/?p=379</guid>
		<description><![CDATA[v1.0 Do you live near the Tropics and wish you had snow? or live in the Northern hemisphere and had enough of it? Don&#8217;t worry, this application will let you enjoy falling snow within the comforts of your home on your Android powered phone. Let it Snow! is a fun Android application for the Christmas [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-382" style="border:none; padding: 0px" title="letitsnow" src="http://geekraj.com/wordpress/wp-content/uploads/2009/12/letitsnow.png" alt="letitsnow" width="335" height="74" />v1.0</p>
<p>Do you live near the Tropics and wish you had snow? or live in the Northern hemisphere and had enough of it? Don&#8217;t worry, this application will let you enjoy falling snow within the comforts of your home on your Android powered phone. Let it Snow! is a fun Android application for the Christmas holidays. It simulates falling snow over a winter landscape. There are three different landscapes available. It works in both portrait and landscape modes. You can also select a picture and have snow fall on your head or a friend&#8217;s!</p>
<p><span id="more-379"></span></p>
<p>This application is a <a href="http://geekraj.com/wordpress/?p=358" target="_blank"><strong>socialware</strong></a>. It is free to download and use. It is available from Android Market. <strong>If you enjoyed it, I invite you to consider helping a worthy cause mentioned below</strong>. Your donation, however small or large will make enormous difference in the lives of many people.</p>
<p>Update: This has been tested on droid, and on emulators with HVGA. Please let me know if it works on other devices. The app might crash when you use with pictures.</p>
<p><object width="532" height="323" data="http://www.youtube.com/v/CtjTn7AYutQ&amp;hl=en_US&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/CtjTn7AYutQ&amp;hl=en_US&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /></object></p>
<h2>Screenshots:</h2>
<p><img class="alignnone size-full wp-image-395" title="screens21" src="http://geekraj.com/wordpress/wp-content/uploads/2009/12/screens21.png" alt="screens21" width="394" height="546" /></p>
<p><img class="alignnone size-full wp-image-401" title="screen3" src="http://geekraj.com/wordpress/wp-content/uploads/2009/12/screen3.png" alt="screen3" width="394" height="208" /></p>
<h2>The Cause:</h2>
<p>I&#8217;ve been associated with an organization called <a href="http://myrtleindia.org/index.html" target="_blank">Myrtle Foundation</a> in India, who does tremendous work with children, especially those who are affected by HIV/AIDS. They raise awareness of this deadly disease in the rural areas in a unique way by making use of puppetry.</p>
<p><img class="alignnone size-full wp-image-415" title="lpic2" src="http://geekraj.com/wordpress/wp-content/uploads/2009/12/lpic2.jpg" alt="lpic2" width="228" height="152" /> <img class="alignnone size-full wp-image-416" title="lpic3" src="http://geekraj.com/wordpress/wp-content/uploads/2009/12/lpic3.jpg" alt="lpic3" width="228" height="153" /></p>
<p>One of their projects is called &#8220;Sathya Children&#8217;s Educational Sponsorship&#8221;, under which the foundation paid the educational expenses for 16 precious children in 2009 who are affected by HIV/AIDS (affected meaning one or both parents infected or the child itself is infected). Some of these children&#8217;s background:</p>
<ul>
<li><span style="color: #ee2f3a;">Yamini (12 years old) &#8211; When she was 2 years old, on 02/19/01, her father (27 yrs old) committed suicide by kerosene fire. After seeing this, she never laughed or spoke for the next 3 years. Now she is living with grandma.</span></li>
</ul>
<ul>
<li><span style="color: #ee2f3a;">Nisha Rani (10 years old) &#8211; Mother is PLWHA (Person living with HIV/AIDS), father died of AIDS.</span></li>
</ul>
<p>The organization is run by Mr. Williams (aka Venkatesh) along with a team of volunteers. He feels that this is his calling, and is full time into the project, and does not take any salary. He takes care of his family with his wife&#8217;s modest income. Our family has been supporting this project, and we could see that the  funds went directly to the children, and were properly utilized.</p>
<h2>The need:</h2>
<p>We need funds to support these children next year (2010), and also some more kids like them. Also, there is a need for a &#8220;campaign vehicle&#8221; that can be used for spreading HIV awareness.</p>
<h2>How you can help:</h2>
<ul>
<li>- You can spread the word by telling about the software and Myrtle to your friends. You can use the links for sharing below this article.</li>
<li>- You can partner with us by contributions in cash or kind. Every dollar counts! The Myrtle web site is outdated, and they can&#8217;t accept credit cards at this time.
<ul>
<li> &#8211; If you are in the US and would like to make a donation, please contact me at <strong>rmadhuram@yahoo.com</strong>. I will send out details for Paypal/check. I will transparently make the collection details available to all donors.</li>
<li>- If you are in India or elsewhere, you can directly contact Mr. Williams (aka Venkatesh) at 9840096022 (<strong>mswn1@yahoo.com</strong>) for contributing.</li>
</ul>
</li>
</ul>
<h2>Downloading the App:</h2>
<p>The application is available in the Android market. Search for &#8220;snow&#8221;, download and enjoy!</p>
<p><strong><em>Christmas is the season of giving when we celebrate the birth of Jesus, who is the ultimate gift of God for mankind. Let&#8217;s spread the cheer! Merry Christmas!!</em></strong></p>
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<input id="gwProxy" type="hidden" />
<p><!--Session data--></p>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
]]></content:encoded>
			<wfw:commentRss>http://geekraj.com/wordpress/?feed=rss2&amp;p=379</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

