<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10123815</id><updated>2012-01-27T11:03:17.324-08:00</updated><title type='text'>Tech Erudition</title><subtitle type='html'>I welcome you to My Web Log.
Enjoy reading it, comment on topics you want to.
Thank you.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default?start-index=101&amp;max-results=100'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>101</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10123815.post-8743143402431559120</id><published>2012-01-27T10:58:00.000-08:00</published><updated>2012-01-27T11:03:17.333-08:00</updated><title type='text'>Google Chrome: input type="search" &amp; results HTML attribute!</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Pulled my hair for a while as the search icon did not appear inside "input type='search'" on Chrome.&lt;br /&gt;&lt;br /&gt;Took a while to realize that I had missed results=".." attribute (number of history item to drop-down) in the HTML tag!&lt;br /&gt;&lt;br /&gt;&amp;lt;input type="search" placeholder="Search" results="3" ...&amp;gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-8743143402431559120?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/8743143402431559120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=8743143402431559120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8743143402431559120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8743143402431559120'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2012/01/google-chrome-input-typesearch-results.html' title='Google Chrome: input type=&quot;search&quot; &amp; results HTML attribute!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1100792413017046100</id><published>2012-01-20T00:13:00.000-08:00</published><updated>2012-01-20T00:32:21.123-08:00</updated><title type='text'>Boilerplate template for apache ant build.xml</title><content type='html'>Pulled up the basic boilerplate template for Apache ant build.xml that was written year's back. &lt;br /&gt;You might find it useful to extend it further. Find it &lt;a href="http://code.google.com/p/boilerplate-apps/wiki/AntBuildFileTeamplate"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1100792413017046100?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1100792413017046100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1100792413017046100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1100792413017046100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1100792413017046100'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2012/01/boilerplate-template-for-apache-ant.html' title='Boilerplate template for apache ant build.xml'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-2020544736147368761</id><published>2011-10-04T04:28:00.000-07:00</published><updated>2011-10-04T04:34:11.669-07:00</updated><title type='text'>Filesearch in download directory</title><content type='html'>I found myself re-downloading files that was available in central-download-server (on internal LAN). The issue was primary the lack of web-enabled search application.&lt;br /&gt;&lt;br /&gt;Developed a simple application using (PHP + jQuery + find command) that lets user to search for the files in the download server directory, if nothing found suggest for Google search.&lt;br /&gt;&lt;br /&gt;Here is the &lt;a href="http://code.google.com/p/onweb/downloads/detail?name=filesearch.zip"&gt;download details&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-2020544736147368761?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/2020544736147368761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=2020544736147368761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2020544736147368761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2020544736147368761'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/10/filesearch-in-download-directory.html' title='Filesearch in download directory'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-6897490896946783646</id><published>2011-06-28T05:50:00.001-07:00</published><updated>2011-06-28T05:52:33.541-07:00</updated><title type='text'>Javascript Array Sort Custom Comparator</title><content type='html'>Javascript Array.sort() allows you to define custom comparators! &lt;br /&gt;&lt;br /&gt;var numbers = [10, 20, 5, -10, 30];&lt;br /&gt;&lt;br /&gt;// Sorting in ascending order.&lt;br /&gt;&lt;code&gt;numbers.sort(function(a, b){return a-b;});&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;// Sorting in descending order&lt;br /&gt;&lt;code&gt;numbers.sort(function(a, b){return b-a;});&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-6897490896946783646?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/6897490896946783646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=6897490896946783646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6897490896946783646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6897490896946783646'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/06/javascript-array-sort-custom-comparator.html' title='Javascript Array Sort Custom Comparator'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5988149216659619946</id><published>2011-06-14T05:03:00.000-07:00</published><updated>2011-06-14T05:08:28.306-07:00</updated><title type='text'>i18n-translator: makes it easy to translate and verify</title><content type='html'>Translating strings using online-services for providing internalization support might be a fun job. However, you could end up with inconsistent translation. Verifying the translation across different services would helpful. &lt;a href="http://code.google.com/p/i18n-translator"&gt;i18n-translator&lt;/a&gt; could be handy tool for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5988149216659619946?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5988149216659619946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5988149216659619946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5988149216659619946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5988149216659619946'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/06/i18n-translator-makes-it-easy-to.html' title='i18n-translator: makes it easy to translate and verify'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-2292826704952870665</id><published>2011-06-01T13:51:00.000-07:00</published><updated>2011-06-01T13:55:53.893-07:00</updated><title type='text'>PHP Performance Tuning: Watch out for notices, warnings, errors...</title><content type='html'>PHP error reporting like notices, warnings... adds performance overhead and would make it hard to trace. During development make sure to turn-on error_reporting (E_ALL) and fix the issues logged, it helps your code to reach production quality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-2292826704952870665?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/2292826704952870665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=2292826704952870665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2292826704952870665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2292826704952870665'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/06/php-performance-tuning-watch-out-for.html' title='PHP Performance Tuning: Watch out for notices, warnings, errors...'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-9048624133231193433</id><published>2011-03-10T22:39:00.000-08:00</published><updated>2011-03-10T22:43:18.417-08:00</updated><title type='text'>Android 3.0 (Gingerbird) - Drains Battery!!!</title><content type='html'>Last week I upgraded to Gingerbird (Android 3.0) and noticed heavy battery draining! Turning off Wifi helped in retaining device run on battery for longer time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-9048624133231193433?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/9048624133231193433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=9048624133231193433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/9048624133231193433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/9048624133231193433'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/03/android-30-gingerbird-drains-battery.html' title='Android 3.0 (Gingerbird) - Drains Battery!!!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4814824860068741248</id><published>2011-03-04T02:20:00.001-08:00</published><updated>2011-03-04T02:24:25.062-08:00</updated><title type='text'>Working with Remote URL - BlackBerry Simulator</title><content type='html'>If you are getting started to work BlackBerry development and aim at fetching connect from remote URL, to test with Blackberry simulator review the following:&lt;br /&gt;&lt;br /&gt;* Setup Wifi on the Blackberry Simulator.&lt;br /&gt;&lt;br /&gt;* Blackberry MDS is running - without which Remote URL fetch attempt silently fails.&lt;br /&gt;&lt;br /&gt;* Grant access in the app (config.xml)&lt;br /&gt;  &amp;lt;access subdomains="true" uri="http://targetdomain.tld"&gt; or &lt;br /&gt;  &amp;lt;access subdomains="true" uri="*"&gt; &lt;br /&gt;  &lt;br /&gt;* Now launch the app and test the url fetch. (assuming it uses javax.microedition.io.* classes) &lt;br /&gt;&lt;br /&gt;NOTE: Blackberry MDS failed to work as expected on Windows Vista/Windows 7, I had to switch on Windows XP!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4814824860068741248?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4814824860068741248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4814824860068741248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4814824860068741248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4814824860068741248'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/03/working-with-remote-url-blackberry.html' title='Working with Remote URL - BlackBerry Simulator'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-6746607410129955266</id><published>2011-02-04T04:52:00.000-08:00</published><updated>2011-02-04T09:14:24.465-08:00</updated><title type='text'>va_callback plugin for jQuery</title><content type='html'>Passing state information through variables for callback function is essential.&lt;br /&gt;Although &lt;a href="http://api.jquery.com/jQuery.proxy/"&gt;jQuery proxy&lt;/a&gt; API is available, it does not seem to accept more arguments to be tunneled for the callback.&lt;br /&gt;&lt;br /&gt;jquery-vacallback plugin targets to achieve the same. &lt;br /&gt;&lt;br /&gt;Click to &lt;a href="http://jquery-vacallback.googlecode.com/files/jquery.vacallback.js"&gt;download&lt;/a&gt; plugin. Look at the &lt;a href="http://code.google.com/p/jquery-vacallback/wiki/Example"&gt;example&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-6746607410129955266?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/6746607410129955266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=6746607410129955266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6746607410129955266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6746607410129955266'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/02/vacallback-plugin-for-jquery.html' title='va_callback plugin for jQuery'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-8256390355823692314</id><published>2011-02-04T03:18:00.000-08:00</published><updated>2011-02-04T03:23:43.267-08:00</updated><title type='text'>TextMate - Themes</title><content type='html'>Following places could help you find &lt;a href="http://wiki.macromates.com/Themes/UserSubmittedThemes"&gt;themes&lt;/a&gt; for &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.macromates.com/Themes/UserSubmittedThemes"&gt;http://wiki.macromates.com/Themes/UserSubmittedThemes&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/filmgirl/TextMate-Themes"&gt;https://github.com/filmgirl/TextMate-Themes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://textmatetheme.com/themes"&gt;http://textmatetheme.com/themes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-8256390355823692314?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/8256390355823692314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=8256390355823692314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8256390355823692314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8256390355823692314'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/02/textmate-themes.html' title='TextMate - Themes'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-6026207615851360807</id><published>2011-02-01T13:34:00.000-08:00</published><updated>2011-02-02T03:48:49.279-08:00</updated><title type='text'>fileloader plugin for jquery 1.5</title><content type='html'>jquery 1.5 has introduced &lt;a href="http://api.jquery.com/category/deferred-object"&gt;Deferred Object&lt;/a&gt; feature.&lt;br /&gt;&lt;a href="http://code.google.com/p/jquery-fileloader"&gt;&lt;br /&gt;fileloader plugin&lt;/a&gt; is developed taking advantage of the same.&lt;br /&gt;&lt;br /&gt;This should help you to build classes, which loads the resources required ondemand and proceed with operation once the fetch is completed. &lt;br /&gt;&lt;br /&gt;Click to &lt;a href="http://jquery-fileloader.googlecode.com/files/jquery.fileloader.js"&gt;download&lt;/a&gt; plugin. Look at the &lt;a href="http://code.google.com/p/jquery-fileloader/wiki/Example"&gt;example&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-6026207615851360807?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/6026207615851360807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=6026207615851360807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6026207615851360807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6026207615851360807'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/02/fileloader-plugin-for-jquery-15.html' title='fileloader plugin for jquery 1.5'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5001528744058669516</id><published>2011-01-10T01:10:00.000-08:00</published><updated>2011-01-10T01:11:34.264-08:00</updated><title type='text'>Privilege - a Freedom factor</title><content type='html'>One who misuses privilege,&lt;br /&gt;is not worthy for freedom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5001528744058669516?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5001528744058669516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5001528744058669516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5001528744058669516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5001528744058669516'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2011/01/privilege-freedom-factor.html' title='Privilege - a Freedom factor'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4689063782980513118</id><published>2010-12-25T09:48:00.000-08:00</published><updated>2010-12-25T09:52:17.290-08:00</updated><title type='text'>Ignorance - Courage - Wisdom</title><content type='html'>Ignorance is Past,&lt;br /&gt;Courage is Present,&lt;br /&gt;Wisdom is Future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4689063782980513118?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4689063782980513118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4689063782980513118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4689063782980513118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4689063782980513118'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/12/ignorance-courage-wisdom.html' title='Ignorance - Courage - Wisdom'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3631733831860644999</id><published>2010-12-14T04:14:00.000-08:00</published><updated>2010-12-14T04:28:45.533-08:00</updated><title type='text'>gnu-hylafax: scheduler NAK'd request ?</title><content type='html'>Working with &lt;a href="gnu-hylafax.sourceforge.net/"&gt;gnu-hylafax library&lt;/a&gt; is a great, but if you don't pay careful attention it can blow your mind and keep you awake the whole night!&lt;br /&gt;&lt;br /&gt;I kept wonder why sendfax command works fine but application built using gnu-hylafax library ends up with exception.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;460 Failed to submit job *: Unspecified reason (scheduler NAK'd request).&lt;br /&gt;        at gnu.hylafax.HylaFAXClientProtocol.jsubm(HylaFAXClientProtocol.java:702)&lt;br /&gt;        at gnu.hylafax.HylaFAXClient.submit(HylaFAXClient.java:632)&lt;br /&gt;        ...&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;On reason for this was missing call to &lt;i&gt;job.&lt;a href="http://gnu-hylafax.sourceforge.net/gnu-hylafax-core/apidocs/index.html"&gt;setKillTime&lt;/a&gt;("value"); &lt;/i&gt;&lt;small&gt;(preferable to set value as 00259)&lt;/small&gt; This translates to &lt;u&gt;JPARAM LASTTIME value&lt;/u&gt; command. &lt;br /&gt;&lt;br /&gt;How to trace the issue? &lt;br /&gt;&lt;br /&gt;Enable &lt;a href="http://prasadblog.blogspot.com/2010/12/commons-logging-log4j-configuration.html"&gt;Log4JLogger for the application&lt;/a&gt;, you should be able to get the trace of all the TELNET commands executed. Verify the same with (sendfax -vv ...)&lt;br /&gt;&lt;br /&gt;Sample log4j.properties file with gnu.hylafax.ClientProtocol logger:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#set the level of the root logger to DEBUG and set its appender as an appender named X&lt;br /&gt;log4j.rootLogger = DEBUG, X&lt;br /&gt;&lt;br /&gt;log4j.logger.X = DEBUG, X&lt;br /&gt;log4j.logger.gnu.hylafax.ClientProtocol = DEBUG, X&lt;br /&gt;&lt;br /&gt;#set the appender named X to be a console appender&lt;br /&gt;log4j.appender.X=org.apache.log4j.ConsoleAppender&lt;br /&gt;&lt;br /&gt;#set the layout for appender named X to be a pattern layout &lt;br /&gt;log4j.appender.X.layout=org.apache.log4j.PatternLayout&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3631733831860644999?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3631733831860644999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3631733831860644999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3631733831860644999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3631733831860644999'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/12/gnu-hylafax-scheduler-nakd-request.html' title='gnu-hylafax: scheduler NAK&apos;d request ?'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1696979958775520278</id><published>2010-12-14T02:40:00.001-08:00</published><updated>2010-12-14T02:47:09.058-08:00</updated><title type='text'>Commons Logging - Log4J Configuration</title><content type='html'>If you use &lt;a href="http://commons.apache.org/logging/"&gt;commons-logging&lt;/a&gt; in your java application, make sure to have &lt;a href="http://logging.apache.org/log4j/1.2/download.html"&gt;log4j library (jar)&lt;/a&gt; and log4j.properties file on the class path. You really don't need much tweaking to get started :)&lt;br /&gt;&lt;br /&gt;Simple log4j.properties file:&lt;br /&gt;&lt;br /&gt;# Set root logger level to DEBUG and its only appender to A1.&lt;br /&gt;log4j.rootLogger=DEBUG, A1&lt;br /&gt;&lt;br /&gt;# A1 is set to be a ConsoleAppender.&lt;br /&gt;log4j.appender.A1=org.apache.log4j.ConsoleAppender&lt;br /&gt;&lt;br /&gt;# A1 uses PatternLayout.&lt;br /&gt;log4j.appender.A1.layout=org.apache.log4j.PatternLayout&lt;br /&gt;&lt;br /&gt;To learn more on jump to &lt;a href="http://logging.apache.org/log4j/1.2/manual.html"&gt;log4j manual&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1696979958775520278?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1696979958775520278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1696979958775520278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1696979958775520278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1696979958775520278'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/12/commons-logging-log4j-configuration.html' title='Commons Logging - Log4J Configuration'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4375424059273368574</id><published>2010-10-21T10:57:00.000-07:00</published><updated>2010-10-21T11:11:19.865-07:00</updated><title type='text'>Boilerplate app for PHP</title><content type='html'>Getting a quick start on application development adds a lot to subsequent progress. &lt;br /&gt;&lt;a href="http://boilerplate-apps.googlecode.com/svn/trunk/php"&gt;&lt;br /&gt;Boilerplate app for PHP&lt;/a&gt; is once such attempt where the skeleton structure is ready to give you the quick start. The application is developed using the MVC architecture. It is integrated with &lt;a href="http://www.smarty.net"&gt;Smarty&lt;/a&gt;, &lt;a href="http://pear.php.net/package/MDB2/"&gt;MDB2&lt;/a&gt; libraries. &lt;br /&gt;&lt;br /&gt;You will need to update config.php with database details and&lt;br /&gt;start adding the logic to install.php, index.php, administrator.php&lt;br /&gt;&lt;br /&gt;Repository location: &lt;a href="http://boilerplate-apps.googlecode.com/svn/trunk/php"&gt;http://boilerplate-apps.googlecode.com/svn/trunk/php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Get a copy to start: svn export http://boilerplate-apps.googlecode.com/svn/trunk/php boilerplate-php&lt;br /&gt;&lt;br /&gt;Hope you will find it useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4375424059273368574?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4375424059273368574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4375424059273368574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4375424059273368574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4375424059273368574'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/10/boilerplate-app-for-php.html' title='Boilerplate app for PHP'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-912087847254998643</id><published>2010-09-17T21:39:00.000-07:00</published><updated>2010-09-17T21:43:18.613-07:00</updated><title type='text'>What makes a team poor?</title><content type='html'>Having right ones at wrong place,&lt;br /&gt;and Wrong ones at right place!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-912087847254998643?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/912087847254998643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=912087847254998643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/912087847254998643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/912087847254998643'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/09/what-makes-team-poor.html' title='What makes a team poor?'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-7596668361121184592</id><published>2010-09-15T03:15:00.000-07:00</published><updated>2010-09-15T03:21:39.572-07:00</updated><title type='text'>GWT on Netbeans?</title><content type='html'>Follow the post: &lt;a href="http://blog.jdevelop.eu/2009/11/11/create-a-gwt-application-from-scratch/"&gt;Create a GWT Application from Scratch&lt;/a&gt; to get started with &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; on Netbeans!&lt;br /&gt;&lt;br /&gt;If try to install GlassFish server and end up with reference problems to library (javaee-endorse-api) try installing 'EJB and EAR' plugin as pointed out at&lt;br /&gt;&lt;a href="http://forums.netbeans.org/topic21379.html"&gt;Missing "javaee-endorsed-api-6.0" Class Library&lt;/a&gt; it should help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-7596668361121184592?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/7596668361121184592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=7596668361121184592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7596668361121184592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7596668361121184592'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/09/gwt-on-netbeans.html' title='GWT on Netbeans?'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-8209987062109021703</id><published>2010-01-28T00:09:00.000-08:00</published><updated>2010-08-27T11:56:38.525-07:00</updated><title type='text'>Programmer's Notepad - pnotepad</title><content type='html'>If you are looking around for a light-memory footprint editor for quick coding with highlight and add-on support give &lt;a href="http://code.google.com/p/pnotepad"&gt;Programmer's Notepad&lt;/a&gt; a try.&lt;br /&gt;&lt;br /&gt;For coloring scheme you visit, &lt;a href="http://code.google.com/p/pnotepad/downloads/list?can=2&amp;q=type:Scheme&amp;colspec=Filename%20Summary#"&gt;downloads section&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPDATE: With Default Preset, 'Consolas', 10px Font configuration this editor works pretty much like TextMate. Learn about &lt;a href='http://www.pnotepad.org/docs/projects/introduction'&gt;Projects, Project Groups and Magic folder&lt;/a&gt; for organizing your code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-8209987062109021703?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/8209987062109021703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=8209987062109021703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8209987062109021703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8209987062109021703'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/01/programmers-notepad-pnotepad.html' title='Programmer&apos;s Notepad - pnotepad'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4823923321286660263</id><published>2010-01-11T02:49:00.000-08:00</published><updated>2010-01-11T02:56:22.238-08:00</updated><title type='text'>Installing GNUStep on Fedora Core</title><content type='html'>In the journey of installing &lt;a href="http://www.gnustep.org/"&gt;GNUStep&lt;/a&gt; on my Fedora Core machine, I noted couple of useful pointers&lt;br /&gt;that could help you save sometime.&lt;br /&gt;&lt;br /&gt;* Install GNUStep Make from yum repository (yum install gnustep-make)&lt;br /&gt;&lt;br /&gt;* make (compile source) and install GNUStep Base&lt;br /&gt;&lt;br /&gt;  You will need the following:&lt;br /&gt;  export GNUSTEP_MAKEFILES=/usr/lib/GNUstep/Makefiles/&lt;br /&gt;  &lt;br /&gt;* make (compile source) and install GNUStep GUI&lt;br /&gt;&lt;br /&gt;  You need to update ldconfig.&lt;br /&gt;  &lt;br /&gt;  vim /etc/ld.so.conf.d/gnustep.conf&lt;br /&gt;    &lt;br /&gt;  Add the content below and save:&lt;br /&gt;  /usr/local/lib/ix86/linux-gnu/gnu-gnu-gnu&lt;br /&gt;  &lt;br /&gt;  Execute:&lt;br /&gt;  /sbin/ldconfig&lt;br /&gt;  &lt;br /&gt;* make (compile source) and install GNUstep Backend&lt;br /&gt;&lt;br /&gt;  You will need the following:&lt;br /&gt;  export PATH=$PATH:/usr/local/bin/ix86/linux-gnu/gnu-gnu-gnu&lt;br /&gt;&lt;br /&gt;Check out complete documentation on steps followed at &lt;a href="http://onweb.googlecode.com/files/How-to-Install-GNUStep-On-FedoraCore.txt"&gt;How to install GNUStep on Fedora Core&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4823923321286660263?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4823923321286660263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4823923321286660263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4823923321286660263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4823923321286660263'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/01/installing-gnustep-on-fedora-core.html' title='Installing GNUStep on Fedora Core'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-7940236574032877098</id><published>2010-01-01T23:24:00.000-08:00</published><updated>2010-01-01T23:52:08.197-08:00</updated><title type='text'>serialize/unserialize php API - an observation</title><content type='html'>On first request, I was saving the object into session.&lt;pre&gt;$userInstance = new Users_Model();&lt;br /&gt;$_SESSION['__key'] = $userInstance;&lt;/pre&gt;Make sure the class Users_Model definition is available.&lt;br /&gt;&lt;br /&gt;On second request, I retrieve the object from session for re-use.&lt;pre&gt;$retrievedUserInstance = $_SESSION['__key'];&lt;/pre&gt;&lt;pre&gt;object(__PHP_Incomplete_Class)[1]&lt;br /&gt;  public '__PHP_Incomplete_Class_Name' =&gt; string 'Users_Model' (length=11)&lt;br /&gt;    private 'id' =&gt; string '1' (length=1)&lt;br /&gt;    // ...&lt;/pre&gt;I noticed the $retrieveUserInstance object missed several methods!! &lt;br /&gt;&lt;br /&gt;I realized that on second request, the class Users_Model definition &lt;br /&gt;is not available on the page load and unserialize API is not working as expected.&lt;br /&gt;&lt;br /&gt;$_SESSION values are saved using serialize API (as session.save_handler was set to files)&lt;br /&gt;&lt;br /&gt;On making the class definition available before session_start() call, &lt;br /&gt;the $retrieveUserInstance worked fine.&lt;pre&gt;object(Users_Model)[1]&lt;br /&gt;  private 'id' =&gt; string '1' (length=1)&lt;br /&gt;  // ...&lt;/pre&gt;Hope it saves sometime for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-7940236574032877098?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/7940236574032877098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=7940236574032877098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7940236574032877098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7940236574032877098'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2010/01/serializeunserialize-php-api.html' title='serialize/unserialize php API - an observation'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1966605024895178867</id><published>2009-12-20T02:54:00.000-08:00</published><updated>2009-12-20T03:03:04.953-08:00</updated><title type='text'>pedit - simple text editor</title><content type='html'>I'm happy to make available to source-code of my memorable text editor (&lt;a href="http://code.google.com/p/p-edit/"&gt;pedit&lt;/a&gt;) &lt;br /&gt;that was developed as part of my Graduation (semester) project. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/p-edit/"&gt;pedit&lt;/a&gt; is written using ncurses library and C++ language, with Object Oriented Programming concepts. &lt;br /&gt;&lt;br /&gt;Give a try and feel free to extend it. If you have any feedback do keep me posted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1966605024895178867?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1966605024895178867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1966605024895178867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1966605024895178867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1966605024895178867'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/12/pedit-simple-text-editor.html' title='pedit - simple text editor'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3084187844657445150</id><published>2009-11-12T06:52:00.000-08:00</published><updated>2009-11-12T06:58:17.461-08:00</updated><title type='text'>Prototypejs 1.6 clash with JSON !!</title><content type='html'>&lt;a href="http://www.prototypejs.org/2007/8/15/prototype-1-6-0-release-candidate"&gt;Prototypejs 1.6&lt;/a&gt; could break your &lt;a href="http://www.json.org/js.html"&gt;JSON API&lt;/a&gt; usage, be careful !&lt;br /&gt;&lt;br /&gt;This article could be a time-saver, &lt;a href="https://prototype.lighthouseapp.com/projects/8886/tickets/730-prototypejs-breaks-firefox-35-native-json#ticket-730-9"&gt;prototype.js breaks Firefox 3.5 native JSON&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3084187844657445150?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3084187844657445150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3084187844657445150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3084187844657445150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3084187844657445150'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/11/prototypejs-16-clash-with-json.html' title='Prototypejs 1.6 clash with JSON !!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3359961766906330432</id><published>2009-11-02T02:22:00.000-08:00</published><updated>2009-11-02T02:34:49.264-08:00</updated><title type='text'>Prototype - Event.fire exception to be handled for IE</title><content type='html'>&lt;a href="http://prototypejs.org/"&gt;Prototype&lt;/a&gt; 1.6 has introduced &lt;a href="http://api.prototypejs.org/dom/event.html#fire-class_method"&gt;Event.fire API&lt;/a&gt; that works pretty well in Firefox but experienced a problem in IE (7).&lt;br /&gt;&lt;br /&gt;Exception was being thrown in Event.fire API that needed a special treat.&lt;br /&gt;&lt;br /&gt;The highlighted workaround worked for me:&lt;pre&gt;fire: function(element, eventName, memo) {&lt;br /&gt;    // ...&lt;br /&gt;    if (document.createEvent) {&lt;br /&gt;        element.dispatchEvent(event);&lt;br /&gt;    } else {&lt;br /&gt;    &lt;span style="background-color:#FEFF9F"&gt;    try{&lt;/span&gt;&lt;br /&gt;        element.fireEvent(event.eventType, event);&lt;br /&gt;    &lt;span style="background-color:#FEFF9F"&gt;    } catch(error) {&lt;/span&gt;&lt;br /&gt;        // Error: No such interface supported (IE)&lt;br /&gt;       &lt;span style="background-color:#FEFF9F"&gt;    element.fireEvent(event.eventType);&lt;/span&gt;&lt;br /&gt;    &lt;span style="background-color:#FEFF9F"&gt;    }&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    return event;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Example:&lt;pre&gt;Event.fire('myhidden_element_id', 'custom:change');&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3359961766906330432?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3359961766906330432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3359961766906330432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3359961766906330432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3359961766906330432'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/11/prototype-eventfire-exception-to-be.html' title='Prototype - Event.fire exception to be handled for IE'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-8279438922814967292</id><published>2009-10-31T08:34:00.000-07:00</published><updated>2009-10-31T08:37:54.455-07:00</updated><title type='text'>mysql-java-connector: ResultSet getObject failure on Timestamp column if null</title><content type='html'>I had strange situation working with ResultSet when fetching Timestamp column from MyTable.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;import java.sql.DriverManager;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;&lt;br /&gt;Class.forname("com.mysql.jdbc.Driver");&lt;br /&gt;Connection connection = DriverManager.getConnection(&lt;br /&gt;"jdbc:mysql://host:port/database", &lt;br /&gt;"username", "password");&lt;br /&gt;&lt;br /&gt;Statement statement = connection.createStatement();&lt;br /&gt;ResultSet rs = statement.executeQuery("SELECT timestamp_column FROM mytable");&lt;br /&gt;&lt;br /&gt;while(rs.next()) {&lt;br /&gt;    rs.getObject("timestamp_column");&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The cause of the failure was due to null value in timestamp_column !&lt;br /&gt;&lt;br /&gt;The solution suggested about (zeroDateTimeBehavior=convertToNull) in &lt;a href="http://forums.mysql.com/read.php?39,44913,44913"&gt;the article&lt;/a&gt;, helped me overcome the failure.&lt;br /&gt;&lt;br /&gt;All you need to do is:&lt;br /&gt;&lt;code&gt;Connection connection = DriverManager.getConnection(&lt;br /&gt;"jdbc:mysql://host:port/database?zeroDateTimeBehavior=convertToNull", &lt;br /&gt;"username", "password");&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-8279438922814967292?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/8279438922814967292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=8279438922814967292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8279438922814967292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8279438922814967292'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/10/mysql-java-connector-resultset.html' title='mysql-java-connector: ResultSet getObject failure on Timestamp column if null'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1062903371217287447</id><published>2009-10-28T22:46:00.001-07:00</published><updated>2009-10-28T22:52:36.859-07:00</updated><title type='text'>Eclipse Editor - Setting Line Delimiter Style</title><content type='html'>Was going crazy with my eclipse as line delimiter was different than other editors. This was causing issue with SVN commits (mixed line delimiters!)&lt;br /&gt;&lt;br /&gt;Finally, found the way of setting the line preferences for Eclipse. &lt;br /&gt;&lt;br /&gt;It is located under: Windows &gt; Preferences &gt; General &gt; Workspace&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://onweb.googlecode.com/files/eclipse-newline-delimiter.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://onweb.googlecode.com/files/eclipse-newline-delimiter.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1062903371217287447?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1062903371217287447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1062903371217287447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1062903371217287447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1062903371217287447'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/10/eclipse-editor-setting-line-delimiter.html' title='Eclipse Editor - Setting Line Delimiter Style'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-6224139848501395311</id><published>2009-09-15T11:09:00.000-07:00</published><updated>2009-09-15T11:17:55.129-07:00</updated><title type='text'>Lynx - Text Only Browser for Windows!</title><content type='html'>Text only browser could speed up your work specially if you are on a low-speed internet connection and getting distracted with graphics on the web applications :)&lt;br /&gt;&lt;br /&gt;Got hold of &lt;a href="http://www.vordweb.co.uk/standards/download_lynx.htm"&gt;Lynx on windows&lt;/a&gt;, which is a cool text browser I have been using on remote servers! &lt;br /&gt;&lt;br /&gt;Well, its easy to get started, download and configure the lynx.bat and lynx.cfg files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-6224139848501395311?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/6224139848501395311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=6224139848501395311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6224139848501395311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6224139848501395311'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/09/lynx-text-only-browser-for-windows.html' title='Lynx - Text Only Browser for Windows!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-2752114769057467631</id><published>2009-09-11T10:16:00.000-07:00</published><updated>2009-09-11T10:18:51.094-07:00</updated><title type='text'>PHPTAL - Template Attribute Language for PHP</title><content type='html'>It was fun to work with &lt;a href="http://phptal.org/"&gt;PHPTAL&lt;/a&gt; and walk team with a &lt;a href="http://onweb.googlecode.com/files/phptal-introduction.odp"&gt;basic introduction&lt;/a&gt; today :). [&lt;a href="http://onweb.googlecode.com/files/phptal-introduction.odp"&gt;Download here&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-2752114769057467631?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/2752114769057467631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=2752114769057467631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2752114769057467631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2752114769057467631'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/09/phptal-template-attribute-language-for.html' title='PHPTAL - Template Attribute Language for PHP'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4530864995055786518</id><published>2009-08-27T05:28:00.000-07:00</published><updated>2009-08-27T05:32:58.691-07:00</updated><title type='text'>Doc Comment could be a source of data!!!</title><content type='html'>While discussing ways of using PHP as data storage file, we passed over this interesting possibility.&lt;br /&gt;&lt;br /&gt;PHP data file: CommentDataClass.php&lt;br /&gt;&lt;pre&gt;&lt;?php&lt;br /&gt;/**&lt;br /&gt;Doc Comment could be a SOURCE OF DATA&lt;br /&gt;This could be your data in string format!!&lt;br /&gt;*/&lt;br /&gt;class CommentDataClass { }&lt;br /&gt;&lt;br /&gt;?&gt;&lt;/pre&gt;Retrieving data: Data.php&lt;br /&gt;&lt;pre&gt;&lt;?php&lt;br /&gt;include_once 'CommentDataClass.php';&lt;br /&gt;&lt;br /&gt;// Taking advantage of PHP 5.x Reflection,&lt;br /&gt;// Refer: http://in.php.net/oop5.reflection&lt;br /&gt;&lt;br /&gt;$reflectedClass = new ReflectionClass('CommentDataClass');&lt;br /&gt;&lt;br /&gt;if(preg_match("/\/\*\*(.*)\*\//s", &lt;br /&gt;     $reflectedClass-&gt;getDocComment(), $matches)) {&lt;br /&gt; $data = $matches[1];&lt;br /&gt; $data = trim($data);&lt;br /&gt; &lt;br /&gt; var_dump(explode("\n", $data));&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;/pre&gt;Well, this is just for fun, we don't recommend it for serious use :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4530864995055786518?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4530864995055786518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4530864995055786518' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4530864995055786518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4530864995055786518'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/08/doc-comment-could-be-source-of-data.html' title='Doc Comment could be a source of data!!!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-335183002795077554</id><published>2009-07-31T03:56:00.000-07:00</published><updated>2009-07-31T04:00:49.040-07:00</updated><title type='text'>Apache 2.0 with PHP 5.3.0 on Windows</title><content type='html'>It took me sometime today to get my Apache 2.0 to run with PHP 5.3.0. &lt;br /&gt;&lt;br /&gt;The builds for windows is available at &lt;a href="http://windows.php.net/download/"&gt;http://windows.php.net/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download the &lt;a href="http://windows.php.net/downloads/releases/php-5.3.0-Win32-VC6-x86.zip"&gt;VC6 x86 Build of PHP 5.3.0&lt;/a&gt; build and unzip.&lt;br /&gt;&lt;br /&gt;NOTE: &lt;a href="http://windows.php.net/downloads/releases/php-5.3.0-nts-Win32-VC9-x86.zip"&gt;VC9 x86 Build of PHP 5.3.0&lt;/a&gt; build might not work with Apache 2.0 !!&lt;br /&gt;&lt;br /&gt;You will need to make the following changes in your httpd.conf&lt;br /&gt;&lt;pre&gt;LoadModule php5_module "c:/path_to_your/5.3.0/php5apache2.dll"&lt;br /&gt;PhpIniDir "c:/path_to_your/5.3.0"&lt;br /&gt;ScriptAlias /php/ "c:/path_to_your/5.3.0"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-335183002795077554?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/335183002795077554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=335183002795077554' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/335183002795077554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/335183002795077554'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/07/apache-20-with-php-530-on-windows.html' title='Apache 2.0 with PHP 5.3.0 on Windows'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3419562008645865616</id><published>2009-07-21T00:11:00.000-07:00</published><updated>2009-07-21T00:21:14.956-07:00</updated><title type='text'>Gmail survey message - inconsistent !!!</title><content type='html'>I noticed the survey message flash on my Gmail account today marked as (last chance!)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pradocs.googlecode.com/files/Gmail-OldVersion-Survey-LastChance.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://pradocs.googlecode.com/files/Gmail-OldVersion-Survey-LastChance.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Clicked on it to participate and was disappointed to get this message...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pradocs.googlecode.com/files/Gmail-OldVersion-Survey-LastChance-Closed.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://pradocs.googlecode.com/files/Gmail-OldVersion-Survey-LastChance-Closed.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How did inconsistent behavior creep in??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3419562008645865616?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3419562008645865616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3419562008645865616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3419562008645865616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3419562008645865616'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/07/gmail-survey-message-inconsistent.html' title='Gmail survey message - inconsistent !!!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4983394332526229832</id><published>2009-07-02T05:28:00.000-07:00</published><updated>2009-07-02T05:41:54.369-07:00</updated><title type='text'>Playing with Camtasia project file</title><content type='html'>I had created a video using &lt;a href="http://www.techsmith.com/camtasia.asp"&gt;Camtasia&lt;/a&gt; last night using screenshot and planned to upload in the morning. &lt;br /&gt;Before turning off the system, I moved the images into another drive.&lt;br /&gt;&lt;br /&gt;In the morning, I opened the .camproj (Camtasia project) file and to my surprise all the images in it gone missing :( &lt;br /&gt;&lt;br /&gt;A dialog box was presented to search and point location for each image. I had almost 50+ images!&lt;br /&gt;&lt;br /&gt;With curiosity I opened (Introduction.camproj) in text editor it was a simple XML file :)&lt;br /&gt;&lt;br /&gt;The imported images were looking like:&lt;br /&gt;&amp;lt;clipbin_object&amp;gt;&lt;br /&gt;&amp;lt;clipname&amp;gt;C:\Users\power\Desktop\MoreOnProduct\Step1.png&amp;lt;/clipname&amp;gt;&lt;br /&gt;&amp;lt;/clipbin_object&amp;gt;&lt;br /&gt;&lt;br /&gt;To keep things simple, I copied (Introduction.camproj) to the folder where all screenshots were present under directory images/&lt;br /&gt;&lt;br /&gt;Opened Introduction.camproj in &lt;a href="http://www.vim.org/download.php#pc"&gt;gvim&lt;/a&gt; and triggered the following command&lt;br /&gt;&lt;br /&gt;:%s/C:\\Users\\power\\Desktop\\MoreOnProduct\\Step1.png/images/g&lt;br /&gt;&lt;br /&gt;It reflected as:&lt;br /&gt;&amp;lt;clipbin_object&amp;gt;&lt;br /&gt;&amp;lt;clipname&amp;gt;images\Step1.png&amp;lt;/clipname&amp;gt;&lt;br /&gt;&amp;lt;/clipbin_object&amp;gt;&lt;br /&gt;&lt;br /&gt;Finally I got the video to the original state.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4983394332526229832?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4983394332526229832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4983394332526229832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4983394332526229832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4983394332526229832'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/07/playing-with-camtasia-project-file.html' title='Playing with Camtasia project file'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5785579171667597380</id><published>2009-03-18T11:04:00.000-07:00</published><updated>2009-03-18T11:08:02.906-07:00</updated><title type='text'>Scrolling with row Headings Fixed - in Spreadsheet</title><content type='html'>Was quite happy to learn this tonight :)&lt;br /&gt;&lt;br /&gt;Select cell in Excel sheet (OpenOffice calc) and Click on Window &gt; Freeze,&lt;br /&gt;this way you can make the rows below the selected cell scroll beneath it.&lt;br /&gt;&lt;br /&gt;1. For Horizontal Freeze - Select only first cell&lt;br /&gt;&lt;br /&gt;2. For Horizontal &amp; Vertical Freeze - Select any other cell.&lt;br /&gt;&lt;br /&gt;For Reference: &lt;a href="http://www.learnopenoffice.org/CalcTutorial13.htm"&gt;http://www.learnopenoffice.org/CalcTutorial13.htm&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5785579171667597380?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5785579171667597380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5785579171667597380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5785579171667597380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5785579171667597380'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/03/scrolling-with-row-headings-fixed-in.html' title='Scrolling with row Headings Fixed - in Spreadsheet'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-2237861356205510399</id><published>2009-01-09T04:09:00.000-08:00</published><updated>2009-01-09T04:15:13.036-08:00</updated><title type='text'>Turning On Mysql Query Logging</title><content type='html'>Edit mysql configuration file (my.cnf, like /etc/my.cnf) and the add an entry under mysqld section&lt;br /&gt;&lt;br /&gt;[mysqld]&lt;br /&gt;log = /var/log/mysqld-all.log&lt;br /&gt;&lt;br /&gt;Follow the steps given below:&lt;br /&gt;&lt;br /&gt;1. chown mysql:mysql /var/log/mysqld-all.log&lt;br /&gt;&lt;br /&gt;2. chmod o-r /var/log/mysqld-all.log&lt;br /&gt;&lt;br /&gt;3. /etc/init.d/mysqld restart&lt;br /&gt;&lt;br /&gt;Now when you execute sql you should see the log :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-2237861356205510399?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/2237861356205510399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=2237861356205510399' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2237861356205510399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2237861356205510399'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/01/turning-on-mysql-query-logging.html' title='Turning On Mysql Query Logging'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3114959787552790225</id><published>2009-01-02T01:51:00.000-08:00</published><updated>2009-01-02T02:00:30.745-08:00</updated><title type='text'>Happy New Year 2009</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Wish you a&lt;/span&gt;&lt;br /&gt;&lt;img src='http://onweb.googlecode.com/files/HappyNewYear2009.png'&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Created this 3D Text Image from &lt;a href="http://www.inkscape.org"&gt;Inkscape&lt;/a&gt; &lt;br /&gt;(&lt;a href="http://ryanler.wordpress.com/2007/02/06/24/"&gt;Reference Article&lt;/a&gt;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3114959787552790225?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3114959787552790225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3114959787552790225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3114959787552790225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3114959787552790225'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2009/01/happy-new-year-2009.html' title='Happy New Year 2009'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-7470068605879751986</id><published>2007-11-04T22:45:00.000-08:00</published><updated>2007-11-04T23:00:46.455-08:00</updated><title type='text'>VMware on Fedora Core 7</title><content type='html'>I have put up documentation on getting VMware Setup on Fedora Core 7, you can get it download it from &lt;a href="http://onweb.googlecode.com/files/vmware-install-usage.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-7470068605879751986?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/7470068605879751986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=7470068605879751986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7470068605879751986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7470068605879751986'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/11/vmware-on-fedora-core-7.html' title='VMware on Fedora Core 7'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5933652808807820314</id><published>2007-10-29T06:35:00.000-07:00</published><updated>2009-03-06T06:10:04.361-08:00</updated><title type='text'>SVN - Trac - Apache Setup</title><content type='html'>I have put up a small documentation on achieving the SVN - Trac setup with Apache,&lt;br /&gt;you can download it from &lt;a href="http://onweb.googlecode.com/files/svn-trac-apache.pdf" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Update: Added information of setting up read-writer permission for SVN through Access file &lt;a href="http://onweb.googlecode.com/files/SvnTracApache-v2.pdf" target="_blank"&gt;version2 here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5933652808807820314?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5933652808807820314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5933652808807820314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5933652808807820314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5933652808807820314'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/10/svn-trac-apache-setup.html' title='SVN - Trac - Apache Setup'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5848392819907948611</id><published>2007-09-12T00:00:00.000-07:00</published><updated>2007-09-12T01:02:05.116-07:00</updated><title type='text'>diffdir - compute diff between directory</title><content type='html'>Use this application if you want to compute difference between two directories&lt;br /&gt;and create filter out files that has modifications or newer in the source directory.&lt;br /&gt;&lt;br /&gt;It is available on code.google.com subversion &lt;a href="http://diffdir.googlecode.com/svn/"&gt;http://diffdir.googlecode.com/svn/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can download the application &lt;a href="http://diffdir.googlecode.com/files/DiffDir-0.1.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5848392819907948611?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5848392819907948611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5848392819907948611' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5848392819907948611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5848392819907948611'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/09/diffdir-compute-diff-between-directory.html' title='diffdir - compute diff between directory'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-8705643622167026870</id><published>2007-09-09T04:36:00.000-07:00</published><updated>2007-09-12T23:47:06.110-07:00</updated><title type='text'>Useful Windows Tools</title><content type='html'>Sticky Notes For Windows:&lt;br /&gt;&lt;a href="http://www.cs.utexas.edu/~tbone/stickynotes.html"&gt;StickyNotes&lt;/a&gt;&lt;br /&gt; * Add a note and right on it to find more options!&lt;br /&gt; * You can customize each note.&lt;br /&gt; * Set Alarm&lt;br /&gt; * Load and Save Notes from File.&lt;br /&gt; * And Many More... &lt;a href="http://www.cs.utexas.edu/users/tbone/stickynotes-docs.html"&gt;see documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hottnotes.com/"&gt;http://hottnotes.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/s-notes/"&gt;ttp://sourceforge.net/projects/s-notes/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alarm Clock:&lt;br /&gt;&lt;a href="http://www.cinnamonsoftware.com/alarm_clock.htm"&gt;by Cinnamon Software&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*nix utilities&lt;br /&gt;Commonly used *nix commands for windows: &lt;br /&gt;&lt;a href="http://sourceforge.net/projects/unxutils/"&gt;UnxUtils @sourceforge&lt;/a&gt; or &lt;a href="http://unxutils.sourceforge.net/"&gt;UnxUtils&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check out most popular tools here:&lt;br /&gt;&lt;a href="http://www.blanchfield.com.au/blog/2007/09/02/open-source-for-mac-and-windows/"&gt;Open Source For Mac and Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Learn more about &lt;a href="http://www.libervis.com/wiki/index.php?title=Table_of_Equivalent_Software"&gt;Equivalent Linux Software on Windows&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-8705643622167026870?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/8705643622167026870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=8705643622167026870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8705643622167026870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8705643622167026870'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/09/sticky-notes-for-windows.html' title='Useful Windows Tools'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1561569272240710097</id><published>2007-09-06T23:45:00.000-07:00</published><updated>2007-09-07T00:00:09.681-07:00</updated><title type='text'>Skype doesn't let Apache Start!</title><content type='html'>We found any issue with Apache startup when Skype is up.&lt;br /&gt;&lt;br /&gt;Skype by default uses port 80 and port 443 for incoming connections, &lt;br /&gt;&lt;br /&gt;unfortunately we want the same ports used for Apache in general.&lt;br /&gt;&lt;br /&gt;You can change the preferences of Skype to work on different port in the preferences,&lt;br /&gt;(Tools -&gt; Options)&lt;br /&gt;&lt;br /&gt;and keep your Apache running on port 80 or 443.&lt;br /&gt;&lt;br /&gt;Some references:&lt;br /&gt;&lt;a href='http://hasin.wordpress.com/2007/06/28/damn-why-the-hell-skype-is-blocking-port-80/'&gt;http://hasin.wordpress.com/2007/06/28/damn-why-the-hell-skype-is-blocking-port-80/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Thanks for Puneeth to figure out about changing skype preference on port]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1561569272240710097?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1561569272240710097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1561569272240710097' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1561569272240710097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1561569272240710097'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/09/skype-doesnt-let-apache-start.html' title='Skype doesn&apos;t let Apache Start!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4345237236332696696</id><published>2007-09-05T22:31:00.000-07:00</published><updated>2007-09-06T09:01:23.640-07:00</updated><title type='text'>Lanuchy - Keystoke launcher for windows</title><content type='html'>&lt;a href="http://launchy.net/"&gt;Launchy&lt;/a&gt; is a very cool tool for windows.&lt;br /&gt;&lt;br /&gt;ALT+SPACE any where will bring up the launchy.&lt;br /&gt;&lt;br /&gt;Right Click on Launchy window, &lt;br /&gt;* You can configure Directory to index for searching and &lt;br /&gt;  also set the extensions to look for!&lt;br /&gt;* Hotkey - configure it if you want Launchy to appear other than ALT+SPACE&lt;br /&gt;&lt;br /&gt;ESC will push back Launchy.&lt;br /&gt;&lt;br /&gt;Learn more on using launchy &lt;a href='http://launchy.net/#tips'&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[Are you on linux? Then have a look at &lt;a href="http://katapult.kde.org/"&gt;katapult&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4345237236332696696?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4345237236332696696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4345237236332696696' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4345237236332696696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4345237236332696696'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/09/lanuchy-keystoke-launcher-for-windows.html' title='Lanuchy - Keystoke launcher for windows'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-524166275262961368</id><published>2007-08-21T01:05:00.000-07:00</published><updated>2007-08-21T01:07:24.863-07:00</updated><title type='text'>Database Comparsion - dbdiff</title><content type='html'>If you are looking for database comparision tool, try this &lt;a href="http://rubyforge.org/projects/dbdiff/"&gt;dbdiff&lt;/a&gt; from RubyForge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-524166275262961368?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/524166275262961368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=524166275262961368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/524166275262961368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/524166275262961368'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/08/database-comparsion-dbdiff.html' title='Database Comparsion - dbdiff'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3260136462718803940</id><published>2007-07-23T05:13:00.000-07:00</published><updated>2007-07-23T05:40:46.903-07:00</updated><title type='text'>Setting up Repository</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System" target="_blank"&gt;CVS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps to follow to setup CVS:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. mkdir /home/cvsfolder&lt;br /&gt;2. export CVSROOT=/home/cvsfolder&lt;br /&gt;3. cvs init&lt;br /&gt;    Initialize your cvs folder&lt;br /&gt;&lt;br /&gt;4. chown -R ownername:groupname /home/cvsfolder&lt;br /&gt;5. chmod -R g+rwxs /home/cvsfolder&lt;br /&gt;    This is a important step. Here we are making the directory sticky.&lt;br /&gt;    When a user commits a file to cvs, the username might change but the&lt;br /&gt;    groupname still remains the same.&lt;br /&gt;&lt;br /&gt;    If you don't follow this step, you might end up in a situation where a developer&lt;br /&gt;    checks in the file and other developer can't commit the same file.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Import Project to CVS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. mkdir /project/TestProject&lt;br /&gt;2. touch /project/TestProject/README.txt&lt;br /&gt;3. export CVSROOT=/home/cvsfolder&lt;br /&gt;4. cd /project/TestProject&lt;br /&gt;5. cvs import -m "Some initial comment on the project" TestProject youcompany release_tag&lt;br /&gt;&lt;br /&gt;Your TestProject is in CVS now.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Checking out the from CVS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. export CVSROOT=/home/cvsfolder&lt;br /&gt;2. cvs checkout TestProject&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Checking out from Remote Server CVS &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. export CVS_RSH=ssh&lt;br /&gt;2. cvs -d:ext:yourname@server.com:/home/cvsfolder checkout TestProject&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3260136462718803940?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3260136462718803940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3260136462718803940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3260136462718803940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3260136462718803940'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/07/setting-up-repository.html' title='Setting up Repository'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5389117436494609126</id><published>2007-07-02T22:49:00.000-07:00</published><updated>2007-07-02T23:17:23.425-07:00</updated><title type='text'>Flash Object and z-index.</title><content type='html'>If you are working with Flash and HTML you will sooner or later run in to problems of overlay.&lt;br /&gt;Find more details on &lt;br /&gt;&lt;br /&gt;&lt;a href="http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_15523&amp;sliceId=2" title="Flash content displays on top of all DHTML layers"&gt;TechNote&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://joshuaink2006.johnoxton.co.uk/blog/82/flash-content-and-z-index"&gt;Flash content and z-index&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://veerle.duoh.com/index.php/blog/comments/experimenting_with_flash_content_and_z_index/"&gt;Experimenting with Flash content and z-index&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5389117436494609126?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5389117436494609126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5389117436494609126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5389117436494609126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5389117436494609126'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/07/working-with-flash-and-html.html' title='Flash Object and z-index.'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-6188048106243206365</id><published>2007-06-07T04:25:00.000-07:00</published><updated>2007-06-07T05:10:09.558-07:00</updated><title type='text'>MXML Autocomplete In Eclipse</title><content type='html'>I got autocompletion working while editing mxml file in eclipse, here are the few simple steps to follow:&lt;br /&gt;&lt;br /&gt;1. First look if you have mxml2.xsd file in the flex installation directory. If you don't have &lt;br /&gt;   then get it &lt;a href="http://falkensweb.com/mxml2.xsd"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[NOTE: If you don't have webtools for eclipse, you will have to install it, follow the method suggested in Step 1 in the &lt;a href="http://cfsilence.com/blog/client/index.cfm/2007/3/26/Setting-Up-Eclipse-For-Flex-2"&gt;link&lt;/a&gt;    &lt;br /&gt; for your eclipse version.]&lt;br /&gt;&lt;br /&gt;2. Window -&gt; Preferences -&gt; Web And XML -&gt; XML Catalog&lt;br /&gt;   Add User Specified Entries&lt;br /&gt;   URI: &lt;POINT TO mxml2.xsd&gt;&lt;br /&gt;   Key Type: Namespace Name (Its autofilled)&lt;br /&gt;   Key     : http://www.adobe.com/2006/mxml (Its autofilled)&lt;br /&gt;&lt;br /&gt;3. Window -&gt; Preferences -&gt; General -&gt; Editors -&gt; File Association&lt;br /&gt;   Add File Types: *.mxml       (Click on Add next to listed file preferences and add it)&lt;br /&gt;   Associate Editor: XML Editor (Click on Add under Associate editors and select it)&lt;br /&gt;&lt;br /&gt;4. Window -&gt; Preferences -&gt; General -&gt; Content Types&lt;br /&gt;   Under Text Edit -&gt; XML, Add *.mxml&lt;br /&gt;&lt;br /&gt;You should get drop down list if you do: &amp;lt;mx: type CTRL+SPACE within &lt;br /&gt;&amp;lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&amp;gt;&lt;br /&gt;&amp;lt;/mx:Application&amp;gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="http://www.straker.co.nz/shadozoom/blog/2005/editing-mxml-files-with-eclipse-3.1.cfm"&gt;http://www.straker.co.nz/shadozoom/blog/2005/editing-mxml-files-with-eclipse-3.1.cfm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cfsilence.com/blog/client/index.cfm/2007/3/26/Setting-Up-Eclipse-For-Flex-2"&gt;http://cfsilence.com/blog/client/index.cfm/2007/3/26/Setting-Up-Eclipse-For-Flex-2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-6188048106243206365?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/6188048106243206365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=6188048106243206365' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6188048106243206365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/6188048106243206365'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/06/mxml-autocomplete-in-eclipse.html' title='MXML Autocomplete In Eclipse'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-9034110848172800071</id><published>2007-05-18T00:17:00.000-07:00</published><updated>2007-05-18T00:27:17.849-07:00</updated><title type='text'>Roner - Rounded Corner Generator</title><content type='html'>I was inspired by the article &lt;a href="http://xach.livejournal.com/95656.html"&gt; google's own cornershop&lt;/a&gt; and wanted something similar application that we could integrate with our application (or server).&lt;br /&gt;&lt;br /&gt;Came across this article later, &lt;a href="http://ajaxian.com/archives/rounded-and-shaded-corners"&gt;Rounded and Shaded Corners&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Modified the source &lt;a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/"&gt;Tapestry Contrib&lt;/a&gt;, fixed few transparency bug and enhanced few more options.&lt;br /&gt;&lt;br /&gt;This project is on google's Subversion Repository reach it via &lt;a href="http://roner.googlecode.com/svn/"&gt;http://roner.googlecode.com/svn/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://roner.googlecode.com/files/index.html"&gt;Roner Documentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-9034110848172800071?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/9034110848172800071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=9034110848172800071' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/9034110848172800071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/9034110848172800071'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/05/roner-rounded-corner-generator.html' title='Roner - Rounded Corner Generator'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1792380344674863096</id><published>2007-05-15T00:04:00.000-07:00</published><updated>2007-05-15T21:25:52.869-07:00</updated><title type='text'>Compact Policy For Cookies</title><content type='html'>If your website has an iframe and its pointing to someother website, the cookie restriction is applied for that iframe. Please look into the reference's below, if not you might end up wasting lot of time to figure out why things work on Firefox but not on IE.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/TR/P3P/"&gt;http://www.w3.org/TR/P3P/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sitepoint.com/article/p3p-cookies-ie6/2"&gt;http://www.sitepoint.com/article/p3p-cookies-ie6/2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.duxcw.com/faq/webmastr/privhttp.htm"&gt;http://www.duxcw.com/faq/webmastr/privhttp.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windows/ie/ie6/using/howto/privacy/config.mspx"&gt;http://www.microsoft.com/windows/ie/ie6/using/howto/privacy/config.mspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/TR/P3P/#guiding_principles"&gt;http://www.w3.org/TR/P3P/#guiding_principles&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.eder.us/projects/p3p-gen/"&gt;http://www.eder.us/projects/p3p-gen/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oreillynet.com/pub/a/javascript/2002/10/04/p3p.html"&gt;http://www.oreillynet.com/pub/a/javascript/2002/10/04/p3p.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Look at the source code, to get more information about P3P Header: &lt;a href="http://www.eder.us/projects/p3p-gen/p3p-gen.tar.gz"&gt;http://www.eder.us/projects/p3p-gen/p3p-gen.tar.gz&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1792380344674863096?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1792380344674863096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1792380344674863096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1792380344674863096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1792380344674863096'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/05/compact-policy-for-cookies.html' title='Compact Policy For Cookies'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-8044070016628913909</id><published>2007-04-18T23:00:00.000-07:00</published><updated>2007-04-18T23:06:49.668-07:00</updated><title type='text'>Business Card SMS</title><content type='html'>Recently I was asked to send a Business Card via Mobile, I had no chance of trying such a thing earlier though in theory I knew what it was. Did some homework and got to know what is it finally :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Send Business Cards&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With this handy tip you can save your friends the trouble of storing your numbers.&lt;br /&gt;&lt;br /&gt;A business card is a special SMS message which is composed as follows:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://discussion.forum.nokia.com/forum/showthread.php?t=37786&amp;highlight=%2F%2FSCKE2"&gt;//SCKE2&lt;/a&gt; BEGIN:VCARD N:name TEL:number END:VCARD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The receiver will see the text BUSINESS CARD RECEIVED displayed on his/her. phone.&lt;br /&gt;&lt;br /&gt;For more information look at &lt;a href="http://www.funsms.net/sms_tips.htm"&gt;SMS tips&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-8044070016628913909?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/8044070016628913909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=8044070016628913909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8044070016628913909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/8044070016628913909'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/04/business-card-sms.html' title='Business Card SMS'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-3580035231093073556</id><published>2007-04-08T23:04:00.000-07:00</published><updated>2007-04-08T23:26:16.884-07:00</updated><title type='text'>StopWatch -- A Mobile Java Application</title><content type='html'>A simple stop watch designed for mobile phones supporting MIDP-2.0 and CLDC-1.1&lt;br /&gt;&lt;br /&gt;Simply copy the &lt;a href="http://stop-watch.googlecode.com/files/StopWatch.jar" title="StopWatch.jar"&gt;StopWatch.jar&lt;/a&gt; file to your mobile, via DataCable/Bluetooth/Infrared.&lt;br /&gt;&lt;br /&gt;Start the application and you should see it working. &lt;br /&gt;&lt;i&gt;I have tested it on Nokia 6030, Let me know if you had any feedback.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This project is on google's Subversion Repository reach it via &lt;a href="http://stop-watch.googlecode.com/svn/"&gt;http://stop-watch.googlecode.com/svn/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-3580035231093073556?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/3580035231093073556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=3580035231093073556' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3580035231093073556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/3580035231093073556'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/04/stopwatch-mobile-java-application.html' title='StopWatch -- A Mobile Java Application'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-1994527115420824184</id><published>2007-03-29T01:43:00.000-07:00</published><updated>2007-03-29T02:06:56.326-07:00</updated><title type='text'>Using stmp.gmail.com To Send Mail</title><content type='html'>Here is a snippet of code I wrote to use smtp.gmail.com to send mails.&lt;br /&gt;&lt;i&gt;Please use vaild email address.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color='blue'&gt;import&lt;/font&gt; org.apache.commons.mail.DefaultAuthenticator;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; org.apache.commons.mail.Email;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; org.apache.commons.mail.EmailException;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; org.apache.commons.mail.SimpleEmail;&lt;br /&gt;&lt;br /&gt;&lt;font color='#777777'&gt;/**&lt;br /&gt; * @author prasad&lt;br /&gt; */&lt;/font&gt;&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;class&lt;/font&gt; MailInfo {&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; send() &lt;font color='blue'&gt;throws&lt;/font&gt; EmailException {&lt;br /&gt;        Email email = &lt;font color='blue'&gt;new&lt;/font&gt; SimpleEmail();&lt;br /&gt;        String authuser = &lt;font color='brown'&gt;"--------@gmail.com"&lt;/font&gt;;&lt;br /&gt;        String authpwd  = &lt;font color='brown'&gt;"**********"&lt;/font&gt;;&lt;br /&gt;        &lt;font color='green'&gt;// Very Important, Don't use email.setAuthentication()&lt;br /&gt;&lt;/font&gt;        email.setAuthenticator(&lt;font color='blue'&gt;new&lt;/font&gt; DefaultAuthenticator(authuser, authpwd));&lt;br /&gt;        email.setDebug(false); &lt;font color='green'&gt;// true if you want to debug&lt;br /&gt;&lt;/font&gt;        email.setHostName(&lt;font color='brown'&gt;"smtp.gmail.com"&lt;/font&gt;);&lt;br /&gt;        email.getMailSession().getProperties().put(&lt;br /&gt;           &lt;font color='brown'&gt;"mail.smtp.starttls.enable", "true"&lt;/font&gt;);&lt;br /&gt;&lt;br /&gt;        email.setFrom(&lt;font color='brown'&gt;"++++++++@gmail.com", "SenderName"&lt;/font&gt;);&lt;br /&gt;&lt;br /&gt;        email.setSubject(&lt;font color='brown'&gt;"TestMail"&lt;/font&gt;);&lt;br /&gt;        email.setMsg(&lt;font color='brown'&gt;"This is a test mail?"&lt;/font&gt;);&lt;br /&gt; &lt;br /&gt;        email.addTo(&lt;font color='brown'&gt;".......@gmail.com", "ToName"&lt;/font&gt;);&lt;br /&gt;        email.send();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-1994527115420824184?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/1994527115420824184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=1994527115420824184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1994527115420824184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/1994527115420824184'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/03/using-stmpgmailcom-to-send-mail.html' title='Using stmp.gmail.com To Send Mail'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-5995942673635912609</id><published>2007-03-28T01:52:00.000-07:00</published><updated>2007-04-08T23:25:12.670-07:00</updated><title type='text'>JavaProxy -- HTTP Proxy In Java</title><content type='html'>I decided to write this JavaProxy as I was looking for a proxy similar to &lt;a href="http://jmarshall.com/tools/cgiproxy/"&gt;CGIProxy&lt;/a&gt; implemented in Java.&lt;br /&gt;&lt;br /&gt;After checking out &lt;a href="http://htmlparser.sourceforge.net/"&gt;HTMLParser&lt;/a&gt; library, &lt;br /&gt;I got my implementation of JavaProxy working. Here is the &lt;a href="http://www.geocities.com/prasad20002005/downloads/JavaProxy.zip" title="JavaProxy"&gt;download&lt;/a&gt; link.&lt;br /&gt;&lt;br /&gt;Just copy the JavaProxy.war file into your Tomcat/webapps folder and you should be able to use it, &lt;br /&gt;using http://localhost:8080/JavaProxy/&lt;br /&gt;&lt;br /&gt;I have released it under Apache License 2.0, so make the best use of it.&lt;br /&gt;Let me know if you liked it or found some use in your application.&lt;br /&gt;&lt;br /&gt;I have got this project on google's Subversion Repository &lt;a href="http://java-proxy.googlecode.com/svn/"&gt;http://java-proxy.googlecode.com/svn/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[NOTE: Steps to import your project on code.google.com&lt;br /&gt;&lt;ol&gt;&lt;li&gt;To host your project on googlecode, signin for an account at &lt;a href="http://code.google.com/hosting/"&gt;http://code.google.com/hosting/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create a new project (&lt;b&gt;myproject&lt;/b&gt;).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Go to MyProfile (note down Username) and under Settings (note down Password).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;From your terminal type (assuming your are under project folder):&lt;br /&gt;&lt;pre&gt;svn import -m "Initial Import" . https://&lt;b&gt;myproject&lt;/b&gt;.googlecode.com/svn/trunk --username &lt;b&gt;Username&lt;/b&gt;&lt;/pre&gt;You will be prompted for Username and Password, enter the one you had notedown.&lt;br /&gt;&lt;li&gt;Now your code is in subversion repository.&lt;/li&gt;&lt;/ol&gt;]&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-5995942673635912609?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/5995942673635912609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=5995942673635912609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5995942673635912609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/5995942673635912609'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/03/javaproxy-http-proxy-in-java.html' title='JavaProxy -- HTTP Proxy In Java'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-833721422159010520</id><published>2007-03-11T23:44:00.000-07:00</published><updated>2007-03-12T00:41:32.896-07:00</updated><title type='text'>Eclipse Profiler Plugin</title><content type='html'>Was looking for eclipse profile plugin and got this link: &lt;a href="http://eclipsecolorer.sourceforge.net/index_profiler.html"&gt;http://eclipsecolorer.sourceforge.net/index_profiler.html&lt;/a&gt;&lt;br /&gt;Download link is &lt;a href="http://downloads.sourceforge.net/eclipsecolorer/ru.nlmk.eclipse.plugins.profiler_0.5.33.zip?modtime=1101813704&amp;big_mirror=0"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I could not get the plugin working with eclipse-3.2 but I could see the Profiler perspective as described when I tried with eclipse-3.1.&lt;br /&gt;&lt;br /&gt;When I tried to run the profiler I got some error like this:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Plug-in unable to load class ru.nlmk.eclipse.profiler was unable to load class &lt;br /&gt;ru.nlmk.eclipse.profiler.launch.ProfilerLaunchConfigurationDelegate.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Check out more discussion on this problem &lt;a href="http://www.eclipseplugincentral.com/modules.php?op=modload&amp;name=PNphpBB2&amp;file=viewtopic&amp;t=2002"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I tried to use the bug fixed plugin for eclipse-3.1, use this &lt;a href="http://catgufu.mit.edu/bonawitz/eclipse/ru.nlmk.eclipse.plugins.profiler_0.5.33+CVS-Eclipse3.1.zip"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After getting this patched version of plugin:&lt;br /&gt;1. Unzip it to eclipse/plugin folder.&lt;br /&gt;2. &lt;span style="font-style:italic;"&gt;For windows:&lt;/span&gt;&lt;br /&gt;   Copy ProfilerDLL.dll to ${JAVA_HOME}/jre/bin folder&lt;br /&gt;&lt;br /&gt;   &lt;span style="font-style:italic;"&gt;For Linux Box:&lt;/span&gt;&lt;br /&gt;   Get libProfilerDLL.so from native/profiler_linux.tgz and copy it to &lt;span style="font-weight:bold;"&gt;libProfilerDLL.so&lt;/span&gt; in native/profiler_linux.tgz to &lt;span style="font-weight:bold;"&gt;${JAVA_HOME}/jre/lib/i386/&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;   &lt;span style="font-weight:bold;"&gt;[NOTE] &lt;/span&gt;I had to recompile a new version of libProfilerDLL.so. Its simple to do. Just set the right path for your java installation in the shell script &lt;span style="font-weight:bold;"&gt;m&lt;/span&gt; &lt;span style="font-style:italic;"&gt;[you get it after untaring native/profiler_linux.tgz]&lt;/span&gt;, execute it (you will need right permission to copy the shared library)&lt;br /&gt;&lt;br /&gt;Shell script m (used to recompile and copy libProfilerDLL.so)&lt;br /&gt;&lt;pre&gt;#!/bin/sh&lt;br /&gt;export JAVA_HOME=/usr/java/j2sdk1.4.2_06&lt;br /&gt;&lt;br /&gt;g++ -O0 -DLINUX -shared -Wall -I. -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux ProfilerDLL.cpp -o libProfilerDLL.so&lt;br /&gt;cp libProfilerDLL.so ${JAVA_HOME}/jre/lib/i386/libProfilerDLL.so&lt;/pre&gt;&lt;br /&gt;Enjoy Profiling!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-833721422159010520?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/833721422159010520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=833721422159010520' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/833721422159010520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/833721422159010520'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/03/eclipse-profiler-plugin.html' title='Eclipse Profiler Plugin'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-4863004574547674935</id><published>2007-03-11T22:52:00.000-07:00</published><updated>2007-03-11T23:06:48.666-07:00</updated><title type='text'>Are you hit by Email-Worm?</title><content type='html'>My System got affected by Email-Worm.Win32.Brontok Virus few months back from now.&lt;br /&gt;Although Anti-Virus cleaned up this worm, but I had to spend sometime to get the system configuration back to normal. Here are few links which helped me in the process.&lt;br /&gt;&lt;br /&gt;Email-Worm.Win32.Brontok Virus:&lt;br /&gt;&lt;a href="http://activepanel.blogspot.com/2006/01/brontok-rontokbro-korbo-b-mytob-virus.html"&gt;http://activepanel.blogspot.com/2006/01/brontok-rontokbro-korbo-b-mytob-virus.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and more about similar virus W32.Rontokbro@mm:&lt;br /&gt;&lt;a href="http://drvamsikrishna.blogspot.com/2007/02/solution-for-folder-options-missing_28.html"&gt;http://drvamsikrishna.blogspot.com/2007/02/solution-for-folder-options-missing_28.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My system configuration has landed to proper state, I can now breathe easy, (Quite successfully avoided usual Windows RE-INSTALL!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-4863004574547674935?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/4863004574547674935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=4863004574547674935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4863004574547674935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/4863004574547674935'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/03/are-you-hit-by-email-worm.html' title='Are you hit by Email-Worm?'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-2387736903193067117</id><published>2007-02-28T21:55:00.000-08:00</published><updated>2007-02-28T22:23:53.924-08:00</updated><title type='text'>Tomcat Cache Control Customization</title><content type='html'>In the last post &lt;a href="http://prasadblog.blogspot.com/2007/02/customize-tomcats-static-file-serving.html"  title="Customize Tomcat's Static File Serving"&gt;Customize Tomcat's Static File Serving&lt;/a&gt; we discussed how to customize file serving in our application.&lt;br /&gt;&lt;br /&gt;If we allow Tomcat DefaultServlet to serve the static resource, it sends back ETag header which is used for cache control on the client browser. The problem with this is client (browser) will send request to check if the file is modified each time we refresh the page. This will add overhead to our application as well as server. &lt;br /&gt;&lt;br /&gt;We might want to completely avoid client browser (if cache is enabled) from requesting a resource until sometime, in such case right cache control headers should be sent back. Here is our new CustomFileServlet which add custom cache headers if the resource served is javascript or css file and such resource will asked to cache for a day.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color='blue'&gt;package&lt;/font&gt; com.example.servlet;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.io.File;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.io.FileInputStream;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.io.IOException;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.io.InputStream;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.io.OutputStream;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.text.SimpleDateFormat;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.util.Date;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; javax.servlet.ServletException;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; javax.servlet.http.HttpServletRequest;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; org.apache.catalina.servlets.DefaultServlet;&lt;br /&gt;&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;class&lt;/font&gt; CustomFileServlet &lt;font color='blue'&gt;extends&lt;/font&gt; DefaultServlet {&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; &lt;font color='blue'&gt;final&lt;/font&gt; &lt;font color='blue'&gt;long&lt;/font&gt; serialVersionUID = 1L;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; doPost(HttpServletRequest request, &lt;br /&gt;                       HttpServletResponse response)&lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException, ServletException {&lt;br /&gt;        &lt;font color='blue'&gt;if&lt;/font&gt; (processRequest(request, response)) {&lt;br /&gt;            &lt;font color='blue'&gt;super&lt;/font&gt;.doPost(request, response);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; doGet(HttpServletRequest request, &lt;br /&gt;                      HttpServletResponse response)&lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException, ServletException {&lt;br /&gt;        &lt;font color='blue'&gt;if&lt;/font&gt; (processRequest(request, response)) {&lt;br /&gt;     &lt;font color='blue'&gt;super&lt;/font&gt;.doGet(request, response);&lt;br /&gt;        }&lt;br /&gt;    }    &lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;boolean&lt;/font&gt; processRequest(HttpServletRequest request, &lt;br /&gt;                               HttpServletResponse response) &lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException, ServletException {&lt;br /&gt;     String requestURI = request.getRequestURI();&lt;br /&gt;     String contextPath = request.getContextPath();&lt;br /&gt;     &lt;br /&gt;     String fileURI = &lt;font color='brown'&gt;""&lt;/font&gt;;&lt;br /&gt;        &lt;font color='blue'&gt;if&lt;/font&gt; (requestURI.indexOf(contextPath) != -1) {&lt;br /&gt;            &lt;font color='green'&gt;// Request URI is CONTEXTPATH + RESOURCE URI&lt;br /&gt;&lt;/font&gt;            fileURI = requestURI.substring(&lt;br /&gt;                        requestURI.indexOf(contextPath) &lt;br /&gt;                        + contextPath.length());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        File file = &lt;font color='blue'&gt;new&lt;/font&gt; File(request.getSession()&lt;br /&gt;                             .getServletContext().getRealPath(fileURI));&lt;br /&gt;        String lowerfile = file.getAbsolutePath().toLowerCase();&lt;br /&gt;&lt;br /&gt;        &lt;font color='blue'&gt;boolean&lt;/font&gt; isBasePath = &lt;font color='brown'&gt;"/"&lt;/font&gt;.equalsIgnoreCase(fileURI);&lt;br /&gt;     &lt;font color='blue'&gt;boolean&lt;/font&gt; isJSFile = lowerfile.endsWith(&lt;font color='brown'&gt;".js"&lt;/font&gt;);&lt;br /&gt;     &lt;font color='blue'&gt;boolean&lt;/font&gt; isCSSFile = lowerfile.endsWith(&lt;font color='brown'&gt;".css"&lt;/font&gt;);&lt;br /&gt;     &lt;font color='blue'&gt;boolean&lt;/font&gt; customServing = (!isBasePath) &amp;&amp; (isJSFile || isCSSFile);&lt;br /&gt;&lt;br /&gt;        &lt;font color='blue'&gt;if&lt;/font&gt;(customServing) {&lt;br /&gt;            String mimetype = request.getSession()&lt;br /&gt;                              .getServletContext().getMimeType(fileURI);&lt;br /&gt;            response.setContentType(mimetype);&lt;br /&gt;&lt;br /&gt;            &lt;font color='green'&gt;// Required Cache Control Headers&lt;/font&gt;&lt;br /&gt;            String maxage = &lt;font color='brown'&gt;"86400"&lt;/font&gt;; &lt;font color='green'&gt;// One day in Seconds&lt;/font&gt;&lt;br /&gt;            response.setHeader(&lt;font color='brown'&gt;"Cache-Control", "max-age="&lt;/font&gt;+ maxage);&lt;br /&gt;         &lt;font color='blue'&gt;long&lt;/font&gt; relExpiresInMillis = System.currentTimeMillis() + (1000 * Long.parseLong(maxage));&lt;br /&gt;         response.setHeader(&lt;font color='brown'&gt;"Expires"&lt;/font&gt;, getGMTTimeString(relExpiresInMillis));&lt;br /&gt;            response.setHeader(&lt;font color='brown'&gt;"Last-Modified"&lt;/font&gt;, getGMTTimeString(file.lastModified()));&lt;br /&gt; &lt;br /&gt;            &lt;font color='green'&gt;// Serve the file content&lt;br /&gt;&lt;/font&gt;            FileInputStream fis = &lt;font color='blue'&gt;new&lt;/font&gt; FileInputStream(file);&lt;br /&gt;            OutputStream ostream = response.getOutputStream();&lt;br /&gt;            streamIO(fis, ostream);&lt;br /&gt;            fis.close();&lt;br /&gt;            ostream.flush();&lt;br /&gt;            ostream.close();&lt;br /&gt;&lt;br /&gt;            &lt;font color='blue'&gt;return&lt;/font&gt; false; &lt;font color='green'&gt;// We have taken care of file serving.&lt;br /&gt;&lt;/font&gt;        }&lt;br /&gt;        &lt;font color='blue'&gt;return&lt;/font&gt; true; &lt;font color='green'&gt;// Let DefaultServlet handle file serving&lt;br /&gt;&lt;/font&gt;    }&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; String getGMTTimeString(&lt;font color='blue'&gt;long&lt;/font&gt; milliSeconds) {&lt;br /&gt;        SimpleDateFormat sdf = &lt;font color='blue'&gt;new&lt;/font&gt; SimpleDateFormat(&lt;font color='brown'&gt;"E, d MMM yyyy HH:mm:ss 'GMT'"&lt;/font&gt;);&lt;br /&gt;     &lt;font color='blue'&gt;return&lt;/font&gt; sdf.format(&lt;font color='blue'&gt;new&lt;/font&gt; Date(milliSeconds));&lt;br /&gt;    }&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; streamIO(InputStream is, OutputStream os)&lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException {&lt;br /&gt;        &lt;font color='blue'&gt;byte&lt;/font&gt;[] bytes = &lt;font color='blue'&gt;new&lt;/font&gt; &lt;font color='blue'&gt;byte&lt;/font&gt;[2048];&lt;br /&gt;        &lt;font color='blue'&gt;int&lt;/font&gt; readlen = -1;&lt;br /&gt;        &lt;font color='blue'&gt;while&lt;/font&gt; ((readlen = is.read(bytes)) != -1) {&lt;br /&gt;            os.write(bytes, 0, readlen);&lt;br /&gt;            os.flush(); &lt;font color='green'&gt;// Let us flush after bluk write&lt;br /&gt;&lt;/font&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-2387736903193067117?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/2387736903193067117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=2387736903193067117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2387736903193067117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/2387736903193067117'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/02/tomcat-cache-control-customization.html' title='Tomcat Cache Control Customization'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-7176276768900718867</id><published>2007-02-28T21:41:00.000-08:00</published><updated>2007-02-28T21:54:33.599-08:00</updated><title type='text'>Customize Tomcat's Static File Serving</title><content type='html'>Tomcat maps the static file request to DefaultServlet class (org.apache.catalina.servlets.DefaultServlet in  Tomcat/server/lib/servlets-default.jar).&lt;br /&gt;&lt;br /&gt;If you want to customize file serving the following steps need to be followed.&lt;br /&gt;1. Mapping in web.xml for you application&lt;br /&gt;&lt;pre&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;CustomFileServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;com.example.servlet.CustomFileServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;    &amp;lt;init-param&amp;gt;&lt;br /&gt;      &amp;lt;param-name&amp;gt;listing&amp;lt;/param-name&amp;gt;&lt;br /&gt;      &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;    &amp;lt;!-- allow browsing directory inside web application --&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;    &amp;lt;servlet-name&amp;gt;CustomeFileServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/&amp;lt;/url-pattern&amp;gt;  &lt;br /&gt;    &amp;lt;!-- Maps all request except the ones which are mapped separately --&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;/pre&gt;&lt;br /&gt;2. Enable privilege for the application (since server library class is used).&lt;br /&gt;    Here is an example context file I created for such a application (Tomcat/conf/Catalina/localhost/customapp.xml)&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;context path="/customapp" docbase="/home/prasad/CustomApp/web" privileged="true" reloadable="true"&amp;gt;&amp;lt;/context&amp;gt;&lt;br /&gt;&lt;br /&gt;3. Write a CustomFileServlet class.&lt;br /&gt;&lt;pre&gt;&lt;font color='blue'&gt;package&lt;/font&gt; com.example.servlet;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.io.IOException;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; javax.servlet.ServletException;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; javax.servlet.http.HttpServletRequest;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;font color='blue'&gt;import&lt;/font&gt; org.apache.catalina.servlets.DefaultServlet;&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;class&lt;/font&gt; CustomFileServlet &lt;font color='blue'&gt;extends&lt;/font&gt; DefaultServlet {&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; &lt;font color='blue'&gt;final&lt;/font&gt; &lt;font color='blue'&gt;long&lt;/font&gt; serialVersionUID = 1L;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; doPost(HttpServletRequest request, &lt;br /&gt;       HttpServletResponse response)&lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException, ServletException {&lt;br /&gt;        &lt;font color='blue'&gt;if&lt;/font&gt; (processRequest(request, response)) {&lt;br /&gt;         &lt;font color='blue'&gt;super&lt;/font&gt;.doPost(request, response);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; doGet(HttpServletRequest request, &lt;br /&gt;      HttpServletResponse response)&lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException, ServletException {&lt;br /&gt;        &lt;font color='blue'&gt;if&lt;/font&gt; (processRequest(request, response)) {&lt;br /&gt; &lt;font color='blue'&gt;super&lt;/font&gt;.doGet(request, response);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;boolean&lt;/font&gt; processRequest(HttpServletRequest request, &lt;br /&gt;               HttpServletResponse response) &lt;br /&gt;    &lt;font color='blue'&gt;throws&lt;/font&gt; IOException, ServletException {&lt;br /&gt;     String requestURI = request.getRequestURI();&lt;br /&gt;     String contextPath = request.getContextPath();&lt;br /&gt;     &lt;br /&gt;     String fileURI = &lt;font color='brown'&gt;""&lt;/font&gt;;&lt;br /&gt;            &lt;font color='blue'&gt;if&lt;/font&gt; (requestURI.indexOf(contextPath) != -1) {&lt;br /&gt;                &lt;font color='green'&gt;// Request URI is CONTEXTPATH + RESOURCE URI&lt;br /&gt;&lt;/font&gt;                fileURI = requestURI.substring(&lt;br /&gt;                         requestURI.indexOf(contextPath) + &lt;br /&gt;                         contextPath.length());&lt;br /&gt;            }&lt;br /&gt; &lt;br /&gt; &lt;font color='blue'&gt;boolean&lt;/font&gt; checkPassed = false;&lt;br /&gt; &lt;font color='green'&gt;// DO SOME CHECKS BEFORE SERVING FILE...&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color='blue'&gt;return&lt;/font&gt; checkPassed; &lt;font color='green'&gt;&lt;br /&gt;&lt;/font&gt;    }     &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-7176276768900718867?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/7176276768900718867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=7176276768900718867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7176276768900718867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/7176276768900718867'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2007/02/customize-tomcats-static-file-serving.html' title='Customize Tomcat&apos;s Static File Serving'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-116616124103286477</id><published>2006-12-14T21:20:00.000-08:00</published><updated>2006-12-14T21:43:27.566-08:00</updated><title type='text'>mod_gzip for Apache</title><content type='html'>Apache's mod_gzip provides good compression for server output. I just got it working on my server with little bit of tweaking done in the configuration. I was using the debian server.&lt;br /&gt;&lt;br /&gt;Install mod_zip if you don't have it already:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;apt-get install libapache-mod-gzip&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Load the module mod_gzip: (add this line in httpd.conf or modules.conf)&lt;br /&gt;&lt;b&gt;LoadModule gzip_module /usr/lib/apache/1.3/mod_gzip.so&lt;/b&gt;&lt;br /&gt;Look at the example &lt;a href="http://schroepl.net/projekte/mod_gzip/config.htm"&gt;http://schroepl.net/projekte/mod_gzip/config.htm&lt;/a&gt; configuration file.&lt;br /&gt;&lt;br /&gt;Here is the configurtaion I added:&lt;br /&gt;&lt;pre&gt;&amp;lt;IfModule mod_gzip.c&amp;gt;&lt;br /&gt;  mod_gzip_on                   Yes&lt;br /&gt;  mod_gzip_can_negotiate        Yes&lt;br /&gt;  mod_gzip_static_suffix        .gz&lt;br /&gt;  AddEncoding              gzip .gz&lt;br /&gt;  mod_gzip_command_version      '/mod_gzip_status'&lt;br /&gt;  mod_gzip_keep_workfiles       No&lt;br /&gt;  mod_gzip_minimum_file_size    500&lt;br /&gt;  mod_gzip_maximum_file_size    500000&lt;br /&gt;  mod_gzip_maximum_inmem_size   60000&lt;br /&gt;  mod_gzip_handle_methods        GET POST&lt;br /&gt;&lt;br /&gt;  mod_gzip_item_exclude         reqheader  "User-agent: Mozilla/4.0[678]"&lt;br /&gt;&lt;br /&gt;  mod_gzip_item_include         file       \.html$&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;mod_gzip_item_include         file       \.js$&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;mod_gzip_item_include         file       \.css$&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  mod_gzip_item_exclude         mime       ^image/&lt;br /&gt;  &lt;b&gt;mod_gzip_item_include         mime       ^text/&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  # This was very important to get things working&lt;br /&gt;  &lt;b&gt;mod_gzip_item_include         uri        .*&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  mod_gzip_dechunk              Yes&lt;br /&gt;&lt;br /&gt;  LogFormat                     "%h %l %u %t \"%V %r\" %&amp;lt;s %b &lt;br /&gt;mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n -&amp;lt; &lt;br /&gt;Out:%{mod_gzip_output_size}n = %{mod_gzip_compression_ratio}n &lt;br /&gt;pct." common_with_mod_gzip_info2&lt;br /&gt;&lt;br /&gt;  CustomLog               /var/log/apache/mod_gzip.log common_with_mod_gzip_info2&lt;br /&gt;&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;I had to add the configuration line &lt;b&gt;mod_gzip_item_include uri .*&lt;/b&gt; until then I saw only &lt;b&gt;mod_gzip: DECLINED:EXCLUDED In:0 -&lt; Out:0 = 0 pct.&lt;/b&gt; in the mod_zip.log. &lt;br /&gt;Look at &lt;a href="http://www.debian-administration.org/articles/31"&gt;http://www.debian-administration.org/articles/31&lt;/a&gt;  which reports problem with mod_gzip and mod_ssl, so added this line of configuration as well. Add this only if you enabled ssl access for your server.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;  &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;IfModule mod_gzip.c&amp;gt;&lt;br /&gt;      mod_gzip_on No&lt;br /&gt;  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;br /&gt;NOTE: With Apache2 you can use mod_deflate for the gzip compression. To get more details look at &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html"&gt;&lt;br /&gt;http://httpd.apache.org/docs/2.0/mod/mod_deflate.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-116616124103286477?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/116616124103286477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=116616124103286477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116616124103286477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116616124103286477'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/12/modgzip-for-apache.html' title='mod_gzip for Apache'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-116609903296544291</id><published>2006-12-14T04:12:00.000-08:00</published><updated>2006-12-14T05:04:03.100-08:00</updated><title type='text'>Locale Dependent DateFormat</title><content type='html'>Recently I came across a strange problem on the debian server install.&lt;br /&gt;&lt;br /&gt;The following piece of jython code which was working fine on my machine failed to work on debian server.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color='blue'&gt;import&lt;/font&gt; java.text.DateFormat as DateFormat&lt;br /&gt;format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);&lt;br /&gt;format.setLenient(1);&lt;br /&gt;&lt;font color='blue'&gt;print&lt;/font&gt; format.parse('Nov 6, 2006 3:23:54 PM');&lt;/pre&gt;&lt;br /&gt;I was getting this exception:&lt;br /&gt;&lt;pre&gt;Traceback (innermost last):&lt;br /&gt;  File "&amp;lt;string&amp;gt;", line 5, in ?&lt;br /&gt;java.text.ParseException: Unparseable date: "Nov 6, 2006 3:23:54 PM"&lt;br /&gt; at java.text.DateFormat.parse(DateFormat.java:335)&lt;br /&gt;        ...&lt;/pre&gt;&lt;br /&gt;I looked at the default Locale that was used and it was: [command used: &lt;b&gt;locale&lt;/b&gt;]&lt;br /&gt;&lt;pre&gt;LANG=en_IN&lt;br /&gt;LC_CTYPE="en_IN"&lt;br /&gt;LC_NUMERIC="en_IN"&lt;br /&gt;LC_TIME="en_IN"&lt;br /&gt;LC_COLLATE="en_IN"&lt;br /&gt;LC_MONETARY="en_IN"&lt;br /&gt;LC_MESSAGES="en_IN"&lt;br /&gt;LC_PAPER="en_IN"&lt;br /&gt;LC_NAME="en_IN"&lt;br /&gt;LC_ADDRESS="en_IN"&lt;br /&gt;LC_TELEPHONE="en_IN"&lt;br /&gt;LC_MEASUREMENT="en_IN"&lt;br /&gt;LC_IDENTIFICATION="en_IN"&lt;br /&gt;LC_ALL=&lt;/pre&gt;&lt;br /&gt;I did the following and got the piece of code working:&lt;br /&gt;&lt;pre&gt;export LC_CTYPE="en_US.UTF-8"&lt;/pre&gt;[If this does not solve try &lt;b&gt;export LC_TIME="en_US.UTF-8"&lt;/b&gt;]&lt;br /&gt;&lt;br /&gt;After this I could got the following output:&lt;br /&gt;&lt;pre&gt;Mon Nov 06 15:23:54 IST 2006&lt;/pre&gt;&lt;br /&gt;Make sure you set the right LOCALE before using any API that depends on SYSTEM LOCALE information. Few Java API's allows you to specify the Locale as an argument use it when required.&lt;br /&gt;&lt;br /&gt;More details about &lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Locale.html"&gt;Java 1.3 Locale&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I found a related post &lt;a href="http://www.juretta.com/log/2006/03/07/java_simpledateformat_don_t_forget_to_specify_the_locale/"&gt;Don't forget to specify the locale&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-116609903296544291?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/116609903296544291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=116609903296544291' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116609903296544291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116609903296544291'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/12/locale-dependent-dateformat.html' title='Locale Dependent DateFormat'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-116486108767793471</id><published>2006-11-29T20:18:00.000-08:00</published><updated>2006-11-29T20:47:55.613-08:00</updated><title type='text'>StackOverflowError When Instantiating A Class</title><content type='html'>Try out this small piece of code and you can see JVM reports StackOverflowError.&lt;br /&gt;&lt;pre&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;class&lt;/font&gt; FirstClass {&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; FirstClass() {&lt;br /&gt;        SecondClass secondClass = &lt;font color='blue'&gt;new&lt;/font&gt; SecondClass();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; main(String[] args) {&lt;br /&gt;        &lt;font color='green'&gt;/* Instanstiating FirstClass ends with StackOverflowError */&lt;/font&gt;&lt;br /&gt;        FirstClass firstClassInstance = &lt;font color='blue'&gt;new&lt;/font&gt; FirstClass();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;class&lt;/font&gt; SecondClass {&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; SecondClass() {&lt;br /&gt;        FirstClass firstClassInstance = &lt;font color='blue'&gt;new&lt;/font&gt; FirstClass();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;We are trying to instantiate FirstClass object inside &lt;b&gt;main&lt;/b&gt; function, FirstClass constructor tries to instantiate SecondClass object and SecondClass constructor tries to instantiate FirstClass object which ends up in a busy endless situation and hence StackOverflows.&lt;br /&gt;&lt;br /&gt;Although this is not a common situation of programming, such mistakes or piece of code will be hard to figure out especially when writing Web Application where things are little hard to debug.&lt;br /&gt;&lt;br /&gt;If you like to look at the source of this example, check out &lt;a href="http://www.geocities.com/prasad20002005/downloads/ClassLoadStackError.zip" title="ClassLoadStackError.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-116486108767793471?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/116486108767793471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=116486108767793471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116486108767793471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116486108767793471'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/11/stackoverflowerror-when-instantiating.html' title='StackOverflowError When Instantiating A Class'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-116314188066740046</id><published>2006-11-09T22:41:00.000-08:00</published><updated>2006-11-09T22:58:01.673-08:00</updated><title type='text'>Javascript Function Call Surprised Me</title><content type='html'>I was studying the javascript function call from an iframe to its parent page.&lt;br /&gt;I was taken by surprise when I observed this:&lt;br /&gt;&lt;br /&gt;When I pass Array parameter from iframe page to its parent the &lt;span style="font-weight: bold;"&gt;instanceof &lt;/span&gt;function calls works quite diffrent on different browser and its version :(&lt;br /&gt;&lt;br /&gt;I have isolated the problem in the following page:&lt;br /&gt;&lt;a href="http://www.geocities.com/prasad20002005/TestIFrameCall/parent.html"&gt;http://www.geocities.com/prasad20002005/TestIFrameCall/parent.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to Pramod who sent me this link: &lt;a href="http://www.thescripts.com/forum/thread91190.html"&gt;http://www.thescripts.com/forum/thread91190.html&lt;/a&gt;&lt;br /&gt;where the same issue was discussed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-116314188066740046?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/116314188066740046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=116314188066740046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116314188066740046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116314188066740046'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/11/javascript-function-call-surprised-me.html' title='Javascript Function Call Surprised Me'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-116142779151005784</id><published>2006-10-21T03:35:00.000-07:00</published><updated>2007-01-29T20:29:42.703-08:00</updated><title type='text'>DataMashups Service Beta</title><content type='html'>If you are looking for a &lt;a href="http://datamashups.com/entmashups.html" target="_blank"&gt;Enterprise Mashups&lt;/a&gt; Tool check out &lt;a href="http://datamashups.com/" target="_blank" title="DataMashups"&gt;DataMashups&lt;/a&gt; Service Beta, its available now.&lt;br /&gt;&lt;br /&gt;Data Mashups is a "&lt;span style="font-weight: bold; font-style: italic;"&gt;Online Service for Enterprises&lt;/span&gt;" from &lt;a href="http://applibase.com/" target="_blank" title="Applibase"&gt;Applibase, Inc.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;DataMashups gets listed as "The Best Web 2.0 Software of 2006" on &lt;a href="http://web2.wsj2.com/the_best_web_20_software_of_2006.htm"&gt;Dion Hinchcliffe's Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-116142779151005784?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/116142779151005784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=116142779151005784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116142779151005784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/116142779151005784'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/10/datamashups-service-beta.html' title='DataMashups Service Beta'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-115762242866809137</id><published>2006-09-07T02:42:00.000-07:00</published><updated>2006-09-07T02:48:24.533-07:00</updated><title type='text'>VirtualHost with ServerAlias</title><content type='html'>&lt;p&gt;I was setting up &lt;a href="http://httpd.apache.org/docs/1.3/vhosts/name-based.html" title="Virtual Host"&gt;VirtualHost&lt;/a&gt; for my Apache server with ServerAlias, as shown below:&lt;/p&gt;  &lt;pre&gt;&amp;lt;virtualhost *:80&amp;gt;&lt;br /&gt;ServerName myserver.com&lt;br /&gt;ServerAlias myserver.com, *.myserver.com&lt;br /&gt;DocumentRoot /path/to/directory&lt;br /&gt;&amp;lt;/virtualhost&amp;gt;&lt;/pre&gt;This was the first time I was playing with VirtualHost configuration and ServerAlias, I got&lt;i&gt; http://myserver.com&lt;/i&gt; working but &lt;i&gt;http://myname.myserver.com&lt;/i&gt; or &lt;i&gt;http://myadmin.myserver.com&lt;/i&gt; were not working.&lt;br /&gt;&lt;p&gt;I realized I had missed one step which was stated in the documentation:&lt;br /&gt;&lt;i&gt;"Of course, you can't just make up names and place them in &lt;b&gt;ServerName&lt;/b&gt; or &lt;b&gt;ServerAlias&lt;/b&gt;.  You must first have your DNS server properly configured to map those names to an IP address associated with your server."&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;DNS Mapping for the subdomain's was the problem. I noticed, DNS mapping was done for &lt;span style="font-weight: bold;"&gt;myserver&lt;/span&gt; in com domain something like this:&lt;/p&gt;&lt;p&gt;&lt;b&gt;mysever  IN A 192.168.0.XX&lt;/b&gt;&lt;/p&gt;&lt;p&gt;but there was no mapping for my subdomain's. I added a CNAME record in the &lt;a href="http://en.wikipedia.org/wiki/Domain_name_system" title="DNS"&gt;DNS&lt;/a&gt;, something like this&lt;/p&gt;&lt;b&gt;*.myserver IN CNAME myserver&lt;br /&gt;&lt;/b&gt;&lt;i&gt;[Please refer to documentaion for adding CNAME DNS entry, it might vary. ]&lt;/i&gt;  &lt;p&gt;Once I updated my DNS Server, the ServerAlias started to work.&lt;/p&gt;  &lt;p&gt;Few of the DNS Servers I tried: &lt;a href="http://posadis.sourceforge.net/" title="Posadis"&gt;Posadis&lt;/a&gt;, &lt;a href="http://www.isc.org/index.pl?/sw/bind/" title="ISC BIND"&gt;BIND&lt;/a&gt; . &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-115762242866809137?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/115762242866809137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=115762242866809137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/115762242866809137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/115762242866809137'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/09/virtualhost-with-serveralias.html' title='VirtualHost with ServerAlias'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-114629729971597588</id><published>2006-04-29T00:54:00.000-07:00</published><updated>2006-07-04T03:46:10.540-07:00</updated><title type='text'>MySql Getting LastInsertId</title><content type='html'>&lt;b&gt;LastInsertId&lt;/b&gt; refers to the unique identifier that is generated for tuple/row of the table when you do a insert into the table. You should have "AUTO_INCREMENT" column in the table to get the last insert id. MySql needs this column to be UNIQUE. The value generated for such column will start from 1.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;A simple table for our discussion would be.&lt;/i&gt;&lt;br /&gt;&lt;b&gt;create table autotable (id int auto_increment unique, primary key (id));&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How do you get the last insert id when you insert a tuple?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This function will try to get the last insert id information given the prepared statement (for MySql JDBC driver). If the information is not available, the -1 value is returned.&lt;br /&gt;&lt;pre&gt;public Integer getLastInsertId(PreparedStatement ps) {&lt;br /&gt;  int lastInsertId = -1;&lt;br /&gt;  PreparedStatement lastInsertIdPs = &lt;br /&gt;      ps.getConnection().prepareStatement(&amp;quot;SELECT LAST_INSERT_ID()&amp;quot;);&lt;br /&gt;  ResultSet rs = lastInsertIdPs.executeQuery();&lt;br /&gt;  while(rs.next()) {&lt;br /&gt;      lastInsertId = rs.getInt(1);&lt;br /&gt;  }&lt;br /&gt;   return new Integer(lastInsertId);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Let us execute the prepared statement:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;PreparedStatement preparedStatement = &lt;br /&gt;  connection.prepareStatement(&amp;quot;insert into autotable (id) values (?)&amp;quot;);&lt;br /&gt;preparedStatement.setObject(1, new Integer(1));&lt;br /&gt;preparedStatement.execute(); &lt;br /&gt;Integer lastInsertId = getLastInsertId(ps);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The lastInsertId value will be 0 in this case, though MySql inserts value 1 for the auto_increment field (id) of the table. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;How do we fix this mismatch?&lt;/b&gt;&lt;br /&gt;You have to make sure you will not insert values to auto_increment field, in which case MySql generates the value and you can get the generated value using the getLastInsertId function. &lt;br /&gt;&lt;br /&gt;So the above piece of code should be written like this:&lt;br /&gt;&lt;pre&gt;PreparedStatement preparedStatement = &lt;br /&gt;  connection.prepareStatement(&amp;quot;insert into autotable (id) values (?)&amp;quot;);&lt;br /&gt;preparedStatement.setObject(1, null); // Let MySql generate the value for this field&lt;br /&gt;preparedStatement.execute(); &lt;br /&gt;Integer lastInsertId = getLastInsertId(ps);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;lastInsertId value will now be 1 (auto generated value for this insert).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-114629729971597588?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/114629729971597588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=114629729971597588' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114629729971597588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114629729971597588'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/04/mysql-getting-lastinsertid.html' title='MySql Getting LastInsertId'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-114180012388137177</id><published>2006-03-07T22:41:00.000-08:00</published><updated>2006-03-07T23:49:04.013-08:00</updated><title type='text'>Mplay - Mplayer Console Frontend</title><content type='html'>I got a chance today to try &lt;a href="http://mplay.sourceforge.net/" title="mplay"&gt;Mplay&lt;/a&gt; &lt;i&gt;&lt;b&gt;a console based frontend for MPlayer written in Perl.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/i&gt; Its good and supports lot of options. One thing that was interesting to me: &lt;i&gt;"remembers the position within the track last played before quitting"&lt;/i&gt; which was one of the feature I was looking for. Nothing more to say right now, just enjoying the song through it :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-114180012388137177?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/114180012388137177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=114180012388137177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114180012388137177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114180012388137177'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/03/mplay-mplayer-console-frontend.html' title='Mplay - Mplayer Console Frontend'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-114171482298330848</id><published>2006-03-06T22:57:00.000-08:00</published><updated>2006-03-06T23:00:23.250-08:00</updated><title type='text'>Working with Sablecc</title><content type='html'>After working with &lt;a href="http://antlr.org" title="Antlr"&gt;Antlr&lt;/a&gt; and &lt;a href="https://javacc.dev.java.net/" title="Javacc"&gt;Javacc&lt;/a&gt; I came across &lt;a href="http://www.sablecc.org/" title="Sablecc"&gt;Sablecc&lt;/a&gt; which was described as &lt;br /&gt;&lt;i&gt;"an object-oriented framework that generates compilers (and interpreters) in the Java programming language"&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;I started with  &lt;a href="http://sablecc.org/thesis/thesis.html" title="Thesis"&gt;Etienne Gagnon's Master thesis&lt;/a&gt; which is quite well written. I was pretty convinced when I got my first program working with Sablecc. I decided to document the steps I followed which can serve as a tutorial to start working with Sablecc. Here is the link for my &lt;a href="http://www.geocities.com/prasad20002005/downloads/withsablecc/withsablecc.pdf" title="withsablecc.pdf"&gt;tutorial(pdf)&lt;/a&gt; and first application &lt;a href="http://www.geocities.com/prasad20002005/downloads/withsablecc/INIParser.zip" title="INIParser.zip"&gt;INIParser(zip)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reference links:&lt;br /&gt;&lt;a href="http://nat.truemesh.com/archives/000531.html" title="CST-to-AST"&gt;Mistaeks I Hav Made&lt;/a&gt; &lt;br /&gt;&lt;a href="http://sablecc.org/wiki/HomePage" title="wiki"&gt;Sablecc Wiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Resource links:&lt;br /&gt;&lt;a href="http://www.cs.mcgill.ca/~hendren/SableCC/sablecc-3-beta.3/"&gt;Sablecc-3-beta.3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ftp.citkit.ru/pub/sourceforge/s/sa/sablecc/?M=D"&gt;Sablecc downloads&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sablecc.org" title="Sablecc Home"&gt;Sablecc Home&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-114171482298330848?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/114171482298330848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=114171482298330848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114171482298330848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114171482298330848'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/03/working-with-sablecc.html' title='Working with Sablecc'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-114059159720657437</id><published>2006-02-21T22:58:00.000-08:00</published><updated>2008-09-11T05:57:20.889-07:00</updated><title type='text'>Extension for TrimPath</title><content type='html'>&lt;b&gt;Javascript Templates&lt;/b&gt; from &lt;a href="http://trimpath.com/project/wiki/TrimPath" title="TrimPath"&gt;TrimPath&lt;/a&gt; is good to work with. The documentation is quite good. It was fast and easy to get started. At the beginning I liked the idea of having the JST Template as the part of the page (&lt;i&gt;hidden textarea&lt;/i&gt;), but it turned out that I will not be able to reuse in other pages. The suggested alternative of keeping &lt;b&gt;*.jst&lt;/b&gt; files on the web server and load them into the browser using XMLHttpRequest sounded bit interesting. &lt;br /&gt;&lt;br /&gt;I just extended &lt;b&gt;TrimPath&lt;/b&gt; object by adding the function &lt;b&gt;processTemplateFile&lt;/b&gt;, which does and XMLHttpRequest and fetch the &lt;i&gt;jstfile&lt;/i&gt; and merge it with the context. You can pass &lt;i&gt;function&lt;/i&gt; to get callback with processed template, response status and status text or pass dom element whose innerHTML will be updated once the template is processed.&lt;br /&gt;&lt;br /&gt;Look at the extension I have added &lt;a href="http://onweb.googlecode.com/files/exttemplate.js" title="exttemplate.js"&gt;exttemplate.js&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;function mergeWithFile(trmfile, context, getcallback) {&lt;br /&gt;    var resultdiv = document.getElementById(&amp;quot;result&amp;quot;);&lt;br /&gt;    if(getcallback != null and getcallback == false)&lt;br /&gt;        &lt;b&gt;TrimPath.processTemplateFile(trmfile, context, resultdiv);&lt;/b&gt;&lt;br /&gt;    else&lt;br /&gt;        &lt;b&gt;TrimPath.processTemplateFile(trmfile, context, handler);&lt;/b&gt;               &lt;br /&gt;    function handler(mergedJST, status, statusText) {&lt;br /&gt;        if(mergedJST == null) {&lt;br /&gt;            mergedJST = &amp;quot;HTTP STATUS: &amp;quot; + status + &amp;quot;,&amp;quot; + statusText;&lt;br /&gt;        }&lt;br /&gt;        resultdiv.innerHTML = mergedJST;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;function mergeWithoutCallback() {&lt;br /&gt;  var context = { values : [&amp;quot;prasad&amp;quot;, &amp;quot;me&amp;quot;] };  &lt;br /&gt;  mergeWithFile(&amp;quot;jstfiles/mytemplate.jst&amp;quot;, context, false);&lt;br /&gt;}&lt;br /&gt;function mergeWithCallback() {&lt;br /&gt;  var context = { values : [&amp;quot;prasad&amp;quot;, &amp;quot;me&amp;quot;] };  &lt;br /&gt;  mergeWithFile(&amp;quot;jstfiles/mytemplate.jst&amp;quot;, context);&lt;br /&gt;  // Same as&lt;br /&gt;  // mergeWithFile(&amp;quot;jstfiles/mytemplate.jst&amp;quot;, context, true);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-114059159720657437?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/114059159720657437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=114059159720657437' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114059159720657437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114059159720657437'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/02/extension-for-trimpath.html' title='Extension for TrimPath'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-114044754868103158</id><published>2006-02-20T06:58:00.000-08:00</published><updated>2006-02-20T06:59:08.713-08:00</updated><title type='text'>Tomcat WebApplication Context File</title><content type='html'>You can deploy tomcat web application by creating a &amp;lt;webapp&amp;gt;.xml file. This method is handy while you are developing the WebApplication (where you don't want to build the war file, deploy it to Tomcat/webapps) and it also allows reloading the context for the web application when any class file (in WEB-INF/classes) directory changes. &lt;br /&gt;For this to work, you should have the xml file (name same as "application path"+ ".xml") in &lt;b&gt;Tomcat/conf/Catalina/localhost&lt;/b&gt; directory, you &lt;b&gt;don't need&lt;/b&gt; to put the war file under Tomcat/webapps.&lt;br /&gt;&lt;br /&gt;Let say, our web application directory is "/home/prasad/apps/TestApp/web" and &lt;br /&gt;we like to access it as "http://localhost:8080/testapp". Then, you have to create the &lt;b&gt;"testapp.xml"&lt;/b&gt; in Tomcat/conf/localhost directory with the following content in it:&lt;br /&gt;&lt;br /&gt;&amp;lt;xml version="1.0"&amp;gt;&lt;br /&gt;&amp;lt;&lt;b&gt;Context&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;path&lt;/b&gt;="/testapp" &lt;br /&gt;&amp;nbsp;&lt;b&gt;docBase&lt;/b&gt;="/home/prasad/apps/TestApp/web" &lt;br /&gt;&amp;nbsp;&lt;b&gt;reloadable&lt;/b&gt;="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;The reloadable attribute is the one the allows reloading of context when the class file changes. &lt;b&gt;docBase&lt;/b&gt; attribute should point to the web directory (which has child directory named WEB-INF), otherwise Tomcat can delete the context file, as its not valid.&lt;br /&gt;&lt;br /&gt;Creation of context file is useful when you want to secure you web application, ie. apply security constraints to access files of you web application and you want to Tomcat to use your tables to authenticate user access. Here is how you can setup Tomcat's JDBC authentication:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;&lt;b&gt;Context&lt;/b&gt;  &lt;b&gt;path&lt;/b&gt;="/testapp"&lt;br /&gt;&amp;nbsp;&lt;b&gt;docBase&lt;/b&gt;="/home/prasad/apps/TestApp/web"&lt;br /&gt;&amp;nbsp;&lt;b&gt;reloadable&lt;/b&gt;="true"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b&gt;Realm&lt;/b&gt; &lt;b&gt;className&lt;/b&gt;="org.apache.catalina.realm.JDBCRealm"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;driverName&lt;/b&gt;="jdbc.DatabaseDriver"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;connectionURL&lt;/b&gt;="jdbc:protocol:appauthdb"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;connectionName&lt;/b&gt;="admin" &lt;b&gt;connectionPassword&lt;/b&gt;="admin"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;userTable&lt;/b&gt;="utable" &lt;b&gt;userNameCol&lt;/b&gt;="uname" &lt;b&gt;userCredCol&lt;/b&gt;="passwd"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;userRoleTable&lt;/b&gt;="rtable" &lt;b&gt;roleNameCol&lt;/b&gt;="rname"/&amp;gt;&lt;br /&gt;&amp;lt;/&lt;b&gt;Context&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Table Structure:&lt;/u&gt;&lt;br /&gt;&lt;b&gt;create table utable (uname varchar(255), passwd varchar(255), primary key(uname, passwd))&lt;/b&gt;&lt;br /&gt;&lt;b&gt;create table rtable (uname varchar(255), rname varchar(255))&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This basically sets up &lt;b&gt;Realm&lt;/b&gt; for this web application. &lt;i&gt;[By default, there is &lt;b&gt;Realm&lt;/b&gt; defined for entire &lt;b&gt;Engine&lt;/b&gt; or &lt;b&gt;Host&lt;/b&gt; in Tomcat/conf/server.xml]&lt;/i&gt; You are basically setting the context to use JDBC Realm and acess &lt;b&gt;appauthdb&lt;/b&gt; database tables &lt;b&gt;utable&lt;/b&gt; and &lt;b&gt;rtable&lt;/b&gt; to authenticate the user.&lt;br /&gt;&lt;br /&gt;To check out the Realm usage you have to define the &lt;b&gt;security-constraint&lt;/b&gt; in &lt;b&gt;web.xml&lt;/b&gt; file in (/home/prasad/apps/TestApp/WEB-INF/web.xml).&lt;br /&gt;&lt;br /&gt;&amp;lt;security-constraint&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;web-resource-collection&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;web-resource-name&amp;gt;Entire Application&amp;lt;/web-resource-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/web-resource-collection&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;lt;auth-constraint&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;role-name&amp;gt;appuser&amp;lt;/role-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/auth-constraint&amp;gt;&lt;br /&gt;&amp;lt;/security-constraint&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;login-config&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;auth-method&amp;gt;BASIC&amp;lt;/auth-method&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;!-- Commented&lt;br /&gt;&amp;nbsp;&amp;lt;auth-method&amp;gt;FORM&amp;lt;/auth-method&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;form-login-config&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;form-login-page&amp;gt;/login.html&amp;lt;/form-login-page&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;form-error-page&amp;gt;/error.html&amp;lt;/form-error-page&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/form-login-config&amp;gt;&lt;br /&gt;&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;lt;/login-config&amp;gt;&lt;br /&gt;&lt;br /&gt;We defined the security contraint for the entire web application (&lt;b&gt;url-pattern&lt;/b&gt;) and all user with role (&lt;b&gt;role-name&lt;/b&gt;) appuser can access the resource of web application. Once done add values to utable and rtable.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;insert into utable(uname, passwd) values ('prasad', 'somepwd')&lt;/b&gt;&lt;br /&gt;&lt;b&gt;insert into rtable(uname, rname) values ('prasad', 'appuser')&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When you visit, http://localhost:8080/testapp, you get a HTTP Authentication dialog box, and you can see only 'prasad' is allowed to use the application.&lt;br /&gt;&lt;br /&gt;Hope this piece of information is useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-114044754868103158?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/114044754868103158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=114044754868103158' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114044754868103158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114044754868103158'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/02/tomcat-webapplication-context-file.html' title='Tomcat WebApplication Context File'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-114003427656050132</id><published>2006-02-15T12:10:00.000-08:00</published><updated>2006-02-18T20:10:53.486-08:00</updated><title type='text'>IE supports Conditional Comments</title><content type='html'>I came across a situation where I had to write few CSS rules (call it a hack!) to make things look the same on both IE and Firefox. I actually wrote IE specific rules in a different file with the intension to include it only when page is rendered on IE. Its quite interesting to know the support for &lt;a href="http://msdn.microsoft.com/workshop/author/dhtml/overview/ccomment_ovw.asp" title="Conditional Comments"&gt;Conditional Comments&lt;/a&gt; available in IE 5+.  &lt;br /&gt;&lt;br /&gt;Well the &lt;a href="http://msdn.microsoft.com/workshop/author/dhtml/overview/ccomment_ovw.asp" title="Conditional Comments"&gt;article&lt;/a&gt; gives the complete details about conditional comments. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Brief:&lt;/b&gt;&lt;br /&gt;IE supports &lt;b&gt;if&lt;/b&gt; conditional construct within the HTML comment. &lt;br /&gt;&lt;br /&gt;Example, to include a stylesheet when HTML is displayed in IE.&lt;br /&gt;&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="cssfiles/forie.css"/&amp;gt;&lt;br /&gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--[if !IE 7]&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;        document.write("&amp;lt;b&amp;gt;IE Version Used is not 7&amp;lt;/b&amp;gt;");&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;![endif]--&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-114003427656050132?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/114003427656050132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=114003427656050132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114003427656050132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/114003427656050132'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/02/ie-supports-conditional-comments.html' title='IE supports Conditional Comments'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-113947924392519775</id><published>2006-02-09T02:00:00.000-08:00</published><updated>2006-02-09T02:00:43.936-08:00</updated><title type='text'>Feed discovery extension</title><content type='html'>Feeds available on a site is currently discovered by feed readers by looking at &lt;b&gt;link rel="alternate"&lt;/b&gt; tag, which is present on the page:&lt;br /&gt;&lt;br /&gt;&amp;lt;link rel="alternate" type="application/rss+xml" &lt;br /&gt;&amp;nbsp;&amp;nbsp;title="MySiteMainFeed" href="http://localhost.com/main.xml" /&amp;gt;&lt;br /&gt;&lt;br /&gt;The difficulty with this is, you have to specify &lt;b&gt;link rel="alternate"&lt;/b&gt; for each of the feed available on the site. To simplify this we can have &lt;b&gt;link rel="alternate" type="application/feedlist+xml"&lt;/b&gt; on the page which provides list of available feeds on your site. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example: &lt;/b&gt;&lt;br /&gt;&amp;lt;link rel="alternate" type="application/feedlist+xml" &lt;br /&gt;&amp;nbsp;&amp;nbsp;title="MySiteMainFeed" href="http://localhost.com/feedlist.xml" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;feedlist.xml will be:&lt;/b&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;feedlist&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;link rel="alternate" title="RSS Content" type="application/rss+xml"&lt;br /&gt;href="http://localhost.com/rss_feed.xml"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;link rel="alternate" title="Atom Content" type="application/atom+xml"&lt;br /&gt;href="http://localhost.com/atom_feed.xml"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;link rel="alternate" title="Comment" type="application/rss+xml"&lt;br /&gt;href="http://localhost.com/comment_rss_feed.xml"/&amp;gt;&lt;br /&gt;&amp;lt;/feedlist&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-113947924392519775?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/113947924392519775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=113947924392519775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113947924392519775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113947924392519775'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/02/feed-discovery-extension.html' title='Feed discovery extension'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-113860765551548364</id><published>2006-01-29T23:52:00.000-08:00</published><updated>2006-01-29T23:54:15.526-08:00</updated><title type='text'>Javascript and Java Comparision</title><content type='html'>When I started to work with javascript few months back, I found it to be interesting. &lt;br /&gt;I was working with Java at the same time, writing some Servlet Code. I found most of the features is very simple to learn in javascript. If you are familar with Java then things are even more simpler. &lt;br /&gt;I have written some sort of comparision between few things of java and javascript. Here is the link: &lt;a href="http://www.geocities.com/prasad20002005/downloads/jstutorial/jsjavacmp.html" title="Javasciprt And Java"&gt;JavascriptAndJava&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-113860765551548364?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/113860765551548364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=113860765551548364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113860765551548364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113860765551548364'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/01/javascript-and-java-comparision.html' title='Javascript and Java Comparision'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-113816723123804574</id><published>2006-01-24T21:32:00.000-08:00</published><updated>2006-01-24T21:33:51.266-08:00</updated><title type='text'>Design Self Refreshing HTML Page</title><content type='html'>I faced a problem in one of my WebApplication where the response from the server for the client request was taking too long, without any feedback to the client about the progress. The servlet (&lt;b&gt;ClientServlet&lt;/b&gt;) which handled the request (for url, &lt;b&gt;clientreq&lt;/b&gt;), spent most of its time on lookups before sending the response. &lt;br /&gt;&lt;br /&gt;I found html &lt;b&gt;meta&lt;/b&gt; to be useful in such case. The &lt;i&gt;&amp;lt;meta http-equiv='refresh' content='1; url="clientreq"'&amp;gt;&lt;/i&gt; when included in HTML page will timeout the page every 1 second (specified value in content) and the request is sent to the specified url (clientreq). Taking advantage of this feature I designed a model where the client can get the feedback on the progress of the response.&lt;br /&gt;&lt;br /&gt;The design was, &lt;b&gt;ClientServlet&lt;/b&gt; will redirect to &lt;b&gt;progress.jsp&lt;/b&gt; with status message if it is not ready to send response (busy in doing the lookup). Once &lt;b&gt;ClientServlet&lt;/b&gt; has finished its lookup it sends the actual response to the client instead of redirect.&lt;br /&gt;&lt;br /&gt;Task of &lt;b&gt;progress.jsp&lt;/b&gt; is just to send the HTML page with the status message along with &lt;i&gt;&amp;lt;meta http-equiv='refresh' content='1; url="clientreq"'&amp;gt;&lt;/i&gt;. Which makes frequent request to the &lt;b&gt;ClientServlet&lt;/b&gt; to get the status or response.&lt;br /&gt;&lt;br /&gt;The lookup work was moved to the class &lt;b&gt;AsyncHandler&lt;/b&gt;, which spans a new thread when it is started and gives the status of its work.&lt;br /&gt;&lt;br /&gt;First ClientServlet creates AsyncHandler and puts into the session after starting it. A redirect is sent to progress.jsp with status message. For subsequent request, ClientServlet checks the status of AsyncHandler and decides whether to redirect to progress.jsp or send actual response.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Snippet of my Servlet code:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color='blue'&gt;private&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; processRequest(HttpServletRequest req, &lt;br /&gt;    HttpServletResponse res) &lt;font color='blue'&gt;throws&lt;/font&gt; Exception {&lt;br /&gt;&lt;br /&gt;    &lt;font color='blue'&gt;final&lt;/font&gt; String HANDLER_KEY = &lt;font color='brown'&gt;"Client_Async_Handler"&lt;/font&gt;;&lt;br /&gt;    HttpSession session = req.getSession();&lt;br /&gt;    AsyncHandler ah = &lt;br /&gt;       (AsyncHandler) session.getAttribute(HANDLER_KEY);&lt;br /&gt;&lt;br /&gt;    &lt;font color='blue'&gt;if&lt;/font&gt;(ah == null) {&lt;br /&gt; ah = &lt;font color='blue'&gt;new&lt;/font&gt; AsyncHandler();&lt;br /&gt; ah.start();&lt;br /&gt; session.setAttribute(HANDLER_KEY, ah);&lt;br /&gt; res.sendRedirect(&lt;font color='brown'&gt;"progress.jsp?msg="&lt;/font&gt; +&lt;br /&gt; URLEncoder.encode(ah.getStatus(), &lt;font color='brown'&gt;"utf-8"&lt;/font&gt;));&lt;br /&gt; &lt;font color='blue'&gt;return&lt;/font&gt;;&lt;br /&gt;    } &lt;font color='blue'&gt;else&lt;/font&gt; {&lt;br /&gt; &lt;font color='blue'&gt;if&lt;/font&gt;(ah.done()) {&lt;br /&gt;     sendResponse(res, ah);&lt;br /&gt;     session.setAttribute(HANDLER_KEY, null);&lt;br /&gt;     ah = null;&lt;br /&gt;     &lt;font color='blue'&gt;return&lt;/font&gt;;&lt;br /&gt; } &lt;font color='blue'&gt;else&lt;/font&gt; {&lt;br /&gt;     res.sendRedirect(&lt;font color='brown'&gt;"progress.jsp?msg="&lt;/font&gt; +&lt;br /&gt;     URLEncoder.encode(ah.getStatus(), &lt;font color='brown'&gt;"utf-8"&lt;/font&gt;));&lt;br /&gt;     &lt;font color='blue'&gt;return&lt;/font&gt;;&lt;br /&gt; }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Snippet of progress.jsp:&lt;/b&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;        &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&amp;gt;        &lt;br /&gt;        &amp;lt;meta http-equiv='refresh' content='1; url="clientreq"'&amp;gt;&lt;br /&gt;        &amp;lt;title&amp;gt;Please Wait&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;    &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;%= req.getParameter("msg") %&amp;gt;&lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-113816723123804574?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/113816723123804574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=113816723123804574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113816723123804574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113816723123804574'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2006/01/design-self-refreshing-html-page.html' title='Design Self Refreshing HTML Page'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-113566433926321400</id><published>2005-12-26T22:15:00.000-08:00</published><updated>2005-12-26T22:18:59.280-08:00</updated><title type='text'>Static Initializer in Java</title><content type='html'>Let me start with a small question. (At least it was interesting to me). Go through the following lines of code.&lt;br /&gt;&lt;pre&gt;&lt;font color='green'&gt;/* Initializer.java */&lt;/font&gt;&lt;br /&gt;&lt;font color='blue'&gt;package&lt;/font&gt; staticinit;&lt;br /&gt;&lt;font color='#777777'&gt;/**&lt;br /&gt; * A simple class to demonstrate the working of static block of code&lt;br /&gt; * that is used to initialize the static class variables.&lt;br /&gt; * @author prasad&lt;br /&gt; */&lt;/font&gt;&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;class&lt;/font&gt; Initializer {&lt;br /&gt;    &lt;font color='#777777'&gt;/** Initialize the class variables. */&lt;/font&gt;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; Initializer() {&lt;br /&gt;        firstClassVar = &lt;font color='brown'&gt;"VALUE_NOT_NULL"&lt;/font&gt;;&lt;br /&gt;        secondClassVar = &lt;font color='brown'&gt;"VALUE_NOT_NULL"&lt;/font&gt;;&lt;br /&gt;        thirdClassVar = &lt;font color='brown'&gt;"VALUE_NOT_NULL"&lt;/font&gt;;&lt;br /&gt;        fourthClassVar = &lt;font color='brown'&gt;"VALUE_NOT_NULL"&lt;/font&gt;;&lt;br /&gt;    }   &lt;br /&gt;    &lt;font color='#777777'&gt;/** Initialize the static variables. */&lt;/font&gt; &lt;br /&gt;    &lt;font color='blue'&gt;static&lt;/font&gt; {&lt;br /&gt;        firstStaticVar = &lt;font color='brown'&gt;"STATIC_NOT_NULL"&lt;/font&gt;;&lt;br /&gt;        secondStaticVar = &lt;font color='brown'&gt;"STATIC_NOT_NULL"&lt;/font&gt;;        &lt;br /&gt;    }    &lt;br /&gt;    &lt;font color='#777777'&gt;/** Static variables. */&lt;/font&gt;&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; String firstStaticVar = null;&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; String secondStaticVar;    &lt;br /&gt;    &lt;font color='#777777'&gt;/** Class variables. */&lt;/font&gt;&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; String firstClassVar = firstStaticVar;&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; String secondClassVar = secondStaticVar;&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; String thirdClassVar = null;&lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; String fourthClassVar;&lt;br /&gt;    &lt;font color='#777777'&gt;/** Examine and display the values. */&lt;/font&gt;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; display() {&lt;br /&gt;        System.out.println(&lt;font color='brown'&gt;"firstStaticVar  -&gt; "&lt;/font&gt; + getValue(firstStaticVar));&lt;br /&gt;        System.out.println(&lt;font color='brown'&gt;"secondStaticVar -&gt; "&lt;/font&gt; + getValue(secondStaticVar));&lt;br /&gt;        &lt;br /&gt;        System.out.println(&lt;font color='brown'&gt;"firstClasssVar  -&gt; "&lt;/font&gt; + getValue(firstClassVar));&lt;br /&gt;        System.out.println(&lt;font color='brown'&gt;"secondClassVar  -&gt; "&lt;/font&gt; + getValue(secondClassVar));&lt;br /&gt;        System.out.println(&lt;font color='brown'&gt;"thirdClassVar   -&gt; "&lt;/font&gt; + getValue(thirdClassVar));&lt;br /&gt;        System.out.println(&lt;font color='brown'&gt;"fourthClassVar  -&gt; "&lt;/font&gt; + getValue(fourthClassVar));&lt;br /&gt;    }    &lt;br /&gt;    &lt;font color='blue'&gt;private&lt;/font&gt; String getValue(Object value) {&lt;br /&gt;        &lt;font color='blue'&gt;return&lt;/font&gt; (value == null)? &lt;font color='brown'&gt;"is null"&lt;/font&gt;: value.&lt;font color='blue'&gt;toString&lt;/font&gt;();&lt;br /&gt;    }    &lt;br /&gt;    &lt;font color='#777777'&gt;/** Main entry point. */&lt;/font&gt;&lt;br /&gt;    &lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; &lt;font color='blue'&gt;void&lt;/font&gt; main(String[] args) {&lt;br /&gt;        Initializer initializer = &lt;font color='blue'&gt;new&lt;/font&gt; Initializer();&lt;br /&gt;        initializer.display();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Which of the variable(s) will have the value "null" in the function display()?&lt;/b&gt;&lt;br /&gt;a) firstStaticVar &lt;br /&gt;b) secondStaticVar&lt;br /&gt;c) firstClassVar / secondClassVar / thridClassVar / fourthClassVar&lt;br /&gt;d) none of the above&lt;br /&gt;&lt;br /&gt;You are right if you had selected the option &lt;i&gt;(a)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why only firstStaticVar is "null"?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When the class is instantiated, before constructor is called the variables are defined (which takes the default value) and then the static initialization are performed inorder. The static initialization can be static block of code or inline assignment etc. In the above code, after static block of code is executed, firstStaticVar is re-assigned by the "inline assignment". Next secondStaticVar has no "inline assignment" so the previous initialized value is retained. Next all firstClassVar and thridClassVar are inline initialized. After this, the constructor is called which will re-initialize all the ClassVar's. When the constructor finishes its work only firstStaticVar will have the value "null".&lt;br /&gt;&lt;br /&gt;Things like this can result in bugs which would be hard to figure out or debug. A simple solution would be to declare variables (with or without initialization) before any "code block" that access it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-113566433926321400?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/113566433926321400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=113566433926321400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113566433926321400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113566433926321400'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/12/static-initializer-in-java.html' title='Static Initializer in Java'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-113473583533581783</id><published>2005-12-16T04:23:00.000-08:00</published><updated>2005-12-16T04:23:55.353-08:00</updated><title type='text'>Size in TB on a GB hard disk</title><content type='html'>I was just organizing my projects that were spread across different paritions on my system over time. Here is the result that showed up when I checked size of my home parition using konqueror after all the work.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geocities.com/prasad20002005/downloads/myhome-konq.png"/&gt;&lt;br /&gt;&lt;br /&gt;I was really taken by surprise when I saw &lt;b&gt;"2TB"&lt;/b&gt;, I have used more space than I really have (&lt;b&gt;80GB&lt;/b&gt;) O:-) I did "du -csh /home" which showed "7.7G".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-113473583533581783?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/113473583533581783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=113473583533581783' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113473583533581783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/113473583533581783'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/12/size-in-tb-on-gb-hard-disk.html' title='Size in TB on a GB hard disk'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-112989864418918343</id><published>2005-10-21T05:41:00.000-07:00</published><updated>2006-07-24T14:51:35.566-07:00</updated><title type='text'>Handling Control Characters in XML</title><content type='html'>I started off with my application with the decision that it will use xml to handle data communication. It was doing well for a long time, I was happy. Now the day came where my application just was getting broken  as xml was not being parsed properly. Well, I had to fix the issue, but was not really happy about my decision of using xml for the kind of data I am working with. I was really sad when I tried to open the xml file &lt;a href="http://blogs.applibase.net/prasad/downloads/xmlcontrol/isocontrol.xml.txt" target="_blank"&gt;isocontrol.xml&lt;/a&gt; in the browser and it says &lt;a href="http://blogs.applibase.net/prasad/downloads/xmlcontrol/parsererror.html" target="_blank"&gt;parsererror&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It was really had for me now, as some character was getting into xml from my application (which I had not expected). I started to fix this, I looked around the web to know more about this kind of problem. Many suggested using different encoding, tried so but could not fix it. One more solution was to encode the data in base64 encoding (as we do for binary data like images), well I was not sure should I do this as I was handling more of text in my application than binary data. &lt;br /&gt;&lt;br /&gt;It was late in the nigth I had no other choice except to read the xml file and get to know what was that character that was causing the problem. Well, I figured out it was the character with value '6' (integer) or CONTROL-F that actually made my xml go for a toss. Now, I looked at some references which stated that control character from 0 to 31 that is not handled by most xml parsers and will lead to parser failures. So all I had was to convert the control character to entity references. So I wrote a small fix to my application. Link to &lt;a href="http://blogs.applibase.net/prasad/downloads/xmlcontrol/XMLUtil.java" title="XMLUtil,java"&gt;Source&lt;/a&gt;.&lt;br /&gt;&lt;pre&gt;&lt;font color='#777777'&gt;/**&lt;br /&gt;  * Get proper xml string value (with ISOControl characters converted to &lt;br /&gt;  * entity references)&lt;br /&gt;  * @param source String which has to be converted&lt;br /&gt;  * @param startTag Start tag of the xml data (null if not needed)&lt;br /&gt;  * @param endTag End tag of the xml data (null if not needed)&lt;br /&gt;  * @return String with ISOControl characters converted to entity references.&lt;br /&gt;  */&lt;/font&gt;&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; String toXMLdata(String source, String startTag, String endTag) {&lt;br /&gt;    StringBuffer xmldatasb = &lt;font color='blue'&gt;new&lt;/font&gt; StringBuffer();&lt;br /&gt;    &lt;font color='blue'&gt;if&lt;/font&gt;(startTag != null) xmldatasb.append(startTag);&lt;br /&gt;        &lt;br /&gt;    &lt;font color='blue'&gt;if&lt;/font&gt;(source == null || &amp;quote;&amp;quote;.equals(source)) {&lt;br /&gt;        xmldatasb.append(source);&lt;br /&gt;    } &lt;font color='blue'&gt;else&lt;/font&gt; {&lt;br /&gt;        &lt;font color='blue'&gt;for&lt;/font&gt;(&lt;font color='blue'&gt;int&lt;/font&gt; index = 0; index &lt; source.length(); ++index) {&lt;br /&gt;            &lt;font color='blue'&gt;char&lt;/font&gt; sourceCh = source.charAt(index);&lt;br /&gt;            &lt;font color='blue'&gt;if&lt;/font&gt;(Character.isISOControl(sourceCh))&lt;br /&gt;                xmldatasb.append(entityReference(sourceCh));&lt;br /&gt;            &lt;font color='blue'&gt;else&lt;/font&gt;&lt;br /&gt;                xmldatasb.append(sourceCh);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;font color='blue'&gt;if&lt;/font&gt;(endTag != null) xmldatasb.append(endTag);&lt;br /&gt;    &lt;font color='blue'&gt;return&lt;/font&gt; xmldatasb.&lt;font color='blue'&gt;toString&lt;/font&gt;();&lt;br /&gt;}&lt;br /&gt;   &lt;br /&gt;&lt;font color='#777777'&gt;/**&lt;br /&gt;  * Get the entity reference for the character.&lt;br /&gt;  * @param sourceCh character whose entity reference is needed.&lt;br /&gt;  * @return Entity Reference &amp;#integer;, where integer corresponds to&lt;br /&gt;  * to the number that represents sourceCh.&lt;br /&gt;  */&lt;/font&gt;&lt;br /&gt;&lt;font color='blue'&gt;public&lt;/font&gt; &lt;font color='blue'&gt;static&lt;/font&gt; String entityReference(&lt;font color='blue'&gt;char&lt;/font&gt; sourceCh) {&lt;br /&gt;    &lt;font color='blue'&gt;return&lt;/font&gt; &lt;font color='brown'&gt;"&amp;#"&lt;/font&gt; + (&lt;font color='blue'&gt;int&lt;/font&gt;)sourceCh + &lt;font color='brown'&gt;";"&lt;/font&gt; ;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The few lines of code was worth a lot to my application. All it does it when it sees the iso control characters (0 to 31) it will be replaced by entity references (&amp;amp;#integervalue;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-112989864418918343?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/112989864418918343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=112989864418918343' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112989864418918343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112989864418918343'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/10/handling-control-characters-in-xml.html' title='Handling Control Characters in XML'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-112833698085134526</id><published>2005-10-03T03:53:00.000-07:00</published><updated>2005-10-03T03:56:20.860-07:00</updated><title type='text'>Using kjParsing module.</title><content type='html'>This Sunday I came across the kjParsing module, "A parser generator written in Python for Python". It is good for writing experimental translators, code generators, interpreters, or compilers. I wanted to work with it and get atleast a simple application built on it. By end of night, yep I got my "&lt;i&gt;Simple Calculator Program&lt;/i&gt;" working :). I tried to get the Calculator program, as I get a chance to playaround defining different rules for the grammar which are very simple. Here is the &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/kjcalc/calc.py.txt" title="calc.py"&gt;Source&lt;/a&gt;. You can download the complete source &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/kjcalc.zip" title="kjcalc.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-112833698085134526?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/112833698085134526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=112833698085134526' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112833698085134526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112833698085134526'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/10/using-kjparsing-module.html' title='Using kjParsing module.'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-112590213729163820</id><published>2005-09-04T23:32:00.000-07:00</published><updated>2005-09-05T02:19:01.386-07:00</updated><title type='text'>TextMarkup</title><content type='html'>I was looking for some tool that would convert some kind of text markup to html. As I feel typing html is really boring when the level of tags are deep and you are left with job of closing all the tags properly. I was not using any fancy editor nor I like to use on the machine that is considered too slow for the day [I have one :(]. This led me to come up with &lt;a href="http://blogs.applibase.net/prasad/downloads/python/TextMarkup/doc/textmarkup.html" title="TextMarkup"&gt;TextMarkup&lt;/a&gt;, some markup rules that would help to type less html and take care of closing tags properly or atleast warn me when some tags are not closed properly. Visit &lt;a href="http://blogs.applibase.net/prasad/downloads/python/TextMarkup/doc/textmarkup.html" title="TextMarkup"&gt;TextMarkup&lt;/a&gt; to know more. Download &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/TextMarkup.zip" title="TextMarkup.zip"&gt;TextMarkup.zip&lt;/a&gt;, to get conversion of markup file to html. The markup rules can be used for xml files also. Get the vim syntax plugin for textmarkup files &lt;a href="http://www.geocities.com/prasad20002005/downloads/tmkplugin.zip" title="Vim Plugin"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-112590213729163820?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/112590213729163820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=112590213729163820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112590213729163820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112590213729163820'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/09/textmarkup.html' title='TextMarkup'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-112106426389966398</id><published>2005-07-10T23:43:00.000-07:00</published><updated>2005-07-10T23:47:25.950-07:00</updated><title type='text'>Todo WebApplication</title><content type='html'>Working with VTL (&lt;a href="http://jakarta.apache.org/velocity/"&gt;Velocity&lt;/a&gt; Template Language) was interesting. I have designed a small web application called 'todo'. This will allow you to put up task todo and also it will allow you to delete the task that are completed. This application can also work without using velocity.                                                                                                              &lt;br /&gt;&lt;br /&gt;What are the features?&lt;ul&gt;&lt;li&gt;It is a simple web application that uses XMLHttpRequest to talk with the server.&lt;/li&gt;&lt;li&gt;You can configure the application to use either HttpServlet or VelocityServlet just by changing the web.xml files. &lt;/li&gt;&lt;li&gt;You can keep track of you task through web interface.&lt;/li&gt;&lt;/ul&gt;You can get the complete source &lt;a href="http://blogs.applibase.net/prasad/downloads/todo.zip" title="todo.zip"&gt;here&lt;/a&gt;. You can get only the war file &lt;a href="http://blogs.applibase.net/prasad/downloads/todo.war.zip" title="todo.war.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;Brief README follows, you can see the complete README file in &lt;a href="http://blogs.applibase.net/prasad/downloads/todo.zip" title="todo.zip"&gt;sourcezipfile.&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Put the todo.war file into Tomcat's webapp directory.&lt;/li&gt;&lt;li&gt;Start tomcat. Tomcat will unpack the war file into the directory (todo).&lt;/li&gt;&lt;li&gt;By default the web.xml file in todo/WEB-INF will use the servlets present in  the package pra.code.todo.servlets.&lt;/li&gt;&lt;li&gt;You can make the application to use the servlets present in the package pra.code.todo.velocity, by replacing the web.xml with velocity.web.xml under the name web.xml.&lt;/li&gt;&lt;li&gt;You may have to restart Tomcat.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-112106426389966398?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/112106426389966398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=112106426389966398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112106426389966398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112106426389966398'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/07/todo-webapplication.html' title='Todo WebApplication'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-112020438040186240</id><published>2005-07-01T00:52:00.000-07:00</published><updated>2005-07-04T00:02:43.720-07:00</updated><title type='text'>XMLMapper Utility</title><content type='html'>The basic purpose of XMLMapper utility is to enable working with xml files easily using Java's lists and maps. XMLMapper will parse the xml file and creates XMLElement (root) that will contain XMLElements (children) and attributes. The xmlfile is parsed using SAXParser. Using the XMLMapper, I have written few applications like RSSFeedParser and XMLCompare which will show the usage of the utility. You can download the complete source from &lt;a href="http://www.geocities.com/prasad20002005/downloads/XMLMapper.zip" title="XMLMapper.zip"&gt;here&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;[&lt;b&gt;UPDATE&lt;/b&gt;:  Using XMLMapper wrote a application &lt;b&gt;&lt;i&gt;AntReportDiff&lt;/i&gt;&lt;/b&gt; that will compare the xml report files generated for testsuite when ant is used with juint. You can download it &lt;a href="http://www.geocities.com/prasad20002005/downloads/AntReportDiff.zip" title="AntReportDiff.zip"&gt;here&lt;/a&gt;.To know more about the application please go through README file in it.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-112020438040186240?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/112020438040186240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=112020438040186240' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112020438040186240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/112020438040186240'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/07/xmlmapper-utility.html' title='XMLMapper Utility'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111700089664252806</id><published>2005-05-24T23:00:00.000-07:00</published><updated>2005-05-30T00:56:30.590-07:00</updated><title type='text'>Put your data inside column</title><content type='html'>I came across a problem where I had to send across data in neatly formatted column (only text). I designed a small python script &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/column.py.txt" title="column.py.txt"&gt;column.py&lt;/a&gt; that lets me put data in column with wordwrap and allows customization of column border.&lt;br /&gt;&lt;pre&gt;COLUMNS IN VERTICAL DISPLAY&lt;br /&gt;+------------------+&lt;br /&gt;|*This.is.test.data|&lt;br /&gt;+------------------+&lt;br /&gt;+------------------+&lt;br /&gt;|*This.is.test.....|&lt;br /&gt;|datas.............|&lt;br /&gt;+------------------+&lt;br /&gt;COLUMNS IN HORIZONTAL DISPLAY&lt;br /&gt;+------------------++------------------+&lt;br /&gt;|*This.is.test.data||*This.is.test.....|&lt;br /&gt;|..................||datas.............|&lt;br /&gt;+------------------++------------------+&lt;br /&gt;&lt;/pre&gt;[&lt;b&gt;UPDATE&lt;/b&gt;: I implemented &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/report/report.py.txt" title="report.py.txt"&gt;report.py&lt;/a&gt; using &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/column.py.txt" title="column.py.txt" &gt;column.py&lt;/a&gt;, which will generate formatted work report. The input for report.py is &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/report/datafile.txt"&gt;datafile&lt;/a&gt;. See &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/report/report.txt"&gt;output&lt;/a&gt;.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111700089664252806?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111700089664252806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111700089664252806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111700089664252806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111700089664252806'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/05/put-your-data-inside-column.html' title='Put your data inside column'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111631627631614854</id><published>2005-05-17T00:49:00.000-07:00</published><updated>2005-05-17T00:51:16.320-07:00</updated><title type='text'>del.icio.us "tag rename/delete" script</title><content type='html'>In &lt;a href="http://del.icio.us"&gt;del.icio.us&lt;/a&gt; to rename a tag or delete it you have to go to your settings page. The &lt;a href="http://greasemonkey.mozdev.org/"&gt;GreaseMonkey&lt;/a&gt; userscript &lt;a href="http://www.geocities.com/prasad20002005/downloads/tagrendel.user.js" title="tagrendel.user.js"&gt;tag rename/delete user script&lt;/a&gt; allows you to rename or delete the tag without moving to the settings page.&lt;br /&gt;When &lt;a href="http://www.geocities.com/prasad20002005/downloads/tagrendel.user.js" title="tagrendel.user.js"&gt;this&lt;/a&gt; userscript is used. After every tag, you get two links: &lt;span style="color:#0000AA;text-decoration:underline;cursor:pointer;" title="rename tag"&gt;&amp;#171;&lt;/span&gt;   that allows you to rename the tag and &lt;span style="color:#0000AA;text-decoration:underline;cursor:pointer;" title="delete tag"&gt;x&lt;/span&gt; that allows you to delete the tag.&lt;br /&gt;&lt;br /&gt;Snapshot of userscript at work:&lt;br /&gt;&lt;img src="http://www.geocities.com/prasad20002005/downloads/tagrendel.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111631627631614854?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111631627631614854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111631627631614854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111631627631614854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111631627631614854'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/05/delicious-tag-renamedelete-script.html' title='del.icio.us &quot;tag rename/delete&quot; script'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111572075718767689</id><published>2005-05-10T03:22:00.000-07:00</published><updated>2006-11-23T18:02:59.693-08:00</updated><title type='text'>Colorizer in Javascript</title><content type='html'>I wrote a simple &lt;a href="http://www.geocities.com/prasad20002005/downloads/jscolorizer/jscolorizer.html" title="Colorizer"&gt;colorizer&lt;/a&gt; using javascript which helps you to get the colorized source code (in HTML). The language supported are: java, c, c++, c# and javascript. Click &lt;a href="http://www.geocities.com/prasad20002005/downloads/jscolorizer/jscolorizer.html" title="Colorizer Online"&gt;here&lt;/a&gt; for online access to the page. You can get the source files from &lt;a href="http://www.geocities.com/prasad20002005/downloads/jscolorizer.zip" title="jscolorizer.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111572075718767689?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111572075718767689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111572075718767689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111572075718767689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111572075718767689'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/05/colorizer-in-javascript.html' title='Colorizer in Javascript'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111450993207341198</id><published>2005-04-26T03:01:00.000-07:00</published><updated>2005-04-26T03:05:32.073-07:00</updated><title type='text'>XML and RSS0.92 Parser</title><content type='html'>&lt;div style="text-align: justify;"&gt;Wrote a basic xmlparser module in python which can parse the xml file and returns UserDict. Using xmlparser module I implemented parsefeed module which can now parse the RSS 0.92 xml file and return UserDict which can be handled easily. You can download the modules &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/pyxml.zip" title="pyxml.zip"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111450993207341198?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111450993207341198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111450993207341198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111450993207341198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111450993207341198'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/xml-and-rss092-parser.html' title='XML and RSS0.92 Parser'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111380769664977611</id><published>2005-04-17T23:47:00.000-07:00</published><updated>2005-04-18T00:01:36.650-07:00</updated><title type='text'>Python implementation of "tail -f"</title><content type='html'>I wrote a small python script that will show the behavior of UNIX/LINUX "tail -f" command. The python script may come handy for windows users. Click &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/tailf.zip"&gt; tailf.zip &lt;/a&gt; to get the source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111380769664977611?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111380769664977611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111380769664977611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111380769664977611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111380769664977611'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/python-implementation-of-tail-f.html' title='Python implementation of &quot;tail -f&quot;'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111357850716945111</id><published>2005-04-15T08:19:00.000-07:00</published><updated>2005-04-15T08:28:40.163-07:00</updated><title type='text'>Javascript - tutorial</title><content type='html'>As a basic introduction to javascript, I have designed the following applications:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Introduction&lt;/b&gt; - Do simple mathematical calculation.&lt;/li&gt;&lt;li&gt;&lt;b&gt;DataStructures&lt;/b&gt; -  Understand using Array and Associative Array.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Calculator&lt;/b&gt; - Basic calculator application&lt;/li&gt;&lt;li&gt;&lt;b&gt;Autohint&lt;/b&gt; - A text box that will suggest the available options, some thing simlar to Google Suggest TextBox&lt;/li&gt;&lt;li&gt;&lt;b&gt;XHR&lt;/b&gt; - Explains using XMLHttpRequest , fetches tags of delicious user using delicious api, once you enter the delicious user name and password.&lt;/li&gt;&lt;li&gt;&lt;b&gt;XHR integrated with Autohint text box&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;You can download all the files &lt;a href="http://www.geocities.com/prasad20002005/downloads/jstalk.zip"&gt;here&lt;/a&gt;.Start page is &lt;b&gt;login.html&lt;/b&gt;. When username is prompted at login, use one of the following: admin/prasad/hint/xhr/monkey. &lt;br /&gt;&lt;i&gt;Note: Most of the script working is specific to firefox/mozilla/netspace.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111357850716945111?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111357850716945111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111357850716945111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111357850716945111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111357850716945111'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/javascript-tutorial.html' title='Javascript - tutorial'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111323316893928529</id><published>2005-04-11T08:20:00.000-07:00</published><updated>2005-04-11T08:26:08.940-07:00</updated><title type='text'>greasemonkey - feedlink with popup</title><content type='html'>&lt;div style="text-align: justify;"&gt;Today, I enhanced the functionality of feedlink. Here is the &lt;a href="http://www.geocities.com/prasad20002005/downloads/feedlink/feedlinkv1.1.user.js"&gt;user script&lt;/a&gt;. Now feedlink userscript not only shows the feeds available as images, but gets you a popup menu when you click on the image and you can subscribe to aggregators like bloglines or newsgator. You can customize the popup menu, by setting proper values in the user script for:&lt;/div&gt; &lt;ul&gt;   &lt;li&gt;&lt;b&gt;subscriptions&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;MENUWIDTH&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;MENUHEIGHT&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; Here is a small snapshot showing the popup menu. &lt;ul&gt;   &lt;/ul&gt; &lt;img src="http://www.geocities.com/prasad20002005/downloads/feedlink/images/feedlinkv1.1.gif" /&gt;&lt;br /&gt;You can get the zip file &lt;a href="http://www.geocities.com/prasad20002005/downloads/feedlink/feedlinkv1.1.zip"&gt;here&lt;/a&gt; that contains the user script and many more.&lt;br /&gt;If you need the version without popup or for installation help, checkout &lt;a href="http://prasadblog.blogspot.com/2005/04/greasemonkey-autodiscover-site-feed.html"&gt;this entry&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111323316893928529?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111323316893928529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111323316893928529' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111323316893928529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111323316893928529'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/greasemonkey-feedlink-with-popup.html' title='greasemonkey - feedlink with popup'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111295164588060081</id><published>2005-04-08T02:12:00.000-07:00</published><updated>2005-04-08T03:06:52.433-07:00</updated><title type='text'>greasemonkey - autodiscover site feed</title><content type='html'>FeedLink the greasemonkey plugin will enable the autodiscovery of site feeds and display them as anchor images. Here is the &lt;a href="http://www.geocities.com/prasad20002005/downloads/feedlink/feedlink.user.js"&gt;user script&lt;/a&gt; that you can use.&lt;br /&gt;Following are the steps to install the user script:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you haven't installed &lt;a href="http://greasemonkey.mozdev.org/"&gt;greasemonkey&lt;/a&gt; Firefox extension. Then get it installed.&lt;/li&gt;&lt;li&gt;Open this &lt;a href="http://www.geocities.com/prasad20002005/downloads/feedlink/feedlink.user.js"&gt;user script&lt;/a&gt; in Firefox.&lt;/li&gt;&lt;li&gt;From "Tools" menu select "Install User Script..." and confirm all the prompt.&lt;/li&gt;&lt;li&gt;To configure the script, select "Manage User Scripts..." from "Tools" menu. &lt;/li&gt;&lt;li&gt;By default, User script is added for "http://www.livejournal.com/users/*" (eg:http://www.livejournal.com/users/someone) and "http://*.blogspot.com*"(eg:http://someone/blogspot.com/).&lt;/li&gt;&lt;/ol&gt;You can get the zip file &lt;a href="http://www.geocities.com/prasad20002005/downloads/feedlink/feedlink.zip"&gt;here&lt;/a&gt; that contains the user script and many more.When site feeds are discovered it will be displayed as anchor images: (I am showing only images here)&lt;br /&gt;&lt;img src="http://www.geocities.com/prasad20002005/downloads/feedlink/images/rss.gif" hspace="2" align="right"/&gt;&lt;img src="http://www.geocities.com/prasad20002005/downloads/feedlink/images/xml.gif" hspace="2" align="right"/&gt;&lt;img src="http://www.geocities.com/prasad20002005/downloads/feedlink/images/atom.gif" hspace="2" align="right"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111295164588060081?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111295164588060081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111295164588060081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111295164588060081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111295164588060081'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/greasemonkey-autodiscover-site-feed.html' title='greasemonkey - autodiscover site feed'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111268855674921967</id><published>2005-04-05T01:07:00.000-07:00</published><updated>2005-04-05T01:09:16.750-07:00</updated><title type='text'>Writing Python Module in C</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have designed a module for python with the basic intension of describing how to write modules in c, install and use it. In the module (c program) that I have designed, a prompt (input to c program) will be displayed on the terminal, the user password will be read from the terminal and it will be returned as the python string object to python interpreter. You can download the module &lt;a href="http://www.geocities.com/prasad20002005/downloads/python/password.zip" title="password.zip"&gt;here.&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111268855674921967?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111268855674921967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111268855674921967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111268855674921967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111268855674921967'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/writing-python-module-in-c.html' title='Writing Python Module in C'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111234903457214855</id><published>2005-04-01T01:36:00.000-08:00</published><updated>2005-04-01T05:59:18.686-08:00</updated><title type='text'>Basic Python Calculator - pycalc</title><content type='html'>&lt;div style="text-align: justify;"&gt;Inspired by the first version of my calculator (in c#), I went on with the same application in python but using slightly different logic during the expression evaluation. Well, it was really challenging to sit overnight to get the code done. Get the code &lt;a href="http://www.geocities.com/prasad20002005/downloads/pycalc.zip"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;span id="pycalalgvid" style="text-decoration: underline; display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('pycalalghid').style.display='inline'; document.getElementById('pycalalgsid').style.display='block';" &gt;&lt;b&gt;View Algorithm&lt;/b&gt;&lt;/span&gt;&lt;span id="pycalalghid" style="text-decoration: underline; display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('pycalalgvid').style.display='inline'; document.getElementById('pycalalgsid').style.display='none';" &gt;&lt;b&gt;Hide Algorithm&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="pycalalgsid" style="display: none;"&gt;&lt;pre&gt;Here is the simple Algorithm that I have used:&lt;br /&gt;1. Build a list of tokens from input expression.&lt;br /&gt;2. Evaluate all the subexpression in the list and replace it with the result.&lt;br /&gt;3. Now, evaluate the right hand side of assignment operator (if present) &lt;br /&gt;   and replace it with result.&lt;br /&gt;4. Finally, evaluate the remaining expression in the list.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span id="pycaloutvid" style="text-decoration: underline; display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('pycalouthid').style.display='inline'; document.getElementById('pycaloutsid').style.display='block';" &gt;&lt;b&gt;View Output&lt;/b&gt;&lt;/span&gt;&lt;span id="pycalouthid" style="text-decoration: underline; display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('pycaloutvid').style.display='inline'; document.getElementById('pycaloutsid').style.display='none';" &gt;&lt;b&gt;Hide Output&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="pycaloutsid" style="display: none;"&gt;&lt;pre&gt;The Calculator output:&lt;br /&gt;[prasad@prasad pycalc]$ ./pycalc.py&lt;br /&gt;Basic Calculator Application, from Prasad.A&lt;br /&gt;Type 'quit' to terminate&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; pi=22/7&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; rad=15&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; area=pi*(rad*rad)&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; area&lt;br /&gt;707.142857143&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; quit&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111234903457214855?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111234903457214855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111234903457214855' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111234903457214855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111234903457214855'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/04/basic-python-calculator-pycalc.html' title='Basic Python Calculator - pycalc'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111225666263361489</id><published>2005-03-30T23:43:00.000-08:00</published><updated>2005-03-31T01:29:33.576-08:00</updated><title type='text'>Basic Calculator Application</title><content type='html'>&lt;div style="text-align: justify;"&gt;With the intension of building simple parser I made a move to get calculator application that supports variables and dynamic value fetch etc. Well I am falling short of text to put into here to describe my excitement. I am putting below the source code so that you can try it out. The application is written in C#.&lt;br /&gt;Feedback and Suggestions are most welcome (Use comments to express them). &lt;a href="http://www.geocities.com/prasad20002005/downloads/ConsoleCalculator.zip"&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;/div&gt; &lt;span id="calvid" style="text-decoration: underline; display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('calhid').style.display='inline'; document.getElementById('calsid').style.display='block';" &gt;&lt;br /&gt;&lt;b&gt;View Calculator Code&lt;/b&gt;&lt;/span&gt;&lt;span id="calhid" style="text-decoration: underline; display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('calvid').style.display='inline'; document.getElementById('calsid').style.display='none';" &gt;&lt;br /&gt;&lt;b&gt;Hide Calculator Code&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="calsid" style="display: none;"&gt;&lt;pre&gt;&lt;span style="color:#777777;"&gt;/**&lt;br /&gt;* Basic Calculator Application&lt;br /&gt;* Author: Prasad.A&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; ConsoleCalculator {&lt;br /&gt; &lt;span style="color:green;"&gt;/* Basic Calculator Class */&lt;/span&gt;&lt;br /&gt; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; BaseCalculator {&lt;br /&gt;   &lt;span style="color:green;"&gt;/* Dictionary to store variables and its values */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; IDictionary _dictionary = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color:green;"&gt;/* Stack to carry out the operations */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Stack operationStack = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Default Constructor */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;public&lt;/span&gt; BaseCalculator() {&lt;br /&gt;     &lt;span style="color:blue;"&gt;this&lt;/span&gt;._dictionary = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;     Console.WriteLine(&lt;span style="color:brown;"&gt;"Basic Calculator Application"&lt;/span&gt;);&lt;br /&gt;     Console.WriteLine(&lt;span style="color:brown;"&gt;"Type 'quit' to terminate."&lt;/span&gt;);&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Get the substring of the string */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; String GetSubString(String expression,&lt;span style="color:blue;"&gt;int&lt;/span&gt; start,&lt;span style="color:blue;"&gt;int&lt;/span&gt; end) {&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; expression.Substring(start,(end-start));&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Push element on to operation stack */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Push(Object element) {&lt;br /&gt;     operationStack.Push(element);&lt;br /&gt;   }       &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Pop element from the operation stack */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object Pop() {&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operationStack.Count &amp;gt; 0) &lt;span style="color:blue;"&gt;return&lt;/span&gt; operationStack.Pop();&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Peek element from the operation stack */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object Peek() {&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operationStack.Count &amp;gt; 0) &lt;span style="color:blue;"&gt;return&lt;/span&gt; operationStack.Peek();&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;   }         &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Evaluate the expression within '(' and ')' */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; EvaluateSubExpression() {     &lt;br /&gt;     Object element = Pop(); &lt;span style="color:green;"&gt;/* This is just behind ')' */&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:blue;"&gt;while&lt;/span&gt;(element != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp; element.ToString().CompareTo(&lt;span style="color:brown;"&gt;"("&lt;/span&gt;) != 0) {&lt;br /&gt;       &lt;span style="color:green;"&gt;/* Get result from binary evaluation */&lt;/span&gt;&lt;br /&gt;       Object binaryEvaluation = BinaryEvaluate(element);&lt;br /&gt;       element = Pop(); &lt;span style="color:green;"&gt;/* This will be the operator for next iteration */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:green;"&gt;/* Did we get start of sub expression */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;if&lt;/span&gt;(element.ToString().CompareTo(&lt;span style="color:brown;"&gt;"("&lt;/span&gt;)==0) {&lt;br /&gt;         &lt;span style="color:green;"&gt;/* Push the result and break out of loop */&lt;/span&gt;&lt;br /&gt;         Push(binaryEvaluation);&lt;br /&gt;         &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* Push back the operator that was popped */&lt;/span&gt;&lt;br /&gt;       Push(element);&lt;br /&gt;       &lt;span style="color:green;"&gt;/* Now one of the operand is the result itself */&lt;/span&gt;&lt;br /&gt;       element = binaryEvaluation;&lt;br /&gt;     }&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Evaluate the expression */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object EvaluateExpression() {&lt;br /&gt;     Object result = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;     Object element = Pop(); &lt;span style="color:green;"&gt;/* This is operand two */&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:blue;"&gt;while&lt;/span&gt;(element!=&lt;span style="color:blue;"&gt;null&lt;/span&gt;) {&lt;br /&gt;       &lt;span style="color:green;"&gt;/* Get result from binary evaluation */&lt;/span&gt;&lt;br /&gt;       result = BinaryEvaluate(element);&lt;br /&gt;       &lt;span style="color:green;"&gt;/* If we have reached end of stack, break */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;if&lt;/span&gt;(Peek() == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;       &lt;span style="color:green;"&gt;/* Opearand two is result itself */&lt;/span&gt;&lt;br /&gt;       element = result;&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; result;&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Evaluate the binary expression, the input parameter is operand2,&lt;br /&gt;    * Get the operator element and operand1 from stack. If operator element&lt;br /&gt;    * or operand1 is not present do a unary operation else if operator element&lt;br /&gt;    * is = then do a assignment operation else do a binary evaluation.&lt;br /&gt;    */&lt;/span&gt; &lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object BinaryEvaluate(Object operandTwo) {&lt;br /&gt;     Object evalBinary = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Object();&lt;br /&gt;     Object operatorElement = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;     Object operandOne = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;           &lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(Peek() != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;&lt;br /&gt;        Peek().ToString().CompareTo(&lt;span style="color:brown;"&gt;"("&lt;/span&gt;)!=0)&lt;br /&gt;       operatorElement = Pop();        &lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operatorElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;&lt;br /&gt;        Peek() != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;&lt;br /&gt;        Peek().ToString().CompareTo(&lt;span style="color:brown;"&gt;"("&lt;/span&gt;)!=0)&lt;br /&gt;       operandOne = Pop();        &lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operatorElement!=&lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;&lt;br /&gt;        operatorElement.ToString().CompareTo(&lt;span style="color:brown;"&gt;"="&lt;/span&gt;)!=0) {&lt;br /&gt;       operandTwo = GetObjectValue(operandTwo);&lt;br /&gt;       operandOne = GetObjectValue(operandOne);&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operatorElement==&lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;       evalBinary = GetObjectValue(operandTwo);&lt;br /&gt;     &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operandOne==&lt;span style="color:blue;"&gt;null&lt;/span&gt;) {&lt;br /&gt;       &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operatorElement.ToString().CompareTo(&lt;span style="color:brown;"&gt;"+"&lt;/span&gt;)==0)&lt;br /&gt;         evalBinary = (+1.0)*&lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandTwo.ToString());&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(operatorElement.ToString().CompareTo(&lt;span style="color:brown;"&gt;"-"&lt;/span&gt;)==0)&lt;br /&gt;         evalBinary = (-1.0)*&lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandOne.ToString());&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;else&lt;/span&gt; {&lt;br /&gt;       &lt;span style="color:blue;"&gt;switch&lt;/span&gt;(operatorElement.ToString()) {&lt;br /&gt;         &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:brown;"&gt;"+"&lt;/span&gt;:&lt;br /&gt;           evalBinary = &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandOne.ToString())+&lt;br /&gt;           &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandTwo.ToString()); &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:brown;"&gt;"-"&lt;/span&gt;:&lt;br /&gt;           evalBinary = &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandOne.ToString())-&lt;br /&gt;           &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandTwo.ToString()); &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:brown;"&gt;"*"&lt;/span&gt;:&lt;br /&gt;           evalBinary = &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandOne.ToString())*&lt;br /&gt;           &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandTwo.ToString()); &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:brown;"&gt;"/"&lt;/span&gt;:&lt;br /&gt;           evalBinary = &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandOne.ToString())/&lt;br /&gt;           &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(operandTwo.ToString()); &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:brown;"&gt;"="&lt;/span&gt;:&lt;br /&gt;           SetIdValue(operandOne.ToString(),operandTwo.ToString());&lt;br /&gt;           evalBinary = &lt;span style="color:blue;"&gt;null&lt;/span&gt;; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; evalBinary;&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Parse the input string and evaluate as and when required */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object parse(String expression) {&lt;br /&gt;     operationStack = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Stack();&lt;br /&gt;     &lt;span style="color:blue;"&gt;int&lt;/span&gt; parsePointer = 0; &lt;span style="color:green;"&gt;/* Points to beginning of token */&lt;/span&gt;     &lt;br /&gt;     &lt;span style="color:blue;"&gt;bool&lt;/span&gt; inIdentifier = &lt;span style="color:blue;"&gt;false&lt;/span&gt;,inNumber = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;for&lt;/span&gt;(&lt;span style="color:blue;"&gt;int&lt;/span&gt; index=0; index &amp;lt; expression.Length; ++index) {&lt;br /&gt;       &lt;span style="color:blue;"&gt;char&lt;/span&gt; ch=expression[index];&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got a identifier or number delimiter */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;if&lt;/span&gt;(ch == ' ' || ch == '\t') {&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inIdentifier) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;           parsePointer = index+1;&lt;br /&gt;           inIdentifier = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inNumber) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;           parsePointer = index+1;&lt;br /&gt;           inNumber = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got start of sub expression */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(ch=='(') {&lt;br /&gt;         Push(ch.ToString());&lt;br /&gt;         parsePointer = index+1;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got end of sub expression */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(ch == ')') {&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inIdentifier) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;           parsePointer = index+1;&lt;br /&gt;           inIdentifier = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inNumber) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;           parsePointer = index+1;&lt;br /&gt;           inNumber = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;         EvaluateSubExpression();         &lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got assignment operator */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(ch=='=') {&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inIdentifier) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));           &lt;br /&gt;           inIdentifier = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;         Push(ch.ToString());&lt;br /&gt;         parsePointer = index+1;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got arithmetic operator */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(isOperator(ch)) {&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inIdentifier) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));           &lt;br /&gt;           inIdentifier = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inNumber) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;           inNumber = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;         Push(ch.ToString());         &lt;br /&gt;         parsePointer = index+1;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got a letter and we are not in identifier */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(Char.IsLetter(ch) &amp;amp;&amp; !inIdentifier) {&lt;br /&gt;         inIdentifier = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got a digit and we are not in number */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(Char.IsDigit(ch) &amp;amp;&amp; !inNumber) {&lt;br /&gt;         inNumber = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We got a decimal point */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(ch=='.') {&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(index &amp;lt; expression.Length-1 &amp;amp;&amp;&lt;br /&gt;            !Char.IsDigit(expression[index+1])) {&lt;br /&gt;           Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;           parsePointer = index+1;&lt;br /&gt;           inNumber = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We are in identifier and we got a identifier delimiter */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inIdentifier &amp;amp;&amp; isIdDelimiter(ch)) {&lt;br /&gt;         Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;         parsePointer = index+1;&lt;br /&gt;         inIdentifier = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:green;"&gt;/* We are in number and we got a number delimiter */&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inNumber &amp;amp;&amp; isNumberDelimiter(ch)) {&lt;br /&gt;         Push(GetSubString(expression,parsePointer,index));&lt;br /&gt;         parsePointer = index+1;&lt;br /&gt;         inNumber = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:green;"&gt;/* Are we still in identifier */&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inIdentifier)&lt;br /&gt;       Push(GetSubString(expression,parsePointer,expression.Length));&lt;br /&gt;     &lt;span style="color:green;"&gt;/* Are we still in number */&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(inNumber)&lt;br /&gt;       Push(GetSubString(expression,parsePointer,expression.Length));&lt;br /&gt;     &lt;span style="color:green;"&gt;/* Let us return the result of expression */&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; EvaluateExpression();&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Decide on the identifier delimiter */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; isIdDelimiter(&lt;span style="color:blue;"&gt;char&lt;/span&gt; delim) {&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(delim=='.'||delim=='('||delim==')') &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; isOperator(delim);&lt;br /&gt;   }&lt;br /&gt;   &lt;span style="color:green;"&gt;/* Decide on the nubmer delimiter */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; isNumberDelimiter(&lt;span style="color:blue;"&gt;char&lt;/span&gt; delim) {&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(delim=='('||delim==')') &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; Char.IsLetter(delim);&lt;br /&gt;   }&lt;br /&gt;   &lt;span style="color:green;"&gt;/* Decide on the operator */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; isOperator(&lt;span style="color:blue;"&gt;char&lt;/span&gt; delim) {&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(delim=='+'||delim=='-'||delim=='*'||delim=='/'||delim=='=')&lt;br /&gt;       &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Get the value of input object&lt;br /&gt;    * return either number or variable value)&lt;br /&gt;    */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object GetObjectValue(Object inputObject) {&lt;br /&gt;     Object valueObject = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;try&lt;/span&gt; {&lt;br /&gt;       valueObject = GetNumberObject(inputObject.ToString());&lt;br /&gt;     } &lt;span style="color:blue;"&gt;catch&lt;/span&gt;(FormatException fe) {&lt;br /&gt;       valueObject = GetIdValue(inputObject.ToString());&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; valueObject;&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Return the numeric representation of input string */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object GetNumberObject(String inputString) {&lt;br /&gt;     Object numberObject = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;try&lt;/span&gt; {&lt;br /&gt;       numberObject = &lt;span style="color:blue;"&gt;int&lt;/span&gt;.Parse(inputString);&lt;br /&gt;     } &lt;span style="color:blue;"&gt;catch&lt;/span&gt;(FormatException fei) {&lt;br /&gt;       &lt;span style="color:blue;"&gt;try&lt;/span&gt; {&lt;br /&gt;         numberObject = &lt;span style="color:blue;"&gt;double&lt;/span&gt;.Parse(inputString);&lt;br /&gt;       } &lt;span style="color:blue;"&gt;catch&lt;/span&gt;(FormatException fed) {&lt;br /&gt;         &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; FormatException(&lt;span style="color:brown;"&gt;"Error! Illegal number format"&lt;/span&gt;);&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;return&lt;/span&gt; numberObject;&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Set the variable and its value in _dictionary */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetIdValue(String id,String val) {&lt;br /&gt;     Object number = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color:blue;"&gt;try&lt;/span&gt; {&lt;br /&gt;       number = GetNumberObject(val);&lt;br /&gt;     } &lt;span style="color:blue;"&gt;catch&lt;/span&gt;(FormatException fe) {&lt;br /&gt;       number = GetIdValue(val);&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(number != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) _dictionary[id] = number.ToString();&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Get the value of the variable from _dictionary */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;private&lt;/span&gt; Object GetIdValue(String id) {&lt;br /&gt;     Object idValue = _dictionary[id];&lt;br /&gt;     &lt;span style="color:blue;"&gt;if&lt;/span&gt;(idValue != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) &lt;span style="color:blue;"&gt;return&lt;/span&gt; idValue;&lt;br /&gt;     &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; Exception(&lt;span style="color:brown;"&gt;"Error! Variable '"&lt;/span&gt;+id+&lt;span style="color:brown;"&gt;"' not yet defined"&lt;/span&gt;);&lt;br /&gt;   }   &lt;br /&gt;   &lt;span style="color:green;"&gt;/* Core function to keep the interaction alive */&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; RunCalculator() {&lt;br /&gt;     &lt;span style="color:blue;"&gt;while&lt;/span&gt;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;) {&lt;br /&gt;       Console.Write(&lt;span style="color:brown;"&gt;"&amp;gt;&amp;gt;&amp;gt; "&lt;/span&gt;);&lt;br /&gt;       String input = Console.ReadLine();&lt;br /&gt;       &lt;span style="color:blue;"&gt;if&lt;/span&gt;(input.CompareTo(&lt;span style="color:brown;"&gt;"quit"&lt;/span&gt;)==0)&lt;br /&gt;         &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;       &lt;span style="color:blue;"&gt;try&lt;/span&gt; {&lt;br /&gt;         Object result = parse(input);&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt;(result != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;           Console.WriteLine(result.ToString());&lt;br /&gt;       } &lt;span style="color:blue;"&gt;catch&lt;/span&gt;(Exception ex) {&lt;br /&gt;         Console.WriteLine(ex.Message);&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt; } &lt;br /&gt; &lt;span style="color:green;"&gt;/* A user class that contains the main function&lt;br /&gt;  * To give life to calculator */&lt;/span&gt;&lt;br /&gt; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; UserCalculator {&lt;br /&gt;   &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) {&lt;br /&gt;     BaseCalculator bc = &lt;span style="color:blue;"&gt;new&lt;/span&gt; BaseCalculator();&lt;br /&gt;     bc.RunCalculator();&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;span id="caloutvid" style="text-decoration: underline; display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('calouthid').style.display='inline'; document.getElementById('caloutsid').style.display='block';" &gt;&lt;b&gt;View Calculator Output&lt;/b&gt;&lt;/span&gt;&lt;span id="calouthid" style="text-decoration: underline; display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('caloutvid').style.display='inline'; document.getElementById('caloutsid').style.display='none';" &gt;&lt;b&gt;Hide Calculator Output&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="caloutsid" style="display: none;"&gt;&lt;pre&gt;Basic Calculator Application&lt;br /&gt;Type 'quit' to terminate.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; a=10.5&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; b&lt;br /&gt;Error! Variable 'b' not yet defined&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; b=20&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; b&lt;br /&gt;20&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; c=a+b&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; c&lt;br /&gt;30.5&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; d=10.1+(b*c)/a&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; d&lt;br /&gt;68.1952380952381&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; quit&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111225666263361489?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111225666263361489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111225666263361489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111225666263361489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111225666263361489'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/basic-calculator-application.html' title='Basic Calculator Application'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111114568625712986</id><published>2005-03-18T03:27:00.000-08:00</published><updated>2005-03-18T03:42:15.470-08:00</updated><title type='text'>WordPress filter Colorizer (PraColorizer)</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have written filter plugin for WordPress that will colorize your   java,c++,c,c# code that you will put in the post. You can download from &lt;a href="http://www.geocities.com/prasad20002005/downloads/pracolorizer.tar.gz" title="At Geocities"&gt;here&lt;/a&gt;. &lt;br /&gt;To know more about PraColorizer &lt;a href="http://blogs.applibase.net/prasad/?p=5"&gt;click here&lt;/a&gt;.&lt;br /&gt;You can also get information at &lt;a href="http://wp-plugins.net/index.php?id=191"&gt;wp-plugins.net&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111114568625712986?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111114568625712986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111114568625712986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111114568625712986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111114568625712986'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/wordpress-filter-colorizer.html' title='WordPress filter Colorizer (PraColorizer)'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111107504179863442</id><published>2005-03-17T07:53:00.000-08:00</published><updated>2005-03-17T07:57:21.800-08:00</updated><title type='text'>pracut filter at wp-plugins.net</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have updated the pracut filter for wordpress at&lt;a href="http://wp-plugins.net/index.php?id=188"&gt; wp-plugins.net&lt;/a&gt;. To know more about pracut tag see this &lt;a href="http://blogs.applibase.net/prasad/?p=3"&gt;entry&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/10123815-111107504179863442?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111107504179863442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111107504179863442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111107504179863442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111107504179863442'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/pracut-filter-at-wp-pluginsnet.html' title='pracut filter at wp-plugins.net'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111095486791422007</id><published>2005-03-15T22:14:00.000-08:00</published><updated>2005-03-15T22:58:05.723-08:00</updated><title type='text'>WordPress filter for pracut tag</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hey, I have written filter plugin for WordPress. You can download from &lt;a href="http://www.geocities.com/prasad20002005/downloads/pracut.tar.gz" title="At Geocities"&gt;here&lt;/a&gt;. To know more about pracut tag &lt;a href="http://blogs.applibase.net/prasad/?p=3"&gt;click here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111095486791422007?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111095486791422007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111095486791422007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111095486791422007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111095486791422007'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/wordpress-filter-for-pracut-tag.html' title='WordPress filter for pracut tag'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111043426607692884</id><published>2005-03-09T21:46:00.000-08:00</published><updated>2005-03-09T22:07:24.696-08:00</updated><title type='text'>Toggle Content Display</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have been using a small snippet of my html design that uses css and javascript to toggle the display of content that is under it. I use it to toggle the source code, the output, etc. I am putting the html code under the toggle below, check it out and feel free use it.&lt;/div&gt;&lt;span id="vid" style="text-decoration: underline; display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('hid').style.display='inline'; document.getElementById('sid').style.display='block';" &gt;&lt;b&gt;View Html Code&lt;/b&gt;&lt;/span&gt;&lt;span id="hid" style="text-decoration: underline; display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('vid').style.display='inline'; document.getElementById('sid').style.display='none';" &gt;&lt;b&gt;Hide Html Code&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="sid" style="display: none;"&gt;&lt;pre&gt;&amp;lt;span id="vid" &lt;br /&gt;style="text-decoration:underline;display:inline;cursor:pointer;color:blue;" &lt;br /&gt;onclick="this.style.display='none';document.getElementById('hid').style.display='inline'; &lt;br /&gt;document.getElementById('sid').style.display='block';"&amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;View Html Code&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span id="hid" style="text-decoration:underline;display:none;cursor:pointer;color:blue;" &lt;br /&gt;onclick="this.style.display='none';document.getElementById('vid').style.display='inline'; &lt;br /&gt;document.getElementById('sid').style.display='none';"&amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;Hide Html Code&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;div id="sid" style="display: none;"&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;Here goes my content[ NOTE: Please take care keep the id (vid,hid,sid) unique ]&lt;br /&gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111043426607692884?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111043426607692884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111043426607692884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111043426607692884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111043426607692884'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/toggle-content-display.html' title='Toggle Content Display'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-111037925332993234</id><published>2005-03-09T05:39:00.000-08:00</published><updated>2005-03-31T01:28:05.920-08:00</updated><title type='text'>Colorizer: For C#, Java, C, C++</title><content type='html'>&lt;style type="text/css"&gt;.body { font: 10pt Verdana, sans-serif; }.keyword { color: blue; } .comment { color: green; } .document { color: #777777; } .string { color: brown; }&lt;/style&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This Colorizer is implemented in C#. The implementation of colorizer basically started of to be a good choice to demonstrate the use of regular expression (atleast the basic) and few useful syntax the C# provides, like inside the swtich statement, the handling of dictionary. You can use this colorizer to colorize the java, c, c++ or c# code. Before I end this entry let me tell one small thing [I used the same colorizer to colorize the source shown below :)]. &lt;a href="http://www.geocities.com/prasad20002005/downloads/Colorizer.zip"&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span id="csReadlink" style="text-decoration: underline; display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('csHidelink').style.display='inline'; document.getElementById('csSource').style.display='block';" &gt;&lt;b&gt;View Colorizer.cs&lt;/b&gt;&lt;/span&gt;&lt;span id="csHidelink" style="text-decoration: underline; display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('csReadlink').style.display='inline'; document.getElementById('csSource').style.display='none';" &gt;&lt;b&gt;Hide Colorizer.cs&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="csSource" style="display: none;"&gt;&lt;pre&gt;&lt;span class="comment"&gt;// Author: Prasad.A&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System.Text.RegularExpressions;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;namespace&lt;/span&gt; CSharpUtils {&lt;br /&gt; &lt;span class="comment"&gt;// Class that describes keywords and creates a dictionary&lt;br /&gt;&lt;/span&gt;   &lt;span class="comment"&gt;// lookup depending on the language selection.&lt;br /&gt;&lt;/span&gt;   &lt;span class="keyword"&gt;class&lt;/span&gt; CKeyword {&lt;br /&gt;   &lt;span class="comment"&gt;// Dictionary to lookup the keyword.&lt;br /&gt;&lt;/span&gt;     &lt;span class="keyword"&gt;private&lt;/span&gt; IDictionary keydict = &lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Java language keywords&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;[] jkeywords = {&lt;br /&gt;    &lt;span class="string"&gt;"abstract", "default", "goto", "package", "synchronized"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"boolean", "do", "if", "private", "this"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"break", "double", "implements", "protected","throw"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"byte", "else", "import", "public", "throws"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"case", "enum", "instanceof", "return", "transient"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"catch", "extends", "int", "short", "try"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"char", "final", "interface", "static", "void"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"class", "finally", "long", "strictfp", "volatile"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"const", "float", "native", "super", "while"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"continue", "for", "new", "switch"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  };&lt;br /&gt;  &lt;span class="comment"&gt;// C# language keywords&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;[] cskeywords = {&lt;br /&gt;    &lt;span class="string"&gt;"abstract", "event", "new", "struct"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"as", "explicit", "null", "switch"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"base", "extern", "object", "this"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"bool", "false", "operator", "throw"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"break", "finally", "out", "true"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"byte", "fixed", "override", "try"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"case", "float", "params", "typeof"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"catch", "for", "private", "uint"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"char", "foreach", "protected","ulong"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"checked", "goto", "public", "unchecked"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"class", "if", "readonly", "unsafe"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"const", "implicit", "ref", "ushort"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"continue", "in", "return", "using"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"decimal", "int", "sbyte", "virtual"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"default", "interface","sealed", "volatile"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"delegate", "internal", "short", "void"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"do", "is", "sizeof", "while"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"double", "lock", "stackalloc"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"else", "long", "static"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"enum", "namespace","string"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  };&lt;br /&gt;  &lt;span class="comment"&gt;// C language keywords&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;[] ckeywords = {&lt;br /&gt;    &lt;span class="string"&gt;"auto", "double", "int", "struct"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"break", "else", "long", "switch"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"case", "enum", "register", "typedef"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"char", "extern", "return", "union"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"const", "float", "short", "unsigned"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"continue", "for", "signed", "void"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"default", "goto", "sizeof", "volatile"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"do", "if", "static", "while"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  };&lt;br /&gt;  &lt;span class="comment"&gt;// C++ language keywords&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;[] cppkeywords = {&lt;br /&gt;    &lt;span class="string"&gt;"asm", "auto", "bool", "break", "case"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"catch", "char", "class", "const", "continue"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"default", "delete", "do", "double", "else"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"enum", "explicit", "extern", "false", "float"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"for", "friend", "goto", "if", "inline"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"int", "long", "mutable", "namespace"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"new", "operator", "private", "protected", "public"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"register", "return", "short", "signed", "sizeof"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"static", "struct", "switch", "template", "this"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"throw", "true", "try", "typedef", "typeid"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"typename", "union", "unsigned", "using", "virtual"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="string"&gt;"void", "volatile", "while"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Default Language is C#&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; CKeyword() { initKeyDict(&lt;span class="string"&gt;"c#"&lt;/span&gt;); }&lt;br /&gt;  &lt;span class="comment"&gt;// Set the user specified language&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; CKeyword(&lt;span class="keyword"&gt;string&lt;/span&gt; language) { initKeyDict(language); }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Initialize the keyword lookup dictionary&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; initKeyDict(&lt;span class="keyword"&gt;string&lt;/span&gt; language) {&lt;br /&gt;    &lt;span class="keyword"&gt;string&lt;/span&gt;[] initKeywords = &lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt;(language==&lt;span class="string"&gt;"c#"&lt;/span&gt;||language==&lt;span class="keyword"&gt;null&lt;/span&gt;) initKeywords = cskeywords;&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt;(language==&lt;span class="string"&gt;"java"&lt;/span&gt;) initKeywords = jkeywords;&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt;(language==&lt;span class="string"&gt;"c"&lt;/span&gt;) initKeywords = ckeywords;&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt;(language==&lt;span class="string"&gt;"c++"&lt;/span&gt;) initKeywords = cppkeywords;&lt;br /&gt;&lt;br /&gt;    keydict = &lt;span class="keyword"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt;(&lt;span class="keyword"&gt;int&lt;/span&gt; i=0; i &amp;lt; initKeywords.Length; ++i) {&lt;br /&gt;      keydict[initKeywords[i]] = &lt;span class="string"&gt;""&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="comment"&gt;// Check whether the given word is a keyword&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;bool&lt;/span&gt; isKeyword(String word) { &lt;span class="keyword"&gt;return&lt;/span&gt; keydict.Contains(word); }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;// Class that will do the coloring of input file&lt;br /&gt;&lt;/span&gt;  &lt;span class="keyword"&gt;class&lt;/span&gt; Colorizer : CKeyword {&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;bool&lt;/span&gt; inDocumentation = &lt;span class="keyword"&gt;false&lt;/span&gt;; &lt;span class="comment"&gt;// Are we inside the documentation&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;bool&lt;/span&gt; inComment = &lt;span class="keyword"&gt;false&lt;/span&gt;; &lt;span class="comment"&gt;// Are we inside the comment&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; filename = &lt;span class="keyword"&gt;null&lt;/span&gt;; &lt;span class="comment"&gt;// File under processing&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;bool&lt;/span&gt; completeHtml = &lt;span class="keyword"&gt;false&lt;/span&gt;; &lt;span class="comment"&gt;// Should the output be complete html&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Default constructor&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; Colorizer() { }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Constructor to set the language type and output type&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; Colorizer(&lt;span class="keyword"&gt;string&lt;/span&gt; language,&lt;span class="keyword"&gt;bool&lt;/span&gt; completeHtml) : &lt;span class="keyword"&gt;base&lt;/span&gt;(language) {&lt;br /&gt;    &lt;span class="keyword"&gt;this&lt;/span&gt;.completeHtml = completeHtml;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Actual function that will colorize the input file and dumps the&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;// output to output file (if null then standard output will be used)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; colorize(&lt;span class="keyword"&gt;string&lt;/span&gt; infile,&lt;span class="keyword"&gt;string&lt;/span&gt; outfile) {&lt;br /&gt;    &lt;span class="comment"&gt;// Set the file name under process.&lt;br /&gt;&lt;/span&gt;      filename = infile;&lt;br /&gt;&lt;br /&gt;    StreamReader instream = &lt;span class="keyword"&gt;new&lt;/span&gt; StreamReader(filename);&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Set the console output to file if outfile is specified&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt;(outfile != &lt;span class="keyword"&gt;null&lt;/span&gt;) Console.SetOut(&lt;span class="keyword"&gt;new&lt;/span&gt; StreamWriter(outfile));&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// If output should be complete html put the headers&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml) writeHtmlHeaders();&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Parse each line and the process it&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt; line; (line = instream.ReadLine()) != &lt;span class="keyword"&gt;null&lt;/span&gt;; ) {&lt;br /&gt;      &lt;span class="keyword"&gt;bool&lt;/span&gt; doParse = &lt;span class="keyword"&gt;true&lt;/span&gt;;&lt;br /&gt;      &lt;span class="keyword"&gt;while&lt;/span&gt;(doParse) {&lt;br /&gt;        IDictionary dictionary = parseLine(line);&lt;br /&gt;        dictionary[&lt;span class="string"&gt;"line"&lt;/span&gt;] = line;&lt;br /&gt;        line = processResult(dictionary);&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt;(line == &lt;span class="keyword"&gt;null&lt;/span&gt;) doParse = &lt;span class="keyword"&gt;false&lt;/span&gt;;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="comment"&gt;// If output is complete html put the footers&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml) writeHtmlFooters();&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Close the output stream&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt;(outfile != &lt;span class="keyword"&gt;null&lt;/span&gt;) Console.Out.Close();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Write starting html tags&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; writeHtmlHeaders() {&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;"&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;"+filename+"&amp;lt;/title&amp;gt;"&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;"&amp;lt;style type='text/css'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;".body { font: 10pt Verdana, sans-serif; }"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;".keyword { color: blue;} "&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;".comment { color: green;} "&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;".document { color: #777777;} "&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;".string { color: brown;} "&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;"&amp;lt;/style&amp;gt;"&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"&amp;lt;/head&amp;gt;"&lt;/span&gt;);&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;"&amp;lt;body&amp;gt;&amp;lt;pre&amp;gt;"&lt;/span&gt;);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Write ending html tags&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; writeHtmlFooters() {&lt;br /&gt;    Console.Write(&lt;span class="string"&gt;"&amp;lt;/pre&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Parse each line of input&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; IDictionary parseLine(&lt;span class="keyword"&gt;string&lt;/span&gt; line) {&lt;br /&gt;    &lt;span class="comment"&gt;// Core pattern that will break the line into token&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;string&lt;/span&gt; pattern = @&lt;span class="string"&gt;"(/\*\*?)|(\*/)|(//)|(\w+)|([ \t\r\n]+)|("".*"")|([^*/\w\t\r\n ])|([/\*])"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Get the token&lt;br /&gt;&lt;/span&gt;      Match match = Regex.Match(line,pattern);&lt;br /&gt;    &lt;span class="comment"&gt;// Set the result as dictionary&lt;br /&gt;&lt;/span&gt;      IDictionary dictionary = &lt;span class="keyword"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;    dictionary[&lt;span class="string"&gt;"index"&lt;/span&gt;] = match.Index;&lt;br /&gt;    dictionary[&lt;span class="string"&gt;"length"&lt;/span&gt;] = match.Length;&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; dictionary;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Process the match&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; processResult(IDictionary dictionary) {&lt;br /&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; index = (&lt;span class="keyword"&gt;int&lt;/span&gt;) dictionary[&lt;span class="string"&gt;"index"&lt;/span&gt;];&lt;br /&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; length = (&lt;span class="keyword"&gt;int&lt;/span&gt;) dictionary[&lt;span class="string"&gt;"length"&lt;/span&gt;];&lt;br /&gt;    &lt;span class="keyword"&gt;string&lt;/span&gt; line = (&lt;span class="keyword"&gt;string&lt;/span&gt;) dictionary[&lt;span class="string"&gt;"line"&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt;(length==0) { Console.WriteLine(); &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;null&lt;/span&gt;; }&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;br /&gt;      &lt;span class="keyword"&gt;return&lt;/span&gt; processToken(line.Substring(index,length),&lt;br /&gt;      line.Substring(index+length));&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Process the token&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; processToken(&lt;span class="keyword"&gt;string&lt;/span&gt; token,&lt;span class="keyword"&gt;string&lt;/span&gt; remenant) {&lt;br /&gt;    &lt;span class="keyword"&gt;bool&lt;/span&gt; inline = &lt;span class="keyword"&gt;true&lt;/span&gt;;&lt;br /&gt;    &lt;span class="keyword"&gt;switch&lt;/span&gt;(token) {&lt;br /&gt;      &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"/*"&lt;/span&gt;:&lt;br /&gt;        inComment = &lt;span class="keyword"&gt;true&lt;/span&gt;;&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml) Console.Write(&lt;span class="string"&gt;"&amp;lt;span class='comment'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt; Console.Write(&lt;span class="string"&gt;"&amp;lt;span style='{color:green;}'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        Console.Write(convertToHtml(token));&lt;br /&gt;        &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;      &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"/**"&lt;/span&gt;:&lt;br /&gt;        inDocumentation = &lt;span class="keyword"&gt;true&lt;/span&gt;;&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml) Console.Write(&lt;span class="string"&gt;"&amp;lt;span class='document'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt; Console.Write(&lt;span class="string"&gt;"&amp;lt;span style='{color:#777777;}'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        Console.Write(convertToHtml(token));&lt;br /&gt;        &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;      &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"*/"&lt;/span&gt;:&lt;br /&gt;        Console.Write(token);&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt;(inComment || inDocumentation) Console.Write(&lt;span class="string"&gt;"&amp;lt;/span&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        inComment = inDocumentation = &lt;span class="keyword"&gt;false&lt;/span&gt;;&lt;br /&gt;        &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;      &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"//"&lt;/span&gt;:&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml) Console.Write(&lt;span class="string"&gt;"&amp;lt;span class='comment'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt; Console.Write(&lt;span class="string"&gt;"&amp;lt;span style='{color:green;}'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        Console.WriteLine(convertToHtml(token+remenant));&lt;br /&gt;        Console.Write(&lt;span class="string"&gt;"&amp;lt;/span&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        remenant=&lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;        &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;      &lt;span class="keyword"&gt;default&lt;/span&gt;:&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt;(inComment || inDocumentation) Console.Write(token);&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;br /&gt;          &lt;span class="keyword"&gt;if&lt;/span&gt;(&lt;span class="keyword"&gt;base&lt;/span&gt;.isKeyword(token)) {&lt;br /&gt;            &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml)&lt;br /&gt;              Console.Write(&lt;span class="string"&gt;"&amp;lt;span class='keyword'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;            &lt;span class="keyword"&gt;else&lt;/span&gt; Console.Write(&lt;span class="string"&gt;"&amp;lt;span style='{color:blue;}'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;              Console.Write(convertToHtml(token));&lt;br /&gt;              Console.Write(&lt;span class="string"&gt;"&amp;lt;/span&amp;gt;"&lt;/span&gt;);&lt;br /&gt;          }&lt;br /&gt;          &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt;(token.StartsWith(&lt;span class="string"&gt;"\"") &amp;&amp;amp; token.EndsWith("\""&lt;/span&gt;)) {&lt;br /&gt;            &lt;span class="keyword"&gt;if&lt;/span&gt;(completeHtml)&lt;br /&gt;            Console.Write(&lt;span class="string"&gt;"&amp;lt;span class='string'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;            &lt;span class="keyword"&gt;else&lt;/span&gt; Console.Write(&lt;span class="string"&gt;"&amp;lt;span style='{color:brown;}'&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            Console.Write(convertToHtml(token));&lt;br /&gt;            Console.Write(&lt;span class="string"&gt;"&amp;lt;/span&amp;gt;"&lt;/span&gt;);&lt;br /&gt;          }&lt;br /&gt;          &lt;span class="keyword"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            Console.Write(convertToHtml(token));&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; remenant;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Format the text to put as html&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; StringBuilder convertToHtml(&lt;span class="keyword"&gt;string&lt;/span&gt; text) {&lt;br /&gt;    StringBuilder sb = &lt;span class="keyword"&gt;new&lt;/span&gt; StringBuilder(text);&lt;br /&gt;    sb = sb.Replace(&lt;span class="string"&gt;"&amp;lt;","&amp;amp;lt;"&lt;/span&gt;);&lt;br /&gt;    sb = sb.Replace(&lt;span class="string"&gt;"&amp;gt;","&amp;amp;gt;"&lt;/span&gt;);&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; sb;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Display the version and exit&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; printVersion() {&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"Colorizer, Version 1.0, Author: Prasad.A"&lt;/span&gt;);&lt;br /&gt;    System.Environment.Exit(0);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;// Display the help and exit&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; printHelp() {&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"Usage: "&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"mono Colorizer.exe [-l language] [-o outputfile] [--html] [--help,-h] [--version,-v] inputfile"&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"-l: Language selection, one of them [c# java c c++]"&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"-o: Output file name, (default to standard output)"&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"--html: For complete html output."&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"-h, --help: This help."&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="string"&gt;"-v, --version: Version and Author information."&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    System.Environment.Exit(0);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; String getLanguage(String language) {&lt;br /&gt;    String specifiedLang = language.ToLower();&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt;( String.Compare(&lt;span class="string"&gt;"c#"&lt;/span&gt;,specifiedLang) == 0 ||&lt;br /&gt;        String.Compare(&lt;span class="string"&gt;"java"&lt;/span&gt;,specifiedLang) == 0 ||&lt;br /&gt;        String.Compare(&lt;span class="string"&gt;"c"&lt;/span&gt;,specifiedLang) == 0 ||&lt;br /&gt;        String.Compare(&lt;span class="string"&gt;"c++"&lt;/span&gt;,specifiedLang) == 0 ) {&lt;br /&gt;      &lt;span class="keyword"&gt;return&lt;/span&gt; specifiedLang;&lt;br /&gt;    } &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;br /&gt;      Console.WriteLine(&lt;span class="string"&gt;"Unsupported language: "&lt;/span&gt;+language);&lt;br /&gt;      Console.WriteLine(&lt;span class="string"&gt;"Supported language: c#, java, c, c++"&lt;/span&gt;);&lt;br /&gt;      System.Environment.Exit(1);&lt;br /&gt;      &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="comment"&gt;// Main function to run the Colorizer.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; Main(&lt;span class="keyword"&gt;string&lt;/span&gt;[] args) {&lt;br /&gt;    &lt;span class="keyword"&gt;string&lt;/span&gt; language = &lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;    &lt;span class="keyword"&gt;string&lt;/span&gt; inputfile = &lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;    &lt;span class="keyword"&gt;string&lt;/span&gt; outputfile = &lt;span class="keyword"&gt;null&lt;/span&gt;;&lt;br /&gt;    &lt;span class="keyword"&gt;bool&lt;/span&gt; completeHtml = &lt;span class="keyword"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Handle command line arguments&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt;(args.Length &amp;gt; 0) {&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt;(&lt;span class="keyword"&gt;int&lt;/span&gt; i = 0; i &amp;lt; args.Length; ++i) {&lt;br /&gt;        &lt;span class="keyword"&gt;switch&lt;/span&gt;(args[i]) {&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"-o"&lt;/span&gt;:&lt;br /&gt;            &lt;span class="keyword"&gt;if&lt;/span&gt;(i &amp;lt; args.Length-1) outputfile = args[++i];&lt;br /&gt;            &lt;span class="keyword"&gt;else&lt;/span&gt; printHelp();&lt;br /&gt;            &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"-l"&lt;/span&gt;:&lt;br /&gt;            &lt;span class="keyword"&gt;if&lt;/span&gt;(i &amp;lt; args.Length-1) language = getLanguage(args[++i]);&lt;br /&gt;            &lt;span class="keyword"&gt;else&lt;/span&gt; printHelp();&lt;br /&gt;            &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"--help"&lt;/span&gt;: printHelp(); &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"-h"&lt;/span&gt;: printHelp(); &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"--version"&lt;/span&gt;: printVersion(); &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"-v"&lt;/span&gt;: printVersion(); &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;          &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="string"&gt;"--html"&lt;/span&gt;: completeHtml = &lt;span class="keyword"&gt;true&lt;/span&gt;; &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;          &lt;span class="keyword"&gt;default&lt;/span&gt;: inputfile = args[i]; &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="comment"&gt;// If input file is not specified, print help and exit&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt;(inputfile == &lt;span class="keyword"&gt;null&lt;/span&gt;) printHelp();&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;// Start the colorizer after initalization&lt;br /&gt;&lt;/span&gt;      Colorizer colorizer = &lt;span class="keyword"&gt;new&lt;/span&gt; Colorizer(language,completeHtml);&lt;br /&gt;    colorizer.colorize(inputfile,outputfile);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-111037925332993234?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/111037925332993234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=111037925332993234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111037925332993234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/111037925332993234'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/colorizer-for-c-java-c-c.html' title='Colorizer: For C#, Java, C, C++'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110983362544518325</id><published>2005-03-02T22:59:00.000-08:00</published><updated>2005-03-03T02:21:35.740-08:00</updated><title type='text'>xmllint --shell in Python</title><content type='html'>&lt;style type="text/css"&gt;.kwd{color:blue;} .cmt{color:#008000;} .docum{color:#008080;} .func{color:#C05800;} .str{color:maroon;}&lt;/style&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;After looking at xmllint tool in linux and giving a small introductory talk on it I came to decision to start of its implementation in python that can serve as basic introduction to xml handling in python. For this I used minidom module of python's xml.dom library which is pretty simple to understand for the starters. The program I have desgined will implement very few option of xmllint --shell. This version of python implementation targets python programmer who is unfamiliar with the minidom module of python.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;xmlsh.py code follows:&lt;br /&gt;&lt;span id="xshReadlink" style="text-decoration:underline;display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('xshHidelink').style.display='inline'; document.getElementById('xshSource').style.display='block';" &gt;&lt;b&gt;View xmlsh.py&lt;/b&gt;&lt;/span&gt;&lt;span id="xshHidelink" style="text-decoration:underline;display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('xshReadlink').style.display='inline'; document.getElementById('xshSource').style.display='none';" &gt;&lt;b&gt;Hide xmlsh.py&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="xshSource" style="display: none;"&gt;&lt;pre&gt;&lt;span class="docum"&gt;""" A basic implementation of (xmllint --shell)&lt;br /&gt;Author: Prasad.A&lt;br /&gt;"""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwd"&gt;import&lt;/span&gt; sys&lt;br /&gt;&lt;span class="kwd"&gt;from&lt;/span&gt; xml.dom &lt;span class="kwd"&gt;import&lt;/span&gt; minidom&lt;br /&gt;&lt;span class="kwd"&gt;from&lt;/span&gt; readline &lt;span class="kwd"&gt;import&lt;/span&gt; *&lt;br /&gt;&lt;br /&gt;&lt;span class="kwd"&gt;class&lt;/span&gt; xmlsh(object):&lt;br /&gt;   &lt;span class="docum"&gt;"""The base class which holds the xml document."""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; __init__(&lt;span class="kwd"&gt;self&lt;/span&gt;,xmlfile):&lt;br /&gt;       &lt;span class="kwd"&gt;self&lt;/span&gt;.filename=xmlfile&lt;br /&gt;       &lt;span class="kwd"&gt;self&lt;/span&gt;.__loadFile()&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; __loadFile(&lt;span class="kwd"&gt;self&lt;/span&gt;):&lt;br /&gt;       &lt;span class="kwd"&gt;self&lt;/span&gt;.xmlDoc = minidom.parse(&lt;span class="kwd"&gt;self&lt;/span&gt;.filename)&lt;br /&gt;&lt;br /&gt;   &lt;span class="cmt"&gt;# Get the element from the dom (currentElement)&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; __getElement(&lt;span class="kwd"&gt;self&lt;/span&gt;,elemname,currentElement,index=0):&lt;br /&gt;       &lt;span class="kwd"&gt;if&lt;/span&gt;(elemname==&lt;span class="str"&gt;""&lt;/span&gt;): &lt;span class="kwd"&gt;return&lt;/span&gt; (currentElement,1)&lt;br /&gt;       elementList = currentElement.getElementsByTagName(elemname)&lt;br /&gt;       &lt;span class="kwd"&gt;return&lt;/span&gt; (elementList[index],&lt;span class="func"&gt;len&lt;/span&gt;(elementList))&lt;br /&gt;&lt;br /&gt;   &lt;span class="cmt"&gt;# Handler for cat command&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; __catHandler(&lt;span class="kwd"&gt;self&lt;/span&gt;,path,currentElement):&lt;br /&gt;       &lt;span class="kwd"&gt;if&lt;/span&gt;(path[0]==&lt;span class="str"&gt;"/"&lt;/span&gt;): &lt;span class="cmt"&gt;#absolute path is used&lt;/span&gt;&lt;br /&gt;           element=&lt;span class="kwd"&gt;self&lt;/span&gt;.xmlDoc&lt;br /&gt;           path=path[1:]&lt;br /&gt;       &lt;span class="kwd"&gt;else&lt;/span&gt;: &lt;span class="cmt"&gt;# relative path is used&lt;/span&gt;&lt;br /&gt;           element=currentElement&lt;br /&gt;&lt;br /&gt;       parentElement = &lt;span class="kwd"&gt;None&lt;/span&gt;&lt;br /&gt;       count=-1&lt;br /&gt;       pathSplit = path.split(&lt;span class="str"&gt;"/"&lt;/span&gt;)&lt;br /&gt;       &lt;span class="kwd"&gt;if&lt;/span&gt;(&lt;span class="func"&gt;len&lt;/span&gt;(pathSplit)&gt;1):&lt;br /&gt;           &lt;span class="kwd"&gt;for&lt;/span&gt; elemname &lt;span class="kwd"&gt;in&lt;/span&gt; pathSplit[:&lt;span class="kwd"&gt;len&lt;/span&gt;(pathSplit)]:&lt;br /&gt;               parentElement = element&lt;br /&gt;               (element,count) = &lt;span class="kwd"&gt;self&lt;/span&gt;.__getElement(elemname,element)&lt;br /&gt;       &lt;span class="kwd"&gt;else&lt;/span&gt;:&lt;br /&gt;           (element,count) = &lt;span class="kwd"&gt;self&lt;/span&gt;.__getElement(pathSplit[-1],element)&lt;br /&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;if&lt;/span&gt;(count != -1 and count &gt; 1):&lt;br /&gt;           &lt;span class="kwd"&gt;for&lt;/span&gt; index &lt;span class="kwd"&gt;in&lt;/span&gt; &lt;span class="func"&gt;range&lt;/span&gt;(count):&lt;br /&gt;               (element,count) = &lt;span class="kwd"&gt;self&lt;/span&gt;.__getElement(pathSplit[-1],parentElement,index)&lt;br /&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; element.toxml()&lt;br /&gt;&lt;br /&gt;   &lt;span class="cmt"&gt;# Display the help&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; __printHelp(&lt;span class="kwd"&gt;self&lt;/span&gt;):&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"""&lt;br /&gt;The following commands are supported:&lt;br /&gt;  cd [xpath]: Change to the given node.&lt;br /&gt; cat [xpath]: See the content.&lt;br /&gt; pwd        : Current position in the document.&lt;br /&gt;help        : Displays this help.&lt;br /&gt;This implementation will support only very basic xpath.&lt;br /&gt;"""&lt;/span&gt;&lt;br /&gt;   &lt;span class="cmt"&gt;# Wrapper for displaying help&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; help(&lt;span class="kwd"&gt;self&lt;/span&gt;):&lt;br /&gt;       &lt;span class="kwd"&gt;self&lt;/span&gt;.__printHelp()&lt;br /&gt;&lt;br /&gt;   &lt;span class="cmt"&gt;# Main loop to run the program&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; run(&lt;span class="kwd"&gt;self&lt;/span&gt;):&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Type bye or quit to terminate."&lt;/span&gt;&lt;br /&gt;       stop = &lt;span class="kwd"&gt;False&lt;/span&gt;&lt;br /&gt;       prompt = &lt;span class="str"&gt;"/"&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement = &lt;span class="kwd"&gt;self&lt;/span&gt;.xmlDoc&lt;br /&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;while&lt;/span&gt;(stop!=&lt;span class="kwd"&gt;True&lt;/span&gt;):&lt;br /&gt;           &lt;span class="kwd"&gt;try&lt;/span&gt;:&lt;br /&gt;               &lt;span class="cmt"&gt;# Accept the input&lt;/span&gt;&lt;br /&gt;               inputLine = &lt;span class="func"&gt;raw_input&lt;/span&gt;(&lt;span class="str"&gt;"%s%s "&lt;/span&gt; % (prompt,&lt;span class="str"&gt;"&gt;"&lt;/span&gt;))&lt;br /&gt;               &lt;span class="cmt"&gt;# If the input is empty or newline do nothing&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(inputLine == &lt;span class="str"&gt;""&lt;/span&gt; &lt;span class="kwd"&gt;or&lt;/span&gt; inputLine == &lt;span class="str"&gt;"\n"&lt;/span&gt;): &lt;span class="kwd"&gt;continue&lt;/span&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Split the input&lt;/span&gt;&lt;br /&gt;               inputSplit = inputLine.split()&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Assume the first element of split is command&lt;/span&gt;&lt;br /&gt;               command = inputSplit[0]&lt;br /&gt;               &lt;span class="cmt"&gt;# Adjust the arguments passed&lt;/span&gt;&lt;br /&gt;               arguments=&lt;span class="kwd"&gt;None&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(&lt;span class="func"&gt;len&lt;/span&gt;(inputSplit) &gt; 1): arguments = &lt;span class="str"&gt;""&lt;/span&gt;.&lt;span class="func"&gt;join&lt;/span&gt;(inputSplit[1:])&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Command is not still handled&lt;/span&gt;&lt;br /&gt;               commandHandled =&lt;span class="kwd"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Handle "bye" or "quit" command&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(command==&lt;span class="str"&gt;"bye"&lt;/span&gt; &lt;span class="kwd"&gt;or&lt;/span&gt; command==&lt;span class="str"&gt;"quit"&lt;/span&gt;):&lt;br /&gt;                   commandHandled=&lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                   stop=&lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;continue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Handle "cd" command&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(command==&lt;span class="str"&gt;"cd"&lt;/span&gt;):&lt;br /&gt;                   commandHandled=&lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                   inputArg=arguments&lt;br /&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(arguments[0]==&lt;span class="str"&gt;"/"&lt;/span&gt;):&lt;br /&gt;                       arguments=arguments[1:]&lt;br /&gt;                       &lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement=&lt;span class="kwd"&gt;self&lt;/span&gt;.xmlDoc&lt;br /&gt;&lt;br /&gt;                   element=&lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement&lt;br /&gt;                   parentElement=&lt;span class="kwd"&gt;None&lt;/span&gt;&lt;br /&gt;                   count = -1&lt;br /&gt;                   pathSplit=arguments.split(&lt;span class="str"&gt;"/"&lt;/span&gt;)&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(&lt;span class="func"&gt;len&lt;/span&gt;(pathSplit) &gt; 1):&lt;br /&gt;                       &lt;span class="kwd"&gt;for&lt;/span&gt; elemname &lt;span class="kwd"&gt;in&lt;/span&gt; pathSplit[:&lt;span class="func"&gt;len&lt;/span&gt;(pathSplit)-1]:&lt;br /&gt;                           parentElement=element&lt;br /&gt;                           (element,count)=&lt;span class="kwd"&gt;self&lt;/span&gt;.__getElement(elemname,element)&lt;br /&gt;                   parentElement=element&lt;br /&gt;                   (element,count)=&lt;span class="kwd"&gt;self&lt;/span&gt;.__getElement(pathSplit[-1],element)&lt;br /&gt;                   whichOne=-1&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(count!=-1 and count&gt;1):&lt;br /&gt;                       &lt;span class="kwd"&gt;print&lt;/span&gt; count, &lt;span class="str"&gt;" elements of "&lt;/span&gt;, pathSplit[-1],&lt;span class="str"&gt;" is present."&lt;/span&gt;&lt;br /&gt;                       whichOne = &lt;span class="func"&gt;raw_input&lt;/span&gt;(&lt;span class="str"&gt;"Specify the index to select: "&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;                       &lt;span class="kwd"&gt;if&lt;/span&gt; whichOne != &lt;span class="str"&gt;" "&lt;/span&gt;:&lt;br /&gt;                           whichOne = &lt;span class="func"&gt;int&lt;/span&gt;(whichOne)&lt;br /&gt;                           (element,count) = &lt;span class="kwd"&gt;self&lt;/span&gt;.__getElement(pathSplit[-1],parentElement,whichOne-1)&lt;br /&gt;                       &lt;span class="kwd"&gt;else&lt;/span&gt;:&lt;br /&gt;                           element=parentElement&lt;br /&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement=element&lt;br /&gt;&lt;br /&gt;                   separator=&lt;span class="str"&gt;"/"&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(inputArg[0]==&lt;span class="str"&gt;"/"&lt;/span&gt;):&lt;br /&gt;                       prompt=&lt;span class="str"&gt;""&lt;/span&gt;&lt;br /&gt;                       separator=&lt;span class="str"&gt;""&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;elif&lt;/span&gt;(prompt==&lt;span class="str"&gt;"/"&lt;/span&gt;):&lt;br /&gt;                       prompt=&lt;span class="str"&gt;""&lt;/span&gt;&lt;br /&gt;                       separator=&lt;span class="str"&gt;"/"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(whichOne==-1): prompt=&lt;span class="str"&gt;"%s%s%s"&lt;/span&gt; % (prompt,separator,inputArg)&lt;br /&gt;                   &lt;span class="kwd"&gt;else&lt;/span&gt;: prompt=&lt;span class="str"&gt;"%s%s%s[%d]"&lt;/span&gt; % (prompt,separator,inputArg,whichOne)&lt;br /&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(&lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement==&lt;span class="kwd"&gt;None&lt;/span&gt;):&lt;br /&gt;                       stop=&lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                       &lt;span class="kwd"&gt;continue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Handle "cat" command&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(command==&lt;span class="str"&gt;"cat"&lt;/span&gt;):&lt;br /&gt;                   commandHandled = &lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;if&lt;/span&gt;(arguments != &lt;span class="kwd"&gt;None&lt;/span&gt;): &lt;span class="kwd"&gt;self&lt;/span&gt;.__catHandler(arguments,&lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement)&lt;br /&gt;                   &lt;span class="kwd"&gt;else&lt;/span&gt;: &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="kwd"&gt;self&lt;/span&gt;.currentElement.toxml()&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Handle "pwd" command&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(command==&lt;span class="str"&gt;"pwd"&lt;/span&gt;):&lt;br /&gt;                   commandHandled = &lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;print&lt;/span&gt; prompt&lt;br /&gt;&lt;br /&gt;               &lt;span class="cmt"&gt;# Handle "help" command&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(command==&lt;span class="str"&gt;"help"&lt;/span&gt;):&lt;br /&gt;                   commandHandled = &lt;span class="kwd"&gt;True&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;self&lt;/span&gt;.__printHelp()&lt;br /&gt;&lt;br /&gt;               &lt;span class="kwd"&gt;if&lt;/span&gt;(commandHandled==&lt;span class="kwd"&gt;False&lt;/span&gt;):&lt;br /&gt;                   &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Unknown Command:"&lt;/span&gt;&lt;br /&gt;                   &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="kwd"&gt;self&lt;/span&gt;.__printHelp()&lt;br /&gt;&lt;br /&gt;           &lt;span class="kwd"&gt;except&lt;/span&gt; Exception, ex:&lt;br /&gt;               &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Exception: "&lt;/span&gt;,ex&lt;br /&gt;&lt;br /&gt;&lt;span class="cmt"&gt;# Start the shell&lt;/span&gt;&lt;br /&gt;&lt;span class="kwd"&gt;if&lt;/span&gt;(&lt;span class="func"&gt;len&lt;/span&gt;(sys.argv)&gt;1):&lt;br /&gt;   ob=xmlsh(sys.argv[1])&lt;br /&gt;   &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Object created...function run() will be invoked..."&lt;/span&gt;&lt;br /&gt;   ob.help()&lt;br /&gt;   ob.run()&lt;br /&gt;&lt;span class="kwd"&gt;else&lt;/span&gt;:&lt;br /&gt;   &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Usage: python"&lt;/span&gt;, sys.argv[0], &lt;span class="str"&gt;"xmlfilename"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A small example follows that will explain the usage of this tool. &lt;br /&gt;&lt;span id="xshReadUsage" style="text-decoration:underline;display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('xshHideUsage').style.display='inline'; document.getElementById('xshUsage').style.display='block';" &gt;&lt;b&gt;View Usage&lt;/b&gt;&lt;/span&gt;&lt;span id="xshHideUsage" style="text-decoration:underline;display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('xshReadUsage').style.display='inline'; document.getElementById('xshUsage').style.display='none';" &gt;&lt;b&gt;Hide Usage&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="xshUsage" style="display: none;"&gt;&lt;pre&gt;XML File: xmlsh.xml &lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;root&amp;gt;&lt;br /&gt;    &amp;lt;element&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&lt;br /&gt;            &amp;lt;title&amp;gt;Title of item1&amp;lt;/title&amp;gt;&lt;br /&gt;            &amp;lt;description&amp;gt;Description of item1&amp;lt;/description&amp;gt;&lt;br /&gt;        &amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&lt;br /&gt;            &amp;lt;title&amp;gt;Title of item2&amp;lt;/title&amp;gt;&lt;br /&gt;            &amp;lt;description&amp;gt;Description of item2&amp;lt;/description&amp;gt;&lt;br /&gt;        &amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&lt;br /&gt;            &amp;lt;title&amp;gt;Title of item3&amp;lt;/title&amp;gt;&lt;br /&gt;            &amp;lt;description&amp;gt;Description of item3&amp;lt;/description&amp;gt;&lt;br /&gt;        &amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&lt;br /&gt;            &amp;lt;title&amp;gt;Title of item4&amp;lt;/title&amp;gt;&lt;br /&gt;            &amp;lt;description&amp;gt;Description of item4&amp;lt;/description&amp;gt;&lt;br /&gt;        &amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/element&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;&lt;br /&gt;Usage: python xmlsh.py xmlsh.xml&lt;br /&gt;/&gt; cat&lt;br /&gt;/&gt; cd root&lt;br /&gt;/root&gt; cd /root/element&lt;br /&gt;/root/element&gt; cat&lt;br /&gt;/root/element&gt; cd item&lt;br /&gt;[Specify the index: 1]&lt;br /&gt;/root/element/item[1]&gt; cat&lt;br /&gt;/root/element/item[1]&gt; cd /root/element&lt;br /&gt;/root/element&gt; pwd&lt;br /&gt;/root/element&gt; cd item&lt;br /&gt;[Specify the index: 2]&lt;br /&gt;/root/element/item[2]&gt; cd /&lt;br /&gt;/&gt; bye&lt;br /&gt;&lt;/pre&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/10123815-110983362544518325?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110983362544518325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110983362544518325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110983362544518325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110983362544518325'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/03/xmllint-shell-in-python.html' title='xmllint --shell in Python'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110966375767198521</id><published>2005-02-28T23:47:00.000-08:00</published><updated>2005-03-03T02:22:55.813-08:00</updated><title type='text'>Funny HelloWorld Program</title><content type='html'>&lt;style type="text/css"&gt;.kwd {color: blue; } .cmt {color: green; } .str { color: maroon; }&lt;/style&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Today, Sidharth came up with the &lt;a href="http://blogs.applibase.net/sidharth/?p=6"&gt;HelloWorld program&lt;/a&gt; which looked really interesting. But, it used the feature of PrintStream.printf() function that is provided by jdk1.5 and I decided to port it to jdk1.4 and used the library &lt;a href="http://www.braju.com/download/sure/hb16.zip"&gt;hb16.zip&lt;/a&gt; from &lt;a href="http://www.braju.com/download/index.html"&gt;http://www.braju.com/download/index.html&lt;/a&gt; to get the code working.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span id="jReadlink" style="text-decoration:underline;display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('jHidelink').style.display='inline'; document.getElementById('javasource').style.display='block';" &gt;&lt;b&gt;View Source&lt;/b&gt;&lt;/span&gt;&lt;span id="jHidelink" style="text-decoration:underline;display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('jReadlink').style.display='inline'; document.getElementById('javasource').style.display='none';" &gt;&lt;b&gt;Hide Source&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="javasource" style="display: none;"&gt;&lt;pre&gt;&lt;span class="cmt"&gt;/**&lt;br /&gt; * This program is written to save the input parameter of &lt;br /&gt; * a program for future use.&lt;br /&gt; * It uses the library provided by http://www.braju.com/ for printf()&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwd"&gt;import&lt;/span&gt; java.io.PrintStream;&lt;br /&gt;&lt;span class="kwd"&gt;import&lt;/span&gt; java.io.FileOutputStream;&lt;br /&gt;&lt;span class="kwd"&gt;import&lt;/span&gt; java.io.OutputStream;&lt;br /&gt;&lt;span class="cmt"&gt;&lt;br /&gt;/* &lt;br /&gt; * hb16.zip  from http://www.braju.com/&lt;br /&gt; * contains set of classes to provide printf() function&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span class="kwd"&gt;import&lt;/span&gt; com.braju.format.Format;&lt;br /&gt;&lt;span class="kwd"&gt;import&lt;/span&gt; com.braju.format.Parameters;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwd"&gt;public class&lt;/span&gt; HelloWorld {&lt;br /&gt;  &lt;span class="kwd"&gt;static&lt;/span&gt; String quote = "Hello World!";&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwd"&gt;static&lt;/span&gt; String code =&lt;span class="str"&gt;&lt;br /&gt;    "import java.io.PrintStream;" +&lt;br /&gt;    "import java.io.FileOutputStream;" +&lt;br /&gt;    "import java.io.OutputStream;" +&lt;br /&gt;    "import com.braju.format.Format;" +&lt;br /&gt;    "import com.braju.format.Parameters;" +&lt;br /&gt;    "public class HelloWorld{" +&lt;br /&gt;    "static String quote=*%s*;" +&lt;br /&gt;    "static String code=*%s*;" +&lt;br /&gt;    "public static void main(String args[]) throws Exception {" +&lt;br /&gt;    "if(args.length==1)quote = args[0];System.out.println(quote);" +&lt;br /&gt;    "OutputStream os = new FileOutputStream(*HelloWorld.java*);" +&lt;br /&gt;    "PrintStream ps = new PrintStream(os);" +&lt;br /&gt;    "ps.println("+&lt;br /&gt;    "Format.sprintf(code.replace('%c', (char)34), "+&lt;br /&gt;    "new Parameters(quote).add(code).add((char)42)));" +&lt;br /&gt;    "ps.close();" +&lt;br /&gt;    "Runtime.getRuntime().exec(*javac -classpath hb16.zip HelloWorld.java*);" +&lt;br /&gt;    "}}";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;public static void&lt;/span&gt; main(String args[]) &lt;span class="kwd"&gt;throws&lt;/span&gt; Exception {&lt;br /&gt;        &lt;span class="kwd"&gt;if&lt;/span&gt; (args.length == 1) quote = args[0];&lt;br /&gt;        System.out.println(quote);&lt;br /&gt;        OutputStream os = new FileOutputStream("HelloWorld.java");&lt;br /&gt;        PrintStream ps = new PrintStream(os);&lt;br /&gt;        ps.println(Format.sprintf(code.replace('*', (char) 34), &lt;br /&gt;          new Parameters(quote).add(code).add((char) 42)));&lt;br /&gt;        ps.close();&lt;br /&gt;        Runtime.getRuntime().exec("javac -classpath hb16.zip HelloWorld.java");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Compile: javac -classpath hb16.zip HelloWorld.java&lt;br /&gt;Execute: &lt;br /&gt;(For Linux)   java -cp .:hb16.zip HelloWorld&lt;br /&gt;(For Windows) java -cp .;hb16.zip HelloWorld&lt;br /&gt;Sample:&lt;br /&gt;$ java -cp .:hb16.zip HelloWorld&lt;br /&gt;Hello World!&lt;br /&gt;$ java -cp .:hb16.zip HelloWorld Parameter&lt;br /&gt;Parameter&lt;br /&gt;$ java -cp .:hb16.zip HelloWorld&lt;br /&gt;Parameter&lt;br /&gt;/* Parameter which was the previous input to the program has been saved. */&lt;br /&gt;&lt;/pre&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/10123815-110966375767198521?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110966375767198521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110966375767198521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110966375767198521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110966375767198521'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/02/funny-helloworld-program.html' title='Funny HelloWorld Program'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110913815668004692</id><published>2005-02-22T21:55:00.000-08:00</published><updated>2005-03-03T02:23:58.530-08:00</updated><title type='text'>First python program</title><content type='html'>&lt;style type="text/css"&gt;.kwd { color:blue; } .cmt { color: green; } .str { color: maroon; } &lt;/style&gt;&lt;br /&gt;With a excellent introduction to python language I started working on python and today I thought I will dedicate the first python program of mine to &lt;b&gt;Sidharth Kuruvila &lt;/b&gt;&lt;a href="http://www.livejournal.com/users/mat_attack"&gt;LJUserInfo&lt;/a&gt;&lt;br /&gt;Though this program is not essentially any worth(my opinion), I am still happy because it is my first program :)&lt;br /&gt;People really interested can go ahead to have look at the source and comment on it.&lt;br /&gt;&lt;br /&gt;&lt;span id="readlink" style="text-decoration:underline;display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('hidelink').style.display='inline'; document.getElementById('pysource').style.display='block';" &gt;&lt;b&gt;View Python source&lt;/b&gt;&lt;/span&gt;&lt;span id="hidelink" style="text-decoration:underline;display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('readlink').style.display='inline'; document.getElementById('pysource').style.display='none';" &gt;&lt;b&gt;Hide Python source&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="pysource" style="display: none;"&gt;I created a small program Evaluate.py:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="kwd"&gt;def&lt;/span&gt; functionCreator(choice):&lt;br /&gt;   &lt;span class="cmt"&gt;"""Create the function and return it depending on choice."""&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;if&lt;/span&gt;(choice==1):&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Create function for evaluating x*y+z ..."&lt;/span&gt;&lt;br /&gt;       func = &lt;span class="kwd"&gt;lambda&lt;/span&gt; x,y,z: x*y+z&lt;br /&gt;   &lt;span class="kwd"&gt;elif&lt;/span&gt;(choice==2):&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; "Create function for evaluating x*y-z ..."&lt;br /&gt;       func = &lt;span class="kwd"&gt;lambda&lt;/span&gt; x,y,z: x*y-z&lt;br /&gt;   &lt;span class="kwd"&gt;elif&lt;/span&gt;(choice==3):&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Create function for evaluating x*y*z ..."&lt;/span&gt;&lt;br /&gt;       func = &lt;span class="kwd"&gt;lambda&lt;/span&gt; x,y,z: x*y*z&lt;br /&gt;   &lt;span class="kwd"&gt;elif&lt;/span&gt;(choice==4):&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Create function for evaluating x*y**z ..."&lt;/span&gt;&lt;br /&gt;       func = &lt;span class="kwd"&gt;lambda&lt;/span&gt; x,y,z: x*y**z&lt;br /&gt;   &lt;span class="cmt"&gt;# return the generated function&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;return&lt;/span&gt; func&lt;br /&gt;&lt;span class="cmt"&gt;&lt;br /&gt;# A class which defines a default function definition to evaulate its variables&lt;br /&gt;# It also allows user to change the function definition at runtime so the class&lt;br /&gt;# behaviour to evaulate its variables changes.&lt;/span&gt;&lt;br /&gt;&lt;span class="kwd"&gt;class&lt;/span&gt; Evaluate(object):&lt;br /&gt;   &lt;span class="cmt"&gt;""" Allow evaluation of 3 class variables with custom function at runtime."""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; __init__(self,x,y,z):&lt;br /&gt;       &lt;span class="cmt"&gt;"""Initializer which takes 3 variables x,y,z"""&lt;/span&gt;&lt;br /&gt;       self.x = x #self.__dict__["x"] = x&lt;br /&gt;       self.y = y #self.__dict__["x"] = y&lt;br /&gt;       self.z = z #self.__dict__["x"] = z&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; evaluate(self,x,y,z):&lt;br /&gt;       &lt;span class="cmt"&gt;""" A default function definition to evaluate the variables.&lt;br /&gt;       This function definition is configurable at runtime."""&lt;/span&gt;       &lt;br /&gt;       &lt;span class="kwd"&gt;return&lt;/span&gt; x+y+z&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; func(self):&lt;br /&gt;       &lt;span class="cmt"&gt;""" Call this function to evaluate the variables of the class&lt;br /&gt;       This will delegate the work to evaluate function."""&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; "%s: %f" % ("Result",self.evaluate(self.x,self.y,self.z))&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwd"&gt;def&lt;/span&gt; change(self):&lt;br /&gt;       &lt;span class="cmt"&gt;""" This function will allow user to configure the function definition&lt;br /&gt;       of evaluate."""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Available function generation for evaluating expression..."&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"1. x*y+z"&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"2. x*y-z"&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"3. x*y*z"&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"4. x*y**z"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;       choice = &lt;span style="kwd"&gt;int&lt;/span&gt;(&lt;span style="kwd"&gt;raw_input&lt;/span&gt;(&lt;span class="str"&gt;"Please enter your choice(1,2,3,4): "&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;       &lt;span class="cmt"&gt;# Change the evaluate function defintion&lt;/span&gt;&lt;br /&gt;       self.__dict__["evaluate"] = functionCreator(choice)&lt;br /&gt;&lt;br /&gt;       &lt;span class="cmt"&gt;# Inform user that the function definition was changed and can view the change&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwd"&gt;print&lt;/span&gt; &lt;span class="str"&gt;"Please try object.func() to see the change in evaluation."&lt;/span&gt;&lt;br /&gt;&lt;span class="cmt"&gt;     &lt;br /&gt;# Testing for this module&lt;/span&gt;&lt;br /&gt;&lt;span class="kwd"&gt;if&lt;/span&gt; __name__ == "__main__":&lt;br /&gt;   print &lt;span class="str"&gt;"Evaluate Module loaded..."&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;I executed the script using IDLE and here were some of the actions I proceeded with some actions and got the results:&lt;br /&gt;&lt;span id="readoutput" style="text-decoration:underline;display: inline; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('hideoutput').style.display='inline'; document.getElementById('pyoutput').style.display='block';" &gt;&lt;b&gt;View Python output&lt;/b&gt;&lt;/span&gt;&lt;span id="hideoutput" style="text-decoration:underline;display: none; cursor: pointer;color:blue;" onclick="this.style.display='none';document.getElementById('readoutput').style.display='inline'; document.getElementById('pyoutput').style.display='none';" &gt;&lt;b&gt;Hide Python output&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id="pyoutput" style="display: none;"&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; exeval=Evaluate(10,20,30)&lt;br /&gt;&gt;&gt;&gt; exeval.func()&lt;br /&gt;Result: 60.000000&lt;br /&gt;&gt;&gt;&gt; exeval.change()&lt;br /&gt;Available function generation for evaluating expression...&lt;br /&gt;1. x*y+z&lt;br /&gt;2. x*y-z&lt;br /&gt;3. x*y*z&lt;br /&gt;4. x*y**z&lt;br /&gt;Please enter your choice(1,2,3,4): 1&lt;br /&gt;Create function for evaluating x*y+z ...&lt;br /&gt;Please try object.func() to see the change in evaluation.&lt;br /&gt;&gt;&gt;&gt; exeval.func()&lt;br /&gt;Result: 230.000000&lt;br /&gt;&gt;&gt;&gt; exeval.change()&lt;br /&gt;Available function generation for evaluating expression...&lt;br /&gt;1. x*y+z&lt;br /&gt;2. x*y-z&lt;br /&gt;3. x*y*z&lt;br /&gt;4. x*y**z&lt;br /&gt;Please enter your choice(1,2,3,4): 2&lt;br /&gt;Create function for evaluating x*y-z ...&lt;br /&gt;Please try object.func() to see the change in evaluation.&lt;br /&gt;&gt;&gt;&gt; exeval.func()&lt;br /&gt;Result: 170.000000&lt;br /&gt;&gt;&gt;&gt; exeval.change()&lt;br /&gt;Available function generation for evaluating expression...&lt;br /&gt;1. x*y+z&lt;br /&gt;2. x*y-z&lt;br /&gt;3. x*y*z&lt;br /&gt;4. x*y**z&lt;br /&gt;Please enter your choice(1,2,3,4): 3&lt;br /&gt;Create function for evaluating x*y*z ...&lt;br /&gt;Please try object.func() to see the change in evaluation.&lt;br /&gt;&gt;&gt;&gt; exeval.func()&lt;br /&gt;Result: 6000.000000&lt;br /&gt;&gt;&gt;&gt; exeval.change()&lt;br /&gt;Available function generation for evaluating expression...&lt;br /&gt;1. x*y+z&lt;br /&gt;2. x*y-z&lt;br /&gt;3. x*y*z&lt;br /&gt;4. x*y**z&lt;br /&gt;Please enter your choice(1,2,3,4): 4&lt;br /&gt;Create function for evaluating x*y**z ...&lt;br /&gt;Please try object.func() to see the change in evaluation.&lt;br /&gt;&gt;&gt;&gt; exeval.func()&lt;br /&gt;Result: 10737418239999999609046623630827404132352.000000&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&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/10123815-110913815668004692?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110913815668004692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110913815668004692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110913815668004692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110913815668004692'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/02/first-python-program_22.html' title='First python program'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110681656130496379</id><published>2005-01-27T01:59:00.000-08:00</published><updated>2005-01-27T01:30:12.403-08:00</updated><title type='text'>Never miss a space.</title><content type='html'>&lt;div style="text-align: justify;"&gt;I was till now, trying XSLT on Firefox.&lt;br /&gt;&lt;br /&gt;I used to have a XML generated by a application that had to print the&lt;br /&gt;&amp;lt;?xml-stylesheet type="text/xsl" href="somefile.xsl"?&amp;gt;&lt;br /&gt;that would instruct the application of XSL Transformation on this XML.&lt;br /&gt;&lt;br /&gt;I had a tough time to figure a small mistake of not having the space between the type value and href tag. My application would produce&lt;br /&gt;&amp;lt;?xml-stylesheet type="text/xsl"href="somefile.xsl"?&amp;gt;&lt;br /&gt;&lt;br /&gt;Firefox would still apply the XSL transformation to this XML. But I found that IE showed the whole document as XML. It was a really hard to figure what went wrong in IE that was perfectly fine in Firefox as it was really too late of the day and I was also looking at some other issue.&lt;br /&gt;&lt;br /&gt;Yes, finally I had a zoom in look at the XML rendered in IE and surprisingly found a missing space in between the type tag value and href tag.&lt;br /&gt;&lt;br /&gt;Yes, now I fixed the problem by adding a space and IE applied the XSL Transformation perfectly.&lt;br /&gt;&lt;br /&gt;Beware, IE looks even for a space to validate :)&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-110681656130496379?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110681656130496379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110681656130496379' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110681656130496379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110681656130496379'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/01/never-miss-space.html' title='Never miss a space.'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110681791912240721</id><published>2005-01-27T01:07:00.000-08:00</published><updated>2005-03-03T00:43:51.906-08:00</updated><title type='text'>ContentType problem!</title><content type='html'>&lt;div style="text-align: justify;"&gt;I was working with java servlet that would produce XML document  for which I would later apply XSLT&lt;br /&gt;to display the HTML on the client side.&lt;br /&gt;&lt;br /&gt;I made a small mistake that was really hard to find out when I was trying on IE.&lt;br /&gt;&lt;br /&gt;The IE (I was using) would display XML document by applying XSLT correctly when I requested my server to send the document first two times but when I requested for the third time then the server would send the XML document but now IE would not display it by applying XSLT. :(&lt;br /&gt;&lt;br /&gt;Now, I went and checked whether the XML missed out the stylesheet instruction, &lt;span style="font-style: italic;"&gt;NO I HAD&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now, I checked whether the stylesheet is correct and it is pointing to the correct location on server,&lt;span style="font-weight: bold; font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;"&gt;YES IT IS.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, I checked the same application with same actions on Firefox.&lt;br /&gt;&lt;br /&gt;Surprised, to see that same action in Firefox would display XML document applying XSLT any number of times I send the request.&lt;br /&gt;Oh, finally I fixed the problem, the server application, that is my java servlet, missed to set the content type of the response, (HttpServletResponse)response.setContentType("text/xml"); and this was the whole cause of the rendering problem.&lt;br /&gt;&lt;br /&gt;Now, I was really surprised to see how the first two request was being shown correctly using XSLT and not the third one. :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-110681791912240721?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110681791912240721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110681791912240721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110681791912240721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110681791912240721'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/01/contenttype-problem.html' title='ContentType problem!'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110681680904483075</id><published>2005-01-27T01:03:00.000-08:00</published><updated>2005-03-28T07:05:03.263-08:00</updated><title type='text'>GreaseMonkey Plugin.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hey, GreaseMonkey (&lt;a href="http://greasemonkey.mozdev.org/"&gt;http://greasemonkey.mozdev.org/&lt;/a&gt;) is really a cool extension to firefox. Using this you can customize the website you want, with your javascript.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;For example:&lt;/b&gt;&lt;br /&gt;On loading/reloading of the page (http://mail.yahoo.com) you can write a simple javascript to set the desired user name in the login box and install the script using greace monkey. And when you load the http://mail.yahoo.com you can see your java script in action.&lt;br /&gt;&lt;br /&gt;It is quite simple to install the user java script.&lt;br /&gt;&lt;i&gt;(First get the grease monkey plugin installed).&lt;/i&gt;&lt;br /&gt;1. Write a java script file having extension "user.js"&lt;br /&gt;&lt;i&gt;For example:&lt;/i&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;(function myOnLoad() {document.login_form.login.value="yahooId";})();&lt;/b&gt;&lt;br /&gt;&lt;/div&gt; 2. Open the file in the firefox.&lt;br /&gt;3. Click Tools -&gt; Install User Script&lt;br /&gt;4. In the Dialog box, Edit the entry with "*" and type http://mail.yahoo.com specifying that you are installing the javascript for http://mail.yahoo.com page and press OK.&lt;br /&gt;5. Open the page http://mail.yahoo.com&lt;br /&gt;&lt;br /&gt;You can see that 'YahooId' is displayed in Login&lt;br /&gt;&lt;br /&gt;Thats so simple. Enjoying exploring other things. :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10123815-110681680904483075?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110681680904483075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110681680904483075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110681680904483075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110681680904483075'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/01/greasemonkey-plugin.html' title='GreaseMonkey Plugin.'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10123815.post-110620482259030310</id><published>2005-01-20T13:34:00.000-08:00</published><updated>2005-03-03T00:42:42.896-08:00</updated><title type='text'>Get started with XML</title><content type='html'>&lt;div style="text-align: justify;"&gt;I wanted to get hold of some good reference to understand XML and know more about how is it being parsed how do we get the data into an application. I found few links that is really cool, that has some stuff that helps to get started with XML.&lt;br /&gt;&lt;br /&gt;Understand XML:&lt;br /&gt;&lt;a href="http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/overview/index.html"&gt;http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/overview/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using SAX API:&lt;br /&gt;&lt;a href="http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/sax/index.html"&gt;http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/sax/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using DOM API:&lt;br /&gt;&lt;a href="http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/dom/index.html"&gt;http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/dom/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using XSLT:&lt;br /&gt;&lt;a href="http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/xslt/index.html"&gt;http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/xslt/index.html&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/10123815-110620482259030310?l=prasadblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasadblog.blogspot.com/feeds/110620482259030310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10123815&amp;postID=110620482259030310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110620482259030310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10123815/posts/default/110620482259030310'/><link rel='alternate' type='text/html' href='http://prasadblog.blogspot.com/2005/01/get-started-with-xml.html' title='Get started with XML'/><author><name>Prasad.A</name><uri>http://www.blogger.com/profile/13643870081980612246</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
