<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUYDRXk6cSp7ImA9WhRQFE8.&quot;"><id>tag:blogger.com,1999:blog-7677954</id><updated>2011-12-09T12:39:34.719+02:00</updated><category term="anjuta" /><category term="n900" /><category term="games" /><category term="nxt" /><category term="food" /><category term="life" /><title>Naba's Blog</title><subtitle type="html">Random rumblings</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://naba.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://naba.blogspot.com/" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/NabaWeblog" /><feedburner:info uri="nabaweblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C04MQX06fSp7ImA9WhdVFkQ.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-3100535986102191986</id><published>2011-09-22T14:43:00.003+03:00</published><updated>2011-09-22T14:46:20.315+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-22T14:46:20.315+03:00</app:edited><title>Time to bring in new colors</title><content type="html">Time to bring in some new colors in life! ...&lt;br /&gt;&lt;br /&gt;After&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-OffVMBsBSj4/TnsfuMR2FuI/AAAAAAAALTE/3UxkTgxWhII/s1600/blog-after.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 186px;" src="http://4.bp.blogspot.com/-OffVMBsBSj4/TnsfuMR2FuI/AAAAAAAALTE/3UxkTgxWhII/s400/blog-after.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5655148635524306658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ueYtoxzsoMg/TnsflTGfnYI/AAAAAAAALS8/zxDrd6sOeTA/s1600/blog-before.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 168px;" src="http://2.bp.blogspot.com/-ueYtoxzsoMg/TnsflTGfnYI/AAAAAAAALS8/zxDrd6sOeTA/s400/blog-before.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5655148482736921986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-3100535986102191986?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cgQH06FomKxFUE9UblmIHAksBgo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cgQH06FomKxFUE9UblmIHAksBgo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cgQH06FomKxFUE9UblmIHAksBgo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cgQH06FomKxFUE9UblmIHAksBgo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/KKTbqrT-e7E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/3100535986102191986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=3100535986102191986" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3100535986102191986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3100535986102191986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/KKTbqrT-e7E/time-to-bring-in-new-colors.html" title="Time to bring in new colors" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-OffVMBsBSj4/TnsfuMR2FuI/AAAAAAAALTE/3UxkTgxWhII/s72-c/blog-after.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://naba.blogspot.com/2011/09/time-to-bring-in-new-colors.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMDSXg-fyp7ImA9WhdVFkU.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-4049643962128989285</id><published>2009-08-30T22:34:00.008+03:00</published><updated>2011-09-22T12:07:58.657+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-22T12:07:58.657+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="n900" /><title>Finally, get ready for the ultimate linux phone: Nokia N900</title><content type="html">&lt;a href="http://maemo.nokia.com"&gt;Nokia n900&lt;/a&gt; is the latest offering from Nokia that runs &lt;a href="http://maemo.org"&gt;Maemo operating system&lt;/a&gt; based on debian linux. Basically, it's a fairly powerful computer in your pocket.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-z3WHG6oOnWc/Tnr6zDatF2I/AAAAAAAALS0/NSPm2O8I9LM/s1600/n900.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 304px;" src="http://2.bp.blogspot.com/-z3WHG6oOnWc/Tnr6zDatF2I/AAAAAAAALS0/NSPm2O8I9LM/s400/n900.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5655108037114664802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The word "convergence" [1] has been tossed around for a very long time. A lot of big talks happened about how the concept is the future of consumer devices and how it will change the way people get the "one device to rule all media". I first heard about it in 2001 and I couldn't stop thinking we are in 2009, 8 years later, and the word has still been ... a buzz word.&lt;br /&gt;&lt;br /&gt;The problem it seems is that to truly converge consumer electronic devices, one would literally need a computer. Yes, in a way laptop is a converged device -- you can essentially do anything that most electronic devices can do for you in separated devices (tv, radio, video, Internet, telephony, composition etc.). The only missing part is mobility; there is a set of devices that general computers can not yet cover -- the mobile devices.&lt;br /&gt;&lt;br /&gt;This is where I claim that &lt;a href="http://maemo.nokia.com"&gt;Nokia n900&lt;/a&gt; is the first true convergence device or at least a meaningful beginning. Why? Because it's a decent computer and a cellular phone combined (&lt;a href="http://maemo.nokia.com/n900/specifications/"&gt;specs&lt;/a&gt;), on an open maemo platform.&lt;br /&gt;&lt;br /&gt;The software platform is the most interesting part. Based on debian like distribution, &lt;a href="http://maemo.org"&gt;Maemo&lt;/a&gt; is like any other linux distrubtion and you can use it to write literally any software that you can do for your desktop or laptop computer. Of course, the processing power could be a limiting factor for some heavy applications, but that's largely a limiting factor born out of high power computers, not the limitation of functions that you want for a pocket computer (hint: most of your home media systems have really tiny CPUs). But it still sports one of the fasted hardware specs you can get in a mobile device now (600Mhz Arm cortex-A8 CPU, 256MB ram, 32GB drive, 3D hardware acceleration, gps, cellular, camera and everything that you can get in any modern mobile phone).&lt;br /&gt;&lt;br /&gt;One might argue that modern "smartphones" have been around that does a lot of things already what N900 does now. That's true, however they are quite limited in how you can treat them, both hardware wise and software wise. For example, iPhone, android, palm-pre etc., while quite cheezy, are fairly distant from being a small computer that anyone can write apps freely and openly -- the very reason why your PC is versatile. N900 opens that field. &lt;br /&gt;&lt;br /&gt;Here is a hands-on youtube video demonstrating N900 if you wish:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZrYqemylpIo&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ZrYqemylpIo&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;[1] Consumer devices convergence, not the other kinds like service convergence or technology convergence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-4049643962128989285?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2m7CzKIo3c2HXdHdFX9RFEDzaT0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2m7CzKIo3c2HXdHdFX9RFEDzaT0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2m7CzKIo3c2HXdHdFX9RFEDzaT0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2m7CzKIo3c2HXdHdFX9RFEDzaT0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/QaOJ8KRF9os" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/4049643962128989285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=4049643962128989285" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/4049643962128989285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/4049643962128989285?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/QaOJ8KRF9os/finally-get-ready-for-ultimate-linux.html" title="Finally, get ready for the ultimate linux phone: Nokia N900" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-z3WHG6oOnWc/Tnr6zDatF2I/AAAAAAAALS0/NSPm2O8I9LM/s72-c/n900.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2009/08/finally-get-ready-for-ultimate-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MR3c9cCp7ImA9WxJRFUs.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-8027756904747438529</id><published>2009-05-17T12:45:00.005+03:00</published><updated>2009-05-17T16:44:46.968+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-17T16:44:46.968+03:00</app:edited><title>Time to revive a dying laptop: dell inspiron 2650</title><content type="html">I have a dell inspiron 2650 laptop that was bought 7 years ago. It did a fairly good job of serving me at the time. With nvidia GForce2 GO graphics chipset (hot at that time), I abused it with good amount of FPS games -- the keyboard mostly took the hit :). Now 7 years later, I was amazed to see it still surviving and running. All the important stuffs; motherboard, LCD display, CPU etc. are working perfectly. Considering how well it severed me, I decided to revive it. The following things were dead though:&lt;br /&gt;&lt;br /&gt;1. Keyboard: This took the most hit. Arrow keys were non-functional, lost few key caps, and most annoyingly 'Fn' key was non-functioning. This means this keyboard was useless to control screen backlight. This was unfortunate because there is no software way to control screen brightness in this laptop. Cost: 20 USD&lt;br /&gt;&lt;br /&gt;2. Harddrive was dead. But fortunately, I had a spare 40 GB, 2.5 hard disk lying around that was used as external usb storage. It was still in good condition for replacement, and had somehow previous ubuntu feisty installation (7.10) still on it. Cost: 0 USD.&lt;br /&gt;&lt;br /&gt;3. RAM was 265 MB. It was good for the old time, but now it won't be enough to run GNOME desktop environment. Browsing around the net, I found that the max RAM it can take is 512 MB, in 2 DIMM slots -- each 256 MB module (it had 2 x 128 MB modules). A pair of 256 MB PC100 DIMM modules were quite cheap in ebay so I decided to max out the RAM. Cost: 20 USD.&lt;br /&gt;&lt;br /&gt;4. Battery holds something like 20 mins of charge. Replacement battery with 4400 mAH cost 45 USD in ebay.&lt;br /&gt;&lt;br /&gt;5. Power supply plug was broken (on the laptop side of the cord). The power brick itself was functioning quite well, but shame that the cord is directly hooked up from the brick. So there is no way you could upgrade only the cord (short of pulling it out from another brick). I decided to replace the whole brick. Cost: 20 USD.&lt;br /&gt;&lt;br /&gt;6. CDROM drive was dead. Considering how little I use CD drive now a days (most things come from internet and my NAS storage anyways), I decided not to fix it.&lt;br /&gt;&lt;br /&gt;9. Fan was quite noisy and active, indicating cooling problem with CPU. When I opened the laptop, I found good amount of dirts on heatsink and other places (no surprise :)). I bought a compressed air can and blow them out. Then followed by cleaning the fans with dry-wet cloth to remove sticky dirts. There were 2 fans, one for CPU heatsink and another smaller one for general laptop around the graphics heatsink. Another problem was that the thermal paste between the CPU and heatsink was dead dry and opening the heatsink invalidated it further. Bought a ceramic based thermal paste (those white ones) and applied it. Also, dropped a drop of cooking oil in the fans' hinges, just in case it helps :). Now they are less noisy and less active.&lt;br /&gt;&lt;br /&gt;10. The LCD cover was cracked around the hinges. A bit of super glue helped there.&lt;br /&gt;&lt;br /&gt;Software: Upgraded bios to A13 version (the last update from Dell) and upgraded Ubuntu over the network from Feisty (7.10) to Hardy (8.04) to Interprid (8.10) and then to latest Ubuntu Jaunty (9.04). The upgrades went smoothly except for few gliches in nvidia driver update. Apparently nvidia stopped supporting Geforce2 go in its newer drivers. The last support was in version 96.something. Suspend does not work in Ubuntu 9.04 (a known regression), but I managed to get Hibernation to work by blacklisting 'intel_agp' and 'agpgard' modules as suggested in some forums. GNOME desktop runs smoothly with all the compiz eye candies.&lt;br /&gt;&lt;br /&gt;So overall I spend around total of 130 EUR by ordering the items from US ebay, shipping charge and VAT tax, to have a fully functional laptop. Not bad for a spec of P4 1.7 GHz, 512 MB RAM, Geforce2 graphics, 40 GB drive and brand new keyboard and battery.&lt;br /&gt;&lt;br /&gt;Now it's as good as new :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tFhSXJcjg48/ShAGC_p1l2I/AAAAAAAAE64/e0V7hkbmdrA/s1600-h/Dell+Inspiron+2650.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_tFhSXJcjg48/ShAGC_p1l2I/AAAAAAAAE64/e0V7hkbmdrA/s400/Dell+Inspiron+2650.jpg" alt="" id="BLOGGER_PHOTO_ID_5336772206950455138" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-8027756904747438529?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eeTxhtiLLzBEJU-ianYLj2Sdvu0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eeTxhtiLLzBEJU-ianYLj2Sdvu0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eeTxhtiLLzBEJU-ianYLj2Sdvu0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eeTxhtiLLzBEJU-ianYLj2Sdvu0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/2COUIh1kvo4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/8027756904747438529/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=8027756904747438529" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/8027756904747438529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/8027756904747438529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/2COUIh1kvo4/time-to-revive-dying-latop-dell.html" title="Time to revive a dying laptop: dell inspiron 2650" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_tFhSXJcjg48/ShAGC_p1l2I/AAAAAAAAE64/e0V7hkbmdrA/s72-c/Dell+Inspiron+2650.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://naba.blogspot.com/2009/05/time-to-revive-dying-latop-dell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AESH0zcCp7ImA9WhdVF0s.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-2845738008369156993</id><published>2009-04-27T19:51:00.005+03:00</published><updated>2011-09-23T10:08:29.388+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-23T10:08:29.388+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>Carrot-following vehicle with mindstorms nxt</title><content type="html">After implementing &lt;a href="http://naba.blogspot.com/2008/08/two-wheel-drive-odometry.html"&gt;Odometer&lt;/a&gt;, the next step is to implement a generic vehicle that navigates a given path. Path following is a basic requirement for an autonomous vehicle which tries follow a given path generated by some higher (more intelligent) entity as closely as possible.&lt;br /&gt;&lt;br /&gt;The problem is fairly common and there is a selection of algorithms to choose from. The least complex, but not necessarily the most effective algorithm is the "carrot following" method. &lt;a href="http://libnxter.sourceforge.net/_vehicle_8nxc.html"&gt;Vehicle.nxc&lt;/a&gt; now does this implementation in &lt;a href="http://libnxter.sf.net"&gt;libnxter&lt;/a&gt; library.&lt;br /&gt;&lt;br /&gt;In this method, the robot looks ahead in a circle towards the path to follow and takes the point of intersection with the path as a goal to chase. There will be two points of intersection between the look ahead circle and the path. The one closer to the direction of path is obviously the pick. If the look ahead circle does not intersect with the path, then the carrot is located at the nearest point (on the circle) towards the path. This is illustrated in following figure.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_tFhSXJcjg48/SfR5VgltTxI/AAAAAAAAE6A/6L6AbR9yJQQ/s1600-h/carrot-following.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 293px;" src="http://2.bp.blogspot.com/_tFhSXJcjg48/SfR5VgltTxI/AAAAAAAAE6A/6L6AbR9yJQQ/s400/carrot-following.png" alt="" id="BLOGGER_PHOTO_ID_5329017669518446354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When a list of navigation points are used to describe the path robot should take, the current path is described by last navigation point visited and next navigation point to visit. In the above figure, P1(x,y) is the last visited point and P2(x,y) is the next point to visit. The robot switches to next navigation point as soon as current navigation point comes within the look ahead circle.&lt;br /&gt;&lt;br /&gt;The two points of intersection can be computed with basic geometry of a circle intersecting a line. For example, &lt;a href="http://local.wasp.uwa.edu.au/%7Epbourke/geometry/sphereline/"&gt;this site&lt;/a&gt; gives a very well explanation of it. Of the two solutions, the point closest to P2(x,y) is selected as carrot. Function &lt;a href="http://libnxter.sourceforge.net/_vehicle_8nxc.html"&gt;VehicleGetLookahead()&lt;/a&gt; implements this.&lt;br /&gt;&lt;br /&gt;Robot(x,y) position and orientation is the current vector of the robot provided by the &lt;a href="http://naba.blogspot.com/2008/08/two-wheel-drive-odometry.html"&gt;Odometer&lt;/a&gt;. Navigation points P1, P2, ... and so on are maintained in a queue internally which can be continuously fed with &lt;a href="http://libnxter.sourceforge.net/_vehicle_8nxc.html"&gt;VehicleAddNavPoint()&lt;/a&gt; or  &lt;a href="http://libnxter.sourceforge.net/_vehicle_8nxc.html"&gt;VehicleAddNavPoints()&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Driving the vehicle&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Once carrot vector is computed, next thing is to steer the vehicle towards it and try to keep it always pointed at the carrot. This is actually a tough bit. The problem is that we have to make it somehow both smooth and stable. It might look like simple control problem where you just steer proportional to orientation error; I tried it and it doesn't work :). Power of the motors has to be taken into account  as well, otherwise either it ended up being too unstable or doesn't have enough steering dynamics (making big round arcs when steering).&lt;br /&gt;&lt;br /&gt;When mindstorms nxt is configured as a 2 wheels drive with differential steering, the steering dynamics is very high. Starting from going straight (i.e. no steering), you can steer it in-place which is the highest steering.  To take advantage of this steering range, we have to control the power of vehicle as well. Just like in driving a car, lower power allows making sharper turns, but when moving fast there is a limit to how much steering you can do without destabilizing it.&lt;br /&gt;&lt;br /&gt;After playing around a while and trying many different ways, I settled on a fairly good approach -- something that sounds quite familiar when you are driving a real car :).&lt;br /&gt;&lt;br /&gt;First off, notice that steering and power are not linearly related -- that is, half the power doesn't mean that you can do half the steering. Steering capacity reduces dramatically as the power increases. I found that a typical inverse relation is much more fitting. Like in a way given in this graph.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_tFhSXJcjg48/SfTAquwnLWI/AAAAAAAAE6I/wCaWOrkBBPw/s1600-h/steer-power.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_tFhSXJcjg48/SfTAquwnLWI/AAAAAAAAE6I/wCaWOrkBBPw/s400/steer-power.png" alt="" id="BLOGGER_PHOTO_ID_5329096099425103202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;X-axis is steering factor which can range from -100 to +100 (+/-100 steering is in-place steering where the two motors move in opposite direction equally, either left or right and 0 would mean not steering at all). Y-axis is the power level below which the vehicle needs to be to make the given turn. As you can see, the green line represents the power below which any steering is allowed (and is also the minimum power the vehicle should try to maintain all the time). If you flip the graph, it gives maximum steering the vehicle can make at a given power level.&lt;br /&gt;&lt;br /&gt;So, the steering equation can be written as:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large Power_{limit} = \frac{K_{stability}}{|Steering_{factor}|} %2b Power_{min}"/&gt;&lt;br /&gt;Conversely,&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large Steering_{limit} = \frac{K_{stability}}{Power_{current} - Power_{min}}"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://libnxter.sourceforge.net/_vehicle_8nxc.html"&gt;VehicleStep()&lt;/a&gt; implements the &lt;i&gt;Driving loop&lt;/i&gt; that tries to keep the vehicle running at a power level not limited by the steering factor needed, or slows down to make necessary steering. This is exactly what happens when driving a car. You try to reduce the speed to make necessary turn, or speedup when there is less turning to make.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The orientation error is determined by subtracting robot orientation from that of carrot's and is multiplied by a constant to get proportional steering factor. This is the needed steering to reduce the orientation error as swiftly as possible.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; If the current power level allows making this steering factor (the above graph or first equation), no problem and we set it. At the same time, it also means that we are driving the vehicle slower than it needs to so we increases the power a bit (accelerates).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Else the vehicle is moving too fast for the needed steering, so reduce the power a bit (braking) and determine the allowed steering level (flipped version of the graph or second equation) at this reduced power. This new 'allowed' steering factor will be lower than the requested one, but is what is actually possible with the current power level.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;In essence, this is also a standard proportional controller trying to control both power and steering factor using orientation error as input, where power and steering are constrained by each other. This has worked fine so far with me. But I am sure there is a more elegant solution to it. If you find one, please let me know :).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here is the path used to test run the vehicle (this is not the exact trace of what is seen in following video, but rather approximately made up). Notice that it doesn't really touch the navigation points. Instead it tries to make smooth turns around them. However around sharp turns, it actually cuts too much corner. This is one drawback of carrot-following method.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tFhSXJcjg48/SfTV7wIxArI/AAAAAAAAE6Q/HWvWUkKUDOw/s1600-h/carrot-following-example.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 317px;" src="http://3.bp.blogspot.com/_tFhSXJcjg48/SfTV7wIxArI/AAAAAAAAE6Q/HWvWUkKUDOw/s400/carrot-following-example.png" alt="" id="BLOGGER_PHOTO_ID_5329119481596805810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yuoAIj_OAvg&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yuoAIj_OAvg&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-2845738008369156993?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WBbRELBrrwcZT3ryNtdUGqwRbrY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WBbRELBrrwcZT3ryNtdUGqwRbrY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WBbRELBrrwcZT3ryNtdUGqwRbrY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WBbRELBrrwcZT3ryNtdUGqwRbrY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/8fO054MEjEo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/2845738008369156993/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=2845738008369156993" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/2845738008369156993?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/2845738008369156993?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/8fO054MEjEo/carrot-following-vehicle-with.html" title="Carrot-following vehicle with mindstorms nxt" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_tFhSXJcjg48/SfR5VgltTxI/AAAAAAAAE6A/6L6AbR9yJQQ/s72-c/carrot-following.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2009/04/carrot-following-vehicle-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcGQ3g7eyp7ImA9WhdVF0s.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-5935038023055087988</id><published>2008-08-31T19:06:00.085+03:00</published><updated>2011-09-23T10:13:42.603+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-23T10:13:42.603+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>Two wheels drive odometry</title><content type="html">Odometry is a way to keep track of robot (or vehicle) position from its wheels tachometer readings. Mindstorms nxt motors have integrated tachometers that make life easier to implement odometry. &lt;a href="http://libnxter.sf.net"&gt;libnxter&lt;/a&gt; project implements odometery with the class &lt;a href="http://libnxter.sourceforge.net/_odometer2_8nxc.html"&gt;Odometry2&lt;/a&gt; and this article describes how it is implemented and what the geometry behind is. It uses integer &lt;a href="http://libnxter.sourceforge.net/_vector_8nxc.html"&gt;Vector&lt;/a&gt; representation for all its geometry for performance on the tiny CPU it has got (not to mention NXC doesn't support floating point operations).&lt;br /&gt;&lt;br /&gt;Basically, it uses standard integration of axial movements over time, taking mid position of the axial connecting the two wheels as the reference point of robot, and is what is tracked as current position. Naturally, the position of robot at time &lt;code lang="eq.latex"&gt;t&lt;/code&gt; is given by vector sum of its discrete displacements over time since the beginning:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large X_t = \sum_{0}^{t}\Delta X_t = X_{t-1} %2b \Delta X"/&gt;&lt;br /&gt;&lt;br /&gt;Position change &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\Delta X"/&gt; for each time step is approximated for low angles. As long as integration steps are performed quickly enough (but not very quickly where accuracy of tachometers would suffer), the position should be fairly accurate. Each time step is performed with a call to Odometer2Step() function.&lt;br /&gt;&lt;br /&gt;At each step, the distance traveled D along the direction of current robot orientation is given by following equation. Actually, this is only true for small angles where D is approximately straight line. For more acute turns, D is curved and the equation is no more accurate. Therefore, the steps must be executed at fairly quick pace.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large D = \frac{D_l %2b D_r}{2}"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_tFhSXJcjg48/SLrB2rJRTMI/AAAAAAAACDs/SzgU_kxIFY4/s1600-h/odometer.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_tFhSXJcjg48/SLrB2rJRTMI/AAAAAAAACDs/SzgU_kxIFY4/s400/odometer.png" alt="" id="BLOGGER_PHOTO_ID_5240714261437697218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Where, &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=D_l"/&gt; and &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=D_r"/&gt; are distance traveled by left wheel and right wheel, respectively. It can be further written down using anglular rotation of each wheel and gear ratio:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large D = R G \frac{(w_l %2b w_r)}{2}"/&gt;&lt;br /&gt;&lt;br /&gt;Where, &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=R"/&gt; is wheel radius, &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=G"/&gt; is gear ratio (output to input) and &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=w_l"/&gt; and &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=w_r"/&gt; are angular rotation (radians) of left and right wheels respectively.&lt;br /&gt;&lt;br /&gt;The angular rotation is essentially tachometer counts of each wheel, reduced by appropriate gear ratio. In &lt;a href="http://libnxter.sourceforge.net/_odometer2_8nxc.html"&gt;Odometry2&lt;/a&gt; implementation, gear ratio &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=G"/&gt; is given in percentage (for integer maths, of course) and tachometer counts are in degrees. So the final equation is:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large D = \frac{D_w}{2}.\frac{G}{100}.\frac{(T_l %2b T_r)}{2}.\frac{2\pi}{360} = \frac{D_w G (T_l %2b T_r)}{22918}"/&gt;&lt;br /&gt;&lt;br /&gt;Where, &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=D_w"/&gt; is wheel diameter, &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=T_l"/&gt; and &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=T_r"/&gt; are tachometer counts of left and right wheels, respectively.&lt;br /&gt;&lt;br /&gt;Change in orientation of robot is given by:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\large \Delta\theta = \frac{R(w_r - w_l)}{L_a} rads = \frac{D_w G (T_r - T_l)}{200 L_a}"/&gt;&lt;br /&gt;&lt;br /&gt;Where, &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=L_a"/&gt; is wheel axial length.&lt;br /&gt;&lt;br /&gt;After computing &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=D"/&gt; and &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=\Delta\theta"/&gt;, the new robot position vector &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_t"/&gt; is given as:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_t = \left[\begin{array}{ c c } x_t \\ y_t \\ {\theta}_t\end{array} \right]= X_{t-1} %2b \Delta X"/&gt; &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl== \left[\begin{array}{ c c } x_{t-1} \\ y_{t-1} \\ {\theta}_{t-1}\end{array} \right] %2b\left[\begin{array}{ c c } \Delta x \\ \Delta y \\ \Delta{\theta}\end{array} \right]"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_t = \left[\begin{array}{ c c } x_{t-1} %2b D cos{\theta}_{t-1} \\ y_{t-1} %2b D sin{\theta}_{t-1} \\ {\theta}_{t-1} %2b \Delta\theta\end{array} \right]"/&gt;&lt;br /&gt;&lt;br /&gt;This is what is implemented in &lt;a href="http://libnxter.sourceforge.net/_odometer2_8nxc.html"&gt;Odometry2Step()&lt;/a&gt; method.&lt;br /&gt;&lt;br /&gt;Odometry unfortunately suffers from drift error if used over a long period of time without any correction. Despite how assuring the math is, there are several factors that can easily introduce errors during each step, starting from systematic errors (inaccuracy in wheel diameter, axial length etc.), quantization errors (A/D conversion, integer calculations etc.) to random errors. The errors actually grow quadratically with distance traveled and as a result they accumulate real fast. To compensate for the collective drift error, there needs to be a separate mechanism to periodically 'fix' it. Naturally, it's only useful to 'hold on' the tracking while some expensive localization computation is going on or waiting for some measurement/observation to happen.&lt;br /&gt;&lt;br /&gt;Helpfully, &lt;a href="http://libnxter.sourceforge.net/_odometer2_8nxc.html"&gt;Odometry2&lt;/a&gt; maintains two positions - a comulative position and a delta position. Comulative position is robot's current position in world coordinate system. The delta position is its relative position from the point where drift was last corrected. The correction point creates the origin of delta coordinate system and delta integration happens on this frame-of-reference. Following diagram illustrates it:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tFhSXJcjg48/SL2ckgtDItI/AAAAAAAACD4/8F8H5gtVkig/s1600-h/odometer2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_tFhSXJcjg48/SL2ckgtDItI/AAAAAAAACD4/8F8H5gtVkig/s400/odometer2.png" alt="" id="BLOGGER_PHOTO_ID_5241517692397232850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The reason there is a separate delta integration in addition to comulative integration is to give room for robot localization to perform at slower pace (not unusual for small robots with slow CPU) or waiting for observation points to become measurable (losing GPS signal, landmarks not visible etc.). If nothing else, it can be used conveniently as a secondary position tracker in separate coordinate system, like a temporary tracking.&lt;br /&gt;&lt;br /&gt;How it works is like this: Let's assume at position &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t-1}"/&gt;, the robot completed its last localization step (&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t-1}"/&gt; is the result of that correction) and it starts the next round using then current position &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t-1}"/&gt;. Delta coordinate system is reset and this position becomes its origin. By the time it managed to finish the localization round, which could involved waiting for observations, taking measurements, calculating the observed position etc., the robot is already at position &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t}'"/&gt; (notice the 'tick' mark). At the same time, it has been moving non-stop and also tracking deltaX.&lt;br /&gt;&lt;br /&gt;But to use the result of this localization update, it must be applied at &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t-1}"/&gt; position, not later. So, it transforms deltaX position from its delta coordinate system back to world coordinate system after assuming the corrected position as the new delta frame-of-reference. The drift correction is shown in the diagram by the dotted line drawn from &lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t-1}"/&gt; position. This translated position becomes the new comulative integral (&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,f7f6f5&amp;cht=tx&amp;chl=X_{t}"/&gt;). And the cycle repeats. Drift correction is implemented in method &lt;a href="http://libnxter.sourceforge.net/_odometer2_8nxc.html"&gt;Odometer2SetDriftCorrection()&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My next attempt is to implement Sonar and Radar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-5935038023055087988?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MSs_Dz3yUHHO_UFUYQ8g1P3R4i8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MSs_Dz3yUHHO_UFUYQ8g1P3R4i8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MSs_Dz3yUHHO_UFUYQ8g1P3R4i8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MSs_Dz3yUHHO_UFUYQ8g1P3R4i8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/d30PQSlLNu4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/5935038023055087988/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=5935038023055087988" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/5935038023055087988?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/5935038023055087988?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/d30PQSlLNu4/two-wheel-drive-odometry.html" title="Two wheels drive odometry" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_tFhSXJcjg48/SLrB2rJRTMI/AAAAAAAACDs/SzgU_kxIFY4/s72-c/odometer.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2008/08/two-wheel-drive-odometry.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMEQns4eSp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-1235271927409970684</id><published>2008-08-04T13:08:00.004+03:00</published><updated>2010-01-28T19:40:03.531+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T19:40:03.531+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>libnxt name collision</title><content type="html">After starting my own library for lego mindstroms nxt robotics kits, called libnxt, that provides basic robotics building blocks, I discovered another project already existing with &lt;a href="http://code.google.com/p/libnxt/"&gt;similar name&lt;/a&gt; (but different purpose). My bad that I didn't do a basic research for a name. I guess I will rename my project to libnxter instead.&lt;br /&gt;&lt;br /&gt;Update: Project is now renamed to &lt;a href="http://libnxter.sourceforge.net/"&gt;libnxter&lt;/a&gt;; thanks to SF support team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-1235271927409970684?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/f7fp-pWYWWQBirsQchasdW4Os5s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f7fp-pWYWWQBirsQchasdW4Os5s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/f7fp-pWYWWQBirsQchasdW4Os5s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f7fp-pWYWWQBirsQchasdW4Os5s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/MIqCX71hNnQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/1235271927409970684/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=1235271927409970684" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/1235271927409970684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/1235271927409970684?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/MIqCX71hNnQ/libnxt-name-collision.html" title="libnxt name collision" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2008/08/libnxt-name-collision.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFQXw5fip7ImA9WxRRE0o.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-5604538665899077927</id><published>2008-08-01T12:00:00.001+03:00</published><updated>2008-09-25T23:53:30.226+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-25T23:53:30.226+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Partial solar eclipse in Helsinki</title><content type="html">There was a partial solar eclipse visible from Helsinki on 1st Aug 2008, 12:00pm. Here is shot of it taken with my camera phone with a filter attached.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_tFhSXJcjg48/SJcgBsl-qMI/AAAAAAAACDA/Wew6FezEeh4/s1600-h/Helsinki-Solar-Eclipse-2008-08-01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_tFhSXJcjg48/SJcgBsl-qMI/AAAAAAAACDA/Wew6FezEeh4/s400/Helsinki-Solar-Eclipse-2008-08-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5230684705736534210" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-5604538665899077927?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nhUIZSuRMfDYQdTHsq7YN46efwU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nhUIZSuRMfDYQdTHsq7YN46efwU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nhUIZSuRMfDYQdTHsq7YN46efwU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nhUIZSuRMfDYQdTHsq7YN46efwU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/BnQ8FPES9qw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/5604538665899077927/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=5604538665899077927" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/5604538665899077927?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/5604538665899077927?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/BnQ8FPES9qw/partial-solar-eclipse-in-helsinki.html" title="Partial solar eclipse in Helsinki" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_tFhSXJcjg48/SJcgBsl-qMI/AAAAAAAACDA/Wew6FezEeh4/s72-c/Helsinki-Solar-Eclipse-2008-08-01.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2008/08/partial-solar-eclipse-in-helsinki.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYGRnkyeip7ImA9Wx9bGU8.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-1224473578519224486</id><published>2008-07-18T18:31:00.066+03:00</published><updated>2011-02-28T21:42:07.792+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T21:42:07.792+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>Kalman filter for lego mindstorms nxt</title><content type="html">One thing that becomes glaringly clear when starting robotics is that nothing goes as expected. The motors don't go as instructed and the sensors don't read as expected. This is a fundamental problem one faces in real world systems where noise is abundant and randomness is part of life. For example, when a motor is rotated by certain degree, it is never guaranteed to land on the desired position due to several physical uncertainties. Rather, it lands on a so call 'cloud of probability distribution'. Which basically means it will land on any point surrounding the desired point with certain probability. That's more of a gambling than precise control.&lt;br /&gt;&lt;br /&gt;If one continues running the system based on some ideal model, these errors quickly accumulate and very soon you have a deceivingly wrong understanding of what the state of the system is (it's called system drift). One way to counter this and prevent the error from growing high is obviously to have some feedback of the system state from an independent observation. That's where sensors come in handy.&lt;br /&gt;&lt;br /&gt;Unfortunately, as life would be, sensors themselves are not perfect and have the same problem of reading from a &lt;i&gt;cloud of probability&lt;/i&gt;. The measurements are seldom the actual state. Instead, it is something close to the actual value depending on whatever dice reading god happens to have at that point in time. The dice readings, of course, is governed by the &lt;i&gt;measurement probability cloud&lt;/i&gt; involved in that particular sensor setup.&lt;br /&gt;&lt;br /&gt;Depending on how much you paid for the motors and sensors, the clouds will be smaller or larger. But irrespectively, some clouds will always be there and one of the goals of many robot enthusiasts is to deal with these clouds.&lt;br /&gt;&lt;br /&gt;One savior in this department is a famous (or infamous, depending on how it goes with you :)) &lt;a href="http://en.wikipedia.org/wiki/Kalman_filter"&gt;Kalman Filter&lt;/a&gt;. This algorithm tries to maintain a good &lt;i&gt;estimate&lt;/i&gt; of current state based on two important knowledge of the dynamic system; 1) the model of the actuation and 2) the measurement readings. In ideal world, both of them will determine the exact state independently, but in real world, random errors make them hard to use directly. The best is to use them together in some form of statistically averaging way. Kalman Filter is one such way of doing that.&lt;br /&gt;&lt;br /&gt;I have implemented standard kalman filter for &lt;a href="http://mindstorms.lego.com/eng/Fana_dest/Default.aspx"&gt;lego mindstorms nxt&lt;/a&gt; and the &lt;a href="http://libnxter.sourceforge.net/_kalman_filter_8nxc.html"&gt;source code is available&lt;/a&gt; in &lt;a href="http://libnxter.sf.net"&gt;libnxt library&lt;/a&gt;. It's done in NXC language and runs on the standard firmware. It's a flexible implementation using integer matrix algebra and can be used comfortably for one, two, or three dimentional state vectors (above that, you could still use it, but it becomes very slow on nxt hardware).&lt;br /&gt;&lt;br /&gt;To use it in meaningful way, it's useful to know how kalman filter works (but not necessarily to the extend of knowing every details). Understanding the model at least will help provide the right parameters for the filter. I found this &lt;a href="http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ScalarKalman.html"&gt;excellent article explaining Kalman Filter&lt;/a&gt; that I felt was very well written. It explains it for one scaler variable, but can be easily applied to vectors using matrix operations.&lt;br /&gt;&lt;br /&gt;Cutting long story short, here is how it can be summarized. Kalman Filter works by maintaining the state of the system based on its actuation model and at the same time taking weighted contribution from the measurement. The weight, officially known as Kalman Gain, is determined from an understanding of how accurate the measurement is compared to the accuracy of the current estimate (which is known as &lt;i&gt;Posteriori error covariance&lt;/i&gt;). Highly inconsistent measurements have lower weight and therefore contributes less to the final estimate.&lt;br /&gt; &lt;br /&gt;It introduces two important assumptions in kalman filter. First is that the system must be linear. That's because &lt;i&gt;the understanding of accuray&lt;/i&gt; above is actually computed by simple linear comparison. If the system is not linear, the &lt;i&gt;understanding&lt;/i&gt; itself will be flawed. If the system is not linear, there are ways to &lt;i&gt;linearize&lt;/i&gt; the system or some other modified/improved form of Kalman filter is used, such as &lt;a href="http://en.wikipedia.org/wiki/Extended_Kalman_filter"&gt;Extended Kalman Filter&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Kalman_filter#Unscented_Kalman_filter"&gt;Unscented Kalman Filter&lt;/a&gt;. In my opinion it's just better to skip Mr. Kalman at that point and go for other versatile algorithms such as &lt;a href="http://en.wikipedia.org/wiki/Particle_filter"&gt;Particle Filter&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;The second assumption in kalman model is that the error introduced is &lt;a href="http://en.wikipedia.org/wiki/Normal_distribution"&gt;Gaussian distribution&lt;/a&gt;, also known as white noise. This is again because it only maintains one estimate of the state which it tries to converge based on the fact that statistically most likely estimate is the actual state, and as one go further away from the actual state, the less likely they happen. This is the basis of many naturally occurring random errors. For example, if you throw 1000 darts at a target, close to bulls eye is where you find most of the darts landing and it becomes thinner as you look further away from bulls-eye. If the error or uncertainty involved is not approximately Gaussian distribution, or not uni-modal (that is, it has more than 1 &lt;i&gt;most-likely&lt;/i&gt; estimates), then go for more versatile (but expensive) algorithms such as Particle Filters&lt;br /&gt;&lt;br /&gt;The following two equations describe the kalman model; a linear system with white noise introduced. The first is &lt;i&gt;Actuation model&lt;/i&gt; and the second is the &lt;i&gt;Observation or measurement model&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=X_t = A_t X_{t-1} %2b B_t U_{t-1} %2b W_{Q_t}"/&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=Z_t = H_t X_t %2b V_{R_t}"/&gt;&lt;br /&gt;&lt;br /&gt;The actuation model describes that current state &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=X_t"/&gt; is derived from previous state &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=X_{t-1}"/&gt;(transformed linearly by function &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=A_t"/&gt;) and adding whatever input control &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=U_{t-1}"/&gt; was applied to the system. &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=B_t"/&gt; is obviously the transformation function that converts control input to the its consequence in state space. &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=W_{Q_t}"/&gt; is the dreaded white noise which has mean 0 and covariance &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=Q_t"/&gt;.&lt;br /&gt;&lt;br /&gt;The observation model is described by observation &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=Z_t"/&gt; (the observed parameter) being made off current state &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=X_t"/&gt;. &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=H_t"/&gt; is the function that maps system state to the observation parameter. &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=V_{R_t}"/&gt; is the white noise added in &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=Z_t"/&gt;.&lt;br /&gt;&lt;br /&gt;Then the filter steps in a continuous loop. Each step is a time step (represented by t in the equations) and has three phases -- predict phase, intermediate phase and update phase.&lt;br /&gt;&lt;br /&gt;Predict phase, given by the following 2 equations, is when it determines the state of the system &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\hat{X}_k"/&gt; (called &lt;i&gt;Priori estimate&lt;/i&gt;, indicated by the 'hat') based on its actuation model.&lt;br /&gt;&lt;br /&gt;Predicted state:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\hat{X}_t = A_t X_{t-1} %2b B_t U_{t-1}"/&gt;&lt;br /&gt;&lt;br /&gt;Predicted estimate covariance:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\hat{P}_t =  A_t P_{t-1} A_{t}^{T} %2b Q_{t-1}"/&gt;&lt;br /&gt;&lt;br /&gt;The intermediate phase is where it determines the &lt;i&gt;understanding of accuracy&lt;/i&gt; &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=Y_t"/&gt; and &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=S_t"/&gt;, called residuals, and the best Kalman Gain &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=K_t"/&gt; for that step. &lt;br /&gt;&lt;br /&gt;Innovation or measurement residual:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=Y_t = Z_t - H_t \hat{X}_t"/&gt;&lt;br /&gt;&lt;br /&gt;Innovation (or residual) covariance:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=S_t = H_t \hat{P}_t H_{t}^{T} %2b R_t"/&gt;&lt;br /&gt;&lt;br /&gt;Optimal Kalman gain:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=K_t = \hat{P}_t H_{t}^{T} S_{k}^{-1}"/&gt;&lt;br /&gt;&lt;br /&gt;And lastly update phase is where it uses the Kalman Gain to update the &lt;i&gt;Priori estimate&lt;/i&gt; &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\hat{X}_k"/&gt; making it &lt;i&gt;Postariori estimate&lt;/i&gt; &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=X_t"/&gt;, which is the final estimate of the step. &lt;br /&gt;&lt;br /&gt;Updated state estimate:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\large X_t = \hat{X}_t %2b K_t Y_t"/&gt;&lt;br /&gt;&lt;br /&gt;Updated estimate covariance:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=\large P_t = (I - K_t H_t) \hat{P}_t"/&gt;&lt;br /&gt;&lt;br /&gt;All along, there is another paramenter that goes together with the state estimate, called &lt;i&gt;estimate covariance&lt;/i&gt; &lt;img src="http://chart.apis.google.com/chart?cht=tx&amp;chl=P_{t-1}, \hat{P}_t, P_t"/&gt;, that maintains the accuracy of state estimate.&lt;br /&gt;&lt;br /&gt;The biggest challenge for me was in implementing &lt;a href="http://libnxter.sourceforge.net/_matrix_8nxc.html"&gt;integer matrix operations&lt;/a&gt; and maintaining Kalmain Gain. While kalman equations where quite straight forward (just a bunch of matrix operations), doing it in integer form was a different beast. The dynamics of the equations were so large that holding them within integer range was non-trivial. I had to go with several 'tweaks' to make it work. The first tweak is about holding a matrix inverse in integer form. It's explained in detail at &lt;a href="http://libnxter.sourceforge.net/_matrix_8nxc.html#e6df291f36d157ad817a5b34bd634afb"&gt;libnxt matrix documentation&lt;/a&gt;. The second tweak was with Kalman Gain. This parameter is a fractional parameter that ranges from 0 to 1.0 and must maintain a good precision especially close to 0 for the filter to converge correctly around the set point. On top of that NXC doesn't support function calls recursion so it was another fight to implement matrix co-factor computation.&lt;br /&gt;&lt;br /&gt;Here is a video running a simulation on nxt brick:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/K2mj9-6MY5M"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/K2mj9-6MY5M" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-1224473578519224486?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/umjlUnohmJck42wRIVkzaemNlgo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/umjlUnohmJck42wRIVkzaemNlgo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/umjlUnohmJck42wRIVkzaemNlgo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/umjlUnohmJck42wRIVkzaemNlgo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/MNsZ15LpDXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/1224473578519224486/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=1224473578519224486" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/1224473578519224486?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/1224473578519224486?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/MNsZ15LpDXU/kalman-filter-for-lego-mindstorms-nxt.html" title="Kalman filter for lego mindstorms nxt" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://naba.blogspot.com/2008/07/kalman-filter-for-lego-mindstorms-nxt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAFSH05fip7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-3212737009058223789</id><published>2008-07-12T14:57:00.013+03:00</published><updated>2010-01-28T19:45:19.326+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T19:45:19.326+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>Making AlphaRex walk</title><content type="html">As it turned out, Making the official &lt;a href="http://mindstorms.lego.com/Overview/MTR_AlphaRex.aspx"&gt;AlphaRex&lt;/a&gt; model walk properly wasn't easy. Here is the video of AlphaRex walking. The program was written using &lt;a href="http://bricxcc.sourceforge.net/nbc/"&gt;NXC&lt;/a&gt; in &lt;a href="http://bricxcc.sourceforge.net/"&gt;Brixcc&lt;/a&gt; and is &lt;a href="http://libnxter.sourceforge.net/_alpha_rex_plus_8nxc-source.html"&gt;available here&lt;/a&gt;. There are several issues making it annoyingly hard to walk consistently. Some tweaks need to be done beyond the official model.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/R7uffItKrY4&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/R7uffItKrY4&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The first is the gears positioning.  The two motors, used for tilt and stride, have to be aligned &lt;b&gt;every freaking time&lt;/b&gt; before starting a walking program. This is annoying at best. There is simply no feedback about their initial positions and hence some pre-start position has to be assumed by the program.&lt;br /&gt;&lt;br /&gt;I solved it by using the touch and light sensors (otherwise uselessly mounted on AlphaRex as decoration) to detect tilt and stride positions. The program then calibrates the robot's alignment before starting walk sequence. During the calibration, it also determines motors' cycles needed for walking (hence, avoiding manual determination of gear ratios and so on).&lt;br /&gt;&lt;br /&gt;The second problem is that it has very little ground clearance for the feet, so it's easy for the robot to walk one-step-forward-half-step-backward if the strides are not made at perfect tilt positions where ground clearance is highest. The solution to this is simply to run the motors in turn. You make the strides only when the tilt is maximum or make turning moves with appropriate tilts. Rotating the motors continuously, as demonstrated by the official program, doesn't take advantage of 'maximum tilt position' and also because of positional drifts, the robot just ends up shuffling on the ground.&lt;br /&gt;&lt;br /&gt;The third problem is with the firmware's &lt;a href="http://en.wikipedia.org/wiki/PID_control"&gt;PID control&lt;/a&gt;. Since I am positioning the motors rather than rotating them continuously, I needed accurate and fast angular positioning (otherwise, it was a slow walk because of too much settling time). For the life of me, I couldn't tune the PID values for the firmware's implementation, even using &lt;a href="http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method"&gt;Ziegler–Nichols method&lt;/a&gt;. Out of frustration, I ended up implementing my own. A quick glance at firmware source code shows the implementation is done for speed control. Perhaps that's the reason why it sucked at position control.&lt;br /&gt;&lt;br /&gt;Walking is implemented using &lt;a href="http://en.wikipedia.org/wiki/State_machine"&gt;state machine&lt;/a&gt;. The state of the robot is described by a combination of tilt and stride positions. A state transition table describes what would be next state, given current state and current movement command. This allows the robot to switch to any walking state any moment based on a command. A separate table describes transition actions -- the physical actions needed to perform to get the robot from any given state to any other state.&lt;br /&gt;&lt;br /&gt;My implementation is different from the &lt;a href="http://home.earthlink.net/~xaos69/NXT/AlphaRex_Avoid_Obstacle/AlphaRex_Avoid_Obstacle.html"&gt;one described here&lt;/a&gt;, in the sense that I separated transition states and transition actions, allowing it to walk, turn and stop smoothly without having to enter a 'neutral' state in between. But otherwise, the idea is more or less similar. I think making states and actions separate makes it simpler to understand and put together. Also more flexible in hopping between states as a continuum; just like human doesn't stop before taking a turn. It looks like the walking can be sped up a little bit by starting strides already before tilt got to maximum, but I haven't bothered doing it.&lt;br /&gt;&lt;br /&gt;Using the touch sensor sensor was pretty easy because there is a clear 'detection' of tilt extreme.&lt;br /&gt;&lt;br /&gt;On the other hand, using the light sensor as proximity sensor was very hard because of ambient light not being uniform everywhere. After trying a lot, including implementing a &lt;a href="http://en.wikipedia.org/wiki/High_pass_filter"&gt;high pass filter&lt;/a&gt; (&lt;a href="http://libnxter.sourceforge.net/_high_pass_filter_8nxc-source.html"&gt;code&lt;/a&gt;) (ambient light is very low frequency; almost DC like), the best way turned out to be to use it to detect object sticking right in front of it. If the object is wide enough, it will block most of the ambient light and hence the reading would be uniform. Since we are talking about dead-on collision of the sensor and object, it was important to have some cushion to avoid strain on AlphaRex's leg. I used the supplied rubber connector to give some springy load to it. Check the video to see how the tilt and stride sensors are added.&lt;br /&gt;&lt;br /&gt;The program has three different threads: one is movement (motor control), the second is navigation (obstacle avoidance) and the third is command (user commands). The navigation and command threads are just some test routines and can be easily extended for other fun stuffs. The state table can also be extended to include backward movement and dancing movement etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-3212737009058223789?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vJ58B2dwEmxAisXIDt0k5M19VsY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vJ58B2dwEmxAisXIDt0k5M19VsY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vJ58B2dwEmxAisXIDt0k5M19VsY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vJ58B2dwEmxAisXIDt0k5M19VsY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/uEi-_XFov1E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/3212737009058223789/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=3212737009058223789" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3212737009058223789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3212737009058223789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/uEi-_XFov1E/making-alpharex-walk.html" title="Making AlphaRex walk" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://naba.blogspot.com/2008/07/making-alpharex-walk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICQXo5eCp7ImA9WxdUFU4.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-3233373893491720669</id><published>2008-07-05T15:00:00.004+03:00</published><updated>2008-07-31T22:29:20.420+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-31T22:29:20.420+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>Lego mindstorms NXT</title><content type="html">So, I got myself a &lt;a href="http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT"&gt;lego mindstorms NXT&lt;/a&gt; set to play around with robotics. It's pretty cool kit for a starter. It has surprisingly very powerful on board computer (called NXT brick) that has 2 processors (32 bit main processor and 8 bit co-processor). Most other 'expensive' robotics kits usually have very small rudimentary controller (such as an 8 bit microcontroller) and depends on external computers for real work.&lt;br /&gt;&lt;br /&gt;It also has got servo motors instead of stepper motors like other kits. Servos are known to be more accurate since you get positional feedbacks while stepper motor is open loop system, albeit more difficult to control. You get to learn control systems to take full advantage of the motors.&lt;br /&gt;&lt;br /&gt;The firmware is pretty powerful as well; supports multithreading, has full blown servo control (allowing you to micro manage your motors), write programs in C-like language &lt;a href="http://bricxcc.sourceforge.net/nbc/"&gt;NXC&lt;/a&gt; and above all, it's open source! The only disappointment I have is with the number of servos with the set. 3 servos aren't good enough for robotics. You get to build a vehicle with 2 motors and then what?&lt;br /&gt;&lt;br /&gt;The interesting part is the programming. The first thing you need to do after unboxing it is to ditch the bloatware called &lt;a href="http://mindstorms.lego.com/overview/NXT_Software.aspx"&gt;NXT-G&lt;/a&gt; software that comes with it and install &lt;a href="http://bricxcc.sourceforge.net/"&gt;Brix command center&lt;/a&gt; to program in NBC/NXC and start digging around the firmware APIs for real kicks.&lt;br /&gt;&lt;br /&gt;My first try was with the "obstacle-avoiding enemy-stinging scorpion" based on official 'Spike' model. I just got rid of the decorative 'spikes' around it that does nothing better than entangling around chair legs. Pretty simple programming.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vYWT9EkVEA8&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vYWT9EkVEA8&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Next is to try out the official 'AlphaRex' model. I heard it's pretty &lt;a href="http://www.google.com/search?q=alpharex+walking"&gt;hard to make it walk&lt;/a&gt; ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-3233373893491720669?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X-_w503LvsWk0fPdtQg7T8L_3-g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X-_w503LvsWk0fPdtQg7T8L_3-g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X-_w503LvsWk0fPdtQg7T8L_3-g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X-_w503LvsWk0fPdtQg7T8L_3-g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/lRUSx7IncV8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/3233373893491720669/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=3233373893491720669" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3233373893491720669?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3233373893491720669?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/lRUSx7IncV8/lego-mindstorms-nxt.html" title="Lego mindstorms NXT" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2008/07/lego-mindstorms-nxt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHR3g-eyp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-4149951158595305563</id><published>2006-06-30T23:31:00.000+03:00</published><updated>2008-08-01T10:52:16.653+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:52:16.653+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>We just had a baby girl!</title><content type="html">26th June 2:53am, Anjuta and I just had a cute baby girl! With the entry of third member in family, our lifes have changed and we are all in gear for the new comer. We are both very excited with the baby and looking forward to her new life. Mother is taking rest now but is recovering well. Our baby, Liya, cries a lot and we are having tough time getting sleeps (especially for Anjuta), but that's normal :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-4149951158595305563?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IS0A1MbbseI0J9NMnbPKdMA2oH0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IS0A1MbbseI0J9NMnbPKdMA2oH0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IS0A1MbbseI0J9NMnbPKdMA2oH0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IS0A1MbbseI0J9NMnbPKdMA2oH0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/Fnu7abZUApc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/4149951158595305563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=4149951158595305563" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/4149951158595305563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/4149951158595305563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/Fnu7abZUApc/we-just-had-baby-girl.html" title="We just had a baby girl!" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2006/07/we-just-had-baby-girl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYGQnk7eSp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-3191996503915454507</id><published>2005-08-11T20:19:00.001+03:00</published><updated>2010-01-28T20:42:03.701+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T20:42:03.701+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Anjuta 2.0: Project properties</title><content type="html">It's been long since I wrote anything. Here is a shot of project properties that I have been working on for last couple of days.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HaN87nW2I/AAAAAAAAF98/Ac1_85yrf2Y/s1600-h/project-properties.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 363px;" src="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HaN87nW2I/AAAAAAAAF98/Ac1_85yrf2Y/s400/project-properties.png" alt="" id="BLOGGER_PHOTO_ID_5431862558814853986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-3191996503915454507?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tyJC1h-XGvh6XezslryvFEngNjo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tyJC1h-XGvh6XezslryvFEngNjo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tyJC1h-XGvh6XezslryvFEngNjo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tyJC1h-XGvh6XezslryvFEngNjo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/VVVBGPeF9Ys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/3191996503915454507/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=3191996503915454507" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3191996503915454507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/3191996503915454507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/VVVBGPeF9Ys/anjuta-20-project-properties.html" title="Anjuta 2.0: Project properties" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HaN87nW2I/AAAAAAAAF98/Ac1_85yrf2Y/s72-c/project-properties.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2005/08/anjuta-20-project-properties.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcNSHczeSp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-112011131968122696</id><published>2005-06-30T09:01:00.001+03:00</published><updated>2008-08-01T10:51:39.981+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:51:39.981+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title /><content type="html">I just stumbled across this nice article by Nathan Willis about &lt;a href="http://www.newsforge.com/article.pl?sid=05/06/08/136214"&gt; version numbers abuse in Open Source software releases&lt;/a&gt;. He presents quite a few examples to support the claim that the classic 'x.0.0 is a stable release' paradigm is no longer being respected in most open source softwares.&lt;br /&gt;&lt;br /&gt;The fact is it is quite true and I have seen it done myself. The problem is, it simply doesn't seem to work with free software releases. There is a fundamental difference between commertial releases and free software releases. In commertial case, development releases are seldomn made public and most releases done are so called 'stable releases', mostly at the end of development cycles. I think the 'x.0.0 is stable release' fits more appropriately in this situation (since they can pretty much follow whatever numbering schemes inbetween for their developments).&lt;br /&gt;&lt;br /&gt;In free software releases however, there is this 'release often' philosophy where pretty much any change in the software is released to the public. In this situation, the version numbers are more or less used to indicate the amount of changes done to the software (hence the major.minor.micro versioning scheme). So following this logic, foobar-3.0.0 is a major change from foobar-2.0.0, while foobar-3.1.0 is a minor change from foobar-3.0.0 and so on. This basically  represents a visual scale for the users to grade the development of the software and to indicate how much change has occurred.&lt;br /&gt;&lt;br /&gt;However, we also need to accomodate the 'development' and 'stable' releases within this scheme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-112011131968122696?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U2IJ2fFctTOsFdrX1KaPJjqDTec/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U2IJ2fFctTOsFdrX1KaPJjqDTec/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U2IJ2fFctTOsFdrX1KaPJjqDTec/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U2IJ2fFctTOsFdrX1KaPJjqDTec/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/bpfzQhZgQ-w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/112011131968122696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=112011131968122696" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/112011131968122696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/112011131968122696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/bpfzQhZgQ-w/i-just-stumbled-across-this-nice.html" title="" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2005/06/i-just-stumbled-across-this-nice.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcNSHczeSp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-110157279635311624</id><published>2004-11-27T18:26:00.001+02:00</published><updated>2008-08-01T10:51:39.981+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:51:39.981+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Anjuta 2.0 Devel: New website</title><content type="html">I spent the last couple of days learning CSS and as a show off to my newly acquired knowledge, I have given a nice facelift to &lt;a href="http://www.anjuta.org/"&gt;Anjuta website&lt;/a&gt; and my weblog. Both use the same style-sheets and therefore follow the same theme. For a first-timer, it's not that bad.&lt;br /&gt;&lt;br /&gt;Until this, I didn't realize how shitty some browsers can have the CSS implementations done. I had to go for several workarounds to make the CSS work in these browsers. Especially useful in this quest was this particular &lt;i&gt;Unofficial&lt;/i&gt; Internet Explorer hackery which allowed conditional HTML codes to get included in head section if IE is used. It is also possible to check for the right version of IE using the same syntax. Here is what I did:&lt;br /&gt;&lt;pre&gt;&amp;lt;head&gt;&lt;br /&gt;   ....&lt;br /&gt;   &amp;lt;link href="css/default.css" type="text/css" rel="stylesheet"&amp;gt;&lt;br /&gt;   &amp;lt;!--[if IE 6]&amp;gt;&lt;br /&gt;   &amp;lt;link href="css/default-ie6.css" type="text/css" rel="stylesheet"&amp;gt;&lt;br /&gt;   &amp;lt;![endif]--&amp;gt;&lt;br /&gt;   ....&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/pre&gt;&lt;br /&gt;The idea is to override some css properties for IE. The style-sheets, so far, work fine with mozilla and IE6. But IE5 completely gorks on it and I am sure other browsers will also break. I should remember to fix it in the near future. CSS is a powerful web technology, but until all the browsers implement the specifications correctly, there's going to be lot of problems. No doubt all the web developers in world are already facing it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-110157279635311624?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x4cJFhnGqzMCicS_j5KNzZFTYBU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x4cJFhnGqzMCicS_j5KNzZFTYBU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x4cJFhnGqzMCicS_j5KNzZFTYBU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x4cJFhnGqzMCicS_j5KNzZFTYBU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/e50nxelaPgM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/110157279635311624/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=110157279635311624" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/110157279635311624?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/110157279635311624?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/e50nxelaPgM/anjuta-20-devel-new-website.html" title="Anjuta 2.0 Devel: New website" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/11/anjuta-20-devel-new-website.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMHQ3Yzeyp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109755943854692394</id><published>2004-10-11T19:29:00.003+03:00</published><updated>2010-01-28T20:47:12.883+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T20:47:12.883+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Anjuta 2.0 Devel: Test Shell</title><content type="html">Lots of things have happened recently in Anjuta CVS. Some important additions are Symbol Browser plugin, a plugins browser/testing shell, initial debugger plugin and lots of bug fixes. Pavol Bosik did a nice work with the recent addtion of debugger plugin initial codes. Johannes is continuing working on version control plugin.&lt;br /&gt;&lt;br /&gt;Symbol browser plugin is just half-done for now. It can load project symbols, but file symbols (current file) that shows up in the toolbar is not yet functional. The GtkUIManager, which anjuta uses for UI juggling, apparently is very limited in what toolbar components one can use. The common stuffs like buttons and toggle buttons are there, but more complex components like combo box entry and others are not available. Anjuta implements two components; entry and combo components for its own use. Entry component (EggEntryAction) was implemented long ago and the editor plugin has been using it. The combo action (EggComboAction) was recently completed (and tested). It is required for symbol browser plugin to display per-file symbols. I plan to complete the per-file symbols view soon. With that, symbol-browser plugin should be ready for prime use .. err .. testing. Here is screen shot showing symbol-browser plugin.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tFhSXJcjg48/S2HbdhgHauI/AAAAAAAAF-M/B5LDTTbM79Q/s1600-h/anjuta-2.0-symbol-browser.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 395px;" src="http://1.bp.blogspot.com/_tFhSXJcjg48/S2HbdhgHauI/AAAAAAAAF-M/B5LDTTbM79Q/s400/anjuta-2.0-symbol-browser.png" alt="" id="BLOGGER_PHOTO_ID_5431863925841292002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There will be one more problem with symbol-browser plugin's per-file symbols display. The GtkComboBox widget displays the list as menu. And that could be a problem when there are lots of symbols -- driving the menus out of screen display. The classic "show as list" combo, which was scrollable, is probably possible, but I haven't yet figured out how to bring it back in the new GtkComboBox widget.&lt;br /&gt;&lt;br /&gt;The todo plugin is fairly working. I added the code to load/unload a todo file. There is still a bug which makes it not to refresh when a project is loaded/unloaded. I should remember to fix it sometime soon.&lt;br /&gt;&lt;br /&gt;The new "Test shell" (for the lack of better name) is a step forward for plugins developer. It allows to browse currently available plugins and selectively activate or deactivate them. This should make developing/testing plugins easier. Earlier, whole anjuta had to be launched everytime a plugin is tested and that was quite annoying. Here is a screen shots showing the new test shell.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HbFfalduI/AAAAAAAAF-E/pYwBbz1FKnQ/s1600-h/anjuta-2.0-test-shell.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 268px; height: 400px;" src="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HbFfalduI/AAAAAAAAF-E/pYwBbz1FKnQ/s400/anjuta-2.0-test-shell.png" alt="" id="BLOGGER_PHOTO_ID_5431863512964364002" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109755943854692394?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9WKEuBdH0NASi7DKKg4wrfmSErc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9WKEuBdH0NASi7DKKg4wrfmSErc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9WKEuBdH0NASi7DKKg4wrfmSErc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9WKEuBdH0NASi7DKKg4wrfmSErc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/L3hkMo19XUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109755943854692394/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109755943854692394" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109755943854692394?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109755943854692394?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/L3hkMo19XUU/anjuta-20-devel-test-shell.html" title="Anjuta 2.0 Devel: Test Shell" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_tFhSXJcjg48/S2HbdhgHauI/AAAAAAAAF-M/B5LDTTbM79Q/s72-c/anjuta-2.0-symbol-browser.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/10/anjuta-20-devel-test-shell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIAQ3w8fCp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109532173024196555</id><published>2004-09-15T19:57:00.002+03:00</published><updated>2010-01-28T20:49:02.274+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T20:49:02.274+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Anjuta 2.0 Devel: File Wizard plugin</title><content type="html">I finally completed and committed the "New File Wizard" plugin.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HcCfiN2jI/AAAAAAAAF-U/Olq8WM7Czuk/s1600-h/anjuta-2.0-shot-file-wizard.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 329px;" src="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HcCfiN2jI/AAAAAAAAF-U/Olq8WM7Czuk/s400/anjuta-2.0-shot-file-wizard.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5431864560968391218" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109532173024196555?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uqmhS1y9SC_NJEh3oQLK7gv9cnw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uqmhS1y9SC_NJEh3oQLK7gv9cnw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uqmhS1y9SC_NJEh3oQLK7gv9cnw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uqmhS1y9SC_NJEh3oQLK7gv9cnw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/uNO83OYQ74Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109532173024196555/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109532173024196555" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109532173024196555?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109532173024196555?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/uNO83OYQ74Q/anjuta-20-devel-file-wizard-plugin.html" title="Anjuta 2.0 Devel: File Wizard plugin" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_tFhSXJcjg48/S2HcCfiN2jI/AAAAAAAAF-U/Olq8WM7Czuk/s72-c/anjuta-2.0-shot-file-wizard.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/09/anjuta-20-devel-file-wizard-plugin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEBRnY8eSp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109481358546747768</id><published>2004-09-09T19:43:00.002+03:00</published><updated>2010-01-28T20:50:57.871+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T20:50:57.871+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Anjuta 2.0 Devel: Todo plugin</title><content type="html">For sometime I have been thinking about a TODO manager plugin for Anjuta and have been putting it off because of somewhat depressing thought of creating it from ground up. The true light and inspiration to start on this came when I discovered &lt;a href="http://qballcow.nl/?name=gtodo"&gt;Gnome TODO list manager&lt;/a&gt; project and so here it is.&lt;br /&gt;&lt;br /&gt;Here is a screenshot showing a TODO manager plugin in Anjuta. The plugin is directly based on &lt;a href="http://qballcow.nl/?name=gtodo"&gt;Gtodo&lt;/a&gt; project by qball (at) qballcow.nl. I took the source, separated the main UI from the central widget and created a plugin out it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tFhSXJcjg48/S2HccI8L8AI/AAAAAAAAF-c/IYoCRHRgedU/s1600-h/anjuta-2.0-shot-gtodo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 238px;" src="http://3.bp.blogspot.com/_tFhSXJcjg48/S2HccI8L8AI/AAAAAAAAF-c/IYoCRHRgedU/s400/anjuta-2.0-shot-gtodo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5431865001579900930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The work is still under progress. The plugin UI (menus) and preferences are yet to be integrated into Anjuta. So far I haven't yet contacted the author regarding Anjuta integration, but I plan to do so when I have properly segregated UI out of central widget's way, which is right now all mingled in gtodo code.&lt;br /&gt;&lt;br /&gt;Once segregation is complete, the central widget and it's associated elements can be put in a separate library (in Gtodo project) and the UI (windows, menus etc.) can then use this library to build gtodo binary. At Anjuta's end, it can utilize this gtodo component library to build its plugin. Somewhat like we are doing with devhelp plugin.&lt;br /&gt;&lt;br /&gt;More updates to come ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109481358546747768?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fihIYdZhTfOnC7du2Py3v0jTduE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fihIYdZhTfOnC7du2Py3v0jTduE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fihIYdZhTfOnC7du2Py3v0jTduE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fihIYdZhTfOnC7du2Py3v0jTduE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/PzDSFau7uUQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109481358546747768/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109481358546747768" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109481358546747768?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109481358546747768?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/PzDSFau7uUQ/anjuta-20-devel-todo-plugin.html" title="Anjuta 2.0 Devel: Todo plugin" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_tFhSXJcjg48/S2HccI8L8AI/AAAAAAAAF-c/IYoCRHRgedU/s72-c/anjuta-2.0-shot-gtodo.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/09/anjuta-20-devel-todo-plugin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHR3g-eyp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109163382389674546</id><published>2004-08-04T19:24:00.001+03:00</published><updated>2008-08-01T10:52:16.653+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:52:16.653+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Violation of (basic) human rights in Manipur</title><content type="html">I have been closely &lt;a href="http://news.google.co.in/news?hl=en&amp;amp;edition=in&amp;amp;ie=UTF-8&amp;amp;q=manipur&amp;amp;btnG=Search+News"&gt;monitoring the news&lt;/a&gt; for happenings in Manipur. Unlike a few days ago, it seems like we are getting some attention from top indian media. Things are moving forward and central leaders are evaluating possible solutions for the troubles in Manipur. However, there doesn't seem to be any indication of central leaders agreeing to remove AFSP act yet.&lt;br /&gt;&lt;br /&gt;Especially enlightening among the news is &lt;a href="http://www.ndtv.com/template/template.asp?template=Manipurcrisis&amp;amp;slug=Manipur+crisis%3A+Woman+indicts+Army&amp;amp;id=58223&amp;amp;callid=1&amp;amp;category=National"&gt;this one&lt;/a&gt;. Apparently, a women has come forward as eye witness to give her account on what happened at the time of &lt;a href="http://naba.blogspot.com/2004/07/brutal-murder-of-manorama.html"&gt;murder&lt;/a&gt;. According to her report, she saw &lt;i&gt;some army persons in uniform taking a body of a woman&lt;/i&gt; towards the scene of crime and she heard some 5 to 6 gun shots about a fews minutes later.&lt;br /&gt;&lt;br /&gt;Notice the emphasis above. This makes one thing very clear. The original statement given by Assam Riffles that the woman was shot while &lt;a href="http://washingtontimes.com/upi-breaking/20040716-061608-7338r.htm"&gt;she tried to escape&lt;/a&gt; is a lie. Either she was dead before they brought her there or she was severly injured. And one does not need 5-6 shots to prevent near-dead someone escaping, assuming she indeed tried to escape.&lt;br /&gt;&lt;br /&gt;I found this interesting and comprehensive article on &lt;a href="http://www.hrdc.net/sahrdc/resources/armed_forces.htm"&gt;Armed Forces Special Powers Act&lt;/a&gt; (AFSP Act) describing everything about this draconian legislation. Some of the flaws in the act, which make this act rather inhuman and violate basic human rights, are quoted below from the article. Particularly disheartening is section 6 which protects them against legal procecutions.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; The army can shoot to kill, under the powers of section 4(a), for the commission or suspicion of the commission of the following offenses: acting in contravention of any law or order for the time being in force in the disturbed area prohibiting the assembly of five or more persons, carrying weapons, or carrying anything which is capable of being used as a fire-arm or ammunition. To justify the invocation of this provision, the officer need only be "of the opinion that it is necessary to do so for the maintenance of public order" and only give "such due warning as he may consider necessary".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The army can destroy property under section 4(b) if it is an arms dump, a fortified position or shelter from where armed attacks are made or are suspected of being made, if the structure is used as a training camp, or as a hide-out by armed gangs or absconders.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The army can arrest anyone without a warrant under section 4(c) who has committed, is suspected of having committed or of being about to commit, a cognisable offense and use any amount of force "necessary to effect the arrest".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Under section 4(d), the army can enter and search without a warrant to make an arrest or to recover any property, arms, ammunition or explosives which are believed to be unlawfully kept on the premises. This section also allows the use of force necessary for the search.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Section 5 states that after the military has arrested someone under the AFSPA, they must hand that person over to the nearest police station with the "least possible delay". There is no definition in the act of what constitutes the least possible delay.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Section 6 establishes that no legal proceeding can be brought against any member of the armed forces acting under the AFSPA, without the permission of the Central Government. This section leaves the victims of the armed forces abuses without a remedy.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;So much of law and order situation being bad in Manipur, there is no proper law in the first place *sigh*. This is not the first time such crime by army has happened. Many such incidents have happend before at alarming density and they have gone unnoticed by the media. Manorama's brutal murder was just the last straw.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109163382389674546?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KTH3Ib91jQ2mTA7mghCMLR2LD3Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KTH3Ib91jQ2mTA7mghCMLR2LD3Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KTH3Ib91jQ2mTA7mghCMLR2LD3Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KTH3Ib91jQ2mTA7mghCMLR2LD3Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/nLAEXQfl1Dk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109163382389674546/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109163382389674546" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109163382389674546?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109163382389674546?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/nLAEXQfl1Dk/violation-of-basic-human-rights-in.html" title="Violation of (basic) human rights in Manipur" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/08/violation-of-basic-human-rights-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8FRngyfCp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109090995218993364</id><published>2004-07-27T18:55:00.002+03:00</published><updated>2010-01-28T20:53:37.694+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T20:53:37.694+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Anjuta 2.0 development</title><content type="html">After a long break, I polished up some of my un-committed changes in &lt;a href="http://anjuta.org/"&gt;Anjuta cvs head&lt;/a&gt;. The preferences now use gconf system, but there are still more work to do in plugins to properly use it. gconf schema files need to be created and certain 'domain' need to be defined in preferences keys to enable groupings. Right now, there is no such grouping and all preferences are dumped together in a single gconf directory. Also, proper gconf notifications need to be implemented in plugins.&lt;br /&gt;&lt;br /&gt;Here is a screenshot of what I am working on:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tFhSXJcjg48/S2Hc6XAUslI/AAAAAAAAF-k/Flh_RAqQWMQ/s1600-h/anjuta-2.0.0-shot1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 291px;" src="http://1.bp.blogspot.com/_tFhSXJcjg48/S2Hc6XAUslI/AAAAAAAAF-k/Flh_RAqQWMQ/s400/anjuta-2.0.0-shot1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5431865520751424082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One interesting feature is the "Context menu merge", which allows plugins to merge their own context menus into other plugins. For example, Debugger plugin can merge its context menu into Editor plugin's menu for setting breakpoints and variable inspections. The merged menu can be manipulated (including, unmerged) by the owning plugin independent of the host plugin. Of course, rest of the communication and notification is through shell. Following screenshot highlights a build context menu merged by Build plugin into File Manager's context menu and controls it depending on what sort of build system is found in the directory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tFhSXJcjg48/S2HdFArT8kI/AAAAAAAAF-s/XQTosX_XLWo/s1600-h/anjuta-2.0-contexmenu.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 322px; height: 245px;" src="http://3.bp.blogspot.com/_tFhSXJcjg48/S2HdFArT8kI/AAAAAAAAF-s/XQTosX_XLWo/s400/anjuta-2.0-contexmenu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5431865703736275522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apart from these, a file loader plugin has been implemented that loads plugins based on file mime types. File manager plugin now uses file loader plugin to open files. GDL library has also been updated with newer changes. Overall, the changes are ready to be committed in CVS, which I will do in a couple of days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109090995218993364?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1Fde5XMyS5h-6qWEYxY5J5-Meuc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Fde5XMyS5h-6qWEYxY5J5-Meuc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1Fde5XMyS5h-6qWEYxY5J5-Meuc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Fde5XMyS5h-6qWEYxY5J5-Meuc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/bLrWkBH3wos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109090995218993364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109090995218993364" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109090995218993364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109090995218993364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/bLrWkBH3wos/anjuta-20-development.html" title="Anjuta 2.0 development" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_tFhSXJcjg48/S2Hc6XAUslI/AAAAAAAAF-k/Flh_RAqQWMQ/s72-c/anjuta-2.0.0-shot1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/anjuta-20-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcNSHczfCp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109040920458545078</id><published>2004-07-21T14:20:00.001+03:00</published><updated>2008-08-01T10:51:39.984+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:51:39.984+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="anjuta" /><title>Funny: ROTFL Bug report</title><content type="html">I just came across this &lt;a href="http://ttimo.net/abuse.txt"&gt;hilarious   bug report&lt;/a&gt; for &lt;a href="http://www.qeradiant.com/"&gt;GTKRadiant&lt;/a&gt; project. Have a nice laugh. My friend &lt;a href="http://ttimo.net/album/tn/2_2.jpg.html"&gt;TTimo&lt;/a&gt; must have found it amusing when he got the bug report (He is the admin of GTKRadiant plugins and helped in &lt;a href="http://anjuta.org/"&gt;Anjuta&lt;/a&gt; development in past).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109040920458545078?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pRDA529Ivm75-RjHQyaoUZPdGEg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pRDA529Ivm75-RjHQyaoUZPdGEg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pRDA529Ivm75-RjHQyaoUZPdGEg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pRDA529Ivm75-RjHQyaoUZPdGEg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/SmlMu7FVWkg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109040920458545078/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109040920458545078" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109040920458545078?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109040920458545078?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/SmlMu7FVWkg/funny-rotfl-bug-report.html" title="Funny: ROTFL Bug report" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/funny-rotfl-bug-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYBQn87cSp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109039478230553976</id><published>2004-07-21T10:09:00.001+03:00</published><updated>2008-08-01T10:52:33.109+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:52:33.109+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="food" /><title>Food: Quick egg noodles</title><content type="html">If you are tired of eating plain maggi or raman, try this out and you will like it. This is an ultra quick way to cook up tasty and nutritious noodles. It takes about 30 more seconds than vanilla noodles.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Ingredients: &lt;/b&gt;&lt;/i&gt; A pack of noodles (maggi, raman etc.), one tomato, some peas (20 to 100 peas) and two eggs.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Procedure: &lt;/b&gt;&lt;/i&gt; Heat 1.5 cups of water with the peas until it boils in one stove and start boiling the eggs in another stove. Put noodles, tastemaker and sliced tomato in the boiling water. Cook it for 2 mins. By the time noodles is ready, the eggs would have been half-boiled (make sure the eggs are no more than half-boiled). Stop the stoves and cool the eggs in cold running water. Break the eggs in middle and use a spoon to take out pastury egg contents into the noodles. Stir lighty and serve hot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109039478230553976?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i7SGAkduF5AruT6jQmFSiIg28QI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i7SGAkduF5AruT6jQmFSiIg28QI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i7SGAkduF5AruT6jQmFSiIg28QI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i7SGAkduF5AruT6jQmFSiIg28QI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/vvESJ495NoA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109039478230553976/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109039478230553976" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109039478230553976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109039478230553976?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/vvESJ495NoA/food-quick-egg-noodles.html" title="Food: Quick egg noodles" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/food-quick-egg-noodles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYMQn8_fip7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109032993309362334</id><published>2004-07-20T18:31:00.001+03:00</published><updated>2008-08-01T10:53:03.146+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:53:03.146+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Happy and Sad</title><content type="html">Today, I was both happy and sad. Happy because I talked to Anjuta (my fiancee) on phone and it was really nice. We talked about situation in Manipur (my previous blog entry) and how lonely we felt without each other. She is right now in Manipur, while I am still in New Delhi and we are not expected to meet before our marriage on Oct 25.&lt;br /&gt;&lt;br /&gt;I am sad because one of her close friends (and my friend too) has recently eloped with a guy (subsequently known as "the guy"). Well, nothing odd about it, execpt that the guy is not the one she intends to marry. She has a stable and committed relationship with another friend of mine and they have been into this relationship for a considerable time. They also have the committment to marry each other. Suddenly, this strange guy popped out of nowhere and caused a serious trouble in their relationship. Both my friends have been very heart broken on this.&lt;br /&gt;&lt;br /&gt;We have a tradition of eloping before marriage and it seems to have become "the system". Normally, couples eloping is a way to tell their parents that they are ready to marry. As long as "the system" works this way, everything is fine.&lt;br /&gt;&lt;br /&gt;Unfortunately, there are drawbacks to this approach and there are people, especially guys, who take advantage of this. They would force the girls to elope with them under questionable circumstances. Girls being "caught" in the situation without any possible recourse, have to either accept the marriage proposal or suffer moral setback (for being involved with a guy she is not marrying). This makes it rather hard to draw a clear line between elopement and abduction. Strange that our society still belives in this lousy system.&lt;br /&gt;&lt;br /&gt;Something similar has happened to my friend. Apparently, neither she nor her parents in any way seem to be interested in a marriage with the guy. They have only known each other for a month or so. There might have been some flirting between the two, but that does not justify the obvious unwillful elopement of my friend and putting her (and her boyfriend) in a jeoparadizing situation.&lt;br /&gt;&lt;br /&gt;I don't have any further information on this, but if both my friends agree to continue their relationship despite this tragedy, I would expect some sort of deserving punishment for the guy (possibly involving police). But that would require my friends to cooperate each other and continue their committments, rather than surrender to the unfaithful social obligations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109032993309362334?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PUEhZQEBiNwwQXZHLe4-5NDzYzg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PUEhZQEBiNwwQXZHLe4-5NDzYzg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PUEhZQEBiNwwQXZHLe4-5NDzYzg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PUEhZQEBiNwwQXZHLe4-5NDzYzg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/d7_V6xcN_yU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109032993309362334/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109032993309362334" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109032993309362334?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109032993309362334?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/d7_V6xcN_yU/happy-and-sad.html" title="Happy and Sad" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/happy-and-sad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYCRXk8eSp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109033959338733013</id><published>2004-07-20T18:16:00.001+03:00</published><updated>2008-08-01T10:52:44.771+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:52:44.771+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="games" /><title>End of Neverwinter Night</title><content type="html">I finally completed playing &lt;a href="http://nwn.bioware.com/"&gt;Neverwinter nights&lt;/a&gt;. It was a fun game and had a much better D&amp;amp;D ruleset than &lt;a href="http://www.bioware.com/games/shadows_amn/"&gt;Baldur's Gate 2&lt;/a&gt;. It also had a much better graphics than BG2 (3D vs 2D). I am not a great games fan, but I do love playing intutive games and would sometimes spend quite a bit of time playing at strech. The game is little old, but I loved playing it.&lt;br /&gt;&lt;br /&gt;Contrary to what I have read, the last fight (killing the evil Morag) was not that difficult, especially for a Wizard (which I was). In fact, it was quite easy and I doubt any other class would have handled it so comfortably). Here was my strategy (Warning: spoiler ahead).&lt;br /&gt;&lt;br /&gt;The first assuring fact is that Morag is actually a wizard and her offence and defence are spells only. Because you can not rest inside the source stone and you will run out of your memorized spells pretty quickly (even before reaching Morag), you need to get some scrolls and potions before you enter the source stone. I suggest you get Greater spell mantle (15), Greater restoration (10), and some offensive spells (negative energy burst (5), Horrid witting (5), Fireballs (10), Summon animal VIII (4) etc.).&lt;br /&gt;&lt;br /&gt;The first thing you need to take care is to protect yourself from the offensive spells from Morag. Just keep on putting spell mantles and you would be invincible. Note that Morag also seems to have quite a lot of Moleskin Disjunction spells (the best breaching spell) and she will constantly try to strip your spell protection down, but you don't have to worry as you have lots of spell mantles.&lt;br /&gt;&lt;br /&gt;Meantime, you need to take care of other physical monsters cropping around. For that I engaged my henchmen (strong) and a greater fire elemental. Monitor their health and cast Greater restoration whenever necessary.&lt;br /&gt;&lt;br /&gt;You also need to take care of those praying clerics first before you can do any harm to Morag. They protect Morag from various damages. The clerics are immune to quite a bit of things (mind spells, dead magic, disease, acid, fire etc.), but fortunately they are so absorbed in their prayer they won't harm you and they are very vulnerable to Negative energy. Drop some Negative energy bursts and they are doomed. I also left a Dire Boar around them, which took care of them, while I concentrated on other things.&lt;br /&gt;&lt;br /&gt;Then bring down Morag's spell protection with a dispell magic and she is a kitten. Just continue casting your offensive spells and at last she will fall.&lt;br /&gt;&lt;br /&gt;The only hard time was when she casts Time Stops, which makes you rather vunerable as you can't continue your spell protection. If she begins with a Moleskin Disjunction and follow with powerful offensive spells, you might die. But fortunately, the AI doesn't seem to be that smart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109033959338733013?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xqdU6eNlGCmyfdm6nsnZkKommdY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xqdU6eNlGCmyfdm6nsnZkKommdY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xqdU6eNlGCmyfdm6nsnZkKommdY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xqdU6eNlGCmyfdm6nsnZkKommdY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/fy7vmJ__elM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109033959338733013/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109033959338733013" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109033959338733013?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109033959338733013?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/fy7vmJ__elM/end-of-neverwinter-night.html" title="End of Neverwinter Night" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/end-of-neverwinter-night.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYNRnw7cSp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-109031778929301854</id><published>2004-07-19T20:27:00.001+03:00</published><updated>2008-08-01T10:53:17.209+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:53:17.209+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>The brutal murder of Manorama</title><content type="html">The &lt;a href="http://e-pao.net/epRelatedNews.asp?heading=1&amp;amp;src=120704"&gt;brutal murder of Thangjam Manorama&lt;/a&gt;, on July 10, after she was taken under custody by armed forces with an arrest warrent has resulted in a chaos in Manipur (a state of India). As the police force try to suppress &lt;a href="http://e-pao.net/epRelatedNews.asp?heading=1&amp;amp;src=130704"&gt;protests from various organizations and localities&lt;/a&gt;, a massive &lt;a href="http://e-pao.net/epGallery.asp?id=1&amp;amp;src=ManoramKillingJuly2004"&gt;civil crisis (photographs)&lt;/a&gt; has been triggered resulting in many casualties. There even was &lt;a href="http://e-pao.net/epRelatedNews.asp?heading=12&amp;amp;src=150704"&gt;nude protest&lt;/a&gt; against the "17 assam rifles" responsible for this brutal murder. It is perhaps the first time in India that such event has happened, clearly showing how frustrated the people of Manipur are with the abuse of power by armed forces. Even more frustating is the continued indefinite curfew and failure of the goverment to perform a judcial probe of the matter. Ten days have passed since the event, but the &lt;a href="http://e-pao.net/epPageExtractor.asp?src=related_news.timeline_Manorama_killing_2004.html.."&gt;timeline of the event&lt;/a&gt; seems to show no progress in this judicial inquiry, which the govenment has been promising to do right from the begining. On the contrary, it seems govenment has &lt;a href="http://e-pao.net/epRelatedNews.asp?heading=1&amp;amp;src=150704"&gt;some other explaination&lt;/a&gt; for not being able to conduct any justice.&lt;br /&gt;&lt;br /&gt;Justice is a very expensive comodity considering the breakdown of law and order situation in Manipur. No doubt, a crime as gruesome, inhuman and sensitive for public as this one is, it would have been solved in hours in some other parts of world. But in Manipur, thanks to the abuse of &lt;a href="http://e-pao.net/epRelatedNews.asp?heading=10&amp;amp;src=160704"&gt;Armed Forces Special Power Act&lt;/a&gt;, there seem to be no way for the people of northeast India even to get close to justice. It is difficult to guage the faith of Manipur as long as this power is abused by armed forces.&lt;br /&gt;&lt;br /&gt;The state government has &lt;a href="http://e-pao.net/epRelatedNews.asp?heading=1&amp;amp;src=190704"&gt;some concerns&lt;/a&gt; over completely removing this Act from the region, because it belives it might bring other adminstrative problems, notably from the insurgent groups active in the region. While the claim is true, letting the public suffer between the two powers is no justification. The govenment has also failed to ensure the safety of public (from the abuse of the act) despite getting &lt;i&gt;its&lt;/i&gt; safety from the act. Sounds paradoxical?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-109031778929301854?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-pXk4s7nywrIelu7i2YvsEaw2ic/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-pXk4s7nywrIelu7i2YvsEaw2ic/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-pXk4s7nywrIelu7i2YvsEaw2ic/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-pXk4s7nywrIelu7i2YvsEaw2ic/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/qnHwaYFUt38" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/109031778929301854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=109031778929301854" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109031778929301854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/109031778929301854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/qnHwaYFUt38/brutal-murder-of-manorama.html" title="The brutal murder of Manorama" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/brutal-murder-of-manorama.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHR3g-fCp7ImA9WxdUFUo.&quot;"><id>tag:blogger.com,1999:blog-7677954.post-10902252344430620</id><published>2004-07-19T18:22:00.001+03:00</published><updated>2008-08-01T10:52:16.654+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-01T10:52:16.654+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>My new home</title><content type="html">After a much debate over when I should look for a new home, I finally did it this month. My old residence was far away from my workplace and my new residence saves me 2 to 3 hours of commuting daily. It's a little expensive, but that evens out with the fuel and time saved. The hardest part of the shift was moving my stuffs. I decided to do it myself rather than hiring a movers-n-packers, because it was kind of fun. It took me 4 days of 1 trip per day of one-man hard labour (read: exercise) to complete it. Now, it's been three days I have lived in my new home and I find it quite enjoyable.&lt;br /&gt;&lt;br /&gt;The most disturbing news in the last few days I have come cross is the &lt;a href="http://www.guardian.co.uk/india/story/0,12559,1263308,00.html"&gt;fire in a school that killed more than 90 kids&lt;/a&gt;. Government is &lt;a href="http://www.guardian.co.uk/india/story/0,12559,1264307,00.html"&gt;closing down more than 200 schools&lt;/a&gt; in the hope of preventing more such accidents. However, I wonder what will happen to the students of these 200 schools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7677954-10902252344430620?l=naba.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QRuVtv7_Rn4-PuzRo-Tdvunkkd0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QRuVtv7_Rn4-PuzRo-Tdvunkkd0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QRuVtv7_Rn4-PuzRo-Tdvunkkd0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QRuVtv7_Rn4-PuzRo-Tdvunkkd0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NabaWeblog/~4/8t8toTHiLJU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://naba.blogspot.com/feeds/10902252344430620/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7677954&amp;postID=10902252344430620" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/10902252344430620?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7677954/posts/default/10902252344430620?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/NabaWeblog/~3/8t8toTHiLJU/my-new-home.html" title="My new home" /><author><name>Naba Kumar</name><uri>http://www.blogger.com/profile/09230803583595330304</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://2.bp.blogspot.com/-LAFglmEb1Ms/TnrxyPbVvfI/AAAAAAAALSU/CUcCyjT2Rfs/s220/naba-avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://naba.blogspot.com/2004/07/my-new-home.html</feedburner:origLink></entry></feed>

