<?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-13286014</id><updated>2012-01-17T03:53:38.305+05:30</updated><category term='sites'/><category term='linux'/><category term='apache'/><category term='ruby'/><category term='xml'/><category term='javascript'/><category term='personal'/><category term='mysql'/><category term='internet explorer'/><category term='php'/><category term='ajax'/><category term='perl'/><category term='web development'/><category term='editors'/><category term='browsers'/><category term='seo'/><category term='firefox'/><category term='accessibility'/><category term='blogger'/><category term='css'/><category term='opinion'/><category term='web 2.0'/><category term='design'/><category term='xhtml'/><category term='blogging'/><category term='review'/><category term='scripts'/><category term='google'/><category term='database'/><title type='text'>Bin-Blog</title><subtitle type='html'>Learn about the latest in Web Development - as soon as I do.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default?start-index=101&amp;max-results=100'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>186</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13286014.post-5850179539140582646</id><published>2007-04-30T00:37:00.000+05:30</published><updated>2007-04-30T00:40:50.647+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Nexty 1.0 Released</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RjTtcdl2LlI/AAAAAAAAAOM/jFGvbhoeBXk/s400/nexty_logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5058929354679397970" /&gt;
&lt;p class="intro"&gt;Remember &lt;a href="http://binnyva.blogspot.com/2007/02/nexty-beta-released.html"&gt;Nexty&lt;/a&gt;, the easy to use to-Do list manager using GTD principles? Well, that is ready for &lt;a href="http://nexty.sourceforge.net/"&gt;public release&lt;/a&gt;.&lt;/p&gt; 

&lt;p&gt;Nexty is a easy to use GTD tool created in PHP. It can be installed in a local server or in a online web server. The core idea behind this software is simplicity. I wanted to make a GTD tool that is the most easy to use.&lt;/p&gt;

&lt;h2&gt;Nexty Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nexty.sourceforge.net/"&gt;Nexty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/php/programs/apps/nexty/demo/"&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourceforge.net/projects/nexty"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nexty.svn.sourceforge.net/viewvc/nexty/"&gt;Code (SVN Repository)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourceforge.net/project/downloading.php?group_id=188197&amp;amp;filename=nexty_1.00.a.tar.gz"&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next project is ready - watch this space for its announcement.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/" rel="tag"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5850179539140582646?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5850179539140582646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5850179539140582646' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5850179539140582646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5850179539140582646'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/nexty-10-released.html' title='Nexty 1.0 Released'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RjTtcdl2LlI/AAAAAAAAAOM/jFGvbhoeBXk/s72-c/nexty_logo.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2873011306811783976</id><published>2007-04-23T23:53:00.000+05:30</published><updated>2007-04-23T23:54:57.019+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>My Moves: A History</title><content type='html'>&lt;p class="intro"&gt;As you already know, &lt;a href="http://www.bin-co.com/blog/"&gt;I have made my move&lt;/a&gt;. Moving from one domain to another is not new to me - I have moved a lot before. Here is a small picture that will show all my 'domain hops'...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/Riz56BGnCFI/AAAAAAAAAOE/2t_-63knPIk/s1600-h/sites.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/Riz56BGnCFI/AAAAAAAAAOE/2t_-63knPIk/s400/sites.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5056691256754112594" /&gt;&lt;/a&gt;

&lt;p&gt;http://binnyva.bizland.com/ (Dead now) - My first site.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://binnyva.tripod.com/"&gt;http://binnyva.tripod.com/&lt;/a&gt; - Started using Tripod when Bizland stopped my free account.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.geocities.com/binnyva/"&gt;http://www.geocities.com/binnyva/&lt;/a&gt; - Tripod became very slow due to all their ads - so I moved to Geocities.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://binnyva.blogspot.com/"&gt;http://binnyva.blogspot.com/&lt;/a&gt; - Decided that I have to get into this 'blog' thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.bin-co.com/"&gt;http://www.bin-co.com/&lt;/a&gt; - Finally, got a credit card - thus making it possible to by web space/domain. Once I got the card - I did not stop with just one domain - I bought some more...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.binnyva.com/"&gt;http://www.binnyva.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.binnyva.com/"&gt;http://blog.binnyva.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/"&gt;http://www.openjs.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/blog/"&gt;http://www.bin-co.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Serious articles from the next post...&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/history" rel="tag"&gt;history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2873011306811783976?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2873011306811783976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2873011306811783976' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2873011306811783976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2873011306811783976'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/my-moves-history.html' title='My Moves: A History'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/Riz56BGnCFI/AAAAAAAAAOE/2t_-63knPIk/s72-c/sites.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7355978865774737188</id><published>2007-04-20T21:58:00.000+05:30</published><updated>2007-04-20T21:59:51.451+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>I have moved my Blog</title><content type='html'>&lt;p class="intro"&gt;Every commenter in the last post agreed with me. As a result, I am moving the blog from &lt;a href="http://binnyva.blogspot.com/"&gt;http://binnyva.blogspot.com/&lt;/a&gt; to &lt;a href="http://www.bin-co.com/blog/"&gt;http://www.bin-co.com/blog/&lt;/a&gt;. From the next post onwards, the post will be duplicated here and in my Bin-Co site. At the end of this month, I will abandon this blog and focus on the new one.&lt;/p&gt;

&lt;p&gt;Abandon does not mean that I will delete the blog or its contents - that will stay. I will stop posting here. I will still carry out some maintenance tasks like weeding out the spam, repling to comments etc. However, from next month, no more new content will appear here.&lt;/p&gt;

&lt;p&gt;So the new blog URL is ...drum roll...&lt;/p&gt;

&lt;p style="text-align:center;font-size:x-large;"&gt;&lt;a href="http://www.bin-co.com/blog/"&gt;Bin-Blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a look - no contents yet. But still, feel free to look around my &lt;a href="http://www.bin-co.com/"&gt;Bin-Co&lt;/a&gt; site too.&lt;/p&gt;

&lt;h2&gt;Content Duplication&lt;/h2&gt;

&lt;p&gt;One of my tougher decision was &lt;strong&gt;not to import the contents of this blog into the new one&lt;/strong&gt;. So, the contents in this blog will not be there in the new blog. One major reason is &lt;a class="external" href="http://googlewebmastercentral.blogspot.com/2006/12/deftly-dealing-with-duplicate-content.html"&gt;content duplication&lt;/a&gt;. I don't want to be &lt;a class="external" href="http://www.searchenginejournal.com/duplicate-content-penalty-how-to-lose-google-ranking-fast/1886/"&gt;penalized for duplicate content&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Feed&lt;/h2&gt;

&lt;p&gt;Please DO NOT update/change the feed URL. I am using &lt;a href="http://www.feedburner.com/" class="external"&gt;FeedBurner&lt;/a&gt; - and I will change the source feed when the time is right. So, you don't have to change the feed URL.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogging" rel="tag"&gt;blogging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogger" rel="tag"&gt;blogger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wordpress" rel="tag"&gt;wordpress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/site" rel="tag"&gt;site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7355978865774737188?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7355978865774737188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7355978865774737188' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7355978865774737188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7355978865774737188'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/i-have-moved-my-blog.html' title='I have moved my Blog'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-3468185043577125361</id><published>2007-04-16T00:38:00.000+05:30</published><updated>2007-04-16T00:43:04.914+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Should I move my Blog?</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RiJ4d8JuF7I/AAAAAAAAAN8/W_s9vOKq5XE/s400/wp_blogger.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5053734187621554098" /&gt;
&lt;p class="intro"&gt;Lately, I am under a lot of pressure to &lt;strong class="highlight"&gt;move this blog to one of my own servers&lt;/strong&gt;. I have &lt;a href="http://binnyva.blogspot.com/2006/03/moving-blog-from-blogspot.html"&gt;thought about this before&lt;/a&gt;. I even have moved parts of it - like &lt;a href="http://binnyva.blogspot.com/2006/07/new-blog-binnyva.html"&gt;BinnyVA&lt;/a&gt; and &lt;a href="http://binnyva.blogspot.com/2006/04/my-new-site-openjscom.html"&gt;OpenJS&lt;/a&gt; - but never moved the site entirely. Moving has its advantages and its disadvantages. Before I make the decision, I thought I will ask the site's readers for some feedback. So, what do you think guys? Should I move to my own domain?&lt;/p&gt;

&lt;h2&gt;Advantages of Moving&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;More Serious&lt;/dt&gt;
&lt;dd&gt;A blog that has its own domain will be &lt;strong class="highlight"&gt;considered by many to be more serious&lt;/strong&gt; than a blogspot site.&lt;/dd&gt;
&lt;dt&gt;WordPress!&lt;/dt&gt;
&lt;dd&gt;A self-hosted WordPress blog is a better blogging platform than Blogger&lt;/dd&gt;
&lt;dt&gt;Control&lt;/dt&gt;
&lt;dd&gt;WordPress gives the user a lot more &lt;strong class="highlight"&gt;control&lt;/strong&gt; than blogger&lt;/dd&gt;
&lt;dt&gt;Easier Commenting&lt;/dt&gt;
&lt;dd&gt;I &lt;strong class="highlight"&gt;can take the captcha out of commenting&lt;/strong&gt; - Akismet will protect me from spam - even though there is some problems - &lt;a href="http://binnyva.blogspot.com/2007/04/i-am-not-spam.html"&gt;like false positives&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;Google Juice Sharing&lt;/dt&gt;
&lt;dd&gt;If I move, I plan to move my blog to &lt;a href="http://www.bin-co.com/blog/"&gt;http://www.bin-co.com/blog/&lt;/a&gt;. &lt;dd&gt;So all the SEO advantage for the blog will be available for &lt;a href="http://www.bin-co.com/"&gt;Bin-Co.com&lt;/a&gt; and all its SEO advantage will be available for the blog. A nice setup.&lt;/dd&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Disadvantages&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;SEO&lt;/dt&gt;
&lt;dd&gt;I have many links pointing to this site - this includes one &lt;a class="external" href="http://www.digg.com/design/Creating_Web_2_0_Graphics_In_Gimp"&gt;Digg Homepage appearance&lt;/a&gt;. I will lose all those advantages if I move away. This is the main reason I have not moved away yet.&lt;/dd&gt;
&lt;dt&gt;Maintenance overhead&lt;/dt&gt;
&lt;dd&gt;even though there is automatic installation and updating for WordPress in &lt;a class="external" href="http://www.dreamhost.com/r.cgi?179344"&gt;Dreamhost&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;Server Capability&lt;/dt&gt;
&lt;dd&gt;In the event of a Digging, a blogger site has more chance of staying alive than a smaller site. But I believe my hosting can take a beating before going down. But still, Dreamhost has its, how shall I put it..., &lt;a class="external" href="http://blog.dreamhost.com/2006/08/01/anatomy-of-an-ongoing-disaster/"&gt;issues&lt;/a&gt;.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;What do YOU think?&lt;/h2&gt;

&lt;p&gt;I am forced to consider this move because many people have asked my why I am still on Blogger - despite having many sites of my own. Look at the &lt;a href="http://binnyva.blogspot.com/2007/04/i-am-not-spam.html#comments"&gt;comments on my last post&lt;/a&gt; - &lt;a class="external" href="http://www.benh.org/techblog"&gt;Benedict Herold&lt;/a&gt; has only one thing to say. Can't blame him - he already has made the move - from &lt;a class="external" href="http://www.benh.org/techblog/2007/02/migrating-new-blogger-to-wordpress-2/"&gt;Blogger to WordPress&lt;/a&gt;. He even has a neat picture to explain which is the better platform.&lt;/p&gt;

&lt;p&gt;Then there is &lt;a class="external" href="http://ajaydsouza.com/"&gt;Ajay&lt;/a&gt;. Says &lt;a class="external" href="http://ajaydsouza.com/archives/2007/03/06/why-you-should-comment-on-my-blog/#comment-19810"&gt;he won't comment on my site&lt;/a&gt; unless I move to wordpress. When ever I chat with him, he wants to know if I will move to wordpress ;-). So, Ajay, here is your chance to have your say - should I move or not. Comment on this post, OK? Even if you think it is a bit slow for you.&lt;/p&gt;

&lt;p&gt;Think of this as &lt;strong class="highlight"&gt;a voting system. If enough people ask me to move, I will move&lt;/strong&gt;. I am sure that &lt;a href="http://www.bloghash.com/" class="external"&gt;many&lt;/a&gt; of my &lt;a href="http://www.jaysonjc.com/" class="external"&gt;readers&lt;/a&gt; &lt;a class="external" href="http://www.nirmaltv.com/" class="external"&gt;will&lt;/a&gt; have some thoughts regarding this as well.&lt;/p&gt;

&lt;p&gt;So, what do you think? &lt;strong class="highlight"&gt;Should I make the move? Leave a comment&lt;/strong&gt;. Do you have any experience to share about moving your blog? Let me know.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogging" rel="tag"&gt;blogging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogger" rel="tag"&gt;blogger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wordpress" rel="tag"&gt;wordpress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/move" rel="tag"&gt;move&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/server" rel="tag"&gt;server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-3468185043577125361?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/3468185043577125361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=3468185043577125361' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3468185043577125361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3468185043577125361'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/should-i-move-my-blog.html' title='Should I move my Blog?'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RiJ4d8JuF7I/AAAAAAAAAN8/W_s9vOKq5XE/s72-c/wp_blogger.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1044602351634393402</id><published>2007-04-10T23:23:00.000+05:30</published><updated>2007-04-10T23:26:11.861+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='opinion'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>I am NOT Spam!</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RhvPisJuF6I/AAAAAAAAAN0/ZzBAs-Gd0Hc/s400/spam.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5051859601900574626" /&gt;

&lt;p class="intro"&gt;When I was making the last post, I noticed something that was not there before - a word verification for posting. It was a rude shock for me - like a surcharge in a formerly surcharge free ATM. Turns out, the great &lt;strong&gt;Google bots think that this is a spam blog&lt;/strong&gt;. Guys, this is not a spam blog! &lt;a href="http://binnyva.wordpress.com/"&gt;I have a spam blog&lt;/a&gt; - but this is &lt;strong&gt;not&lt;/strong&gt; it.&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RhvPb8JuF5I/AAAAAAAAANs/lf9NtyTVio4/s400/spam_blog_1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5051859485936457618" /&gt;

&lt;blockquote&gt;&lt;p&gt;Your blog requires word verification&lt;/p&gt;

&lt;p&gt;Blogger's spam-prevention robots have detected that your blog has characteristics of a spam blog. (What's a spam blog?) Since you're an actual person reading this, your blog is probably not a spam blog. Automated spam detection is inherently fuzzy, and we sincerely apologize for this false positive.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Luckily there was an option to say that this blog is not spam. Needless to say, I used that option, and they sent out real humans to test my site. Before long, I was cleared of all wrong doings :-)&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;We received your unlock request on April 5, 2007. On behalf of the robots, we apologize for locking your non-spam blog. Please be patient while we take a look at your blog and verify that it is not spam.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;All jokes aside, I appreciate the fact that the Blogger team is working hard to get rid of the spam blogs in blogger. Blogger is just infected with those. A side effect of this is that I cannot comment on other people's blog using my blog's address(&lt;a href="http://binnyva.blogspot.com/"&gt;http://binnyva.blogspot.com/&lt;/a&gt;) as the URL. Akismet thinks that since I use a blogger site, my comment must be spam.&lt;/p&gt;

&lt;p&gt;Just a friendly reminder to the guys using &lt;a href="http://akismet.com/"&gt;Akismet Plugin&lt;/a&gt; - its great for blocking spam - I use it myself. But &lt;a href="http://blog.liip.ch/archive/2006/11/27/akismet-false-positives.html"&gt;there&lt;/a&gt; &lt;a href="http://www.makeyougohmm.com/20051204/2693/"&gt;is&lt;/a&gt; &lt;a href="http://zed1.com/journalized/archives/2006/01/07/akismet-problems/"&gt;quite&lt;/a&gt; a &lt;a href="http://katesgasis.com/2006/02/09/akismet-false-positives/"&gt;few&lt;/a&gt; &lt;a href="http://wordpress.org/support/topic/92169"&gt;instance&lt;/a&gt; of &lt;a href="http://www.problogger.net/archives/2007/01/18/are-your-comments-being-filtered-as-spam-at-problogger"&gt;false&lt;/a&gt; &lt;a href="http://www.dellanave.com/blog/2006/11/27/akismet-with-local-whitelist/"&gt;positives&lt;/a&gt; - ie. legitimate comments marked as spam. So make sure you check the spam folder often. False negatives I can stand - but not false positives. That's bad.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/spam" rel="tag"&gt;spam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogging" rel="tag"&gt;blogging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogger" rel="tag"&gt;blogger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/comment" rel="tag"&gt;comment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/akismet" rel="tag"&gt;akismet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1044602351634393402?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1044602351634393402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1044602351634393402' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1044602351634393402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1044602351634393402'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/i-am-not-spam.html' title='I am NOT Spam!'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RhvPisJuF6I/AAAAAAAAAN0/ZzBAs-Gd0Hc/s72-c/spam.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8607911233944943002</id><published>2007-04-06T01:31:00.000+05:30</published><updated>2007-04-06T01:36:34.867+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Naked Days are here again!</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RhVWomoRJ0I/AAAAAAAAANk/zKR7uREEBG0/s400/naked-day-07.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5050037812730079042" /&gt;
&lt;p class="intro"&gt;Once again, its time to take off your stylesheets. April 5&lt;sup&gt;th&lt;/sup&gt; is the official &lt;a href="http://naked.dustindiaz.com/" class="external"&gt;Naked Day&lt;/a&gt; for websites. My sites &lt;a class="mypages" href="http://www.bin-co.com/"&gt;Bin-Co&lt;/a&gt; and &lt;a class="mypages" href="http://www.openjs.com/"&gt;OpenJS&lt;/a&gt; will be naked for this day.&lt;/p&gt;

&lt;blockquote&gt;The idea behind this event is to promote Web Standards. Plain and simple. This includes proper use of (x)html, semantic markup, a good hierarchy structure, and; well, a fun play on words. I mean, who doesn't want to get naked?&lt;/blockquote&gt;

&lt;p&gt;I participated in this event the last year. Some thoughts from back then...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/04/annual-naked-xhtml-day.html"&gt;Annual Naked (X)HTML Day&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/04/preparations-for-naked-css-day.html"&gt;Preparations for Naked CSS Day&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/04/happy-naked-css-day-everyone.html"&gt;Happy Naked CSS Day Everyone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;What about this site?&lt;/h3&gt;

&lt;p&gt;No - this site will not drop its stylesheets - in blogger it is just too much work.&lt;/p&gt;

&lt;h3&gt;What about You?&lt;/h3&gt;

&lt;p&gt;Will you be naked today? If so, post a comment with your URL.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/naked" rel="tag"&gt;naked&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/css" rel="tag"&gt;css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/stylesheet" rel="tag"&gt;stylesheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/accessibility" rel="tag"&gt;accessibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8607911233944943002?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8607911233944943002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8607911233944943002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8607911233944943002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8607911233944943002'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/naked-days-are-here-again.html' title='Naked Days are here again!'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/RhVWomoRJ0I/AAAAAAAAANk/zKR7uREEBG0/s72-c/naked-day-07.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1239507984781900930</id><published>2007-04-03T00:45:00.000+05:30</published><updated>2007-04-03T00:48:50.028+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Using Twitter, Part 3 - Offline Twitter</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RhFW5ktr1II/AAAAAAAAANc/z4-Wn8H61OY/s400/twitter.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5048912204366861442" /&gt;

&lt;p class="intro"&gt;In my last post about the use of twitter, I said that my primary purpose for &lt;a href="http://binnyva.blogspot.com/2007/03/using-twitter-part-2-use-of-twitter.html" class="internal"&gt;using twitter&lt;/a&gt; is to track my time. However twitter is not created for that use. It is very difficult to track your time using twitter. But there is an easy solution to this problem - create an offline twitter.&lt;/p&gt;

&lt;p&gt;Twitter is a huge application - but offline twitter is not. The whole application is just 4 lines of PHP code. Yes - that's right - just 4 lines. And a database.&lt;/p&gt;

&lt;h2&gt;Database&lt;/h2&gt;

&lt;p&gt;The database is just one table(OT) with 3 fields. The simplest solution is often the best.&lt;/p&gt;

&lt;img src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RhFWnUtr1HI/AAAAAAAAANU/lUmFOwuw3cA/s400/db.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5048911890834248818" /&gt;

&lt;pre&gt;&lt;code class="sql"&gt;
CREATE TABLE `OT` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `status` varchar(255) NOT NULL,
  `time` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM ;&lt;/code&gt;&lt;/pre&gt;
        
&lt;h2&gt;PHP Code&lt;/h2&gt;

&lt;p&gt;This code will be the entire application(if you can call it that). Just save this to a file called, say, &lt;code&gt;OT.php&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;&amp;lt;?php
if(!$_REQUEST['status']) exit;
mysql_connect('localhost','root','pass') or die("Cannot connect to mysql Server");
mysql_select_db('Data') or die("No database called 'Data'");
mysql_query("INSERT INTO OT VALUES('','$_REQUEST[status]',NOW())");
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you want to use a database abstraction layer, be my guest. If you escape the &lt;code&gt;$_REQUEST[status]&lt;/code&gt; before using it in the query, by all means do so. But, the result will be the same. An offline twitter using just 4 lines of code.&lt;/p&gt;

&lt;h2&gt;Input&lt;/h2&gt;

&lt;p&gt;So, how does one enter new status into this system? By making a small modification to the &lt;a href="http://binnyva.blogspot.com/2007/03/using-twitter-part-1-command-line.html"&gt;command line twitter client&lt;/a&gt;...&lt;/p&gt;

&lt;pre&gt;&lt;code class="cli"&gt;curl --data-ascii "status=`echo $@|tr ' ' '+'`" "http://localhost/tools/OT.php"
curl --basic --user "&amp;lt;User&amp;gt;:&amp;lt;Password&amp;gt;" --data-ascii "status=`echo $@|tr ' ' '+'`" "http://twitter.com/statuses/update.json"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The first line will send the status to my PHP file and the second will send it to the twitter server. Now I have all the status in the database.&lt;/p&gt;

&lt;h2&gt;View the Contents&lt;/h2&gt;

&lt;p&gt;I have still not created an interface that will use this database to show my time useage. If I want to know something, I just open up &lt;a href="http://www.bin-co.com/database/clients/phpmyadmin/" class="mypages"&gt;phpMyAdmin&lt;/a&gt; and run an SQL query.&lt;/p&gt;

&lt;p&gt;I know - this method is not for everyone. You need to be on linux to use my command line client. You must have a web server and a MySQL server running for this method to work. But if you are working on the LAMP platform, you will have this stuff ready.&lt;/p&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/twitter" rel="tag"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/php" rel="tag"&gt;php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/offline" rel="tag"&gt;offline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/application" rel="tag"&gt;application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/script" rel="tag"&gt;script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1239507984781900930?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1239507984781900930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1239507984781900930' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1239507984781900930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1239507984781900930'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/04/using-twitter-part-3-offline-twitter.html' title='Using Twitter, Part 3 - Offline Twitter'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sOe-_HH8vVU/RhFW5ktr1II/AAAAAAAAANc/z4-Wn8H61OY/s72-c/twitter.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-5146328496617706340</id><published>2007-03-27T01:25:00.000+05:30</published><updated>2007-03-27T01:27:23.908+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='opinion'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><title type='text'>Using Twitter, Part 2 - The Use of Twitter</title><content type='html'>&lt;img class="intro" style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RgglgF_tDHI/AAAAAAAAANM/xezCaUfwsL8/s400/twitter.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5046324615764053106" /&gt;
&lt;p class="intro"&gt;Why do one use twitter? Why do you have to inform others about what you are doing? There are many answers to this question.&lt;/p&gt;

&lt;h2&gt;&lt;a class="external" href="http://headrush.typepad.com/creating_passionate_users/2007/03/is_twitter_too_.html"&gt;Intermittent variable reward&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kathy Sierra is of the opinion that a 'slot machine' like reward system exists for twitter users. That is, they get a reward sometimes(not always) - so they keep on using the system for that reward.&lt;/p&gt;

&lt;h2&gt;Addictive&lt;/h2&gt;

&lt;p&gt;&lt;a class="external" href="http://www.jaysonjc.com/2007/03/23/twitter-tricks-tips-and-tools/"&gt;Many&lt;/a&gt; &lt;a class="external" href="http://www.thewavingcat.com/2007/03/13/twitter-is-so-damn-addictive/"&gt;people&lt;/a&gt; have described twitter as addictive. But, I still have not found it addictive - I only remember to make an update once in a while. Maybe that is because I have turned off the &lt;abbr title="Instant Messaging"&gt;IM&lt;/abbr&gt; feature.&lt;/p&gt;

&lt;h2&gt;Keeping in touch&lt;/h2&gt;

&lt;p&gt;A lot of people have said that they can keep in touch with their friends using twitter. This reason is not for me. I am a geek. And by definition, I am a loner(or was that 'nerd' - &lt;a class="external" href="http://catandgirl.com/view.php?loc=94"&gt;I get those two confused&lt;/a&gt;). So, I don't what to be connected with others - if anything, I want to be &lt;strong&gt;disconnected&lt;/strong&gt; from them.&lt;/p&gt;

&lt;h2&gt;Keeping track of Time&lt;/h2&gt;

&lt;p&gt;Twitter can be used to keep track of your activities. But it is not a tool made for this - so it is very limited for this purpose. But, this is the reason why I use twitter.&lt;/p&gt;

&lt;p&gt;Ever since &lt;a href="http://binnyva.blogspot.com/2007/03/quiting-job.html"&gt;I resigned from my job&lt;/a&gt;, I have been noticing a huge time leak. I cannot understand how my time is disappearing - but it is doing that with great efficiency. So I have turned to twitter to make things better.&lt;/p&gt;

&lt;p&gt;More on this topic in the next post.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a class="external" href="http://www.horsepigcow.com/2007/03/15/twits-twittering-for-the-sake-of-tweets-or-thats-not-why-i-twitter/#comments"&gt;Twits Twittering for the sake of Tweets: or that’s not why I twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="external" href="http://adactio.com/journal/1271/"&gt;Twitter… again&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="external" href="http://www.micropersuasion.com/2007/03/twitter_human_a.html"&gt;Twitter, Human Attention and Moore's Law&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/twitter" rel="tag"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/addiction" rel="tag"&gt;addiction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sites" rel="tag"&gt;sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogging" rel="tag"&gt;blogging&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5146328496617706340?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5146328496617706340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5146328496617706340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5146328496617706340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5146328496617706340'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/using-twitter-part-2-use-of-twitter.html' title='Using Twitter, Part 2 - The Use of Twitter'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sOe-_HH8vVU/RgglgF_tDHI/AAAAAAAAANM/xezCaUfwsL8/s72-c/twitter.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7047027648374909263</id><published>2007-03-22T05:30:00.000+05:30</published><updated>2007-03-22T05:37:34.907+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Using Twitter, Part 1 - Command Line Twitter Client</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RgHHa95_8hI/AAAAAAAAAM0/Fg-xRIYXZ2Y/s400/twitter.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5044532323740021266" /&gt;
&lt;p class="intro"&gt;You may have heard of Twitter - if not, &lt;strong class="highlight"&gt;it is a microblogging platform that allows members to tell each other what they are doing&lt;/strong&gt; and what they think. There was a huge buzz about twitter recently - made me create &lt;a class="external" href="http://twitter.com/binnyva"&gt;an account&lt;/a&gt; on twitter. I tried to post through the web interface - but that's not a very intuitive method. The IM method is much better - but it almost never works. So I ended up making another method - the &lt;abbr title="Command Line Interface"&gt;CLI&lt;/abbr&gt; method. Or &lt;strong class="highlight"&gt;twittering using the Command Line&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before going any further, let me say that &lt;strong class="highlight"&gt;this method is for Linux&lt;/strong&gt;. You can use this method in windows as well - but you have to install the &lt;a class="external" href="http://www.rahul.net/dkaufman/index.html"&gt;windows port for curl&lt;/a&gt;. Even if you manage to get this method to work on windows, most of the major advantages of this method will be lost.&lt;/p&gt;

&lt;p&gt;This &lt;abbr title="South by Southwest"&gt;SxSW&lt;/abbr&gt; was huge for twitter - not only did it win the 2007 South by Southwest Web Award, they also got a lot of &lt;a class="external" href="http://www.quirksmode.org/blog/archives/2007/03/on_twitter.html"&gt;new members&lt;/a&gt;. But lately it is getting some &lt;a class="external" href="http://web1979.wordpress.com/2007/03/14/rip-twitter-2007-2007/"&gt;negative&lt;/a&gt; &lt;a class="external" href="http://headrush.typepad.com/creating_passionate_users/2007/03/is_twitter_too_.html"&gt;reviews&lt;/a&gt; as well.&lt;/p&gt;

&lt;h2&gt;Quick Posting&lt;/h2&gt;

&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RgHH7N5_8iI/AAAAAAAAAM8/XH_ly74Jrao/s400/save_button.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5044532877790802466" /&gt;

&lt;p&gt;One of the main feature of twitter is the &lt;strong class="highlight"&gt;fast publishing time&lt;/strong&gt;. You type something into a text box and click submit - and the stuff is published. That's fast! The only problem is that you need to &lt;strong class="highlight"&gt;open a browser and type in the URL to get to that text box&lt;/strong&gt;. I need something faster. The &lt;abbr title="Instant Messaging"&gt;IM&lt;/abbr&gt; method is a bit faster - but it rarely works. This situation will change in the future - but I don't want to wait.&lt;/p&gt;

&lt;p&gt;The fastest method I can think of is like this - &lt;strong class="highlight"&gt;I press a keyboard combination and an small text box opens up. I type in the status and press Submit and this application will post the data&lt;/strong&gt; to the twitter site using the Twitter &lt;abbr title="Application Programmable Interface"&gt;API&lt;/abbr&gt;. The only problem is there is no such application. That's when I decided to do something about it. Of course, I am too lazy to create an entire application for it - so I had to settle for the next best method - posting from a terminal.&lt;/p&gt;

&lt;h2&gt;Posting from a Terminal&lt;/h2&gt;

&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RgHIWN5_8jI/AAAAAAAAANE/E1Z3Wsvx63Y/s400/terminal.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5044533341647270450" /&gt;
&lt;p&gt;I have configured my system to open the Terminal(konsole) when I press Ctrl+Alt+A. Now all I have to do is create a command, say, 'twitter' that will publish the command line arguments to the twitter site. My input will be something like this.&lt;/p&gt;

&lt;p&gt;Ctrl+Alt+A&lt;br /&gt;
twitter "Using the CLI Twitter client"&lt;/p&gt;

&lt;p&gt;That's fast enough for me.&lt;/p&gt;

&lt;h2&gt;Twitter API&lt;/h2&gt;

&lt;p&gt;To create the script, I took a look at the &lt;a class="external" href="http://twitter.com/help/api"&gt;twitter API&lt;/a&gt;...&lt;/p&gt;

&lt;blockquote cite="http://twitter.com/help/api"&gt;
&lt;p&gt;All of the methods (except for the public timeline) require user authentication via Basic Auth. The username is the email address you have stored on Twitter, the password, your password.&lt;/p&gt;

&lt;p&gt;....&lt;/p&gt;

&lt;p&gt;Updating your Twitter&lt;/p&gt;

&lt;p&gt;Done with a HTTP POST using the "status" parameter. status=Walking the dog.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;http://twitter.com/statuses/update.json&lt;/li&gt;
&lt;li&gt;http://twitter.com/statuses/update.xml&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;

&lt;p&gt;The simplest API I have ever seen.&lt;/p&gt;

&lt;h2&gt;Curl&lt;/h2&gt;

&lt;p&gt;After I saw that API, I realized that I don't need to do any coding to create the application - I just need to use the curl command. &lt;strong class="highlight"&gt;curl is  a tool to transfer data from or to a server&lt;/strong&gt;. All I have to do is execute this command...&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl --basic --user "&amp;lt;User&amp;gt;:&amp;lt;Password&amp;gt;" --data-ascii "status=&amp;lt;Twitter status&amp;gt;" "http://twitter.com/statuses/update.json"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In my case it will be&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl --basic --user "binnyva:******" --data-ascii "status=Using Twitter from command line" "http://twitter.com/statuses/update.json"
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;The Twitter Shell Script&lt;/h2&gt;

&lt;p&gt;But I don't think you would like to type all that everytime you want to twitter. So we have to put it into an executable file. Also, we have to modify the script to enable the support for command line arguments.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl --basic --user "&amp;lt;User&amp;gt;:&amp;lt;Password&amp;gt;" --data-ascii "status=`echo $@|tr ' ' '+'`" "http://twitter.com/statuses/update.json"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong class="highlight"&gt;Replace the &amp;lt;User&amp;gt; and &amp;lt;Password&amp;gt; with your twitter user id and password. Now save the text to a file called 'twitter' and give the file execute permission. Put this file in any folder in your path&lt;/strong&gt;(like &lt;code&gt;/usr/local/bin&lt;/code&gt; or &lt;code&gt;~/bin&lt;/code&gt;)&lt;/p&gt;

&lt;h2&gt;Using Twitter &lt;abbr title="Command Line Interface"&gt;CLI&lt;/abbr&gt;&lt;/h2&gt;

&lt;p&gt;Just call the command with your message as the argument - like this&lt;/p&gt;

&lt;pre&gt;twitter Writting Content for Bin-Blog about twitter.
twitter "Using Twitter CLI"&lt;/pre&gt;

&lt;p&gt;For best results, enclose the message within quotes. This will prevent problems when using wild card characters like '?'&lt;/p&gt;

&lt;h2&gt;Twitter Users&lt;/h2&gt;

&lt;p&gt;Before I leave, how many of my readers are twitter users? OK, you three - leave a comment with your twitter ID. By the way, I am &lt;a class="external" href="http://twitter.com/binnyva"&gt;binnyva&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Another thing - this script is thrown together in a very short time - is there a better, more foolproof way of doing this? If you know one, &lt;strong class="highlight"&gt;leave a comment&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/twitter" rel="tag"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/cli" rel="tag"&gt;cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/curl" rel="tag"&gt;curl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/command" rel="tag"&gt;command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/shell" rel="tag"&gt;shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/script" rel="tag"&gt;script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7047027648374909263?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7047027648374909263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7047027648374909263' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7047027648374909263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7047027648374909263'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/using-twitter-part-1-command-line.html' title='Using Twitter, Part 1 - Command Line Twitter Client'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RgHHa95_8hI/AAAAAAAAAM0/Fg-xRIYXZ2Y/s72-c/twitter.png' height='72' width='72'/><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-6191116795467469350</id><published>2007-03-18T01:27:00.000+05:30</published><updated>2007-03-18T01:43:04.770+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='opinion'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Saving Code Snippets - Part 2</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RfxIhwQM5YI/AAAAAAAAAMo/qE-mQbHJZLI/s400/files_tagging.jpg" border="0" alt="Fileing" id="BLOGGER_PHOTO_ID_5042985427473851778" /&gt;

&lt;p class="intro"&gt;In the last post, we saw &lt;a href="http://binnyva.blogspot.com/2007/03/saving-code-snippets-part-1.html"&gt;various methods of storing text snippets&lt;/a&gt;. Each of the discussed methods had its advantages and disadvantages. I could not use any of those methods. But eventually I found one method that was perfect. It was &lt;a class="external" href="http://www.wordpress.org/"&gt;WordPress&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My requirements for a text snippets storing system are simple...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Must be able to store text snippets (Duh!)&lt;/li&gt;
&lt;li&gt;Searchable&lt;/li&gt;
&lt;li&gt;Tagging support&lt;/li&gt;
&lt;li&gt;Easy to use interface&lt;/li&gt;
&lt;li&gt;Backupable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After looking at the list for a few moments, I had an epiphany. I don't need a custom solution for this problem - all I have to do is make a few adjustments to a system I am already using. I already have &lt;a href="http://blog.binnyva.com/"&gt;experience using WordPress&lt;/a&gt; - so there is no learning curve.&lt;/p&gt;

&lt;p&gt;So, I created a new domain and installed WordPress using &lt;a class="external" href="http://www.dreamhost.com/r.cgi?179344"&gt;Dreamhost&lt;/a&gt;'s One Click install system. I made a few adjustments to the default configuration, installed a few plugins, customized the theme - and I have a shiny new site...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://txt.binnyva.com/"&gt;txt&lt;/a&gt; - Text Snippets collection of BinnyVA&lt;/p&gt;

&lt;p&gt;Go on, click on that link and play around on my &lt;a href="http://txt.binnyva.com/"&gt;Text Snippets collection&lt;/a&gt; for a while - I'll wait.&lt;/p&gt;

&lt;h2&gt;Storing Text Snippets using WordPress&lt;/h2&gt;

&lt;h3&gt;Advantages&lt;/h3&gt;

&lt;dl&gt;
&lt;dt&gt;New Site&lt;/dt&gt;
&lt;dd&gt;You have a new site which will be updated frequently - without having to put much effort into it. Another plus point is that your collection is useful for others also.&lt;/dd&gt;

&lt;dt&gt;Stable/Supported Platform&lt;/dt&gt;
&lt;dd&gt;WordPress is an industry standard Platform - used by thousands of people world wide. If you run into a problem, you will be able to get help.&lt;/dd&gt;

&lt;dt&gt;Open Source&lt;/dt&gt;
&lt;dd&gt;You can modify the software - and make it 'just right' for your need.&lt;/dd&gt;

&lt;dt&gt;Offline Access Possible&lt;/dt&gt;
&lt;dd&gt;Just install the WordPress on your system and sync the database once in a while.&lt;/dd&gt;

&lt;dt&gt;Multiple Clients can be used&lt;/dt&gt;
&lt;dd&gt;You are not forced to use the WordPress's web interface to add/edit snippets - there are a &lt;a class="external" href="http://codex.wordpress.org/Weblog_Client"&gt;lot of clients that support WordPress&lt;/a&gt;. I prefer &lt;a href="http://preview.addons.mozilla.org/en-US/firefox/addon/1730"&gt;ScribeFire&lt;/a&gt;(was known as Performancing earlier).&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Disadvantages&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added overhead of managing a new site&lt;/li&gt;
&lt;li&gt;Need Hosting&lt;/li&gt;
&lt;li&gt;Need net access&lt;/li&gt;
&lt;li&gt;Need a web/database server for Offline site&lt;/li&gt;
&lt;li&gt;The purpose of the tool is different&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Tagging Problem&lt;/h2&gt;

&lt;p&gt;There was one problem associated with using WordPress for this purpose - tagging. Sure, you could use categories to tag each snippet - but that is nowhere as intuitive as, say, tagging on &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;. To add a new category, you have to use a separate text field - instead of just typing it after a ','. That is when I found out about a great WordPress plugin - &lt;a class="external" href="http://www.neato.co.nz/ultimate-tag-warrior/"&gt;Ultimate Tag Warriors&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Ultimate Tag Warrior&lt;/h3&gt;

&lt;p&gt;Using Ultimate Tag Warrior you can tag your post with multiple tags. These are completely independent of the 'Categories' feature of wordpress. Two important features for this plugin makes it perfect for our purpose.&lt;/p&gt;

&lt;h4&gt;Friendly Link support&lt;/h4&gt;

&lt;p&gt;del.icio.us style links makes it easier for us to find the snippets later on. For example, the URL for all the text snippets with the tag 'perl' is &lt;a href="http://txt.binnyva.com/tag/perl"&gt;http://txt.binnyva.com/tag/perl&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Can embed tags inside the content&lt;/h4&gt;

&lt;p&gt;You can specify the tags within the content of the post - you are not forced to use the web panel's tags field to do it. This makes it possible to tag the text snippets even if you are posting from a client.&lt;/p&gt;

&lt;p&gt;All you have to do is is enclose the tags within '[tags]...[/tags]'. For example, say you wish to tag a snippet, with &lt;code&gt;database, mysql, sql&lt;/code&gt;. So you put this at the end of the snippet...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[tags]database, mysql, sql[/tags]&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;txt&lt;/h2&gt;

&lt;p&gt;My &lt;a href="http://txt.binnyva.com/"&gt;Text Snippets collection&lt;/a&gt; site have been running for two months. As of yet, I don't have a single complaint about it. In my opinion, this is the best method to store text snippets. If you know a better way of doing this, please let me know.&lt;/p&gt;

&lt;p&gt;Most of the saved snippets on txt are &lt;a href="http://txt.binnyva.com/category/command-line/"&gt;Linux Commands&lt;/a&gt;. There are some &lt;a href="http://txt.binnyva.com/category/code/"&gt;code snippets&lt;/a&gt; as well. This is a site where I store script snippets, Linux commands and other such tidbits of information. The posts will be minimal and often crude.&lt;/p&gt;

&lt;p&gt;Before leaving you, I want to highlight some cool snippets in that site...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://txt.binnyva.com/2007/03/shortest-way-to-create-an-xmlhttprequest-object/"&gt;Shortest way to create an XMLHttpRequest object&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://txt.binnyva.com/category/code/php/"&gt;Using PHP's Curl functions behind a Proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for Linux users...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://txt.binnyva.com/2007/03/cvs-through-proxy/"&gt;Using CVS Through Proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://txt.binnyva.com/2007/03/download-entire-folder-using-wget-command-in-linux/"&gt;Download Entire Site/Folder using Wget Command in Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://txt.binnyva.com/2007/03/mysql-database-backuprestore/"&gt;MySQL Database Backup/Restore&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/text" rel="tag"&gt;text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/snippet" rel="tag"&gt;snippet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/code" rel="tag"&gt;code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wordpress" rel="tag"&gt;wordpress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-6191116795467469350?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/6191116795467469350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=6191116795467469350' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6191116795467469350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6191116795467469350'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/saving-code-snippets-part-2.html' title='Saving Code Snippets - Part 2'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RfxIhwQM5YI/AAAAAAAAAMo/qE-mQbHJZLI/s72-c/files_tagging.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-6451257619521617934</id><published>2007-03-15T01:10:00.000+05:30</published><updated>2007-03-18T01:41:20.544+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='opinion'/><title type='text'>Saving Code Snippets - Part 1</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RfhQEZ5KlvI/AAAAAAAAAMc/fLzmudXKFCA/s400/284743_card_index_box.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5041867819441624818" /&gt;

&lt;p class="intro"&gt;All programmers have their own ways of &lt;strong class="highlight"&gt;storing useful code for future use&lt;/strong&gt;. Some don't do anything special for it. They can remember which project they had used the code - all they have to do is call up the source code for that project, search around a bit and they have the code they wanted. I used to be in this class - but now, I have too much projects and too much code for that to work. So I am exploring alternative methods to do this.&lt;/p&gt;

&lt;h2&gt;Text Files&lt;/h2&gt;

&lt;p&gt;The simplest methods are often the best - &lt;strong class="highlight"&gt;storing all the text snippets as text files. You can arrange it into folders for easier management.&lt;/strong&gt; I have tried this approach - but it did not work for me. Searching gets a bit hard after some time. Another problem with this method is that the data is limited to one computer - you will have to carry all these files around if you want to use it in other systems.&lt;/p&gt;

&lt;h2&gt;Single Text file&lt;/h2&gt;

&lt;p&gt;You can &lt;strong class="highlight"&gt;save all the code snippets in one big text file&lt;/strong&gt; - this will make searching easier. Another advantage of this method is that you can carry this file around - so it is more portable approch. I have not tried this method - if I find multiple text files hard to manage, there is no way I can do it with a single text file. But there are people who have done it - and swear by it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.oreillynet.com/mac/blog/2005/08/living_in_text_files.html"&gt;Living in text files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.craphound.com/lifehacks2.txt"&gt;Example of one such text file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Single (Some format) File&lt;/h3&gt;

&lt;p&gt;You don't have to use text - you can use excel or LaTeX or some other format to store everything you need in a single file. As long as the data is findable, its possible.&lt;/p&gt;

&lt;h2&gt;Special Application&lt;/h2&gt;

&lt;p&gt;There are many applications that can be used to store text snippets. I have not used any applications for this purpose - so I cannot recommend any specific tool. I am sure that a &lt;a href="http://www.google.com/search?q=software+store+code+snippets"&gt;google search&lt;/a&gt; will reveal many such software. In Linux, you could use &lt;a href="http://docs.kde.org/stable/en/kdeutils/kjots/index.html"&gt;KJots&lt;/a&gt; and &lt;a href="http://basket.kde.org/"&gt;BasKet&lt;/a&gt; to do this. Do you know any application that could be used for this?&lt;/p&gt;

&lt;h2&gt;Database&lt;/h2&gt;

&lt;p&gt;If you have done a bit of Database Designing, I am sure you are already working on a design to store the code in a Database - locally or on the web. This method &lt;strong class="highlight"&gt;will involve making an interface to input, search and display the snippets&lt;/strong&gt; as well. If you are using a database like Access, you can use the 'Forms' feature to do it. But if you are using &lt;a href="http://binnyva.blogspot.com/2006/08/mysql-database-management-system.html"&gt;MySQL&lt;/a&gt;, &lt;a href="http://binnyva.blogspot.com/2006/10/sqlite.html"&gt;SQLite&lt;/a&gt; or something like that, you may have to create a custom application. This could be a web application or a desktop application. I almost went this way - but my work with &lt;a href="http://nexty.sourceforge.net/"&gt;Nexty&lt;/a&gt; prevented me from doing much.&lt;/p&gt;

&lt;h2&gt;Online Services&lt;/h2&gt;

&lt;p&gt;&lt;strong class="highlight"&gt;There are sites that could be used store snippets&lt;/strong&gt;. One such site is &lt;a href="http://textsnippets.com/"&gt;Text Snippets&lt;/a&gt;. It supports all features necessary for storing code snippets -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Syntax Highlight for the code&lt;/li&gt;
&lt;li&gt;Easy Interface&lt;/li&gt;
&lt;li&gt;Tagging&lt;/li&gt;
&lt;li&gt;And more..&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://textsnippets.com/user/binnyva"&gt;I tried it out&lt;/a&gt; - but did not find it very useful...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Syntax Highlighting expects all code to be in ruby&lt;/li&gt;
&lt;li&gt;No way to backup the data&lt;/li&gt;
&lt;li&gt;You have to use the web interface to enter the data.&lt;/li&gt;
&lt;li&gt;No way to get the data if you are offline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other sites that could be used to do this are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://snipplr.com/"&gt;Snipplr - Code 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://snippets.dzone.com/"&gt;Dzone Snippets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;And the best method is...&lt;/h2&gt;

&lt;p&gt;I tried most of the above methods - but none matched my requirements. After much searching I found a method thats perfect. I will talk about that in the &lt;a href="http://binnyva.blogspot.com/2007/03/saving-code-snippets-part-2.html"&gt;next post&lt;/a&gt;.&lt;/p&gt;

&lt;p class="update"&gt;Update : &lt;a href="http://binnyva.blogspot.com/2007/03/saving-code-snippets-part-2.html"&gt;Saving Code Snippets - Part 2&lt;/a&gt; Ready!&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/text" rel="tag"&gt;text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/snippet" rel="tag"&gt;snippet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/code" rel="tag"&gt;code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/programming" rel="tag"&gt;programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-6451257619521617934?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/6451257619521617934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=6451257619521617934' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6451257619521617934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6451257619521617934'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/saving-code-snippets-part-1.html' title='Saving Code Snippets - Part 1'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RfhQEZ5KlvI/AAAAAAAAAMc/fLzmudXKFCA/s72-c/284743_card_index_box.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-9193493325019764943</id><published>2007-03-07T23:43:00.000+05:30</published><updated>2007-03-07T23:44:26.509+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Little Flies...</title><content type='html'>&lt;p class="intro"&gt;I know I don't put comics in this blog - but there is a first time for everything. A comic from &lt;a href="http://blaugh.com/" class="external"&gt;bLaugh&lt;/a&gt;...&lt;/p&gt;

&lt;a class="external" href="http://blaugh.com/2007/01/27/no-need-to-be-concerned-little-fly"&gt;&lt;img title="No Need to be Concerned, Little Fly" alt="No Need to be Concerned, Little Fly" src="http://blaugh.com/cartoons/070126_web_developer.gif" width="447" height="250"/&gt;&lt;/a&gt;

&lt;p&gt;From now one, I am going to reffer to all my clients as 'Little Flies' *Insert evil laugh here*.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/humor" rel="tag"&gt;humor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/comic" rel="tag"&gt;comic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-9193493325019764943?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/9193493325019764943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=9193493325019764943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/9193493325019764943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/9193493325019764943'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/little-flies.html' title='Little Flies...'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2704339984271828157</id><published>2007-03-06T20:05:00.000+05:30</published><updated>2007-03-06T20:09:26.725+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><title type='text'>Find the Dreamhost Server hosting your site</title><content type='html'>&lt;img class="intro" style="cursor:pointer; cursor:hand; float:right;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/Re1827vtzBI/AAAAAAAAAMU/kso7H5cuSQc/s400/649839_connections.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038820841290058770" /&gt;

&lt;p class="intro"&gt;Dreamhost use multiple servers to host the sites of its customers. If you have been using their service, you would know the name of your web server. If you have been praying for the servers to come back up(as I have been doing) during the &lt;a class="external" href="http://www.dreamhoststatus.com/2007/02/25/power-outage-update/"&gt;recent outage&lt;/a&gt;, you will know the name of your Web Server, MySQL server and the Email Server.&lt;/p&gt;

&lt;p&gt;If you are using Dreamhost and you still don't know the names of the your servers, there is still hope. Some ways to find the names of your servers...&lt;/p&gt;

&lt;h2&gt;Control Panel&lt;/h2&gt;

&lt;p&gt;Your server's details can be viewed in the 'Account Status' tab in the newly redesigned &lt;a class="external" href="https://panel.dreamhost.com/"&gt;control panel&lt;/a&gt;. Just &lt;strong class="highlight"&gt;log in and click the 'Account Status' tab&lt;/strong&gt; in the upper right corner.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sOe-_HH8vVU/Re18hrvty_I/AAAAAAAAAME/_XjekZ96w9Y/s1600-h/tab.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/Re18hrvty_I/AAAAAAAAAME/_XjekZ96w9Y/s400/tab.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5038820476217838578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sOe-_HH8vVU/Re18q7vtzAI/AAAAAAAAAMM/L_jbblbuYsE/s1600-h/servers.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/Re18q7vtzAI/AAAAAAAAAMM/L_jbblbuYsE/s400/servers.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5038820635131628546" /&gt;&lt;/a&gt;

&lt;h2&gt;Ping&lt;/h2&gt;

&lt;p&gt;If you just want to know the server name of your web server, just &lt;strong class="highlight"&gt;ping the domain&lt;/strong&gt;. The results for &lt;a href="http://www.openjs.com/"&gt;OpenJS.com&lt;/a&gt; (emphasis mine, obviously)&lt;/p&gt;

&lt;pre&gt;$ ping openjs.com
PING openjs.com (208.113.136.27) 56(84) bytes of data.
64 bytes from basic-dap.&lt;strong&gt;mento&lt;/strong&gt;.dreamhost.com (208.113.136.27): icmp_seq=1 ttl=54 time=303 ms
&lt;/pre&gt;

&lt;h2&gt;hostname&lt;/h2&gt;

Another method to find this name is to log into the ssh account and run this command...

&lt;pre&gt;$ hostname
&lt;strong&gt;mento&lt;/strong&gt;&lt;/pre&gt;

&lt;h2&gt;Server Information&lt;/h2&gt;

&lt;p&gt;The different servers in Dreamhost - and their configurations...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a class="external" href="http://www.askapache.com/2007/webmaster/dreamhost-server-ip-address-list.html"&gt;DreamHost Server IP Address List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="external" href="http://wiki.dreamhost.com/index.php/Server_Statistics"&gt;Server Statistics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/dreamhost" rel="tag"&gt;dreamhost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/server" rel="tag"&gt;server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/hosting" rel="tag"&gt;hosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2704339984271828157?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2704339984271828157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2704339984271828157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2704339984271828157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2704339984271828157'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/find-dreamhost-server-hosting-your-site.html' title='Find the Dreamhost Server hosting your site'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sOe-_HH8vVU/Re1827vtzBI/AAAAAAAAAMU/kso7H5cuSQc/s72-c/649839_connections.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1728378204842355441</id><published>2007-03-02T23:41:00.000+05:30</published><updated>2007-03-02T23:44:18.275+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Quitting the Job</title><content type='html'>&lt;p class="intro"&gt;After two years, I have decided to leave &lt;a class="external" href="http://www.reubro.com/"&gt;Reubro International&lt;/a&gt;. I &lt;a href="http://binnyva.blogspot.com/2005/02/got-job.html" class="internal"&gt;joined there&lt;/a&gt; around March 2005 as a &lt;a href="http://www.bin-co.com/perl/" class="mypages"&gt;Perl&lt;/a&gt; Developer. In the time I spend there, I learned &lt;a href="http://www.bin-co.com/php/" class="mypages"&gt;PHP&lt;/a&gt;, &lt;a href="http://www.openjs.com/" class="mypages"&gt;Advanced JavaScript&lt;/a&gt;, &lt;a href="http://binnyva.blogspot.com/search/label/css" class="internal"&gt;Advanced CSS&lt;/a&gt; - even a bit about &lt;a href="http://www.bin-co.com/database/db_naming_conventions.php" class="mypages"&gt;Database designing&lt;/a&gt; and &lt;a href="http://binnyva.blogspot.com/2006/06/apache.html" class="internal"&gt;server administration&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Learning New Things&lt;/h2&gt;

&lt;p&gt;There is too many things I learned while I was there - too many to list here(two years is a long time). But lately I am finding that instead of helping me to learn new things, my work is negatively affecting my ability to learn new stuff. A lack of time is the formost problem. I have reached the conclusion that the only way to learn new things is to lose the job - and that is exactly what I did.&lt;/p&gt;

&lt;p&gt;I have a huge list of stuff to learn - which includes - but not limited to...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.paulgraham.com/lisp.html" class="external"&gt;Lisp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.haskell.org/haskellwiki/Haskell" class="external"&gt;Haskell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.djangoproject.com/" class="external"&gt;Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/11/experimenting-with-cakephp-and-ruby-on.html" class="internal"&gt;CakePHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;wxWidget Framework for Python&lt;/li&gt;
&lt;li&gt;And more...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, expect some posts about these subjects here.&lt;/p&gt;

&lt;h2&gt;Getting Things Done&lt;/h2&gt;

&lt;p&gt;I have a lot of entries in my &lt;a href="http://nexty.sourceforge.net/demo/" class="mypages"&gt;ToDo List&lt;/a&gt; - things I never had time for before. Time to get them done. Stuff like...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release a stable version of &lt;a href="http://nexty.sourceforge.net/" class="mypages"&gt;Nexty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Finish the Ruby on Rails app&lt;/li&gt;
&lt;li&gt;Integerate &lt;a href="http://openid.net/" class="external"&gt;OpenID&lt;/a&gt; into &lt;a href="http://www.bin-co.com/" class="mypages"&gt;Bin-Co.com&lt;/a&gt; and &lt;a href="http://www.openjs.com/" class="mypages"&gt;OpenJS.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Write a lot of content&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;More Content&lt;/h2&gt;

&lt;p&gt;With all this free time, I should be able to produce more content. So expect a jump in the frequency of posts in this blog and my other sites. Maybe even a new site.&lt;/p&gt;

&lt;h2&gt;Freelancing&lt;/h2&gt;

&lt;p&gt;I have a decent income from Google AdSense. I also have a couple of other revenue streams. So I am not looking at freelance projects right now. Maybe after a few months.&lt;/p&gt;

&lt;h2&gt;In Short...&lt;/h2&gt;

&lt;p&gt;In short, I had a great time at Reubro. I met a lot of &lt;a href="http://codlib.blogspot.com/" class="external"&gt;great&lt;/a&gt; &lt;a href="http://www.glad-win.com/" class="external"&gt;guys&lt;/a&gt;. I learned a lot. And I understood that Corporate life is not for me. And &lt;a href="http://simonwillison.net/2007/Jan/15/leaving/" class="external"&gt;like&lt;/a&gt; &lt;a href="http://scobleizer.com/2006/06/11/the-joy-on-her-face/" class="external"&gt;many&lt;/a&gt; &lt;a href="http://www.dustindiaz.com/goodbye-yahoo/" class="external"&gt;others&lt;/a&gt;, I chose unemployment over working at a company.&lt;!-- I am going to be an SSH expert. (SSH = Simply Sitting at Home ;-))--&gt;&lt;/p&gt;

&lt;p&gt;Oh, and by the way, the 'official reason' for leaving is 'Excessive Eye Strain'. Happens if you spent over 15 hours a day staring at a monitor.&lt;/p&gt;

&lt;p&gt;So, what do you think of my decision? Good? Bad? Stupid? Leave a comment and let me know.&lt;/p&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/reubro" rel="tag"&gt;reubro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/job" rel="tag"&gt;job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/income" rel="tag"&gt;income&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/freelancing" rel="tag"&gt;freelancing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1728378204842355441?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1728378204842355441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1728378204842355441' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1728378204842355441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1728378204842355441'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/03/quiting-job.html' title='Quitting the Job'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2646529694519859442</id><published>2007-02-26T23:42:00.000+05:30</published><updated>2007-03-17T04:35:38.448+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='opinion'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Top 5 Features Missing in Google Reader</title><content type='html'>&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" class="intro" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/ReMjTRNw_NI/AAAAAAAAALw/DRgeef_b00o/s400/reader-blog-logo.gif" border="0" alt="Google Reader Logo" id="BLOGGER_PHOTO_ID_5035907622275972306" /&gt;
&lt;p class="intro"&gt;I am using &lt;a href="http://www.google.com/reader/" class="external"&gt;Google Reader&lt;/a&gt; as my RSS Aggregator. After using this for some time, I am still unsure of how to do some things. I don't even know &lt;strong class="highlight"&gt;weather its possible or not&lt;/strong&gt;. And since &lt;a href="http://www.nathanrice.org/2007/02/16/feedburner-now-reporting-google-reader-stats/" class="external"&gt;Google Reader is publishing usage stats&lt;/a&gt;, I know that 35% of my readers uses Google Reader - so I want to ask these doubts to you.&lt;/p&gt;

&lt;h3&gt;1. Can I search through my subscribed feeds?&lt;/h3&gt;
&lt;p&gt;There are many times when I wanted to &lt;strong class="highlight"&gt;find an old post I have read&lt;/strong&gt;. Is there any way to search through my subscribed posts? Its ironic that Google fails to provide this option.&lt;/p&gt;

&lt;h3&gt;2. Can I nest folders?&lt;/h3&gt;
&lt;p&gt;Can I put a &lt;strong class="highlight"&gt;folder inside another folder&lt;/strong&gt;? I know that this is a tagging generation and hierarchical structures are outdated - that's how I like it.&lt;/p&gt;

&lt;h3&gt;3. How do I change a URL of a feed?&lt;/h3&gt;
&lt;p&gt;Some sites change the feed URL. It is a bad thing - but it happens. My question is how do I update the URL of a subscribed feed using Google Reader. The last time I had to do this, I had to &lt;strong class="highlight"&gt;delete the feed in question and subscribe to it again&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;4. Is there a more efficient way to subscribe a feed from Firefox?&lt;/h3&gt;
&lt;p&gt;Is there any way I can click the subscribe button in Firefox - and &lt;strong class="highlight"&gt;get the feed subscribed without any additional clicks&lt;/strong&gt;? I had outlined one method to &lt;a href="http://binnyva.blogspot.com/2007/02/subscribing-feed-in-google-reader-using.html"&gt;make the handling of feed subscription better in Firefox&lt;/a&gt;. But that still requires one additional click. I know Google Reader provides a bookmarklet for this - but is it possible to subscribe using the Firefox's default way? Plus, even after clicking bookmarklet you should click the subscribe button.&lt;/p&gt;

&lt;h3&gt;5. Can I put the tags in one folder?&lt;/h3&gt;
&lt;p&gt;I like to use a lot of tags to mark a post - but I hate the fact that each &lt;strong class="highlight"&gt;new tag makes a new entry in the left side 'Subscriptions' column&lt;/strong&gt;. I want that column small and manageable.&lt;/p&gt;

&lt;p&gt;If any of these are not possible, I am sure that &lt;a href="http://googlereader.blogspot.com/2007/01/some-of-our-engineers-dont-work-at.html" class="external"&gt;Google Reader engineers will find this post&lt;/a&gt;. Maybe they will add these features. So, if you are from google, please implement these features in Google Reader. Oh, and, leave a comment.&lt;/p&gt;

&lt;script type="text/javascript"&gt;
digg_url = 'http://digg.com/software/Top_5_features_missing_in_Google_Reader';
&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/google" rel="tag"&gt;google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/reader" rel="tag"&gt;reader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/features" rel="tag"&gt;features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rss" rel="tag"&gt;rss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/atom" rel="tag"&gt;atom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/feed" rel="tag"&gt;feed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2646529694519859442?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2646529694519859442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2646529694519859442' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2646529694519859442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2646529694519859442'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/02/top-5-features-missing-in-google-reader.html' title='Top 5 Features Missing in Google Reader'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/ReMjTRNw_NI/AAAAAAAAALw/DRgeef_b00o/s72-c/reader-blog-logo.gif' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8262260854032451744</id><published>2007-02-23T21:04:00.000+05:30</published><updated>2007-02-23T21:06:45.691+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Subscribing a feed in Google Reader using Firefox</title><content type='html'>&lt;p class="intro"&gt;The &lt;a href="http://binnyva.blogspot.com/2006/10/firefox-20-releaseand-ie-7.html"&gt;latest version of firefox has a feed preview feature&lt;/a&gt;. But subscribing a new feed in Google Reader using this feature leaves a little to be expected. If you use this feature to &lt;strong class="highlight"&gt;subscribe to feeds in the Google Reader, you must have come across the "Subscribe to Google Reader/Google Homepage"&lt;/strong&gt; dilemma. I always want to subscribe to Google Reader - thats &lt;strong class="highlight"&gt;one extra click&lt;/strong&gt; for me. But I found a way to overcome this.&lt;/p&gt;

&lt;p&gt;Open a new tab and type in &lt;code&gt;about:config&lt;/code&gt; in the address bar. &lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;browser.contentHandlers&lt;/code&gt; in the Filter text box&lt;/p&gt;

&lt;p&gt;Find the key name of the Google Reader property - in my system, it is 'browser.contentHandlers.types.2.title'. See image for clarification&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sOe-_HH8vVU/Rd8J0RNw_MI/AAAAAAAAALk/aSWnk5MqO0Y/s1600-h/about_config.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/Rd8J0RNw_MI/AAAAAAAAALk/aSWnk5MqO0Y/s400/about_config.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5034753702002490562" /&gt;&lt;/a&gt;

&lt;p&gt;The 'index' of the Google Reader, in my case is 2.&lt;/p&gt;

&lt;p&gt;Right click on &lt;code&gt;browser.contentHandlers.types.2.uri&lt;/code&gt;(the number must be the index of Google Reader in your system) and click Modify.&lt;/p&gt;

&lt;p&gt;Enter the value...&lt;/p&gt;

&lt;code&gt;http://www.google.com/reader/view/feed/%s&lt;/code&gt;

&lt;p&gt;Now restart Firefox and try to subscribe to a feed - you will be taken to the google reader page directly. Then click on the "Subscribe" button on the top right corner to subscribe.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/firefox" rel="tag"&gt;firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rss" rel="tag"&gt;rss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/feed" rel="tag"&gt;feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/subscribe" rel="tag"&gt;subscribe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/google" rel="tag"&gt;google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/reader" rel="tag"&gt;reader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8262260854032451744?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8262260854032451744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8262260854032451744' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8262260854032451744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8262260854032451744'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/02/subscribing-feed-in-google-reader-using.html' title='Subscribing a feed in Google Reader using Firefox'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/Rd8J0RNw_MI/AAAAAAAAALk/aSWnk5MqO0Y/s72-c/about_config.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7266627910489846176</id><published>2007-02-17T20:57:00.000+05:30</published><updated>2007-02-17T21:10:11.610+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Use of 'Numbers Particle' System in Programming</title><content type='html'>&lt;img class="intro" style="display:block; margin:0px auto 10px; float:right;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RdcfLh2a5pI/AAAAAAAAALQ/CtVibDtjgtE/s400/particles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5032525391535466130" /&gt;
&lt;p class="intro"&gt;All numbers can be created using the series 1, 2, 4, 8, 16, 32, 64, 128, ... without repetition. For example, 7 can be represented as 1+2+4. 13 is 8+4+1. This property is used for creating binary number...&lt;/p&gt;&lt;br style="clear:both;" /&gt;

&lt;table border="1" width="100%"&gt;
&lt;tr&gt;
 &lt;th&gt;Decimal Numbers&lt;/th&gt;
 &lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;th&gt;Binary Numbers&lt;/th&gt;
 &lt;td&gt;0001&lt;/td&gt;&lt;td&gt;0010&lt;/td&gt;&lt;td&gt;0011&lt;/td&gt;&lt;td&gt;0100&lt;/td&gt;&lt;td&gt;0101&lt;/td&gt;&lt;td&gt;0110&lt;/td&gt;&lt;td&gt;0111&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;th&gt;Powers of 2&lt;/th&gt;
 &lt;td&gt;2&lt;sup&gt;0&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;1&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;2&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;3&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;th&gt;Number Particles &lt;sup&gt;*&lt;/sup&gt;&lt;/th&gt;
 &lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1+2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1+4&lt;/td&gt;&lt;td&gt;2+4&lt;/td&gt;&lt;td&gt;1+2+4&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt; For the lack of a better name. If you are aware of the correct terminology for this system, please let me know&lt;/p&gt;

&lt;p&gt;An advantage of this series is that there is &lt;strong class="highlight"&gt;only one way to represent a number&lt;/strong&gt; - ie. 7 can only be 1+2+4. In the normal series(1,2,3,4,5,6,7,8,...), 7 can be represented as 3+4, 5+2, 1+6, 1+2+4, etc. This property of the doubling number series can be used to store multiple values using just one number.&lt;/p&gt;

&lt;h2&gt;Example Usage&lt;/h2&gt;

&lt;p&gt;The best example for a use of this is the Linux File Permission system. In Linux...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 = Execute Permission&lt;/li&gt;
&lt;li&gt;2 = Write Permission&lt;/li&gt;
&lt;li&gt;4 = Read Permission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you want to give a file Read and Write permission it is 2 + 4 = 6. If you want Read and Execute permission it is 1 + 4 = 5.&lt;/p&gt;

&lt;h2&gt;Implementation&lt;/h2&gt;

&lt;p&gt;You can use this principle while designing a database. You can use this to &lt;strong class="highlight"&gt;store data that would otherwise require a reference table or multiple fields&lt;/strong&gt;. For example, let us try to implement the linux user permissions system shown above using a database.&lt;/p&gt;

&lt;table border="1"&gt;
&lt;tr&gt;&lt;td&gt;id&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;INT&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;filename&lt;/td&gt;&lt;td&gt;Hello World.txt&lt;/td&gt;&lt;td&gt;VARCHAR&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;is_writable&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;ENUM('1','0')&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;is_readable&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;ENUM('1','0')&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;is_executable&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;ENUM('1','0')&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Actually, in linux, different permissions can be set for the file owner, the file owners group and the rest of the world. But I am ignoring that for simplecity.&lt;/p&gt;

&lt;p&gt;In the above example, we use 3 fields for permissions. Using the 'number particle' method, we can reduce it to just one field.&lt;/p&gt;

&lt;table border="1"&gt;
&lt;tr&gt;&lt;td&gt;id&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;INT&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;filename&lt;/td&gt;&lt;td&gt;Hello World.txt&lt;/td&gt;&lt;td&gt;VARCHAR&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;permission&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;INT&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;This method should not be used for a large dataset. Here the dataset is is write/read/execute - just 3. But if it is a larger dataset - like read/append/delete/modify/create/rename/copy/.... then using this system may not be the best method - as it will make the system more complicated. Even in small datasets, using this system will make things complicated. &lt;strong class="highlight"&gt;In most systems, I will not recommend using this method&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Another problem with this method is that the &lt;strong class="highlight"&gt;data is not atomic&lt;/strong&gt;. So if you use this method, database normalization goes out the window.&lt;/p&gt;

&lt;h2&gt;Code&lt;/h2&gt;

&lt;p&gt;To use this method, you will need &lt;strong class="highlight"&gt;a method to decompose a number to its number particles&lt;/strong&gt;. I have created such a function. Just give the number you want to decompose and it will return an array with the particles of the given number.&lt;/p&gt;

&lt;p&gt;This code is in PHP - but feel free to translate it into other languages. If you have translated this into another languages, please leave the code as a comment. &lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;function findParticles($number) {
 $all_particles = array();
 $series = 1;
 while($number) {
  if($number % 2) $all_particles[] = $series;//If the number is odd
  $number = intVal($number / 2);
  $series = $series * 2;
 }
 return $all_particles;
}

//Demo
$particles = findParticles(21); // Returns Array(1,4,16)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is distributed under the terms of the BSD License.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/script" rel="tag"&gt;script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/function" rel="tag"&gt;function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/number" rel="tag"&gt;number&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/particle" rel="tag"&gt;particle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7266627910489846176?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7266627910489846176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7266627910489846176' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7266627910489846176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7266627910489846176'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/02/use-of-numbers-particle-system-in.html' title='Use of &apos;Numbers Particle&apos; System in Programming'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RdcfLh2a5pI/AAAAAAAAALQ/CtVibDtjgtE/s72-c/particles.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-3624848753918432728</id><published>2007-02-14T23:39:00.000+05:30</published><updated>2007-02-24T20:34:35.857+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Add Feedburner's FeedFlares to your Feed</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RdNQrh2a5nI/AAAAAAAAAK4/jChSqIhWi9M/s400/feedburner.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5031453917454198386" /&gt;

&lt;p class="intro"&gt;If you are an RSS junkie you would have noticed that many feed have small links at the bottom of the post that can be used to digg the post, email it, subscribe to the comments of that post etc. These is a feature of &lt;a href="http://www.feedburner.com/"&gt;feedburner&lt;/a&gt; - it is called Flares. &lt;a href="http://blogs.feedburner.com/feedburner/archives/001543.html"&gt;According to Feedburner&lt;/a&gt; "&lt;q cite="http://blogs.feedburner.com/feedburner/archives/001543.html"&gt;FeedFlare is a one-step service that enables publishers to configure a very slim "footer" containing customizable actions that will appear beneath each item in a feed.&lt;/q&gt;&lt;/p&gt;

&lt;p&gt;For the longest time I thought that this was available only for paid uses of feedburner service - but I was wrong. If you use feedburner, you could use flares in your feed. And that is exactly what I did - if you are reading this post using a feed reader, just go to the bottom of this post and you will see the flares.&lt;/p&gt;

&lt;h2&gt;How to Add flares to your Feed&lt;/h2&gt;

&lt;p&gt;Before anything, you must be using feedburner to deliver your feed if you want this feature. If you are using feedburner, continue reading. If you are not using feedburner, its game over for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Got to &lt;a href="https://www.feedburner.com/fb/a/login"&gt;Feedburner Login page&lt;/a&gt; and &lt;strong class="heightlight"&gt;Login&lt;/strong&gt; into your account.&lt;/li&gt;
&lt;li&gt;&lt;strong class="heightlight"&gt;Click on the feed&lt;/strong&gt; you want to add the flares to.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong class="heightlight"&gt;'Optimize' tab&lt;/strong&gt;.&lt;/li&gt;
&lt;strong class="heightlight"&gt;Click on the &lt;strong class="heightlight"&gt;FeedFlare tab&lt;/strong&gt; on the left sidebar.&lt;/strong&gt;
&lt;li&gt;Select all the flares you want to add to your feed and submit the form.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An image to make things clearer...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/RdNQ4h2a5oI/AAAAAAAAALA/71UR6LSdUNU/s1600-h/screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RdNQ4h2a5oI/AAAAAAAAALA/71UR6LSdUNU/s400/screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5031454140792497794" /&gt;&lt;/a&gt;

&lt;p&gt;Thats it. Now all the posts in that feed will have the flares at the bottom.&lt;/p&gt;

&lt;h2&gt;Custom Flares&lt;/h2&gt;

&lt;p&gt;The flare form only displays the default flares. But it is &lt;strong class="heightlight"&gt;possible to create and use custom flares&lt;/strong&gt; using the open &lt;a href="http://www.feedburner.com/fb/a/api/feedflare"&gt;FeedFlare API&lt;/a&gt;. See the &lt;a href="http://www.feedburner.com/fb/a/help/flarecatalog"&gt;Flares Catlog&lt;/a&gt; and &lt;a href="http://www.feedburner.com/fb/a/developers/101flares"&gt;101 FeedFlares for a Better Tomorrow&lt;/a&gt; to find all the flares that can be used.&lt;/p&gt;

&lt;h2&gt;Don't Clutter&lt;/h2&gt;

&lt;p&gt;A word of warning before you add the flares to your feed - don't use too many. It is easy to abuse flares by adding many of it. Please &lt;strong class="heightlight"&gt;make sure your &lt;a href="http://www.problogger.net/archives/2007/02/13/avoid-clutter-in-your-rss-feeds/"&gt;feeds are clutter free&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;Related Links&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.feedburner.com/feedburner/archives/001543.html"&gt;Introduction to FeedFlares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.feedburner.com/feedburner/archives/2006/01/feedflare_part.php"&gt;FeedFlare, Part II&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bloggertalk.net/article75.html"&gt;How to Increase Traffic to Your Blog Using Feedburner's Flare Option&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/feedflareunit" rel="tag"&gt;feedflareunit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/feedburner" rel="tag"&gt;feedburner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/feed" rel="tag"&gt;feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/flare" rel="tag"&gt;flare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rss" rel="tag"&gt;rss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-3624848753918432728?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/3624848753918432728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=3624848753918432728' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3624848753918432728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3624848753918432728'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/02/add-feedburners-feedflares-to-you-feed.html' title='Add Feedburner&apos;s FeedFlares to your Feed'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RdNQrh2a5nI/AAAAAAAAAK4/jChSqIhWi9M/s72-c/feedburner.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7957696903908029327</id><published>2007-02-09T23:27:00.000+05:30</published><updated>2007-02-08T02:57:43.468+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Bin-Co and OpenJS Backend Updated</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" class="intro" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/Rcy2JR2a5mI/AAAAAAAAAKs/lo6CwgaCMvs/s400/logogs.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5029595154392737378" /&gt;
&lt;p class="intro"&gt;I have just finished updating the backend of my two sites &lt;a class="mypages" href="http://www.bin-co.com/"&gt;Bin-Co&lt;/a&gt; and &lt;a class="mypages" href="http://www.openjs.com/"&gt;OpenJS&lt;/a&gt;. I have updated the Database Design to make it compactable with my &lt;a class="mypages" href="http://www.bin-co.com/database/db_naming_conventions.php"&gt;DB Design rules&lt;/a&gt;. Also some part of the code base have been altered to make it easier to reuse.&lt;/p&gt;

&lt;p&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/05/openjs-backend.html"&gt;Using a custom &lt;abbr title="Content Management System"&gt;CMS&lt;/abbr&gt; has its advantages&lt;/a&gt; - but it has a big maintance load. The good part is that a lot of cool PHP code was created - which I will be releasing in my &lt;a class="mypages" href="http://www.bin-co.com/php/"&gt;PHP page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is a problem with this upgrade - there is a possibility of errors somewhere in the site. If you notice any problems, let me know.&lt;/p&gt;

&lt;p&gt;Once that job is complete, I will redesign this blog.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/backend" rel="tag"&gt;backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/php" rel="tag"&gt;php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/db" rel="tag"&gt;db&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/redesign" rel="tag"&gt;redesign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7957696903908029327?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7957696903908029327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7957696903908029327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7957696903908029327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7957696903908029327'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/02/bin-co-and-openjs-backend-updated.html' title='Bin-Co and OpenJS Backend Updated'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/Rcy2JR2a5mI/AAAAAAAAAKs/lo6CwgaCMvs/s72-c/logogs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-9092625839430494474</id><published>2007-02-04T22:44:00.000+05:30</published><updated>2007-02-04T22:46:34.244+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Nexty Beta Released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" class="intro" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/RcYUn0smVsI/AAAAAAAAAKg/o7zzOIHLKxE/s1600-h/ss1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RcYUn0smVsI/AAAAAAAAAKg/o7zzOIHLKxE/s200/ss1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5027728708398896834" /&gt;&lt;/a&gt;

&lt;p class="intro"&gt;Nexty is a easy to use To-Do list manager created in PHP. This tool adds a few of my concepts with the generally held concepts of &lt;abbr title="Getting Things Done"&gt;GTD&lt;/abbr&gt;. It can be installed in a local server or in a online web server.&lt;/p&gt;

&lt;p&gt;See &lt;a href="http://nexty.sourceforge.net/demo/"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This software is in beta stage - so expect some breakages here and there. I will try to release a stable version by the end of this week - by 10&lt;sup&gt;th&lt;/sup&gt; February 2007 - but no promises.&lt;/p&gt;

Get the &lt;a href="http://downloads.sourceforge.net/nexty/nexty_0_01_A.tar.gz"&gt;code&lt;/a&gt; from the &lt;a href="http://sourceforge.net/projects/nexty"&gt;project page of nexty&lt;/a&gt; at Sourceforge.

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/php" rel="tag"&gt;php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/nexty" rel="tag"&gt;nexty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/gtd" rel="tag"&gt;gtd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/tool" rel="tag"&gt;tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/application" rel="tag"&gt;application&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-9092625839430494474?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/9092625839430494474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=9092625839430494474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/9092625839430494474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/9092625839430494474'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/02/nexty-beta-released.html' title='Nexty Beta Released'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RcYUn0smVsI/AAAAAAAAAKg/o7zzOIHLKxE/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2261916317276813428</id><published>2007-01-31T23:55:00.000+05:30</published><updated>2007-01-31T23:59:29.655+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Refferer Links in Google Analytics</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RcDfmYwNk_I/AAAAAAAAAKU/kVFERLhq5lw/s400/stats.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5026263034718163954" class="intro" /&gt;

&lt;p class="intro"&gt;Google Analytics is a great tool for tracking your visitors - I use it for all my sites. But there is one problem - you cannot find the exact URL from which the visitor has come(the 'Refferer' URL). Well, they provide this data - but have hidden it in the menu.&lt;/p&gt;

&lt;p&gt;To get this list, open this menu in the left side of the Analytics page...&lt;br /&gt;
Marketing Optimization &amp;gt; Marketing Campaign Results &amp;gt; Referral Conversion.&lt;/p&gt;

&lt;p&gt;Now just open a site to see the incoming links from that site.&lt;/p&gt;

&lt;p&gt;I have no idea why they have decided to hide this feature - I use this feature a lot.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/google" rel="tag"&gt;google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/statistics" rel="tag"&gt;statistics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/analytics" rel="tag"&gt;analytics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2261916317276813428?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2261916317276813428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2261916317276813428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2261916317276813428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2261916317276813428'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/refferer-links-in-google-analytics.html' title='Refferer Links in Google Analytics'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sOe-_HH8vVU/RcDfmYwNk_I/AAAAAAAAAKU/kVFERLhq5lw/s72-c/stats.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2543352920168135546</id><published>2007-01-26T01:49:00.000+05:30</published><updated>2007-01-26T01:59:43.002+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Wired Design Reviewed</title><content type='html'>&lt;p class="intro"&gt;&lt;a href="http://www.wired.com/news/wiredmag/0,72530-0.html"&gt;Wired Magazine have redesigned their magazine&lt;/a&gt; - and since it is one of the best technology magazines, I decided to review the code of the site. The magazine redesign gave me the idea of doing the review for the site's design. I am not an expert in graphical design - so I am not going to say much about it.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://www.wired.com/news/wiredmag/0,72530-0.html"&gt;page I decided to review&lt;/a&gt; was the page announcing the redesign.&lt;/p&gt;

&lt;h2&gt;Does not validate&lt;/h2&gt;

&lt;p&gt;The page does not validate - and not just any small mistake like missing end tags - it does not even have a doctype! In all I found 126 errors.&lt;/p&gt;

&lt;h2&gt;Includes too much Files&lt;/h2&gt;

&lt;p&gt;The page calls 10 JavaScript files and 9 CSS files in the head section - with more in the body. Splitting up code to multiple files is a good method for managing code - but it would take up more requests. A better method for a high traffic site like Wired is using just one external file that includes all its javascript code and one CSS file.&lt;/p&gt;

&lt;p&gt;Don't get me wrong - I would not advertise that method in smaller sites. Using just one file for all your code is a maintenance nightmare. If you want to do this the best choice is to use a merging tool like the &lt;a href="http://www.ejeliot.com/blog/72"&gt;merging tool by Ed Eliot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Inline JavaScript Code&lt;/h2&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;body id="storyPage" onload="setStyle();"&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A much better way of doing this is to store all the javascript in an external file and use this code...&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;window.onload=setStyle;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Or you could use one of the many &lt;a href="http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html"&gt;addEvent()&lt;/a&gt; functions.&lt;/p&gt;

&lt;h2&gt;Image Based Navigation Links&lt;/h2&gt;

&lt;p&gt;Moving down, we have the navigation - this are linked images. All the images have alt attributes - but it still does not sit well with me. See the code..&lt;/p&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;a id="nculture" href="/culture.html" title="Culture Story Index"&amp;gt;
&amp;lt;img src="http://www.wired.com/ly/wired/shared/images/cs1/nav_culture.gif" alt="[Culture]" class="" /&amp;gt;
&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;[Returns added by me]&lt;/p&gt;

&lt;p&gt;I don't know why it has ' class="" ' - but it was there when I got it.&lt;/p&gt;

&lt;p&gt;A better method is using a list of links and using any &lt;a href="http://www.mezzoblue.com/archives/2003/12/12/accessible_i/" title="Accessible Image Replacement"&gt;image replacement technique&lt;/a&gt; to insert the image.&lt;/p&gt;

&lt;p&gt;And those images they used are not all that good. Maybe they look better in a CRT monitor - but in my LCD monitor they look really bad. But I am not a designer and I am overstepping my bounderies when I say that - so why don't you decide...&lt;/p&gt;

&lt;img src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RbkRCowNk9I/AAAAAAAAAJ8/bHv_Wu1H-A4/s400/nav_technology.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5024065596305544146" /&gt;

&lt;h2&gt;Text Resizing Function&lt;/h2&gt;
&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RbkRQ4wNk-I/AAAAAAAAAKE/IVnbQq2O9XU/s400/text_size.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5024065841118680034" /&gt;

&lt;p&gt;Wired gives the user a chance to change the size of the text. This is duplicating a functionality that already exists in the browser. Any decent browser can resize the text of the content. Note: IE does not count as a 'decent browser' - but if you use &lt;code&gt;em&lt;/code&gt; as your font size unit, resizing works in it as well.&lt;/p&gt;

&lt;p&gt;Currently the code look like this - ignore the inline JavaScript - we already covered that...&lt;/p&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;a href="#" onclick="setActiveStyleSheet('Small Text', 1);return false;"&amp;gt;
&amp;lt;img alt="Small Text " height="18" src="http://www.wired.com/ly/wired/shared/images/common/icon_text_sm.gif" title="Small Text" width="18"&amp;gt;
&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Bookmarking using &lt;code&gt;name&lt;/code&gt;&lt;/h2&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;a class="skiplinks" name="content"&amp;gt; &amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is for the skip links to work - but a much better method to do this is using ID for that section...&lt;/p&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;div id="content"&amp;gt;...&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Unsemantic Code&lt;/h2&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;h1 class="lg"&amp;gt;&amp;lt;cite&amp;gt;Wired&amp;lt;/cite&amp;gt; Redesign: Change Is Good&amp;lt;/h1&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;lt;cite&amp;gt;? What do they mean by that? &amp;lt;em&amp;gt; should be a better choice here.&lt;/p&gt;

&lt;p&gt;There are some code to display advertisements - but as a rule, I ignore that when I review a design. That is because most of the advertisement provider's code are very bad - and it is beyond the control of the designer.&lt;/p&gt;

&lt;p&gt;By this time I got enough of it - after this much code cruft, I don't think anything better is going to come along in this page.&lt;/p&gt;

&lt;p&gt;I found a few good things about wired - like their 'Standards Notification' and Skip Links.&lt;/p&gt;

&lt;h2&gt;Why Wired?&lt;/h2&gt;

&lt;p&gt;Why did I review a site like wired - especially when &lt;a href="http://www.robertnyman.com/2007/01/24/with-these-web-sites-would-you-say-the-web-standards-war-is-won/"&gt;all 'big' sites fail to provide a standard code&lt;/a&gt;. Because I thought that if a site has &lt;a href="http://www.wired.com/news/culture/0,1284,55675,00.html"&gt;articles promoting web standards&lt;/a&gt;, they will design their site so. Clearly, I was wrong. &lt;/p&gt;

&lt;p&gt;Just for your information, I reviewed a site and complained that it did not validate - but this site will fail validation as well. Blogger inserts too much stuff that fail to validate that I stopped trying a long time ago. But my sites will validate - if you have any doubt, take a look at the code of &lt;a href="http://www.openjs.com/"&gt;OpenJS&lt;/a&gt; or Bin-Co. Its not perfect, but still is much better than wired's redesign&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/xhtml" rel="tag"&gt;xhtml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sites" rel="tag"&gt;sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wired" rel="tag"&gt;wired&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/review" rel="tag"&gt;review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/design" rel="tag"&gt;design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/standards" rel="tag"&gt;standards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/validation" rel="tag"&gt;validation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2543352920168135546?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2543352920168135546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2543352920168135546' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2543352920168135546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2543352920168135546'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/wired-redesign-reviewed.html' title='Wired Design Reviewed'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/RbkRCowNk9I/AAAAAAAAAJ8/bHv_Wu1H-A4/s72-c/nav_technology.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8459066906720622774</id><published>2007-01-24T23:19:00.000+05:30</published><updated>2007-01-24T23:23:43.802+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Ajax Data Transfer Format - UED(Url Encoded Data)</title><content type='html'>&lt;script type="text/javascript"&gt;
digg_url = 'http://digg.com/programming/Ajax_Data_Transfer_Format_for_Sending_Data_to_the_Server_Side';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://digg.com/api/diggthis.js"&gt;&lt;/script&gt;

&lt;p&gt;JSON has taken the award for the easiest method for transporting data when using Ajax. JSON is great to get data from the server side to the client side. What what about when you need to &lt;strong class="highlight"&gt;send data to the server side&lt;/strong&gt;? Sure you can use JSON then - but the advantage of using JSON is lost. So I propose using another format for it - &lt;strong class="highlight"&gt;&lt;a href="http://www.openjs.com/scripts/data/ued_url_encoded_data/" class="mypages"&gt;UED or URL Encoded Data&lt;/a&gt;&lt;/strong&gt;. Its a very simple concept - and it has been in use for a long time - all I have done is create a &lt;strong class="highlight"&gt;function that will encode the data into this format&lt;/strong&gt;. The basic concept behind this is that the most used &lt;strong class="highlight"&gt;data structures can be easily encoded into a URL. You can create variables, numerical arrays, associative arrays, multi-level arrays&lt;/strong&gt; etc. using existing syntax. The best part is all the &lt;strong class="highlight"&gt;server side languages are capable of handling this format - so no parsing is needed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openjs.com/scripts/data/ued_url_encoded_data/" class="mypages"&gt;ued_encode()&lt;/a&gt; will take an array as its argument and return the data encoded in UED format - as a string. You can use that string to send the data via POST or GET in the query part of the URL.&lt;/p&gt;

&lt;h2&gt;Demonstration&lt;/h2&gt;

&lt;p&gt;See &lt;a href="http://www.openjs.com/scripts/data/ued_url_encoded_data/demo.php" class="mypages"&gt;ued_encode() in action&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Usage&lt;/h2&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;
var arr = {
 'name':"Binny",
 'year':2007,
 'quote':"Hello, World!",
 'os':['Windows','Linux','Mac'],
 'software':{
  'editor':"vi",
  'audio':"xmms",
  'video':"vlc"
 }
}
var data = ued_encode(arr);
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Code&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.openjs.com/scripts/data/ued_url_encoded_data/ued_encode.js"&gt;ued_encode.js&lt;/a&gt; - &amp;lt;1 KB&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ajax" rel="tag"&gt;ajax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/json" rel="tag"&gt;json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ued" rel="tag"&gt;ued&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8459066906720622774?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8459066906720622774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8459066906720622774' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8459066906720622774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8459066906720622774'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/ajax-data-transfer-format-uedurl.html' title='Ajax Data Transfer Format - UED(Url Encoded Data)'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7690191220036342165</id><published>2007-01-21T23:44:00.000+05:30</published><updated>2007-01-21T23:48:50.272+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Enabling Image Uploading in FCKEditor for PHP</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;" class="intro" src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RbOto6PgeuI/AAAAAAAAAJw/o6TPfhWlX1w/s400/fckeditor_logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5022548927788907234" /&gt;

&lt;p class="intro"&gt;&lt;a href="http://www.fckeditor.net/" class="external"&gt;FCKEditor&lt;/a&gt; is one of the most feature rich web based WYSWYG editors. I use it for almost all my projects. However, if you wish to enable image uploading in it, you have to jump through some hoops. This is a small tutorial on how to &lt;strong class="highlight"&gt;enable image uploading in FCKEditor&lt;/strong&gt;. This tutorial is aimed at FCKEditor 2.3.2 - but the principle works in other versions of FCKEditor as well&lt;/p&gt;

&lt;h2&gt;Configuration&lt;/h2&gt;

&lt;h3&gt;fckconfig.js&lt;/h3&gt;

&lt;p&gt;Open the file &lt;u&gt;FCKEditor/fckconfig.js&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Make sure that the default &lt;strong class="highlight"&gt;php connector is selected&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line : 143 - Approx.&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;var _FileBrowserLanguage = '&lt;span class="special"&gt;php&lt;/span&gt;' ; // asp | aspx | cfm | lasso | perl | php | py
var _QuickUploadLanguage = '&lt;span class="special"&gt;php&lt;/span&gt;' ; // asp | aspx | cfm | lasso | php&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By default, the ASP connector is enabled. If any FCKEditor developer is reading this, please make the default connector PHP as it is more commonly used than ASP.&lt;/p&gt;

&lt;h3&gt;Connector&lt;/h3&gt;

&lt;p&gt;Open &lt;u&gt;FCKeditor/editor/filemanager/browser/default/connectors/php/config.php&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Enable the connector&lt;/p&gt;

&lt;strong&gt;Line : 24&lt;/strong&gt;
&lt;pre&gt;&lt;code class="javascript"&gt;// SECURITY: You must explicitelly enable this "connector". (Set it to "true").
$Config['Enabled'] = &lt;span class="special"&gt;true&lt;/span&gt; ;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Make sure that the given &lt;strong&gt;'UserFilesPath' folder exists in the server and has write permission&lt;/strong&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;$Config['UserFilesPath'] = '/UserFiles/' ;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Uploader&lt;/h3&gt;
&lt;p&gt;Open file &lt;u&gt;FCKeditor/editor/filemanager/upload/php/config.php&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Enable the uploader&lt;/p&gt;

&lt;strong&gt;Line : 24&lt;/strong&gt;
&lt;pre&gt;&lt;code class="php"&gt;// SECURITY: You must explicitelly enable this "uploader". 
$Config['Enabled'] = &lt;span class="special"&gt;true&lt;/span&gt; ;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;All configurations are done.&lt;/p&gt;

&lt;h2&gt;Test the Editor&lt;/h2&gt;

&lt;p&gt;Now open up the url : &lt;a href="http://localhost/FCKeditor/editor/filemanager/browser/default/connectors/test.html"&gt;http://www.yoursite.com/FCKeditor/editor/filemanager/browser/default/connectors/test.html&lt;/a&gt; in the browser&lt;/p&gt;

&lt;p&gt;Select PHP from the 'Connector:' drop down and click the 'Get Folders and Files' link.&lt;/p&gt;
&lt;p&gt;If the files and folders of your 'UserFiles' folder is shown in the XML format, all is fine.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/php" rel="tag"&gt;php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wyswyg" rel="tag"&gt;wyswyg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/editor" rel="tag"&gt;editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/fckeditor" rel="tag"&gt;fckeditor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7690191220036342165?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7690191220036342165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7690191220036342165' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7690191220036342165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7690191220036342165'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/enabling-image-uploading-in-fckeditor.html' title='Enabling Image Uploading in FCKEditor for PHP'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sOe-_HH8vVU/RbOto6PgeuI/AAAAAAAAAJw/o6TPfhWlX1w/s72-c/fckeditor_logo.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2778172888446301088</id><published>2007-01-18T20:36:00.000+05:30</published><updated>2007-01-18T20:38:38.917+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Flash 9 for Linux</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;" 
class="intro" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/Ra-NFqPgetI/AAAAAAAAAJk/lyx2olewGDY/s400/rune_flash.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5021387237919587026" /&gt;

&lt;p class="intro"&gt;Finally - &lt;a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"&gt;Adobe have released Flash 9 for Linux&lt;/a&gt;. I have been using the beta version of Flash 9 for some time now. Still no flash for &lt;a href="http://binnyva.blogspot.com/2006/09/fedora-core-5-64bit-vs-32bit.html"&gt;64 bit Linux&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Installing&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Download the &lt;a href="http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz"&gt;tar.gz&lt;/a&gt; file from the Adobe site.&lt;/li&gt;
&lt;li&gt;Extract the file&lt;/li&gt;
&lt;li&gt;Run the installer using the command './flashplayer-installer' in the extracted folder&lt;/li&gt;
&lt;li&gt;Once the installation is complete, the plug-in will be installed in Firefox. To verify, open Firefox and type 'about:plugins' in the address bar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike &lt;a href="http://binnyva.blogspot.com/2006/10/no-sound-in-flash-running-on-firefox-in.html" title=" No Sound in Flash running on Firefox in Linux(FC5)"&gt;last time&lt;/a&gt;, I have not run into any problems yet.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/flash" rel="tag"&gt;flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2778172888446301088?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2778172888446301088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2778172888446301088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2778172888446301088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2778172888446301088'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/flash-9-for-linux.html' title='Flash 9 for Linux'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sOe-_HH8vVU/Ra-NFqPgetI/AAAAAAAAAJk/lyx2olewGDY/s72-c/rune_flash.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-5599709532014982869</id><published>2007-01-13T22:56:00.000+05:30</published><updated>2007-01-13T22:59:25.226+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>'Snap Preview Anywhere' Review</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RakWc6PgesI/AAAAAAAAAJY/In3eU1OOkoQ/s400/snap.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5019567945607576258" /&gt;

&lt;p class="intro"&gt;I am seeing a lot of sites using the &lt;a class="external" href="http://www.snap.com/about/spa1A.php"&gt;Snap Preview Anywhere&lt;/a&gt;. I just cannot understand why people are using it - it adds almost no value to the page.&lt;/p&gt;

&lt;h2&gt;Only the title is readable&lt;/h2&gt;

&lt;p&gt;If you can read the text in the linked page, there will be some advantage - but the only thing that can be read using the Snap tool is the heading of the page. Yes, knowing the title is useful - but you don't need a screenshot for that. The '&amp;lt;A&amp;gt;' tag has a 'title' attribute that does the job ver well.&lt;/p&gt;

&lt;p&gt;The rest of the text is unreadable because the screenshot is small. No - the solution is not creating a bigger preview - the solution is using &lt;code&gt;title&lt;/code&gt; attribute.&lt;/p&gt;

&lt;h2&gt;Obscures text&lt;/h2&gt;

&lt;p&gt;If you hover over a hyperlink, a small window appears that will show the preview - and hide a lot of text. This will break the flow while reading. I constantly find myself maneuvering the mouse to avoid stepping on these 'virtual land-mines'.&lt;/p&gt;

&lt;h2&gt;Not Marked&lt;/h2&gt;

&lt;p&gt;Some sites use this only for external links - and some for internal links as well. But all the links are marked in the same way - making it harder for me(and others) to navigate through this 'mine field'.&lt;/p&gt;

&lt;h2&gt;Added 20K Download&lt;/h2&gt;

&lt;p&gt;The Javascript file behind this is 20.8 KB - not adding the images that will be downloaded later. Are you sure that the advantage of this script justifies this extra load?&lt;/p&gt;

&lt;h2&gt;Privacy Issue&lt;/h2&gt;

&lt;p&gt;You are calling a script from a third party site. Basically you are handing over your useage stats to this site. Snap has a &lt;a class="external" href="http://www.snap.com/about/privacy.php"&gt;Privacy Policy statement&lt;/a&gt;. I recommend you go through it before using the script on your site. I am not sure wether this privacy policy is for their site or their script. If you know, please let me know.&lt;/p&gt;

&lt;h2&gt;Users hate it&lt;/h2&gt;

&lt;p&gt;Maybe hate is a strong word - but when Darren Rowse at &lt;a class="external" href="http://www.problogger.net/"&gt;Problogger&lt;/a&gt; &lt;a class="external" href="http://www.problogger.net/archives/2006/12/17/snap-preview-tell-me-what-you-think/"&gt;asked the visitors about their opinion about Snap&lt;/a&gt;, the majority said "No, thanks". This caused Darren to remove the script from his site.&lt;/p&gt;

&lt;h2&gt;The Code&lt;/h2&gt;

&lt;p&gt;I took a look under the hood - I downloaded the JS file and took a look at the code. It was compressed so I had to use a &lt;a class="external" href="http://www.prettyprinter.de/"&gt;code beautifier&lt;/a&gt;. Snap uses &lt;a class="external" href="http://www.wait-till-i.com/index.php?p=239"&gt;Object Literals&lt;/a&gt; - so it will not wreak havoc with your javascript code. However I saw some &lt;code&gt;for-in&lt;/code&gt; loops - I don't know how they will hold up if your site uses &lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Disable Snap Globally&lt;/h2&gt;

&lt;p&gt;Despite all these negative things, I liked this thing about Snap. There is an option to deactivate the script globally. Just follow the '&lt;a class="external" href="http://www.snap.com/about/spa_faq.php?disable_spa=1"&gt;Disable Snap Link&lt;/a&gt;' and snap will be disabled for all sites. More details about the &lt;a class="external" href="http://www.snap.com/about/spa_faq.php#2"&gt;Disable feature&lt;/a&gt;.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/snap" rel="tag"&gt;snap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/preview" rel="tag"&gt;preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/review" rel="tag"&gt;review&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5599709532014982869?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5599709532014982869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5599709532014982869' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5599709532014982869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5599709532014982869'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/snap-preview-anywhere-review.html' title='&apos;Snap Preview Anywhere&apos; Review'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/RakWc6PgesI/AAAAAAAAAJY/In3eU1OOkoQ/s72-c/snap.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7766292165452239426</id><published>2007-01-09T18:35:00.000+05:30</published><updated>2007-01-09T18:53:34.845+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>De-lurking day for all you Lurkers out there</title><content type='html'>&lt;p class="intro"&gt;I always wanted to do a 'de-lurking' post. Two of my favorite web development bloggers - &lt;a href="http://www.456bereastreet.com/archive/200701/delurk_and_tell_me_what_you_want_to_read_about/"&gt;456 Berea st&lt;/a&gt; and &lt;a href="http://veerle.duoh.com/blog/comments/no_more_lurking_its_de_lurking_time_again/"&gt;veerle's blog&lt;/a&gt; have done it. So I have decided to join in and create a de-lurking post of my own.&lt;/p&gt;

&lt;h2&gt;What is De-lurking?&lt;/h2&gt;

&lt;p&gt;A &lt;a href="http://en.wikipedia.org/wiki/Lurker"&gt;lurker&lt;/a&gt; is a '&lt;q&gt;person who reads discussions on a message board, newsgroup, chatroom, file sharing or other interactive system, but &lt;a href="http://www.useit.com/alertbox/participation_inequality.html"&gt;rarely participates&lt;/a&gt;&lt;/q&gt;'. De-lurking is an operation to get you out in the open. Basically what you need to do is &lt;strong class="highlight"&gt;post a comment for this post&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;What do I write in the Comment?&lt;/h2&gt;

&lt;p&gt;I would like the following details...&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your Name&lt;/li&gt;
&lt;li&gt;Your field&lt;/li&gt;
&lt;li&gt;URL(if any)&lt;/li&gt;
&lt;li&gt;What kind of articles would you like to see on my blog?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am always on the lookout for new blogs to add to my RSS Aggregator. I figured the best way to do that is to find people who have the same interest as me - if you read my blog, you will be interested in Web Development. And that is the topic I am most interested in.&lt;/p&gt;

&lt;p&gt;If you &lt;strong class="highlight"&gt;leave your URL&lt;/strong&gt;, I will take a look at your site. And if you have great articles &lt;strong class="highlight"&gt;I will even link to it&lt;/strong&gt;. So please leave your URLs.&lt;/p&gt;

&lt;p&gt;But, please... &lt;strong class="highlight"&gt;please... comment&lt;/strong&gt;. Even if you comment is just 'Hi', post it, all right?&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogging" rel="tag"&gt;blogging&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7766292165452239426?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7766292165452239426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7766292165452239426' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7766292165452239426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7766292165452239426'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/de-lurking-day-for-all-you-lurkers-out.html' title='De-lurking day for all you Lurkers out there'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-3294256535185399255</id><published>2007-01-05T23:49:00.000+05:30</published><updated>2007-01-25T20:14:06.553+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Creating Web 2.0 Graphics In Gimp</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sOe-_HH8vVU/RZ6XbgVUPiI/AAAAAAAAAJM/o3eOul9en7s/s1600-h/wilber_the_gimp_idx.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RZ6XbgVUPiI/AAAAAAAAAJM/o3eOul9en7s/s400/wilber_the_gimp_idx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5016613533728914978" /&gt;&lt;/a&gt;

&lt;p class="intro"&gt;There are many tutorials about creating buttons and graphics in the new 'Web 2.0' style. Unfortunately, all these tutorials are for Photoshop users. The &lt;a href="http://www.gimp.org/" class="external"&gt;Gimp&lt;/a&gt; users are completely ignored. To solve this problem I have written a series on creating Web Graphics in Gimp.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html"&gt;Using Gimp to make Web 2.0 Buttons and Graphics&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;There are many tutorials about creating buttons and graphics in the new 'Web 2.0' style. Unfortunately, all these tutorials are for Photoshop users. The Gimp users are completely ignored. So, I have decided to correct this error - this is a tutorial on how to create a Web 2.0 style button in Linux using Gimp(will work in windows as well).&lt;/dd&gt;

&lt;dt&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-badgesviolators-using-gimp.html"&gt;Creating Badges/Violators using Gimp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;In the first part of this series we saw how to create a Button using Gimp - now to create another prominent element of Web 2.0 design - badges or violators. Very useful for &lt;del&gt;under construction&lt;/del&gt; beta sites.&lt;/dd&gt;

&lt;dt&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-reflections-for-logos-in-gimp.html"&gt;Creating Reflections for Logos in Gimp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Let us see how to create Logos using the reflection trick. Reflections or wet surfaces have been used in many 'Web 2.0' Logos. I used this technique to create my &lt;a class="mypages" href="http://www.openjs.com/"&gt;OpenJS.com&lt;/a&gt; logo. This is very easy to do - once you get the idea.&lt;/dd&gt;

&lt;dt&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-shadows-in-gimp.html"&gt;Creating a shadows in Gimp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Shadows are an integral part of Web 2.0 design. Here are a few ways to create a shadow in Gimp...&lt;/dd&gt;
&lt;/dl&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/design" rel="tag"&gt;design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/gimp" rel="tag"&gt;gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/graphics" rel="tag"&gt;graphics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-3294256535185399255?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/3294256535185399255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=3294256535185399255' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3294256535185399255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3294256535185399255'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/creating-web-20-graphics-in-gimp.html' title='Creating Web 2.0 Graphics In Gimp'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/RZ6XbgVUPiI/AAAAAAAAAJM/o3eOul9en7s/s72-c/wilber_the_gimp_idx.png' height='72' width='72'/><thr:total>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-5835149777457337096</id><published>2007-01-01T23:23:00.000+05:30</published><updated>2007-01-01T23:24:31.426+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Bests Posts in 2006</title><content type='html'>&lt;p class="intro"&gt;Happy new year, all! This year I will continue the tradition of highlighting &lt;a class="internal" href="http://binnyva.blogspot.com/2006/01/best-posts-of-2005.html"&gt;the best posts of the year&lt;/a&gt; at the end of the year(or at the beginning of the next - as in this case). The best posts in 2006 in this blog are...&lt;/p&gt;

&lt;h2&gt;Articles&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/02/gentle-introduction-to-ajax.html"&gt;A Gentle Introduction to Ajax&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;a class="mypages" href="http://www.openjs.com/ajax/tutorial/"&gt;Ajax&lt;/a&gt; or Asynchronous JavaScript and XML enables the programmer to execute a server-side script without refreshing the page. This is a three part series that &lt;strong class="highlight"&gt; teaches the basics of Ajax&lt;/strong&gt;.&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/03/css-shorthand.html"&gt;CSS Shorthand&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;CSS Shorthand is a method to compress multiple declarations into one declaration. Two or more related declarations can be compressed to form one easily readable declaration.&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/03/ajax-response-data-formats.html"&gt;Ajax Response Data Formats&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Some time ago, Peter Paul Kosh wrote an article about the &lt;strong class="highlight"&gt;different types of Ajax data formats - The AJAX response: XML, HTML, or JSON?&lt;/strong&gt; This is my take on the subject&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html"&gt;Web Development in Linux&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;strong class="highlight"&gt;Linux is a better platform for Web Development than Windows&lt;/strong&gt; can ever hope to be. Most of the thing you would need in a development server like a Web Server, Database Server, PHP, Perl, Python, Ruby etc. are already present on any decent distribution. Linux has browsers(Firefox,Konqueror,Lynx,etc.), design tools(Gimp), editors(Quanta Plus,Emacs), programming tools(CVS,Cervisia) - in short, everything you need for web development. This is the longest series in my blog - in is not over yet.&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html"&gt;Using Gimp to make Web 2.0 Buttons and Graphics&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;There are many tutorials about &lt;strong class="highlight"&gt;creating buttons and graphics in the new 'Web 2.0' style&lt;/strong&gt;. Unfortunately, all these tutorials are for Photoshop users. The Gimp users are completely ignored. So, I have decided to correct this error - this is a tutorial on how to create a Web 2.0 style button in Linux using Gimp(will work in windows as well). A four part series.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Scripts&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/03/inline-perl-code-in-html.html"&gt;Inline Perl code in HTML&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;One of the main advantage of using PHP is that you can embed PHP code inside HTML files - just give it the extension '.php' and the server will parse it and serve the resulting page. In Perl, you will have to embed HTML code in perl's print statements - this is a much tougher approach. So I created a perl function that will let you &lt;strong class="highlight"&gt;insert Perl code within HTML files using &amp;lt;?perl ... ?&amp;gt; tags.&lt;/strong&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/08/live-validator-javascript-field.html"&gt;Live Validator - JavaScript Field Validation Script&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Live Validator is a JavaScript program that will &lt;strong class="highlight"&gt;validate any form field as the user types the data using the regular expressions&lt;/strong&gt; that you have specified. To see a working example, visit the &lt;a class="mypages" href="http://www.openjs.com/users/register.php"&gt;registration page of OpenJS&lt;/a&gt;.&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/04/query-function-for-php.html"&gt;Query() Function for PHP&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;query() function is a &lt;strong class="highlight"&gt;PHP function will accept a query as its argument and return the data in different formats based on the result&lt;/strong&gt; of the query.&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/03/xml-parser-function-for-javascript.html"&gt;XML Parser function for JavaScript - xml2array()&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;I have created a small function called 'xml2array()' that will &lt;strong class="highlight"&gt;take an XML document as the argument, parse it and return an associative array as the result&lt;/strong&gt;. This array will contain the data of the XML file - which can be easily accessed. This function is available in PHP too - &lt;a class="mypages" href="http://www.bin-co.com/php/scripts/xml2array/"&gt;xml2array() - XML Parser for PHP&lt;/a&gt;&lt;/dd&gt;

&lt;dt&gt;&lt;a class="internal" href="http://binnyva.blogspot.com/2006/03/updated-version-of-jx-ajax-library.html"&gt;Updated version of jx Ajax Library&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;x is a small &lt;strong class="highlight"&gt;toolkit for providing AJAX support in JavaScript&lt;/strong&gt;. To get the latest version of this script, go to &lt;a class="mypages" href="http://www.openjs.com/scripts/jx/"&gt;jx - JavaScript Ajax Library&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/best" rel="tag"&gt;best&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/binblog" rel="tag"&gt;binblog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5835149777457337096?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5835149777457337096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5835149777457337096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5835149777457337096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5835149777457337096'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2007/01/bests-posts-in-2006.html' title='Bests Posts in 2006'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1720135804203429401</id><published>2006-12-27T23:58:00.000+05:30</published><updated>2007-01-25T20:14:38.991+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Creating shadows in Gimp</title><content type='html'>&lt;p class="intro"&gt;Shadows are an integral part of &lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html" class="internal"&gt;Web 2.0 design&lt;/a&gt;. Here are a few ways to create a shadow in Gimp...&lt;/p&gt;

&lt;p&gt;Open the image you want to 'shadowify'. Choose '&lt;strong class="highlight"&gt;Script-Fu-&gt;Shadow-&gt;Drop Shadow...&lt;/strong&gt;'. This will enlarge the image and give it a shadow. If you really want to see the shadow, create a new layer and move it to the bottom of the stack. Then give the new layer a white background. You should get a shadow like this...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK7hO7NxuI/AAAAAAAAAH4/mGvpbInTx28/s1600-h/camara.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK7hO7NxuI/AAAAAAAAAH4/mGvpbInTx28/s400/camara.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5013275514833323746" /&gt;&lt;/a&gt;

&lt;p&gt;This is the easy way of creating a shadow. You can create a shadow manually too. First, create a new image and put the image you want to 'shadowify'(whats the use of creating a new word if you don't use it?) inside it. Duplicate the newly inserted layer and choose the &lt;strong class="highlight"&gt;Perspective tool&lt;/strong&gt;(Shift+P). Modify one of the layers - give it the position where the shadow would fall...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK7oO7NxvI/AAAAAAAAAIA/_Si3rcvwbug/s1600-h/2perspective.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK7oO7NxvI/AAAAAAAAAIA/_Si3rcvwbug/s400/2perspective.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5013275635092408050" /&gt;&lt;/a&gt;

&lt;p&gt;Select this layer - right click on the layer on the layer panel and select 'Alpha to Selection'. This will &lt;strong class="highlight"&gt;select the visible portion of the layer&lt;/strong&gt;. Now colour the full selection black. This should give the image a shadow like appearance. It will be a bit ugly at this point...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sOe-_HH8vVU/RZK7z-7NxwI/AAAAAAAAAII/1wSRr0R9Qy0/s1600-h/3black_shadow.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RZK7z-7NxwI/AAAAAAAAAII/1wSRr0R9Qy0/s400/3black_shadow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5013275836955870978" /&gt;&lt;/a&gt;

&lt;p&gt;Right click the shadow layer in the Layers Panel and select 'Layer to Image Size'. Now, go to '&lt;strong class="highlight"&gt;Filters-&gt;Blur-&gt;Gaussian Blur&lt;/strong&gt;'. This should blur out the shadow. Change the opacity of the shadow layer to something you are more comfortable with. Now you have a decent shadow...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sOe-_HH8vVU/RZK75-7NxxI/AAAAAAAAAIQ/Orah0O9i2Wk/s1600-h/4shadow_result.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RZK75-7NxxI/AAAAAAAAAIQ/Orah0O9i2Wk/s400/4shadow_result.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5013275940035086098" /&gt;&lt;/a&gt;

&lt;p&gt;You can position the shadow layer to create any kind of shadow you need. Some samples I cooked up...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK8FO7NxyI/AAAAAAAAAIY/r58oQ4AnGnE/s1600-h/5shadow_more.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK8FO7NxyI/AAAAAAAAAIY/r58oQ4AnGnE/s400/5shadow_more.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5013276133308614434" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sOe-_HH8vVU/RZK8Nu7NxzI/AAAAAAAAAIg/WcZ-Ay2u00k/s1600-h/6shadow_text.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RZK8Nu7NxzI/AAAAAAAAAIg/WcZ-Ay2u00k/s400/6shadow_text.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5013276279337502514" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use the other methods we touched earlier like &lt;a href="http://binnyva.blogspot.com/2006/12/creating-reflections-for-logos-in-gimp.html" class="internal" title="Creating Reflections for Logos in Gimp"&gt;reflections&lt;/a&gt; to create some very good results...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sOe-_HH8vVU/RZK8Vu7Nx0I/AAAAAAAAAIo/bWaTpsQzkoc/s1600-h/8final.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RZK8Vu7Nx0I/AAAAAAAAAIo/bWaTpsQzkoc/s400/8final.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5013276416776456002" /&gt;&lt;/a&gt;

&lt;p&gt;And, by the way, the screenshot is not of a Mac application - nor is it a image of winamp. It is xmms - a MP3 player for linux with a Winamp skin called 'IMac_v2'.&lt;/p&gt;

&lt;div class="series-navigation"&gt;
&lt;h2&gt;Creating Web 2.0 Graphics in Gimp Series&lt;/h2&gt;
&lt;a href="http://binnyva.blogspot.com/2007/01/creating-web-20-graphics-in-gimp.html"&gt;Creating Web 2.0 Graphics In Gimp&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html"&gt;Using Gimp to make Web 2.0 Buttons and Graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-badgesviolators-using-gimp.html"&gt;Creating Badges/Violators using Gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-reflections-for-logos-in-gimp.html"&gt;Creating Reflections for Logos in Gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating shadows in Gimp&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/design" rel="tag"&gt;design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/gimp" rel="tag"&gt;gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/shadow" rel="tag"&gt;shadow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web20" rel="tag"&gt;web20&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1720135804203429401?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1720135804203429401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1720135804203429401' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1720135804203429401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1720135804203429401'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/12/creating-shadows-in-gimp.html' title='Creating shadows in Gimp'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RZK7hO7NxuI/AAAAAAAAAH4/mGvpbInTx28/s72-c/camara.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7385062431081417867</id><published>2006-12-23T21:20:00.000+05:30</published><updated>2007-01-25T20:14:50.542+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Creating Reflections for Logos in Gimp</title><content type='html'>&lt;p class="intro"&gt;So far, we have seen how to &lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html" class="internal" title=" Using Gimp to make Web 2.0 Buttons and Graphics"&gt;create Buttons&lt;/a&gt; and &lt;a href="http://binnyva.blogspot.com/2006/12/creating-badgesviolators-using-gimp.html" class="internal" title=" Creating Badges/Violators using Gimp"&gt;violaters&lt;/a&gt; using Gimp. Now let us see how to create Logos using the reflection trick. Reflections or wet surfaces have been used in many 'Web 2.0' Logos. I used this technique to create my &lt;a class="mypages" href="http://www.openjs.com/"&gt;OpenJS.com&lt;/a&gt; logo. This is very easy to do - once you get the idea.&lt;/p&gt;

&lt;p&gt;Create a image with height 100px and Width 200px with white background.&lt;/p&gt;

&lt;p&gt;Using the Text tool, write the text of the logo with a reasonably big font size(we are web 2.0, aren't we?). Now you should have this...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1Qee7NxiI/AAAAAAAAAFo/wtGwMvFvJxY/s1600-h/1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1Qee7NxiI/AAAAAAAAAFo/wtGwMvFvJxY/s400/1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011750444960957986" /&gt;&lt;/a&gt;

&lt;p&gt;Go to the layers panel(Ctrl+L) and duplicate the layer(&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1Qoe7NxjI/AAAAAAAAAFw/Hv2LezzaFgA/s400/duplicate_layer2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011750616759649842" /&gt;) with the text of our logo...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1RHe7NxkI/AAAAAAAAAF4/eRzSA_CeFew/s400/layer_duplicated3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011751149335594562" /&gt;

&lt;p&gt;Using the flip tool(&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RY1RT-7NxlI/AAAAAAAAAGA/_UhXrFiPZPg/s400/flip_tool4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011751364083959378" /&gt;) vertically flip the new layer and position it under the old layer using the Move tool. Now we should have something like...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1RYe7NxmI/AAAAAAAAAGI/_RyRkT-UwhE/s400/flipped5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011751441393370722" /&gt;

&lt;p&gt;In the layers panel, right click the flipped layer and select 'Add Layer Mask' and select 'White(Full opacity)'. You should see something like this in the layers panel...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RY1Rou7NxnI/AAAAAAAAAGQ/s_OD18fbe8k/s400/layer_mask6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011751720566244978" /&gt;

&lt;p&gt;Make sure that the flipped layer's mask is selected - and choose the Gradient Tool(&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RY1R1-7NxoI/AAAAAAAAAGY/zVHS-j5n6aA/s400/gradiant_tool76.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011751948199511682" /&gt;). Make sure the selected colors are Black and white...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1SRe7NxqI/AAAAAAAAAGo/qI4VWH34LTk/s400/colors74.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011752420645914274" /&gt;
 
&lt;p&gt;Now create a gradient like this in the flipped layer's mask...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RY1Siu7NxrI/AAAAAAAAAGw/wPFFD2aVJwo/s400/gradiant7.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011752716998657714" /&gt;

&lt;p&gt;If done correctly, the layer panel will look like this...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RY1Sw-7NxsI/AAAAAAAAAG4/Gqs3516KhzM/s400/gradiant95.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011752961811793602" /&gt;

&lt;p&gt;And the result will be like this...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RY1S--7NxtI/AAAAAAAAAHA/qeXfNHAMuEE/s400/result9.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5011753202329962194" /&gt;

&lt;p&gt;You can tweak this image to get the perfect logo. I removed some unwanted stuff, and made the reflection layer a bit more transparent. Get the &lt;a href="http://www.bin-co.com/sites/binblog/2006/december/reflection.xcf"&gt;XCF File for this tutorial&lt;/a&gt; to see the result.&lt;/p&gt;

&lt;div class="series-navigation"&gt;
&lt;h2&gt;Creating Web 2.0 Graphics in Gimp Series&lt;/h2&gt;
&lt;a href="http://binnyva.blogspot.com/2007/01/creating-web-20-graphics-in-gimp.html"&gt;Creating Web 2.0 Graphics In Gimp&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html"&gt;Using Gimp to make Web 2.0 Buttons and Graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-badgesviolators-using-gimp.html"&gt;Creating Badges/Violators using Gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating Reflections for Logos in Gimp&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-shadows-in-gimp.html"&gt;Creating shadows in Gimp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/design" rel="tag"&gt;design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/gimp" rel="tag"&gt;gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/logo" rel="tag"&gt;logo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/reflection" rel="tag"&gt;reflection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/tutorial" rel="tag"&gt;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7385062431081417867?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7385062431081417867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7385062431081417867' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7385062431081417867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7385062431081417867'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/12/creating-reflections-for-logos-in-gimp.html' title='Creating Reflections for Logos in Gimp'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sOe-_HH8vVU/RY1Qee7NxiI/AAAAAAAAAFo/wtGwMvFvJxY/s72-c/1.png' height='72' width='72'/><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-5887403966349649983</id><published>2006-12-19T06:45:00.000+05:30</published><updated>2007-01-25T20:16:35.303+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Digg Frontpage Redesigned</title><content type='html'>&lt;p class="intro"&gt;&lt;a href="http://www.digg.com/"&gt;Digg&lt;/a&gt; have redesigned their entire site - I kind of liked the old design better. Just give me some time - I will get used to it. The biggest complaint I have is that the blue and green header just don't match.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sOe-_HH8vVU/RYc9UO7NxgI/AAAAAAAAAFQ/4tmURWMqSwI/s1600-h/design.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RYc9UO7NxgI/AAAAAAAAAFQ/4tmURWMqSwI/s200/design.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5010040528286107138" /&gt;&lt;/a&gt;

&lt;p&gt;Digg have create three top level sections...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.digg.com/news"&gt;News&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.digg.com/podcasts"&gt;Podcasts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.digg.com/videos"&gt;Videos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sOe-_HH8vVU/RYc9ee7NxhI/AAAAAAAAAFY/k09L2q7yLgQ/s1600-h/full.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RYc9ee7NxhI/AAAAAAAAAFY/k09L2q7yLgQ/s200/full.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5010040704379766290" /&gt;&lt;/a&gt;

&lt;p&gt;There are some other changes too - they seem to have removed the link to the befriended page. This should be due to the &lt;a href="http://www.seomoz.org/blogdetail.php?ID=1228"&gt;criticism they have received about top users&lt;/a&gt; in digg. But as of yet, only the link to the page is removed. The page is still there. In my case it is...&lt;br /&gt;
&lt;a href="http://www.digg.com/users/binnyva/friends/befriended"&gt;http://www.digg.com/users/binnyva/friends/befriended&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get your page, just use your username instead of binnyva in the above URL.&lt;/p&gt;

&lt;p&gt;Those are the changes I found by doing a little digging(no pun intended) - will let you know more when I have time.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5887403966349649983?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5887403966349649983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5887403966349649983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5887403966349649983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5887403966349649983'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/12/digg-frontpage-redesigned.html' title='Digg Frontpage Redesigned'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/RYc9UO7NxgI/AAAAAAAAAFQ/4tmURWMqSwI/s72-c/design.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8229950236806630855</id><published>2006-12-18T00:23:00.000+05:30</published><updated>2006-12-18T00:25:27.149+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>LocateR - Ruby/Tk Script</title><content type='html'>&lt;p class="intro"&gt;I have created a small program in Ruby/Tk called &lt;a href="http://www.bin-co.com/ruby/tk/locater/" class="mypages"&gt;LocateR&lt;/a&gt;. This is a small GUI for the 'locate' command on Linux system. This will search the computer using the locate command and will show the results in that window itself. Using the locate command is much quicker than searching for a file in the traditional way(&lt;code&gt;find&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.bin-co.com/ruby/tk/locater/locater.tar.gz"&gt;Download LocateR V 1.00.A Beta&lt;/a&gt; - 2.1 KB Tar.Gzipped File&lt;/p&gt;

&lt;p&gt;If you know ruby, could you review the code and give me some feedback? I am relatively &lt;a href="http://binnyva.blogspot.com/2005/09/learning-ruby.html" class="internal"&gt;new to Ruby&lt;/a&gt; - and I want to improve in that area. Especially in connection to &lt;a href="http://binnyva.blogspot.com/2006/11/experimenting-with-cakephp-and-ruby-on.html" class="internal"&gt;rails&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;LocateR - Screenshot&lt;/h2&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bin-co.com/ruby/tk/locater/locater.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px;" src="http://www.bin-co.com/ruby/tk/locater/locater.png" border="0" alt="" /&gt;&lt;/a&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ruby" rel="tag"&gt;ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/tk" rel="tag"&gt;tk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/scripts" rel="tag"&gt;scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/locater" rel="tag"&gt;locater&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8229950236806630855?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8229950236806630855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8229950236806630855' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8229950236806630855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8229950236806630855'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/12/locater-rubytk-script.html' title='LocateR - Ruby/Tk Script'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-6575893326232092690</id><published>2006-12-11T23:38:00.000+05:30</published><updated>2007-01-25T20:15:01.260+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Creating Badges/Violators using Gimp</title><content type='html'>&lt;p class="intro"&gt;In the last post we saw how to &lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html" class="internal" title="Using Gimp to make Web 2.0 Buttons and Graphics"&gt;create a Button using Gimp&lt;/a&gt; - now to create another prominent element of Web 2.0 design - badges or violators. Very useful for &lt;del&gt;under construction&lt;/del&gt; beta sites.&lt;/p&gt;

&lt;p&gt;Create a new image, with 200x200 size and a white background.&lt;/p&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2fUWRUyNI/AAAAAAAAACc/7KNknBe1vUU/s400/new_img.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007333532630304978" /&gt;

&lt;h2&gt;The Star&lt;/h2&gt;

&lt;p&gt;Select 'Filters-&amp;gt;Render-&amp;gt;Gfig...'&lt;/p&gt;

&lt;p&gt;Select the star tool(&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2kBWRUybI/AAAAAAAAAFE/LA7F-vNDtxw/s400/star_tool.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007338703770929586" /&gt;). Now increase the number of sides to 12. Then click 'Browse' and select the 1 pixel brush. Now click and drag anywhere inside the image to create a star. Try to make the star appear at the middle of the picture.&lt;/p&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2flWRUyOI/AAAAAAAAACk/v_bQUi_jr-A/s400/gfig_star.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007333824688081122" /&gt;

&lt;p&gt;Select the 'Move Single Point' tool(&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RX2f4mRUyQI/AAAAAAAAAC0/OPlOEPFNHGs/s400/move_single_point.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007334155400562946" /&gt;) and move the corner of the star to create this image.&lt;/p&gt;

&lt;img src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RX2fwGRUyPI/AAAAAAAAACs/XsVMaqxKbvA/s400/star_shape.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007334009371674866" /&gt;

&lt;p&gt;Click 'Close' to go to the image window. The star we created should show up there. Choose the 'Continuous Region Select' Tool(&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2gGWRUyRI/AAAAAAAAAC8/xJHpy6_NvlA/s400/continous_region.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007334391623764242" /&gt;) and click the &lt;strong&gt;inside the star&lt;/strong&gt; - this should select the star.&lt;/p&gt;

&lt;h2&gt;Gradient Fill&lt;/h2&gt;

&lt;p&gt;After this we have to create a gradient inside this star. For that, choose two different colors as your primary and secondary colors. I used &lt;span style="color:#4d4c4c;"&gt;#4d4c4c&lt;/span&gt; and &lt;span style="color:#d0d0d0;"&gt;#d0d0d0&lt;/span&gt;. Select the gradient tool(&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RX2gJmRUySI/AAAAAAAAADE/HdgRtAw_8lw/s400/gradiant_tool.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007334447458339106" /&gt;) and set the 'Shape' as 'Radial'. Create the gradient &lt;strong&gt;inside&lt;/strong&gt; the star.&lt;/p&gt;

&lt;img src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RX2g72RUyVI/AAAAAAAAADc/Xu9xZrPMNbc/s400/gradiant_options.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007335310746765650" /&gt;

&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RX2gtmRUyUI/AAAAAAAAADU/RlB0kVNlDQA/s400/fill_gradiant.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007335065933629762" /&gt;

&lt;p&gt;You should get something like this...&lt;/p&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2hDWRUyWI/AAAAAAAAADk/PEq4yxC9OXs/s400/fill_gradiant_result.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007335439595784546" /&gt;

&lt;h2&gt;Shadow&lt;/h2&gt;

&lt;p&gt;Select the full star by clicking &lt;strong&gt;outside the star&lt;/strong&gt;. This selects everything other than the star. Now inverse the selection using 'Select-&amp;gt;Invert' - this should select just the star.&lt;/p&gt;

&lt;p&gt;Select 'Script-Fu-&amp;gt;Shadow-&amp;gt;Drop-Shadow...' and enter these values and click 'OK' to create the shadow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offset X : 2&lt;/li&gt;
&lt;li&gt;Offset Y : 2&lt;/li&gt;
&lt;li&gt;Blur Radius : 4&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2hPWRUyXI/AAAAAAAAADs/xEjdM2JXfhw/s400/shadow_too.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007335645754214770" /&gt;

&lt;p&gt;Now you should have this...&lt;/p&gt;

&lt;img src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RX2hYGRUyYI/AAAAAAAAAD0/R3rz6OFaQPs/s400/shadow_result.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007335796078070146" /&gt;

&lt;p&gt;Use the text tool(&lt;img src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RX2hfGRUyZI/AAAAAAAAAD8/c7SomNLV4J0/s400/text_tool.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007335916337154450" /&gt;) to write whatever you want inside the star. 'Beta' is a favorite for Web 2.0 Designers everywhere. You can even give a tilt to the text using the 'Rotate' tool - if you wish.&lt;/p&gt;

&lt;p&gt;This is what I had in the end...&lt;/p&gt;

&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RX2hsmRUyaI/AAAAAAAAAEE/FPlX57K8lAw/s400/beta.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5007336148265388450" /&gt;

&lt;p&gt;The &lt;a href="http://www.bin-co.com/sites/binblog/2006/december/beta.xcf" class="download"&gt;XCF file&lt;/a&gt; for this exercise.&lt;/p&gt;

&lt;div class="series-navigation"&gt;
&lt;h2&gt;Creating Web 2.0 Graphics in Gimp Series&lt;/h2&gt;
&lt;a href="http://binnyva.blogspot.com/2007/01/creating-web-20-graphics-in-gimp.html"&gt;Creating Web 2.0 Graphics In Gimp&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html"&gt;Using Gimp to make Web 2.0 Buttons and Graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating Badges/Violators using Gimp&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-reflections-for-logos-in-gimp.html"&gt;Creating Reflections for Logos in Gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-shadows-in-gimp.html"&gt;Creating shadows in Gimp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/design" rel="tag"&gt;design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/gimp" rel="tag"&gt;gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/graphics" rel="tag"&gt;graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/image" rel="tag"&gt;image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/violator" rel="tag"&gt;violator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/badge" rel="tag"&gt;badge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-6575893326232092690?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/6575893326232092690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=6575893326232092690' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6575893326232092690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6575893326232092690'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/12/creating-badgesviolators-using-gimp.html' title='Creating Badges/Violators using Gimp'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sOe-_HH8vVU/RX2fUWRUyNI/AAAAAAAAACc/7KNknBe1vUU/s72-c/new_img.png' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8797837742273330789</id><published>2006-12-06T22:55:00.000+05:30</published><updated>2007-01-25T20:15:23.102+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Using Gimp to make Web 2.0 Buttons and Graphics</title><content type='html'>&lt;p class="intro"&gt;There are many tutorials about creating buttons and graphics in the new 'Web 2.0' style. Unfortunately, all these tutorials are for Photoshop users. The &lt;a href="http://www.gimp.org/" class="external" title="Gnu Image Manipulation Program"&gt;Gimp&lt;/a&gt; users are completely ignored. So, I have decided to correct this error - this is a tutorial on how to create a Web 2.0 style button in Linux using Gimp(will work in windows as well).&lt;/p&gt;

&lt;p&gt;In this tutorial we will see how to create a Web 2.0 button - you know the kind I am talking about. Rounded corners, gradients, 3D effect - the works. I am using Gimp 2.2.8 in this tutorial. Before starting, get the &lt;a href="http://gimp.org/downloads/" class="external"&gt;latest stable version of Gimp&lt;/a&gt;(right now it is 2.2.13). Somewhat earlier versions will work as well - if it supports the rounded selection option(more about that later).&lt;/p&gt;

&lt;h2&gt;Create the Image&lt;/h2&gt;

&lt;p&gt;If you are ready, lets get to business. First create a new image with the following specifications...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Width - 200px&lt;/li&gt;
&lt;li&gt;Height - 100px&lt;/li&gt;
&lt;li&gt;Background - Transparent&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RXcBuWRUyBI/AAAAAAAAAAM/WXCKYduVCKo/s400/new_image.png" border="0" alt="New Image in Gimp" id="BLOGGER_PHOTO_ID_5005471406609451026" /&gt;

&lt;h2&gt;The Button&lt;/h2&gt;

&lt;p&gt;Now create a rectangle selection(&lt;img src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RXcCNmRUyCI/AAAAAAAAAAU/X_nxw-E7dP8/s400/rectange_selection.png" border="0" alt="Rectangle Selection" id="BLOGGER_PHOTO_ID_5005471943480363042" /&gt; button) with the height and width of the button we are going to create.&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RXcCcmRUyDI/AAAAAAAAAAc/AmKlE4Fp6NY/s400/new_selection.png" border="0" alt="New selection" id="BLOGGER_PHOTO_ID_5005472201178400818" /&gt;

&lt;p&gt;Click on 'Select-&amp;gt;Rounded Rectangle' on the menu bar. If this option is not there, you are using an old version of Gimp. Try 'Script-Fu-&amp;gt;Selection-&amp;gt;Round'. If that is also not there, you are using a really old version of Gimp. Either upgrade you gimp to a newer version or learn &lt;a class="external" href="http://www.novell.com/coolsolutions/feature/11583.html"&gt;how to make a rounded selection in the old way&lt;/a&gt;. Click OK in the 'Rounded Rectangle' Dialog to make our rectangle selection, well, rounded.&lt;/p&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RXcDW2RUyEI/AAAAAAAAAAk/Kdm9xiWQ1BM/s400/rounded_selection.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005473201905780802" /&gt;

&lt;p&gt;Now fill it with a web 2.0 colour - anything bright and/or blinding will do fine. We will use the color of the RSS icon(&lt;span style="color:#f48f35;"&gt;#f48f35&lt;/span&gt;) - you cannot get any more Web 2.0'er than that. Now you should have something like this...&lt;/p&gt;

&lt;img src="http://3.bp.blogspot.com/_sOe-_HH8vVU/RXcDoWRUyFI/AAAAAAAAAAs/hVT69R4nt3A/s400/filled_selection.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005473502553491538" /&gt;

&lt;h2&gt;The Highlight&lt;/h2&gt;

&lt;p&gt;The next step is to create a small rounded rectangle selection inside this rectangle at the top. Use the same methods as described above. The result will look like this...&lt;/p&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RXcD_2RUyGI/AAAAAAAAAA0/_sdVqd0tPr0/s400/inner_selection.png" border="0" alt="Create a rounded rectangle inside the last one" id="BLOGGER_PHOTO_ID_5005473906280417378" /&gt;

&lt;p&gt;Create a new layer and select the Gradient Tool(&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RXcEWGRUyHI/AAAAAAAAAA8/KD42oVpD1FY/s400/gradiant.png" border="0" alt="Gradient tool" id="BLOGGER_PHOTO_ID_5005474288532506738" /&gt;
 or L on the keyboard). Create a gradient in the new layer like this.&lt;/p&gt;

&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RXcEwGRUyII/AAAAAAAAABE/OucaBXYkemo/s400/gradiant_fill.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005474735209105538" /&gt;

&lt;p&gt;Now you have...&lt;/p&gt;

&lt;img src="http://4.bp.blogspot.com/_sOe-_HH8vVU/RXcE7mRUyJI/AAAAAAAAABM/Os_NmCMu638/s400/gradianted.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005474932777601170" /&gt;

&lt;h2&gt;Text&lt;/h2&gt;

&lt;p&gt;Now add the text using the text tool(&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RXcFG2RUyKI/AAAAAAAAABU/O2HzGxbuRUc/s400/text.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005475126051129506" /&gt;
). I use a white color with 'Ellinia CLM Bold' as the font. You can choose what ever you want.&lt;/p&gt;

&lt;p&gt;That's it - you got a button that is as Web 2.0 as &lt;a href="http://del.icio.us/" class="external"&gt;del.icio.us&lt;/a&gt;. You may have to tweak the transparency of the layers to make it look perfect. You can make it a bit better by using a small shadow of the outer rounded rectangle with the color #f48f35. You can do this by selecting the layer with the outer rectangle and selecting 'Scrit-Fu-&amp;gt;Shadow-&amp;gt;Drop Shadow'&lt;/p&gt;

&lt;img src="http://2.bp.blogspot.com/_sOe-_HH8vVU/RXcFXGRUyLI/AAAAAAAAABc/LVmPYEuDHXo/s400/shadow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005475405224003762" /&gt;

&lt;p&gt;To see the full effect giving the image a white background - create a new layer, move it to the bottom of the layer stack and fill it with white color.&lt;/p&gt;

&lt;h2&gt;That's it!&lt;/h2&gt;

&lt;p&gt;Now you have the final image. Is this Web 2.0 or what?&lt;/p&gt;

&lt;img src="http://1.bp.blogspot.com/_sOe-_HH8vVU/RXcFu2RUyMI/AAAAAAAAABk/z_cNqe_H_8w/s400/final.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5005475813245896898" /&gt;

&lt;p&gt;The &lt;a href="http://www.bin-co.com/sites/binblog/2006/december/button.xcf" class="download"&gt;XCF file of this button&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Photoshop Tutorials&lt;/h2&gt;

&lt;p&gt;There many photoshop tutorials to do this. Go read them, get the idea of how to do it, and use gimp to do it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.photoshoplab.com/web20-design-kit.html"&gt;Web 2.0 Design Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://iris-design.info/photoshop/web-20-style-buttons/"&gt;Web 2.0 style buttons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://photoshopit.wordpress.com/2006/10/03/sleek-and-spicy-website-header-tutorial-web-20-style/"&gt;Sleek and Spicy website header Tutorial - “Web 2.0 Style”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let me see how to create those 'badges'(or violators) in Linux.&lt;/p&gt;

&lt;div class="series-navigation"&gt;
&lt;h2&gt;Creating Web 2.0 Graphics in Gimp Series&lt;/h2&gt;
&lt;a href="http://binnyva.blogspot.com/2007/01/creating-web-20-graphics-in-gimp.html"&gt;Creating Web 2.0 Graphics In Gimp&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html"&gt;Using Gimp to make Web 2.0 Buttons and Graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-badgesviolators-using-gimp.html"&gt;Creating Badges/Violators using Gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-reflections-for-logos-in-gimp.html"&gt;Creating Reflections for Logos in Gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/2006/12/creating-shadows-in-gimp.html"&gt;Creating shadows in Gimp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/design" rel="tag"&gt;design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/gimp" rel="tag"&gt;gimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/graphics" rel="tag"&gt;graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/button" rel="tag"&gt;button&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8797837742273330789?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8797837742273330789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8797837742273330789' title='50 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8797837742273330789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8797837742273330789'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/12/using-gimp-to-make-web-20-buttons-and.html' title='Using Gimp to make Web 2.0 Buttons and Graphics'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sOe-_HH8vVU/RXcBuWRUyBI/AAAAAAAAAAM/WXCKYduVCKo/s72-c/new_image.png' height='72' width='72'/><thr:total>50</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1848941771305364808</id><published>2006-11-30T23:03:00.000+05:30</published><updated>2006-11-30T23:05:15.460+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>IT Expo 2006 at Cochin</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger2/6782/1621/400/907873/kerala_tux.png" border="0" alt="Tux in Kerala" /&gt;
&lt;p class="intro"&gt;Taking a short break from the regularly scheduled program, I want to announce the IT Expo 2006 at Cochin, Kerala, India. So, if you are not from Kerala, this post is not for you.&lt;/p&gt;

&lt;blockquote class="pullquote"&gt;&lt;p&gt;IT Expo 2006 will be held at Townhall, Cochin. This event starts at November 30 and will end by December 02. Be there.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;strong class="highlight"&gt;IT Expo 2006 will be held at Townhall, Cochin&lt;/strong&gt;. This event starts at &lt;strong class="highlight"&gt;November 30 and will end by December 02&lt;/strong&gt;. If you are in Cochin, be there. The &lt;a href="http://www.ilug-cochin.org/" class="external"&gt;Cochin LUG&lt;/a&gt;, which I am a part of, will have a stall(#41) in this exhibition.&lt;/p&gt;

&lt;p&gt;The exhibition &lt;strong class="highlight"&gt;time is from 10:00 AM to 8:00 PM&lt;/strong&gt;. If you are planning to visit the exhibition, &lt;strong class="highlight"&gt;come over and say hi&lt;/strong&gt;. Just look for the stall named '&lt;a href="http://www.ilug-cochin.org/" class="external"&gt;ilug-cochin.org&lt;/a&gt;' and ask for Binny. I will be there from 3:30 to 8 PM tomorrow and full day on Saturday.&lt;/p&gt;

&lt;p&gt;Read more about it and updates on &lt;a href="http://blog.binnyva.com/" class="mypages"&gt;my personal blog&lt;/a&gt;. Some posts about this event...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.binnyva.com/2006/11/it-expo-2006-has-started/" class="mypages"&gt;IT Expo 2006 has started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.binnyva.com/2006/11/it-expo-2006-at-townhall-cochin/" class="mypages"&gt;IT Expo 2006 at Townhall, Cochin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/kerala" rel="tag"&gt;kerala&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/announce" rel="tag"&gt;announce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/it" rel="tag"&gt;it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/cochin" rel="tag"&gt;cochin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1848941771305364808?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1848941771305364808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1848941771305364808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1848941771305364808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1848941771305364808'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/it-expo-2006-at-cochin.html' title='IT Expo 2006 at Cochin'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8126527172101449864</id><published>2006-11-25T19:45:00.000+05:30</published><updated>2007-01-13T23:01:09.257+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Experimenting with CakePHP and Ruby on Rails</title><content type='html'>&lt;p class="intro"&gt;I am experimenting with two frameworks that are really popular these days - &lt;a href="http://rubyonrails.org/" class="external"&gt;Ruby On Rails&lt;/a&gt; and &lt;a href="http://www.cakephp.org/" class="external"&gt;CakePHP&lt;/a&gt;. I will write a comparison between the two when I am done. So far, I think I prefer Ruby on Rails over CakePHP - I still don't understand why.&lt;/p&gt;

&lt;h2&gt;What they are...&lt;/h2&gt;

&lt;h3&gt;Ruby on Rails&lt;/h3&gt;
&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger2/6782/1621/400/322173/rails.png" border="0" alt="Ruby on Rails" /&gt;
&lt;p&gt;From the &lt;a href="http://rubyonrails.org/" class="external"&gt;site&lt;/a&gt;...&lt;/p&gt;

&lt;blockquote cite="http://rubyonrails.org/"&gt;Ruby on Rails is an open-source web framework that's optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over convention.&lt;/blockquote&gt;

&lt;h3&gt;CakePHP&lt;/h3&gt;
&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger2/6782/1621/400/91789/cake.png" border="0" alt="CakePHP" /&gt;

&lt;p&gt;From the &lt;a href="http://www.cakephp.org/" class="external"&gt;site&lt;/a&gt;...&lt;/p&gt;

&lt;blockquote cite="http://www.cakephp.org/"&gt;Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility.&lt;/blockquote&gt;

&lt;h2&gt;My Experience&lt;/h2&gt;

&lt;p&gt;I have already created a small 5 page application on &lt;abbr title="Ruby on Rails"&gt;ROR&lt;/abbr&gt; - it is not something that the public can use - so I am not releasing it. However I am creating another somewhat larger application on ROR - which I will release as soon as it is over. Expect it within a month(or so). As I am using DreamHost, I have Ruby on Rails hosting - so hosting won't be a problem.&lt;/p&gt;

&lt;p&gt;So far, I have only experimented on CakePHP - I still am looking for a small project to use CakePHP in. Suggestions are welcome.&lt;/p&gt;

&lt;h2&gt;ActiveRecord&lt;/h2&gt;

&lt;p&gt;ActiveRecord is an object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data. Both CakePHP and ROR supports this. &lt;abbr title="Object Relation Mapping"&gt;ORM&lt;/abbr&gt; is something I want in my projects - I don't like using SQL all over the place.&lt;/p&gt;

&lt;p&gt;Basically, that means that I can write &lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;$person = new Person();
$person-&gt;name_first = 'Binny';
$person-&gt;name_last = 'V A';
$person-&gt;website = 'http://www.bin-co.com';
$person-&gt;save();&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;instead of&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;$sql-&gt;exec("INSERT INTO Person(name_first,name_last,website) VALUES('Binny','V A','http://wwww.openjs.com/')");&lt;/code&gt;&lt;/pre&gt;

Do you know any PHP library that will provide this feature? Currently I am looking into &lt;a href="http://phplens.com/lens/adodb/docs-active-record.htm" class="external"&gt;ADOdb&lt;/a&gt; - but I still can't get it to work - yet.

&lt;h2&gt;Disadvantages&lt;/h2&gt;

&lt;p&gt;I still have not encountered any major disadvantages yet. However, the few problems that I have seen are...&lt;/p&gt;

&lt;h3&gt;CakePHP&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Documentation is not as good as for ROR - I end up viewing the source to find what I need. This may be because their search engine shows the source at the top of the results.&lt;/li&gt;
&lt;li&gt;Not enough tutorials. Also there are some errors(typos) in the existing tutorials.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Ruby on Rails&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I still have not managed to run my project using Apache - I am still using the Brick Server. This is clumsy as I have to keep a terminal window open.&lt;/li&gt;
&lt;li&gt;Difficult to find hosting - there are many hosting plans that support PHP - but very few that support ROR.&lt;/li&gt;
&lt;li&gt;Too much hype. Not necessarily a bad thing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Related Links&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.phpit.net/article/ten-different-php-frameworks/" class="external"&gt;Taking a look at ten different PHP frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.zzine.org/node/1370" class="external"&gt;CakePHP - A "tasty" solution for PHP programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jimmyzimmerman.com/blog/2006/09/why-i-like-cakephp.html" class="external"&gt;Why I like CakePHP&lt;/a&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/php" rel="tag"&gt;php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ruby" rel="tag"&gt;ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rails" rel="tag"&gt;rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/framework" rel="tag"&gt;framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8126527172101449864?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8126527172101449864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8126527172101449864' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8126527172101449864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8126527172101449864'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/experimenting-with-cakephp-and-ruby-on.html' title='Experimenting with CakePHP and Ruby on Rails'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-929616711767891215</id><published>2006-11-20T17:47:00.000+05:30</published><updated>2006-11-20T17:50:31.610+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><title type='text'>Del.icio.us and Furl Bookmarklets - Improved</title><content type='html'>&lt;p class="intro"&gt;In the last post I created the 'perfect' &lt;a href="http://binnyva.blogspot.com/2006/11/digg-bookmarklet-for-firefox.html" class="internal"&gt;Digg Bookmarklet&lt;/a&gt; - now I will try to do the same for Del.icio.us and Furl bookmarklets. It follows the concepts introduced in the post about &lt;a href="http://binnyva.blogspot.com/2006/11/removing-description-and-keyword-meta.html"&gt;meta tags&lt;/a&gt;. The principle will be the same as the one used in the Digg bookmarklet - SMP or Selection/Meta/Paragraph approach.&lt;/p&gt;

&lt;h2&gt;Fetching Data&lt;/h2&gt;

&lt;p&gt;Getting the Title and URL is done using &lt;code&gt;document.title&lt;/code&gt; and &lt;code&gt;document.location.href&lt;/code&gt;. To create a suitable description, the following method is used...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First, see if any &lt;strong class="highlight"&gt;text is selected&lt;/strong&gt; in the document. If so use that as the description.&lt;/li&gt;
&lt;li&gt;If nothing is selected, search for the &lt;strong class="highlight"&gt;'description' meta tag&lt;/strong&gt;. If present use that.&lt;/li&gt;
&lt;li&gt;If these two methods fails, we use a failsafe - the &lt;strong class="highlight"&gt;first paragraph&lt;/strong&gt;(&lt;code&gt;p&lt;/code&gt; tag) is fetched and used.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Installation&lt;/h2&gt;

&lt;p&gt;To install the bookmarklet, &lt;strong class="highlight"&gt;drag the above link to your bookmarks toolbar&lt;/strong&gt;. This should create a new button on the toolbar. Now visit any page you want to submit to the bookmarking service and hit this button. The bookmarklet will open a new pop up window with all the information filled in automatically.&lt;/p&gt;

&lt;h2&gt;Del.icio.us&lt;/h2&gt;
&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger2/6782/1621/400/delicious.gif" alt="Del.icio.us logo" border="0" /&gt;
&lt;h3&gt;Bookmarklet&lt;/h3&gt;
&lt;p&gt;&lt;a href="javascript:q%3Dlocation.href%3Bd%3Ddocument%3Bl%3Dd.title%3Bt%3D%27%27%3Bw%3Dwindow%3Bs%3Dw.selection%3Bt%3Ds%3F%28s.type%21%3D%27None%27%3Fs.createRange%28%29.text%3A%27%27%29%3A%28w.getSelection%3Fw.getSelection%28%29%3A%27%27%29%3Bt%3Dt.toString%28%29%3Bif%28%21t%29%7Bm%3Dd.getElementsByTagName%28%27meta%27%29%3Bfor%28i%3D0%3Bi%3Cm.length%3Bi++%29if%28m%5Bi%5D.getAttribute%28%27name%27%29%3D%3D%27description%27%29t%3Dm%5Bi%5D.getAttribute%28%27content%27%29%3B%7Dif%28%21t%29%7Bp%3Dd.getElementsByTagName%28%27p%27%29%3Bif%28p%29t%3Dp%5B0%5D.innerHTML.replace%28/%3C%5B%5E%3E%5D+%3E/g%2C%27%27%29%3B%7Dif%28t.length%3E500%29t%3Dt.substr%280%2C500%29+%22%20...%22%3Bvoid%28open%28%27http%3A//del.icio.us/binnyva%3Fv%3D2%26noui%3Dyes%26jump%3Dclose%26url%3D%27+encodeURIComponent%28q%29+%27%26title%3D%27+encodeURIComponent%28l%29+%27%26extended%3D%27+encodeURIComponent%28t%29%2C%27delicious%27%2C%27toolbar%3Dno%2Cwidth%3D700%2Cheight%3D250%27%29%29%3B;void 0;" class="bookmarklet"&gt;Del.icio.us&lt;/a&gt; Bookmarklets&lt;/p&gt;

&lt;h3&gt;Code&lt;/h3&gt;
&lt;p&gt;The &lt;a href="#code-del" onclick="document.getElementById('code-del').style.display='block';"&gt;Del.icio.us bookmarklet code(readable format)&lt;/a&gt;.&lt;/p&gt;
&lt;pre id="code-del" style="display:none;"&gt;&lt;code class="javascript"&gt;javascript:
d = document;
w = window;
s = w.selection;
t = s ? (s.type != 'None' ? s.createRange().text : '') : (w.getSelection ? w.getSelection() : '');
t = t.toString();
if (!t) {
    m = d.getElementsByTagName('meta');
    for (i = 0; i &amp;lt; m.length; i++)if (m[i].getAttribute('name') == 'description')t = m[i].getAttribute('content');
}
if (!t) {
    p = d.getElementsByTagName('p');
    if (p) t = p[0].innerHTML.replace(/&amp;lt;[^&gt;]+&gt;/g, '');
}
if (t.length &gt; 345)t = t.substr(0, 345) + " ...";
void (open('http://digg.com/submit?phase=2&amp;amp;url=' + encodeURIComponent(location.href) 
+ '&amp;amp;title=' + encodeURIComponent(d.title) + '&amp;amp;bodytext=' + encodeURIComponent(t)));
void 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;The Original&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://del.icio.us/help/morebuttons" class="external"&gt;Original Bookmarklet&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Furl&lt;/h2&gt;

&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger2/6782/1621/400/logo-furl.gif" alt="Furl Logo" border="0" /&gt;
&lt;h3&gt;Bookmarklet&lt;/h3&gt;
&lt;p&gt;&lt;a href="javascript:(function(){d%3Ddocument%3Bw%3Dwindow%3Bs%3Dw.selection%3Bt%3Ds%3F%28s.type%21%3D%27None%27%3Fs.createRange%28%29.text%3A%27%27%29%3A%28w.getSelection%3Fw.getSelection%28%29%3A%27%27%29%3Bt%3Dt.toString%28%29%3Bif%28%21t%29%7Bm%3Dd.getElementsByTagName%28%27meta%27%29%3Bfor%28i%3D0%3Bi%3Cm.length%3Bi++%29if%28m%5Bi%5D.getAttribute%28%27name%27%29%3D%3D%27description%27%29t%3Dm%5Bi%5D.getAttribute%28%27content%27%29%3B%3B%3B%7Dif%28%21t%29%7Bp%3Dd.getElementsByTagName%28%27p%27%29%3Bif%28p%29t%3Dp%5B0%5D.innerHTML.replace%28/%3C%5B%5E%3E%5D+%3E/g%2C%27%27%29%3B%7Dif%28t.length%3E500%29t%3Dt.substr%280%2C500%29+%22%20...%22%3Bvar%20furlit%3Dwindow.open%28%27http%3A//www.furl.net/storeIt.jsp%3Ft%3D%27+encodeURIComponent%28d.title%29+%27%26u%3D%27+escape%28d.location.href%29+%27%26r%3D%27+escape%28d.referrer%29+%27%26c%3D%27+encodeURIComponent%28t%29%2C%27furlit%27%2C%27width%3D475%2Cheight%3D540%2Cleft%3D75%2Ctop%3D20%2Cresizable%3Dyes%27%29%3Bfurlit.focus%28%29%3B})()"&gt;Furl&lt;/a&gt; Bookmarklet&lt;/p&gt;

&lt;h3&gt;Code&lt;/h3&gt;

&lt;p&gt;The &lt;a href="#code-furl" onclick="document.getElementById('code-furl').style.display='block';"&gt;Furl bookmarklet code&lt;/a&gt;.&lt;/p&gt;
&lt;pre id="code-furl" style="display:none;"&gt;&lt;code class="javascript"&gt;javascript:(function(){
d = document;
w = window;
s = w.selection;
t = s ? (s.type != 'None' ? s.createRange().text : '') : (w.getSelection ? w.getSelection() : '');
t = t.toString();
if (!t) {
    m = d.getElementsByTagName('meta');
    for (i = 0; i &amp;lt; m.length; i++)if (m[i].getAttribute('name') == 'description')t = m[i].getAttribute('content'); ; ; }
if (!t) {
    p = d.getElementsByTagName('p');
    if (p)t = p[0].innerHTML.replace(/&amp;lt;[^&gt;]+&gt;/g, '');
}
if (t.length &gt; 500)t = t.substr(0, 500) + " ...";
var furlit = window.open('http://www.furl.net/storeIt.jsp?t=' + encodeURIComponent(d.title) + '&amp;amp;u=' + escape(d.location.href) + '&amp;amp;r=' + escape(d.referrer) + '&amp;amp;c=' + encodeURIComponent(t), 'furlit', 'width=475,height=540,left=75,top=20,resizable=yes');
furlit.focus();
})();
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Original&lt;/h3&gt;
&lt;a href="http://furl.net/tools.jsp" class="external"&gt;Original Furl Bookmarklet&lt;/a&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/del.icio.us" rel="tag"&gt;del.icio.us&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/furl" rel="tag"&gt;furl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/bookmarklet" rel="tag"&gt;bookmarklet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/tools" rel="tag"&gt;tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-929616711767891215?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/929616711767891215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=929616711767891215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/929616711767891215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/929616711767891215'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/delicious-and-furl-bookmarklets.html' title='Del.icio.us and Furl Bookmarklets - Improved'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8488399781811756969</id><published>2006-11-15T23:29:00.000+05:30</published><updated>2007-05-26T22:57:12.655+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>Digg Bookmarklet for Firefox</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/digging.png" border="0" alt="The effect of my bookmarklet on Digging" /&gt;

&lt;p class="intro"&gt;I have talked in length about how del.icio.us and furl &lt;a href="http://binnyva.blogspot.com/2006/11/removing-description-and-keyword-meta.html" class="internal" title="Removing Description and Keyword Meta Tag Considered Harmful"&gt;bookmarklets can be improved&lt;/a&gt; - now I want to talk about another similar service that don't even provide a bookmarklet. I am talking about Digg. Okay, I know that Digg is not a social bookmarking site - but it is a site to which you can &lt;strong class="highlight"&gt;submit URLs with it's title and description&lt;/strong&gt;. So the same kind of bookmarklets can be used here too. With that in mind, I will try to create the 'perfect' Digg bookmarklet.&lt;/p&gt;

&lt;p&gt;The &lt;a href="javascript:d%3Ddocument%3Bt%3D%27%27%3Bw%3Dwindow%3Bs%3Dw.selection%3Bt%3Ds%3F%28s.type%21%3D%27None%27%3Fs.createRange%28%29.text%3A%27%27%29%3A%28w.getSelection%3Fw.getSelection%28%29%3A%27%27%29%3Bt%3Dt.toString%28%29%3Bif%28%21t%29%7Bm%3Dd.getElementsByTagName%28%27meta%27%29%3Bfor%28i%3D0%3Bi%3Cm.length%3Bi++%29if%28m%5Bi%5D.getAttribute%28%27name%27%29%3D%3D%27description%27%29t%3Dm%5Bi%5D.getAttribute%28%27content%27%29%3B%7Dif%28%21t%29%7Bp%3Dd.getElementsByTagName%28%27p%27%29%3Bif%28p%29t%3Dp%5B0%5D.innerHTML.replace%28/%3C%5B%5E%3E%5D+%3E/g%2C%27%27%29%3B%7Dif%28t.length%3E345%29t%3Dt.substr%280%2C345%29+%22%20...%22%3Bvoid%28open%28%27http%3A//digg.com/submit%3Fphase%3D2%26url%3D%27+encodeURIComponent%28location.href%29+%27%26title%3D%27+encodeURIComponent%28d.title%29+%27%26bodytext%3D%27+encodeURIComponent%28t%29%29%29;void 0;" class="bookmarklet"&gt;Digger&lt;/a&gt; Bookmarklet - for the impatient. To install the bookmarklet, just 'dragg' the link to your bookmarks toolbar. Now visit any page you want to submit to digg and hit this button. The bookmarklet will open a new window with all the information filled in automatically.&lt;/p&gt;

&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;The Digg bookmarklet should have the following features...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong class="highlight"&gt;URL&lt;/strong&gt; must be fetched&lt;/li&gt;
&lt;li&gt;&lt;strong class="highlight"&gt;Title&lt;/strong&gt; must be fetched&lt;/li&gt;
&lt;li&gt;The &lt;strong class="highlight"&gt;description&lt;/strong&gt; to be used must be &lt;strong class="highlight"&gt;selectable by the user&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If the user did not select a description, it must be auto generated.&lt;/li&gt;
&lt;li&gt;All the inputed values must be &lt;strong class="highlight"&gt;editable by the user&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The perfect bookmarklet should work in IE as well as the other browsers. However, I am leaving this out as I hate IE and so should you. Anyway, enabling this feature will make many other features impossible - as IE have a very stupid 488 character limit for bookmarks. This will make complex bookmarklets very hard to create - if not impossible.&lt;/p&gt;

&lt;h2&gt;Fetching Data&lt;/h2&gt;

&lt;h3 id='url'&gt;URL&lt;/h3&gt;

&lt;p&gt;Fetching URL of the current page is easy - just use &lt;code&gt;document.location.href&lt;/code&gt;. This will be passed in the URL to the Digg site - to the &lt;a href="http://www.digg.com/submit?url=http://binnyva.blogspot.com&amp;amp;phase=2"&gt;phase 2 page&lt;/a&gt;. This means that URL is not editable after the bookmarklet is clicked. I am sorry about that - if it must be editable, I have to use the &lt;a href="http://www.digg.com/submit"&gt;phase 1&lt;/a&gt;. That is more trouble than it is worth.&lt;/p&gt;

&lt;h2 name='title'&gt;Title&lt;/h2&gt;

&lt;p&gt;Another easy one - javascript has the &lt;code&gt;document.title&lt;/code&gt; property that can be used to fetch the title of the document. There is a problem with this - in many sites, the site title is given with the page title - like this "&lt;a href="http://www.bin-co.com/php/scripts/xml2array/" class="mypages"&gt;xml2array() - XML Parser for PHP &amp;lt; PHP &amp;lt; Bin-Co&lt;/a&gt;". Using the first H1 tag may solve this, but again, that could hold the site title too. Anyway this field is editable - so don't worry too much about it.&lt;/p&gt;

&lt;h2 name="description"&gt;Description&lt;/h2&gt;

&lt;p&gt;This is the hard part - I am going to use this method to fetch the description.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, see if any &lt;strong class="highlight"&gt;text is selected&lt;/strong&gt; in the document. If so use that as the description.&lt;/li&gt;
&lt;li&gt;If nothing is selected, search for the &lt;strong class="highlight"&gt;'description' meta tag&lt;/strong&gt;. If present use that.&lt;/li&gt;
&lt;li&gt;If these two methods fails, we use a failsafe - the &lt;strong class="highlight"&gt;first paragraph&lt;/strong&gt;(&lt;code&gt;p&lt;/code&gt; tag) is fetched and used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I call this the &lt;abbr title="Selection/Meta/Paragraph"&gt;SMP&lt;/abbr&gt; approach - I use this in my custom social bookmarking bookmarklets. But that is another post.&lt;/p&gt;

&lt;p&gt;Now all we have to do is create a URL with these data in the query. The keys used by Digg are..&lt;/p&gt;

&lt;dl&gt;&lt;dt&gt;title&lt;/dt&gt;
&lt;dd&gt;The &lt;a href="#title"&gt;title&lt;/a&gt; of the page&lt;/dd&gt;
&lt;dt&gt;bodytext&lt;/dt&gt;
&lt;dd&gt;The &lt;a href="#description"&gt;description&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;URL&lt;/dt&gt;
&lt;dd&gt;The &lt;a href="#url"&gt;URL&lt;/a&gt; of the page.&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;Please note that you will have to URL encode all the data before using it in the URL.&lt;/p&gt;

&lt;h2&gt;Bookmarklet&lt;/h2&gt;

&lt;p&gt;The Bookmarklet - &lt;a href="javascript:d%3Ddocument%3Bt%3D%27%27%3Bw%3Dwindow%3Bs%3Dw.selection%3Bt%3Ds%3F%28s.type%21%3D%27None%27%3Fs.createRange%28%29.text%3A%27%27%29%3A%28w.getSelection%3Fw.getSelection%28%29%3A%27%27%29%3Bt%3Dt.toString%28%29%3Bif%28%21t%29%7Bm%3Dd.getElementsByTagName%28%27meta%27%29%3Bfor%28i%3D0%3Bi%3Cm.length%3Bi++%29if%28m%5Bi%5D.getAttribute%28%27name%27%29%3D%3D%27description%27%29t%3Dm%5Bi%5D.getAttribute%28%27content%27%29%3B%7Dif%28%21t%29%7Bp%3Dd.getElementsByTagName%28%27p%27%29%3Bif%28p%29t%3Dp%5B0%5D.innerHTML.replace%28/%3C%5B%5E%3E%5D+%3E/g%2C%27%27%29%3B%7Dif%28t.length%3E345%29t%3Dt.substr%280%2C345%29+%22%20...%22%3Bvoid%28open%28%27http%3A//digg.com/submit%3Fphase%3D2%26url%3D%27+encodeURIComponent%28location.href%29+%27%26title%3D%27+encodeURIComponent%28d.title%29+%27%26bodytext%3D%27+encodeURIComponent%28t%29%29%29;void 0;" class="bookmarklet"&gt;Digger&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To install the bookmarklet, &lt;strong class="highlight"&gt;drag the above link to your bookmarks toolbar&lt;/strong&gt;. Now visit any page you want to submit to digg and hit this button. The bookmarklet will open a new window with all the information filled in automatically.&lt;/p&gt;

&lt;p&gt;The &lt;a href="#code" onclick="document.getElementById('code').style.display='block';"&gt;bookmarklet code(readable format)&lt;/a&gt;.&lt;/p&gt;
&lt;pre id="code" style="display:none;"&gt;&lt;code class="javascript"&gt;
(function(){
d = document;
w = window;
s = w.selection;
t = s ? (s.type != 'None' ? s.createRange().text : '') : (w.getSelection ? w.getSelection() : '');
t = t.toString();
if (!t) {
    m = d.getElementsByTagName('meta');
    for (i = 0; i &amp;lt; m.length; i++)if (m[i].getAttribute('name') == 'description')t = m[i].getAttribute('content');
}
if (!t) {
    p = d.getElementsByTagName('p');
    if (p) t = p[0].innerHTML.replace(/&amp;lt;[^&gt;]+&gt;/g, '');
}
if (t.length &gt; 345)t = t.substr(0, 345) + " ...";
void (open('http://digg.com/submit?phase=2&amp;url=' + encodeURIComponent(location.href) 
+ '&amp;title=' + encodeURIComponent(d.title) + '&amp;bodytext=' + encodeURIComponent(t)))
})();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By the way, this bookmarklet &lt;strong class="highlight"&gt;will not work in IE6&lt;/strong&gt;. You need a &lt;a href="http://binnyva.blogspot.com/2006/10/firefox-20-releaseand-ie-7.html" class="internal" title="Firefox 2.0"&gt;good browser&lt;/a&gt; if you wish to use the bookmarklet.&lt;/p&gt;

&lt;p&gt;If you have any more ideas to improve this bookmarklet, let me know.&lt;/p&gt;

&lt;script type="text/javascript"&gt;
digg_url = 'http://digg.com/design/Bin_Blog_Digg_Bookmarklet_for_Firefox';
&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/firefox" rel="tag"&gt;firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/bookmarklet" rel="tag"&gt;bookmarklet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/digg" rel="tag"&gt;digg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sites" rel="tag"&gt;sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/tools" rel="tag"&gt;tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8488399781811756969?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8488399781811756969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8488399781811756969' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8488399781811756969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8488399781811756969'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/digg-bookmarklet-for-firefox.html' title='Digg Bookmarklet for Firefox'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1407964593552115777</id><published>2006-11-09T22:33:00.000+05:30</published><updated>2007-01-25T20:16:58.006+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Removing Description and Keyword Meta Tag Considered Harmful</title><content type='html'>&lt;p class="intro"&gt;Many in the SEO field have commented on the &lt;strong class="highlight"&gt;uselessness of the meta tags&lt;/strong&gt; - primarily of the &lt;a href="http://searchenginewatch.com/showPage.html?page=2165061" class="external"&gt;Keywords meta tag&lt;/a&gt;. Many have even recommend it be removed as most of the Search engines ignore it completely. This is because many SEO 'experts' have abuse it a lot trying to game Google. But I will not recommend removing either of these tags. &lt;strong class="highlight"&gt;Both have great use - if your visitors are using any of the popular social bookmarking&lt;/strong&gt; tools like Del.icio.us or Furl.&lt;/p&gt;

&lt;h2&gt;SEO and Meta Tags&lt;/h2&gt;
&lt;blockquote class="pullquote"&gt;&lt;p&gt;The phrase 'meta tag' became a synonym for SEO.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Earlier, the primary use of these tags were for the SEO benefits it had. It was used so much that the phase 'meta tag' became a synonym for SEO. But lately, most search engines are ignoring it. Now most of the SEO heavy weights &lt;a href="http://www.searchengineguide.com/whalen/2002/1004_jw1.html" class="external"&gt;do not recommend using these meta tags&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong class="highlight"&gt;description tags are still in use as they appear in the &lt;abbr title="Search Engine Result Pages"&gt;SERP&lt;/abbr&gt;s.&lt;/strong&gt; But most people ignore the keyword meta tag.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/6782/1621/1600/google.0.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/google.0.png" border="0" alt="The description meta tag appears in the Google search result pages." /&gt;&lt;/a&gt;

&lt;h2&gt;Bookmarking Tools and Meta Tags&lt;/h2&gt;

&lt;p&gt;Social bookmarking services like &lt;a href="http://del.icio.us/" class="external"&gt;Del.icio.us&lt;/a&gt; or &lt;a href="http://www.furl.net/" class="highlight"&gt;Furl&lt;/a&gt; have seen a huge popularity boost in the last few years. Most of us are familiar with the bookmarklets they have provide us. These bookmarklets(or favelets) make it easier to bookmark a page.&lt;/p&gt;

&lt;p&gt;Let us take a look at the case of del.icio.us - easily the most popular social bookmarker(is that a word?). It requires 4 inputs about a page...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL(Mandatory)&lt;/li&gt;
&lt;li&gt;Title(Mandatory)&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Tags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bookmarklet will try to fetch these data from the page automatically. The URL will be the value of 'document.location.href' and Title will be 'document.title'. So these will be automatically filled out for you.&lt;/p&gt;

&lt;p&gt;But what about the rest? Not using tags when bookmarking is a sin against man and nature! I mean, that is the whole point of 'Web 2.0' social bookmarking.&lt;/p&gt;

&lt;p&gt;The description field is just as important - if you wish to search through you bookmarks, nothing helps more than the data given in this field. &lt;/p&gt;

&lt;h2&gt;Description meta Tag&lt;/h2&gt;

&lt;p&gt;One option is to manually enter the data into these fields. Tags, one can fill out - but what about the description? Are you willing to type out a good description every time you bookmark a page? Not me! The best approach to get this field automatically is to use the meta description field. Just use DOM to get the data and pass it to the posting url.&lt;/p&gt;

&lt;h3&gt;del.icio.us&lt;/h3&gt;

&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/delicious.gif" border="0" alt="Del.icio.us logo" /&gt;
&lt;p&gt;Unfortunately, &lt;a href="http://del.icio.us/help/morebuttons" class="external"&gt;del.icio.us's bookmarklet&lt;/a&gt; don't support this tag. I cannot blame them for that - as usual I place the blame on Microsoft. To be more precise, the blame falls on IE. To be even more precise, it is the fault of IE's inability to handle bookmarklets(or favelets, as it is known in IE) that is more than 488(it differs in different versions) characters in length.&lt;/p&gt;

&lt;p&gt;It is not possible to compress the meta tag searching feature in 488 characters - so del.icio.us has left this feature out.&lt;/p&gt;

&lt;h3&gt;Furl&lt;/h3&gt;

&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/logo-furl.gif" border="0" alt="Furl Logo" /&gt;
&lt;p&gt;Fortunately, furl don't have any such limitations. In the &lt;a href="http://alistapart.com/stories/tohell/" class="external" title="To Hell With Bad Browsers"&gt;grand tradition of AListApart&lt;/a&gt;, furl created a &lt;a href="http://furl.net/tools.jsp" class="external"&gt;bookmarklet&lt;/a&gt; that is just shy of 2000 characters. But this don't support the description meta tag either. What this does is capture the selected text and use it as the description.&lt;/p&gt;

&lt;blockquote class="pullquote"&gt;&lt;p&gt;Most sites don't have this(description meta) tag. In the sites that have it, it is not properly implemented. They just use the same description through out the site.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;There is a good reason as of to why the description meta tag is not supported in the bookmarking bookmarklets(hey, that rhymes). It is because the majority of sites don't support it. Most sites don't have this tag. In the sites that have it, it is not properly implemented. They just use the same description through out the site. Yes, its a sad world we live in.&lt;/p&gt;

&lt;p&gt;Anyway, it is not so hard to modify the bookmarklet to include this feature - the hard part is decoding the bookmarklet. You can use some &lt;a href="http://hdvforever.com/beautify.aspx" class="external"&gt;JavaScript beautifier&lt;/a&gt; to do that. After that, it is a trivial matter to insert the code to fetch the meta tag. However, this bookmarklet will only work on &lt;a href="http://binnyva.blogspot.com/2006/10/firefox-20-releaseand-ie-7.html" class="internal" title="Firefox"&gt;good browsers&lt;/a&gt; - which is a good thing - it will force you to abandon IE. Hey, I can hope, can't I?&lt;/p&gt;

&lt;h2&gt;Keywords = Tags&lt;/h2&gt;

&lt;p&gt;Since I spent this much time rambling about meta description, you must have guessed the use of the 'other' meta tag - &lt;code&gt;keyword&lt;/code&gt;. Yes, they can be used to tag the page. As you &lt;a href="http://www.zeldman.com/2006/10/17/web-20-thinking-game/" class="external"&gt;might have known&lt;/a&gt;...&lt;/p&gt;

&lt;blockquote&gt;Web 1.0 : Keywords&lt;br /&gt;
Web 2.0 : Tags&lt;/blockquote&gt;

&lt;blockquote class="pullquote"&gt;&lt;p&gt;If you think descriptions were bad, keywords are doubly so.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;If you think descriptions were bad, keywords are doubly so. &lt;strong class="highlight"&gt;They were abused by SEO practitioners&lt;/strong&gt; everywhere. It is very difficult to find a page with keywords that can act as tags. Anyway, when creating pages, please use keyword that can be used as tags when bookmarking the page.&lt;/p&gt;

&lt;p&gt;As it the case of description, keyword can easily be fetched and given to the bookmark posting url. You still have to modify the script as no social networking sites have included this feature in their bookmarklet(with very good reason). A thing to note here is that all ',' must be replaced with a 'space'.&lt;/p&gt;

&lt;h2&gt;In Conclusion&lt;/h2&gt;

&lt;p&gt;In this age of sharing data, the description and keyword meta tags have great importance. So use them in your sites - even if you are &lt;a href="http://www.webmasterworld.com/forum5/7823.htm" class="external" title="Whats the Consensus About Meta Tags for SEO"&gt;adviced&lt;/a&gt; &lt;a href="http://searchenginewatch.com/showPage.html?page=2165131" class="external"&gt;against&lt;/a&gt; it. And when you do use it, don't use it to target search engine spiders. &lt;strong class="highlight"&gt;Create it in a way that would be useful to human beings.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/bookmarking" rel="tag"&gt;bookmarking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/del.icio.us" rel="tag"&gt;del.icio.us&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/bookmarklet" rel="tag"&gt;bookmarklet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/meta" rel="tag"&gt;meta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/description" rel="tag"&gt;description&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/keyword" rel="tag"&gt;keyword&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/seo" rel="tag"&gt;seo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/tag" rel="tag"&gt;tag&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1407964593552115777?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1407964593552115777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1407964593552115777' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1407964593552115777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1407964593552115777'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/removing-description-and-keyword-meta.html' title='Removing Description and Keyword Meta Tag Considered Harmful'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8106737980344093873</id><published>2006-11-05T14:58:00.000+05:30</published><updated>2006-11-17T20:38:12.547+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><title type='text'>Links Search - Interactive Sitemaps with JavaScript</title><content type='html'>&lt;p class="intro"&gt;Sitemaps generally tend to be a boring collection of links - useful - but boring. When I was working on the &lt;a href="http://www.openjs.com/sitemap.php" class="mypages"&gt;Sitemap for OpenJS&lt;/a&gt;, I wanted to make it more user friendly. As a result, I created the &lt;a href="http://www.openjs.com/scripts/dom/links_search/" class="mypages"&gt;sitemap filter function&lt;/a&gt;. This function takes a few keywords from the user and searches the DOM structure for link texts matching the search term(s). If the search term is &lt;strong&gt;not&lt;/strong&gt; found in a link, that links will be hidden from view. The result is a very cool searching script.&lt;/p&gt;

&lt;h2&gt;Code&lt;/h2&gt;

&lt;p&gt;The code is available in GPL. I have created the code as a Object Literal - so it should work with other scripts - unless you want to name a variable 'links_search'.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openjs.com/scripts/dom/links_search/links_search.js"&gt;View source - JS file&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Demo&lt;/h2&gt;

&lt;script type="text/javascript" src="http://www.openjs.com/scripts/dom/links_search/links_search.js"&gt;&lt;/script&gt;
&lt;label for="search"&gt;Filter&lt;/label&gt; &lt;input type="text" id="search" name="search" /&gt;

&lt;ul id='sitemap'&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/sitemap.php"&gt;Sitemap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/ajax/"&gt;Ajax&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/ajax/tutorial/"&gt;A Gentle Introduction to Ajax&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/ajax/tutorial/"&gt;A Gentle Introduction to Ajax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/ajax/tutorial/traditional_form.php"&gt;Traditional Feedback Form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/ajax/tutorial/ajax.php"&gt;Ajax Feedback Form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/ajax/tutorial/explaination.php"&gt;Ajax Code Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/articles/"&gt;Articles&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/articles/prevent_default_action/"&gt;Prevent the Default Action for an Event&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/articles/ajax_xmlhttp_using_post.php"&gt;Using POST method in XMLHTTPRequest(Ajax)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/articles/optional_function_arguments.php"&gt;Optional Function Arguments in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/"&gt;Tutorials&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/"&gt;ABC of JavaScript : An Interactive JavaScript Tutorial&lt;/a&gt;
&lt;ul&gt;

&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/"&gt;ABC of JavaScript : An Interactive JavaScript Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/contents.php"&gt;Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/html_and_javascript.php"&gt;HTML and JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/basics.php"&gt;The Basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/dialogs.php"&gt;Dialogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/variables.php"&gt;Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/arrays.php"&gt;Arrays&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/operators.php"&gt;Operators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/if.php"&gt;If Condition&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/switch.php"&gt;Switch Case&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/for.php"&gt;For Loop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/while.php"&gt;While Loop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/functions.php"&gt;Function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/object_oriented.php"&gt;Object Oriented JavaScipt Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/information.php"&gt;Getting Information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/string_manipulation.php"&gt;String Manipulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/finished.php"&gt;Finished&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/references.php"&gt;References&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/basic_tutorial/appendix.php"&gt;Appendix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/"&gt;Advanced JavaScript Tutorial&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/"&gt;Advanced JavaScript Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/contents.php"&gt;Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/forms.php"&gt;Form Handling - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/choices.php"&gt;Form Handling - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/validate.php"&gt;Form Validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/picture.php"&gt;Image Control&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/frames.php"&gt;Frames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/frames/"&gt;Multiple Frames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/div_span.php"&gt;DIV/SPAN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/styles.php"&gt;Changing Appearance of Elements using Style&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/moving.php"&gt;Moving Stuff around&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/popup.php"&gt;Popups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/concepts.php"&gt;Some JavaScript Concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/finished.php"&gt;The End&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/references.php"&gt;References&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.openjs.com/tutorials/advanced_tutorial/appendix.php"&gt;Appendix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/"&gt;Scripts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/enigma.php"&gt;Enigma Machine - The Program...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/666.php"&gt;666 Finding Utility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/rounded_corners/"&gt;Wrapper Insertion Rounded Corners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/dom/class_manipulation.php"&gt;Class Manipulation using JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/dom/css_selector/"&gt;Using CSS Selectors in JavaScript - getElementsBySelector()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/examples/"&gt;Examples&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/examples/ajax_page_transaction/"&gt;Hyperlink 2.0&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/examples/ajax_page_transaction/"&gt;Hyperlink 2.0 - Ajax Page Transitions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/createdom/"&gt;CreateDOM - $C()&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/createdom/"&gt;CreateDOM - $C() - Create DOM Stuctures Easily&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/xml_parser/"&gt;XML Parser for JavaScript&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/xml_parser/"&gt;XML Parser for JavaScript - xml2array()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/jasfer/"&gt;Jasfer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/jasfer/"&gt;JAvaScript FEed Reader - JASFER&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/greasemonkey/"&gt;Greasemonkey UserScripts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/greasemonkey/"&gt;Greasemonkey UserScripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/greasemonkey/bookmark_every_digg/"&gt;Bookmark Every Digg - GreaseMonkey UserScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/jx/"&gt;jx - JavaScript Ajax Library&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/jx/"&gt;jx - JavaScript Ajax Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/jx/jx.php"&gt;jx Library Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/forms/live_validation/"&gt;Live Validator&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/forms/live_validation/"&gt;Live Validator 1.00.A Beta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/forms/live_validation/documentation.php"&gt;Live Validator 1.00.A - Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Read More...&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.openjs.com/scripts/dom/links_search/"&gt;Links Search - Interactive Sitemaps&lt;/a&gt;&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/dom" rel="tag"&gt;dom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/search" rel="tag"&gt;search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sitemap" rel="tag"&gt;sitemap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8106737980344093873?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.openjs.com/scripts/dom/links_search/' title='Links Search - Interactive Sitemaps with JavaScript'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8106737980344093873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8106737980344093873' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8106737980344093873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8106737980344093873'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/links-search-interactive-sitemaps-with.html' title='Links Search - Interactive Sitemaps with JavaScript'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-3657384181248775494</id><published>2006-11-02T06:47:00.000+05:30</published><updated>2006-11-02T06:48:39.684+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Case Conversion using Regular Expressions in Perl</title><content type='html'>&lt;p class="intro"&gt;As most of you are already aware, Perl has very powerful regular expression support. You can do things with regular expression in perl that cannot be done in any other language. One good example for this is &lt;strong class="highlight"&gt;case conversion using regular expression in perl&lt;/strong&gt;. You can match a string and change its case when you are printing it back. For example you can convert 'case conversion using regular expressions in perl' to 'Case Conversion Using Regular Expressions In Perl' using just a regular expression.&lt;/p&gt;

&lt;p&gt;I recently had the need for this when I was converting one of my &lt;a href="http://www.geocities.com/binnyva/"&gt;old&lt;/a&gt; sites, &lt;a href="http://www.binnyva.com/"&gt;BinnyVA&lt;/a&gt;, from pure HTML site to a site with PHP backend. I also wanted to make the code valid when I was converting it - and this involved make the tags and attributes lowercase. For this job, I turned to an old trusted friend of mine - Perl.&lt;/p&gt;

&lt;p&gt;I have never used this particular feature of regular expression before - so I had to search for some time to find the answer. Unfortunately, I did not find any articles on this topic - the best I could find was a small reference within a tutorial about perl. So, I am creating a post for this topic - to aid future searchers in the same quest.&lt;/p&gt;

&lt;p&gt;As an example, let us take this sentence.&lt;/p&gt;

&lt;pre&gt;the baby's blood type? human, mostly.&lt;/pre&gt;

&lt;p&gt;We want to convert it to title case ie.&lt;/p&gt;

&lt;pre&gt;The Baby's Blood Type? Human, Mostly.&lt;/pre&gt;

&lt;p&gt;The regular expression to do this is...&lt;/p&gt;

&lt;pre&gt;s/(\b)([a-z])/\1\u\2/g;&lt;/pre&gt;

&lt;p&gt;This is what it does...&lt;/p&gt;

&lt;pre&gt;s/
(\b) #Get word's preceding char must be a word boundary(\b)
([a-z]) #Get the first lowercase letter after the word boundary
/  #The Replacements...
\1  #Put the word boundary back in.
\u\2 #'\u' uppercases the next character
/g;
&lt;/pre&gt;

&lt;p&gt;The full program looks like this...&lt;/p&gt;

&lt;pre&gt;&lt;code class="perl"&gt;#!/usr/bin/perl
$_ = 'the baby\'s blood type? human, mostly.';

s/(\b)([a-z])/\1\u\2/g;

print;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Try converting&lt;/p&gt;

&lt;pre&gt;computer, did we bring batteries? computer?&lt;/pre&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;pre&gt;COMPUTER! Did we bring batteries? computer?&lt;/pre&gt;

&lt;p&gt;We can do this using the regexp...s&lt;/p&gt;

&lt;pre&gt;(computer), ([a-z])/&lt;span class="special"&gt;\U\1\E&lt;/span&gt;! \u\2&lt;/pre&gt;

&lt;p&gt;See the part &lt;code&gt;\U\1\E&lt;/code&gt;? This will uppercase every character from the &lt;code&gt;\U&lt;/code&gt; escape to &lt;code&gt;\E&lt;/code&gt;. In this case, It uppercases the full word 'COMPUTER'.&lt;/p&gt;

&lt;p&gt;You can use the following escape sequences to change the case.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;\l (Small L)&lt;/dt&gt;
&lt;dd&gt;Lowercase next character&lt;/dd&gt;
&lt;dt&gt;\u&lt;/dt&gt;
&lt;dd&gt;Uppercase next character&lt;/dd&gt;
&lt;dt&gt;\L&lt;/dt&gt;
&lt;dd&gt;Lowercase until &lt;code&gt;\E&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;\U&lt;/dt&gt;
&lt;dd&gt;Uppercase until &lt;code&gt;\E&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;\E&lt;/dt&gt;
&lt;dd&gt;End case modification&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;I tired to do in in other languages like PHP and found it impossible. What about your favorite language? Can you convert the case of a string &lt;strong class="highlight"&gt;using just a regular expression&lt;/strong&gt;?&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/perl" rel="tag"&gt;perl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/regular" rel="tag"&gt;regular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/expression" rel="tag"&gt;expression&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/regexp" rel="tag"&gt;regexp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-3657384181248775494?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/3657384181248775494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=3657384181248775494' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3657384181248775494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/3657384181248775494'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/11/case-conversion-using-regular.html' title='Case Conversion using Regular Expressions in Perl'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7777677723346062853</id><published>2006-10-29T17:34:00.000+05:30</published><updated>2007-01-25T20:18:09.942+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>Firefox 2.0 Release(and IE 7)</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/firefox_ie.png" border="0" alt="" /&gt;

&lt;p class="intro"&gt;The recent release of Firefox 2.0 has created a lot of buzz in the blogsphere. And, as it is my &lt;a class="internal" href="http://binnyva.blogspot.com/2006/05/browsers-for-web-development-in-linux.html"&gt;favorite browser&lt;/a&gt;, it would be unfair if I did not give it a write up. In short : &lt;strong class="highlight"&gt;The update was more of a response to IE 7&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;IE vs Firefox&lt;/h2&gt;

&lt;p&gt;As you may already know, &lt;a class="external" href="http://msdn.microsoft.com/ie/releasenotes/default.aspx"&gt;Microsoft have released&lt;/a&gt; their latest browser - &lt;a class="external" href="http://www.microsoft.com/windows/ie/"&gt;IE 7&lt;/a&gt;. Many have &lt;a class="external" href="http://www.cnet.com/4520-6033_1-5666404-1.html"&gt;speculated&lt;/a&gt; how it will affect the popularity of Firefox. Perhaps this scared the Mozilla foundation to release a new version of Firefox - just to keep up with the buzz.&lt;/p&gt;

&lt;p&gt;Take a look at IE 6 and IE 7 - the difference is obvious. You have trouble believing it is the same browser - even the logo is changed(slightly). Now look at Firefox 1.5 and Firefox 2.0 - you have to stare really heard before you can make out a single &lt;a class="external" href="http://www.mozilla.com/en-US/firefox/2.0/releasenotes/"&gt;difference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That said, let me assure you that &lt;strong style="highlight"&gt;I have no plans to move back to IE&lt;/strong&gt; - I am not suicidal.&lt;/p&gt;

&lt;h2&gt;New Features in Firefox 2.0&lt;/h2&gt;

&lt;p&gt;I am not saying that Firefox 2.0 was just a marketing hack - it has &lt;a class="external" href="http://weblogs.mozillazine.org/ben/archives/009607.html"&gt;some new features&lt;/a&gt;. Some of them that caught my attention are...&lt;/p&gt;

&lt;h3&gt;Search Engine Plug-in Manager&lt;/h3&gt;

&lt;p&gt;After a long wait, the firefox team have included a feature that must have been in the browser from the first release - a Search Engine Plug-in Manager. Using this you can delete search engines from the browser. I would have liked to see an option to create and edit the plugins too - but something is better than nothing.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/6782/1621/1600/manage_search_engines.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/320/manage_search_engines.png" border="0" alt="" /&gt;&lt;/a&gt;

&lt;h3&gt;Previewing Feeds&lt;/h3&gt;
&lt;p&gt;This is one of my favorite features in the new version. You can click the 'Subscribe feed' button in the address bar and preview the feed. More importantly, you can copy the feed URL into you favorite RSS reader. That was not possible in the previous versions.&lt;/p&gt;

&lt;h3&gt;Inline Spell Checking&lt;/h3&gt;
&lt;p&gt;Another must have for all browsers - the spell checker. This will check for spelling mistakes in all the textareas on a page when you are typing.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/6782/1621/1600/spelling.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/320/spelling.png" border="0" alt="" /&gt;&lt;/a&gt;

&lt;p&gt;These are the features that are helpful to me - there are more feature - but they are not for me.&lt;/p&gt;

&lt;h3&gt;Built-in phishing protection&lt;/h3&gt;

&lt;p&gt;Must be heaven send for many 'normal' web surfers - but we geeks know how to recognize which site a URL belongs too. It is very hard to fool any geek with a disguised URL - possible - but very hard.&lt;/p&gt;

&lt;h3&gt;JavaScript 1.7&lt;/h3&gt;

&lt;p&gt;Don't get me wrong - &lt;a class="mypages" href="http://www.openjs.com/"&gt;I love javascript&lt;/a&gt;. But despite the upgrades, I will not be able to take advantage of the newer features as it is not supported on other browsers.&lt;/p&gt;

&lt;h2&gt;Broken Extensions&lt;/h2&gt;

&lt;p&gt;The thing I hate most about Firefox Upgrades - a lot of &lt;a class="internal" href="http://binnyva.blogspot.com/2005/12/firefox-15-how-to-repair-broken.html" title="Firefox 1.5 - How to repair broken Extensions"&gt;extensions stop working&lt;/a&gt;. Fortunately, this upgrade did not break too many extensions. The broken extensions(in my system) are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a class="external" href="http://prefbar.mozdev.org/"&gt;PrefBar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="external" href="https://addons.mozilla.org/firefox/1122/"&gt;Tab Mix Plus&lt;/a&gt; - The developers of this extension have promised an update within one week. [&lt;strong&gt;Update&lt;/strong&gt; : Works now]&lt;/li&gt;
&lt;li&gt;&lt;a class="external" href="https://addons.mozilla.org/firefox/951/"&gt;Nuke Anything&lt;/a&gt; - &lt;/li&gt;
&lt;li&gt;This extension was reported as incompatible with Firefox 2.0 - but the authors have upgraded it - so it is working fine now.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So, should you upgrade? There are some new feature - but there are as many &lt;a class="external" href="http://www.listvine.com/2006/10/25/9-reasons-not-to-upgrade-to-firefox-20/"&gt;reason why you should not upgrade&lt;/a&gt;. I have upgraded - and it is my opinion that the upgrade is worth it.&lt;/p&gt;

&lt;p&gt;Oh, by the way, if you use IE, please, please upgrade your browser. Upgrade it to Firefox. If you can't do that, at least upgrade it to IE 7. That upgrade is definitely worth it.&lt;/p&gt;

&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6056201776714814";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as_rimg";
google_cpa_choice = "CAAQiYaYhAIaCJ2wcuQYTrQ_KOm293M";
google_ad_channel = "";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/firefox" rel="tag"&gt;firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ie7" rel="tag"&gt;ie7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ie" rel="tag"&gt;ie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/browsers" rel="tag"&gt;browsers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/features" rel="tag"&gt;features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/version" rel="tag"&gt;version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7777677723346062853?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7777677723346062853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7777677723346062853' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7777677723346062853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7777677723346062853'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/firefox-20-releaseand-ie-7.html' title='Firefox 2.0 Release(and IE 7)'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1781733995237795561</id><published>2006-10-24T22:55:00.000+05:30</published><updated>2006-10-24T23:18:16.926+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Custom Search Engine from Google</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/6782/1621/1600/google_coop_sm.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/google_coop_sm.gif" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p class="intro"&gt;You may have heard about the customized google search feature &lt;a href="http://www.techcrunch.com/2006/10/23/google-custom-search-tomorrow/"&gt;they just launched&lt;/a&gt;. I have decided to give it a try. I used it to create a search for all my sites - that is for these sites...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/"&gt;Bin-Co&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.blogspot.com/"&gt;Bin-Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/"&gt;OpenJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.binnyva.com/"&gt;Binny VA - My Personal Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.binnyva.com/"&gt;Binny VA - My Personal Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binnyva.wordpress.com/"&gt;B-Link List&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;See it in action&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://google.com/coop/cse?cx=006309083793608388985%3A13tjbtrkiys"&gt;Search My Sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.binnyva.com/search_all_sites.php" class="mypages"&gt;Search My Sites - from My Site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;According to Google...&lt;/p&gt;

&lt;blockquote&gt;Google Custom Search Engines empower users to choose which pages they want to include in their index, how the content should be prioritized, whether others can contribute to their index, and what the search results page will look like. With this launch, we're extending the power of Google search beyond Google.com.&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.google.com/coop/docs/cse/faq.html"&gt;Learn more - Custom Search Engine FAQ&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Search My Sites&lt;/h2&gt;

&lt;!-- Google CSE Search Box Begins --&gt;
&lt;form id="searchbox_006309083793608388985:13tjbtrkiys" action="http://www.binnyva.com/search_all_sites.php"&gt;
  &lt;input type="hidden" name="cx" value="006309083793608388985:13tjbtrkiys" /&gt;
  &lt;input name="q" type="text" size="40" /&gt;
  &lt;input type="submit" name="sa" value="Search" /&gt;
  &lt;input type="hidden" name="cof" value="FORID:11" /&gt;
&lt;/form&gt;
&lt;script type="text/javascript" src="http://google.com/coop/cse/brand?form=searchbox_006309083793608388985%3A13tjbtrkiys"&gt;&lt;/script&gt;
&lt;!-- Google CSE Search Box Ends --&gt;

&lt;h3&gt;More Info...&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ajaydsouza.com/archives/2006/10/24/now-create-your-very-own-search-engine/"&gt;Now create your very own Search Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gigaom.com/2006/10/23/google-custom-search/"&gt;Roll your own Google Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.searchenginejournal.com/?p=3932"&gt;Google Custom Search Engine Launches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://inlogicalbearer.blogspot.com/2006/10/google-custom-search-engine.html"&gt;Google Custom Search Engine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/google" rel="tag"&gt;google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/search" rel="tag"&gt;search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1781733995237795561?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.binnyva.com/search_all_sites.php' title='Custom Search Engine from Google'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1781733995237795561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1781733995237795561' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1781733995237795561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1781733995237795561'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/custom-search-engine-from-google.html' title='Custom Search Engine from Google'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-6733562927852585276</id><published>2006-10-21T14:41:00.000+05:30</published><updated>2007-01-25T20:18:04.305+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>Bookmark Every Digg</title><content type='html'>&lt;p class="intro"&gt;Not long ago, I complained that &lt;a href="http://binnyva.blogspot.com/2006/09/top-5-features-missing-from-digg.html" class="mypages" title="Digg did not provide a bookmarking option"&gt;Digg did not provide a bookmarking option&lt;/a&gt;. Now I decided to stop complaing and to do something about it. As a result, I created GreaseMonkey Script that provides an option to bookmark each post in digg in three most popular social bookmarking sites - &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;, &lt;a href="http://www.furl.net/"&gt;Furl&lt;/a&gt; and &lt;a href="http://ma.gnolia.com/"&gt;Ma.gnolia&lt;/a&gt;. You will see the icons of these three services to the right of all titles in the &lt;a href="http://www.digg.com/" class="external"&gt;Digg&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;I created this script to celebrate &lt;a href="http://digg.com/design/Exploring_Footers_in_Web_Design" class="external"&gt;my first Digg homepage&lt;/a&gt; entry. It was an &lt;a href="http://www.alistapart.com/articles/footers/" class="extenal"&gt;old article on AListApart&lt;/a&gt; on how to &lt;a href="http://binnyva.wordpress.com/2006/10/17/exploring-footers-in-web-design-2/" class="mypages" title="Exploring Footers in Web Design"&gt;tame footers using div&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are using a social bookmarking system that is not in the given list, edit the script and add it - it is very easy.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openjs.com/scripts/greasemonkey/bookmark_every_digg/bookmark_every_digg.user.js" class="download"&gt;Install Bookmark Every Digg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To install, you must have the &lt;a href="http://greasemonkey.mozdev.org/" class="external"&gt;greasemonkey extension&lt;/a&gt; for firefox browser. If you have it, just right click the link and choose "Install This User Script".&lt;/p&gt;

&lt;p&gt;More about the script '&lt;a href="http://www.openjs.com/scripts/greasemonkey/bookmark_every_digg/"&gt;Bookmark Every Digg&lt;/a&gt;'...&lt;/p&gt;

&lt;a href="http://www.openjs.com/scripts/greasemonkey/bookmark_every_digg/"&gt;&lt;img src="http://www.openjs.com/scripts/greasemonkey/bookmark_every_digg/bookmark_every_digg.png" border="0" alt="The Script in Action" /&gt;&lt;/a&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/firefox" rel="tag"&gt;firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/greasemonkey" rel="tag"&gt;greasemonkey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/digg" rel="tag"&gt;digg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/userscript" rel="tag"&gt;userscript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-6733562927852585276?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.openjs.com/scripts/greasemonkey/bookmark_every_digg/' title='Bookmark Every Digg'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/6733562927852585276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=6733562927852585276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6733562927852585276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6733562927852585276'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/bookmark-every-digg.html' title='Bookmark Every Digg'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-6141114083081255234</id><published>2006-10-17T23:24:00.000+05:30</published><updated>2006-10-17T23:26:43.247+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>No Sound in Flash running on Firefox in Linux(FC5)</title><content type='html'>&lt;p class="intro"&gt;I had a small problem with Flash in Firefox today - flash works - but no sound. I don't know what causes this error - but it seems to be &lt;a href="http://www.macewan.org/2006/06/01/howto-firefox-flash-video-sound-on-ubuntu-linux-dapper/" class="external"&gt;fairly&lt;/a&gt; &lt;a href="http://schroeder.wordpress.com/2006/09/28/restoring-sound-in-flash-videos-within-firefoxlinux/" class="external"&gt;common&lt;/a&gt;. This problem only occurs in Linux systems with Firefox.&lt;/p&gt;

&lt;p&gt;Fortunately, it was easy to fix. Before letting you know how to fix it, let me say that I use KDE on Fedora Core 5 Distro - I don't know how this solution will help people using other distros. So if you are using FC5, this is the solution...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the KDE Control Panel. &lt;/li&gt;
&lt;li&gt;Find the 'Sound &amp;amp; Multimedia' Menu&lt;/li&gt;
&lt;li&gt;Choose 'Sound System' inside this menu.&lt;/li&gt;
&lt;li&gt;Click on the 'Hardware' Tab.&lt;/li&gt;
&lt;li&gt;Find the checkbox labelled 'Full Duplex' and make sure that it is &lt;strong&gt;OFF&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on Apply - this should restart the sound system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An image to make this more clear...&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/sound.png" border="0" alt="" /&gt;

&lt;p&gt;If all goes well, your sound should be working now. &lt;/p&gt;

&lt;p&gt;If anyone knows the cause of these errors, please leave a comment.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/flash" rel="tag"&gt;flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/firefox" rel="tag"&gt;firefox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-6141114083081255234?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/6141114083081255234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=6141114083081255234' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6141114083081255234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/6141114083081255234'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/no-sound-in-flash-running-on-firefox-in.html' title='No Sound in Flash running on Firefox in Linux(FC5)'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-331878398626326208</id><published>2006-10-12T23:20:00.000+05:30</published><updated>2006-10-12T23:22:50.957+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Invalid JSON</title><content type='html'>&lt;p class="intro"&gt;I just read a post in Simon Wallace's blog about &lt;a class="external" href="http://simon.incutio.com/archive/2006/10/11/json"&gt;Invalid &lt;abbr title="JavaScript Object Notation"&gt;JSON&lt;/abbr&gt;&lt;/a&gt;. The main point is that &lt;strong class="highlight"&gt;valid &lt;a class="external" href="http://www.json.org/"&gt;JSON&lt;/a&gt; strings must be enclosed in a double quote(") - not a single quote(')&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote cite="http://simon.incutio.com/archive/2006/10/11/json"&gt;In JSON (unlike in JavaScript) these MUST be double-quoted strings. In fact, ALL strings in JSON must be enclosed in double quotes (JavaScript also allows single quotes; JSON does not).&lt;/blockquote&gt;

&lt;p&gt;Sorry guys, but my JSON generation function created JSON with single quotes. I have already updated and uploaded the modified version - but if you are using the old version, get the modified function from the &lt;a href="http://www.bin-co.com/php/scripts/sql2json/" class="mypages" title="sql2json() - Converts SQL Results to JSON String"&gt;sql2json()&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;If you have never heard of this function before, sql2json() function will &lt;strong class="highlight"&gt;take a &lt;abbr title="Structured Query Language"&gt;SQL&lt;/abbr&gt; query as it argument, execute it, fetch its result, convert it to a JSON string and then return the JSON string&lt;/strong&gt;. This is extreamly useful if you are creating Ajax applications and decide to use &lt;a href="http://binnyva.blogspot.com/2006/03/ajax-response-data-formats.html" class="mypages" title="Ajax Response Data Formats"&gt;JSON over XML.&lt;/a&gt; If you have decided to use XML, take a look at my &lt;a class="mypages" href="http://www.openjs.com/scripts/xml_parser/"&gt;XML Parser for JavaScript&lt;/a&gt; instead.&lt;/p&gt;

&lt;p&gt;Guess I should have read JSON's RFC(&lt;a href="http://www.ietf.org/rfc/rfc4627.txt" class="external"&gt;RFC 4627&lt;/a&gt; - text file) before creating the function. And I have been creating a lot of converters recently - the great '2' functions.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://www.bin-co.com/php/scripts/sql2json/" class="mypages"&gt;sql2json()&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Converts SQL Results to JSON String - the function we were talking about just now.&lt;/dd&gt;

&lt;dt&gt;&lt;a href="http://www.bin-co.com/php/scripts/xml2array/" class="mypages"&gt;xml2array()&lt;/a&gt; for PHP&lt;/dt&gt;
&lt;dd&gt;Converts a XML string to a PHP array. xml2array() is a easy to use PHP function that will convert the given XML text to an array in the XML structure. Kind of like my Javascript xml2array() function.&lt;/dd&gt;

&lt;dt&gt;&lt;a href="http://www.openjs.com/scripts/xml_parser/" class="mypages"&gt;xml2array()&lt;/a&gt; for JavaScript&lt;/dt&gt;
&lt;dd&gt;Converts a XML document to a JavaScript array.&lt;/dd&gt;
&lt;/dl&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/json" rel="tag"&gt;json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/php" rel="tag"&gt;php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sql" rel="tag"&gt;sql&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-331878398626326208?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://simon.incutio.com/archive/2006/10/11/json' title='Invalid JSON'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/331878398626326208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=331878398626326208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/331878398626326208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/331878398626326208'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/invalid-json.html' title='Invalid JSON'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-483149234831424370</id><published>2006-10-08T22:16:00.000+05:30</published><updated>2006-10-08T22:27:32.161+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>SQLite</title><content type='html'>&lt;img style="float:left; margin:0 10px 10px 0;" src="http://photos1.blogger.com/blogger2/6782/1621/400/sqlite.gif" border="0" alt="SQLite Logo" /&gt;
&lt;p class="intro"&gt;SQLite is one of the smallest &lt;abbr title="DataBase Management System"&gt;DBMS&lt;/abbr&gt; available. Unlike other &lt;abbr title="Relational DataBase Management System"&gt;RDBMS&lt;/abbr&gt; solutions like MySQL, PostgreSQL etc. SQLite does not have a Client-Server architecture. SQLite is a embedded into the software using it. The main advantage of this is you can create an application that uses a database without expecting the end user to have a database server.&lt;/p&gt;

&lt;blockquote cite="http://www.sqlite.org/"&gt;SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.&lt;br /&gt;
&lt;cite&gt;&lt;a href="http://www.sqlite.org/"&gt;SQLite Official Site&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;

&lt;p&gt;SQLite is in no way a competition for MySQL or PostgreSQL as they tend to different needs. In the context of the &lt;abbr title="Linux Apache MySQL PHP"&gt;LAMP&lt;/abbr&gt; platform, it is rare to see SQLite being used in a web server as most servers have MySQL(or PostgreSQL) server running. SQLite is more relevent in the application field where the user may not have a server running.&lt;/p&gt;

&lt;p&gt;In client-server model RDBMS like MySQL, PostgreSQL, etc. there will be a server running in the background at all times. For example, take MySQL. It uses a background process 'mysqld'(mysql daemon). When a program(like &lt;abbr title="PHP : Hypertext Preprocessor"&gt;PHP&lt;/abbr&gt; on Apache) tries to execute an SQL command, this program will communicate with the background process and give the &lt;abbr title="Structured Query Language"&gt;SQL&lt;/abbr&gt; command to the server. The server will then execute it and return the status.&lt;/p&gt;

&lt;p&gt;In contrast, SQLite is embedded into the application that uses it. For example amaroK music player, uses SQLite to store its playlist and media library data. This application can read and write to the database using SQL commands without the need for a database server to be running on the user's system.&lt;/p&gt;

&lt;p&gt;Some well known applications that use SQLite are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amaroK MP3 Player&lt;/li&gt;
&lt;li&gt;Yum - Yellow Dog Updater&lt;/li&gt;
&lt;li&gt;Banshee Music Player&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Well, they are well known if you use linux.)&lt;/p&gt;

&lt;h2&gt;Features&lt;/h2&gt;

&lt;p&gt;The features for SQLite include...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ACID" class="external"&gt;ACID&lt;/a&gt; compliant.&lt;/li&gt;
&lt;li&gt;Zero-configuration - no setup or administration needed.&lt;/li&gt;
&lt;li&gt;A complete database is stored in a single file.&lt;/li&gt;
&lt;li&gt;Backing up, Exporting/Importing is very easy&lt;/li&gt;
&lt;li&gt;Supports databases up to 2 terabytes in size.&lt;/li&gt;
&lt;li&gt;Sizes of strings and BLOBs limited only by available memory.&lt;/li&gt;
&lt;li&gt;Very small code footprint.&lt;/li&gt;
&lt;li&gt;Faster than popular client/server database engines for most common operations.&lt;/li&gt;
&lt;li&gt;Easy to use API.&lt;/li&gt;
&lt;li&gt;Self-contained: no external dependencies.&lt;/li&gt;
&lt;li&gt;Open Source&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/db" rel="tag"&gt;db&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rdbms" rel="tag"&gt;rdbms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sqlite" rel="tag"&gt;sqlite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sql" rel="tag"&gt;sql&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-483149234831424370?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/483149234831424370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=483149234831424370' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/483149234831424370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/483149234831424370'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/sqlite.html' title='SQLite'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-7645192374158086658</id><published>2006-10-04T16:46:00.000+05:30</published><updated>2006-10-04T16:50:10.159+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>PostgreSQL</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/postgresql.png" border="0" alt="" /&gt;
&lt;p class="intro"&gt;&lt;a href="http://www.postgresql.org/" class="external" title="Offical site of PostgreSQL"&gt;PostgreSQL&lt;/a&gt; is a RDBMS that &lt;a href="http://www.mibrahim.net/blog/2006/07/21/why-i-will-switch-my-website-to-postgresql/" class="external" title="Why I will switch my website to PostgreSQL"&gt;many&lt;/a&gt; claim is &lt;a href="http://www.postgresql.org/about/quotesarchive" class="external" title="Some testimonals from PostgreSQL site"&gt;better&lt;/a&gt; than MySQL. This is basically the only Open Source competion MySQL has. There are other Open RDBMS but they are not in the league of MySQL and PostgreSQL.&lt;/p&gt;

&lt;p&gt;PostgreSQL is a open source object-relational database server(database management system). It supports many advanced features that are not in MySQL.&lt;/p&gt;

&lt;h2&gt;Features of PostgreSQL&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;Functions&lt;/dt&gt;
&lt;dd&gt;This feature allow blocks of code to be executed by the server. Functions in PostgreSQL can be written many languages like PL/pgSQL, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/Tcl and more.&lt;/dd&gt;

&lt;dd&gt;Indexes&lt;/dd&gt;
&lt;dd&gt;An index is storing some columns of a table separately to allows quick access to the table. This makes the index smaller than the original table (due to having fewer columns), and it is optimized for quick searching. Most RDBMS supports this.&lt;/dd&gt;

&lt;dt&gt;Triggers&lt;/dt&gt;
&lt;dd&gt;A database trigger is procedural code that is automatically executed in response to certain events on a particular table in a database. Triggers can restrict access to specific data, perform logging, or audit access to data. In addition to calling functions written in the native PL/PgSQL, triggers can also invoke functions written in other languages like PL/Perl.&lt;/dd&gt;

&lt;dt&gt;MVCC&lt;/dt&gt;
&lt;dd&gt;PostgreSQL uses Multi-Version Concurrency Control (MVCC), which gives an user a copy of the database, allowing changes to be made by one user without being visible to the other users until the change is committed. This also lets you 'roll back' to an older version of the database if necessary. This is similar to the Version control systems like CVS or Subversion.&lt;/dd&gt;

&lt;dt&gt;Inheritance&lt;/dt&gt;
&lt;dd&gt;This feature lets tables inherit the properties of a parent table. Data is shared between parent and child tables. For example, adding a column in the parent will cause that column to appear in the child table also.&lt;/dd&gt;

&lt;dt&gt;Referential Integrity&lt;/dt&gt;
&lt;dd&gt;PostgreSQL allows column constraints, foreign key constraints, and row checks.&lt;/dd&gt;

&lt;dt&gt;Other features&lt;/dt&gt;
&lt;dd&gt;And many more features like...

&lt;ul&gt;
&lt;li&gt;Views&lt;/li&gt;
&lt;li&gt;Full, inner, left and right joins&lt;/li&gt;
&lt;li&gt;Sub-selects&lt;/li&gt;
&lt;li&gt;Encrypted connections via SSL&lt;/li&gt;
&lt;li&gt;Point-in-time recovery&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Another open source RDBMS is SQLite. This provides no serious competion for MySQL or PostgreSQL as it tends to a different need. It is a a small C library that implements a self-contained, embeddable, zero-configuration, single file SQL database engine. More about SQLite in the next post.&lt;/p&gt;


&lt;h3&gt;References&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_relational_database_management_systems#Free_or_open_source_software" class="external"&gt;All Free RDBMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.postgresql.org/" class="external" title="Offical site of PostgreSQL"&gt;PostgreSQL Official Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.postgresql.org/docs/8.1/interactive/index.html" class="external"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.postgresql.org/download/" class="external"&gt;Download PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Comparisons&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.databasejournal.com/features/mysql/article.php/3288951" class="external"&gt;PostgreSQL vs MySQL: Which is better?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monstera.man.poznan.pl/wiki/index.php/Mysql_vs_postgres" class="external"&gt;MySQL vs. PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://builder.com.com/5100-6388-1050671.html" class="external"&gt;MySQL vs. PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/postgresql" rel="tag"&gt;postgresql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rdbms" rel="tag"&gt;rdbms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-7645192374158086658?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/7645192374158086658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=7645192374158086658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7645192374158086658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/7645192374158086658'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/10/postgresql.html' title='PostgreSQL'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-135491088241297649</id><published>2006-09-28T17:40:00.000+05:30</published><updated>2006-09-28T17:43:09.359+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Blogger Changed the Feed URL for Blogger Beta Sites</title><content type='html'>&lt;p class="intro"&gt;Blogger have changed the URL of the feeds of all the blogs that have upgraded to Blogger beta. In the previous version of blogger, the feeds were located in the location...&lt;/p&gt;

&lt;p&gt;http://&amp;lt;blogger_id&amp;gt;.blogspot.com/atom.xml &lt;br /&gt;
(Eg. http://binnyva.blogspot.com/atom.xml )&lt;/p&gt;

&lt;p&gt;Now it is in...&lt;/p&gt;

&lt;p&gt;http://&amp;lt;blogger_id&amp;gt;.blogspot.com/feeds/posts/full&lt;br /&gt;
(Eg. &lt;a href="http://binnyva.blogspot.com/feeds/posts/full"&gt;http://binnyva.blogspot.com/feeds/posts/full&lt;/a&gt; )&lt;/p&gt;

&lt;p&gt;This is a bad move by blogger. I just can't understand why they did it. They least they could do is redirect all traffic to the old location(http://binnyva.blogspot.com/atom.xml) to the new location(http://binnyva.blogspot.com/feeds/posts/full). By best bet is that they want to use &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" class="external"&gt;REST&lt;/a&gt; architecture.&lt;/p&gt;

&lt;p&gt;Another thing I don't understand is the result that is returned by the server when the feed URL is accessed. It returns the status 400 - Bad Request. Not 404(Page not found) but 400. I wish they would change this to 301(Moved Permanently) and redirect the user to the new feed location.&lt;/p&gt;

&lt;p&gt;UPDATE : This problem is fixed now! Thanks Guys.&lt;/p&gt;

&lt;h2&gt;Syndication Errors&lt;/h2&gt;

&lt;p&gt;So why is this a bad thing? Why am I complaining when a page is moved. The answer is simple : Syndication. Many people who have subscribed to my feed using the old URL will not be able to access the feed. Many indexers like Technorati, Syndic8 etc. will not be able to access and index my blog. All because the URL for feed is changed.&lt;/p&gt;

&lt;p&gt;Fortunately for me, I am using the &lt;a href="http://www.feedburner.com/"&gt;Feedburner service&lt;/a&gt;. So I don't have a problem if the feed is moved. I just change the 'Original Feed' location in my feedburner account, and the the visitors will get the new data - without even noticing the change. If you are worried that Blogger will change the feed again, go register for this service(its free).&lt;/p&gt;

&lt;p&gt;But I used the URL 'http://binnyva.blogspot.com/atom.xml' whenever I submitted my blog to an automatic indexer(Technorati,IceRocket,etc.). Now I will have to go around and update all those sites.&lt;/p&gt;

&lt;p&gt;Bad move blogger. Hope you fix this issue soon.&lt;/p&gt;

&lt;h2&gt;New Features&lt;/h2&gt;

&lt;p&gt;That said, I have to admit the new feed system is cool. You can specify some quires and you will get a feed based on those quires.&lt;/p&gt;

&lt;p&gt;For example, you can use the URL http://binnyva.blogspot.com/feeds/posts/full?max-results=5 and get the latest 5 posts instead of the default 25 new posts. Also there is a provision to get the feed for the comments of each post.(Eg. &lt;a href="http://binnyva.blogspot.com/feeds/2591766938765279155/comments/full"&gt;http://binnyva.blogspot.com/feeds/2591766938765279155/comments/full&lt;/a&gt; is the comments for the recent &lt;a href="http://binnyva.blogspot.com/2006/09/fedora-core-5-64bit-vs-32bit.html"&gt;Fedora Core 5 - 64bit&lt;/a&gt; Vs 32bit post)&lt;/p&gt;

&lt;p&gt;Some quires that work with the XML feed. There might be more, but these are the only ones I know. If you know any that are not included here, let me know and I will include them.&lt;/p&gt;

&lt;p&gt;URL : &lt;a href="http://binnyva.blogspot.com/feeds/posts/full"&gt;http://binnyva.blogspot.com/feeds/posts/full&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Parameters&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;max-results&lt;/dt&gt;
&lt;dd&gt;The number of posts that should appear in the XML(Default : 25). Example :  &lt;a href="example http://binnyva.blogspot.com/feeds/posts/full?max-results=5"&gt;http://binnyva.blogspot.com/feeds/posts/full?max-results=5&lt;/a&gt;&lt;/dd&gt;

&lt;dt&gt;start-index&lt;/dt&gt;
&lt;dd&gt;The post from which the listing should be taken. 1 means latest, 2 means second latest and so on(Default : 1).&lt;/dd&gt;

&lt;/dl&gt;

&lt;p&gt;I think they are using an updated feed creator - the version given in the &lt;code&gt;generator&lt;/code&gt; tag have changed. The new XML feed has Generator 'Blogger 7.00' while the older one has 'Blogger 6.72' as the generator.&lt;/p&gt;

&lt;h2&gt;RSS/Atom&lt;/h2&gt;

&lt;p&gt;Another thing I noticed was that the feed is available only in the atom format. In the previous version, they had both the Atom Format and the RSS format. Atom was available at http://binnyva.blogspot.com/atom.xml while RSS could be accessed at http://binnyva.blogspot.com/rss.xml . I can't find any way to get the RSS format in the new release(Blogger 7.0). Do any of you know where I can access the RSS format of the feed?&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogging" rel="tag"&gt;blogging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogger" rel="tag"&gt;blogger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/atom" rel="tag"&gt;atom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/rss" rel="tag"&gt;rss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/feed" rel="tag"&gt;feed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-135491088241297649?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/135491088241297649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=135491088241297649' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/135491088241297649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/135491088241297649'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/blogger-changed-feed-url-for-blogger.html' title='Blogger Changed the Feed URL for Blogger Beta Sites'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2747725898907528766</id><published>2006-09-26T00:19:00.000+05:30</published><updated>2007-01-25T20:19:19.362+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><title type='text'>Top 5 Features Missing from Digg</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/32x32-digg-guy.png" border="0" alt="Digg Guy" /&gt;

&lt;p class="intro"&gt;&lt;a href="http://www.digg.com/" class="external"&gt;Digg&lt;/a&gt; is a great site - &lt;a href="http://binnyva.blogspot.com/2005/11/digg-news-filtering-service.html" class="internal" title="Digg - A News Filtering Service"&gt;I use it&lt;/a&gt; daily to get myself up to date. Digg is one of the best news filtering service out there. A small definition of digg(for those who were living under a rock)...&lt;/p&gt;

&lt;blockquote cite="http://en.wikipedia.org/wiki/Digg"&gt;Digg is a news website with an emphasis on technology and science articles. &lt;strong class="highlight"&gt;It combines social bookmarking, blogging, and syndication with a form of non-hierarchical, democratic editorial control&lt;/strong&gt;. News stories and websites are submitted by users, and then promoted to the front page through a user-based ranking system.(From &lt;a href="http://en.wikipedia.org/wiki/Digg" class="external"&gt;Wikipedia&lt;/a&gt;)&lt;/blockquote&gt;

&lt;p&gt;Like many other users of Digg, I too have a list of features I would like to see in Digg. These are the top 5(+1) features that are missing from digg.&lt;/p&gt;

&lt;h3&gt;Tagging&lt;/h3&gt;

&lt;p&gt;I just don't understand why this feature is not present in Digg. Digg is a poster boy for Web 2.0 and tagging is one of the core features of Web 2.0. Even &lt;a href="http://www.slashdot.com/" class="external"&gt;Slashdot&lt;/a&gt; brought in tagging.&lt;/p&gt;

&lt;h3&gt;Bookmarking option - without digging&lt;/h3&gt;

&lt;p&gt;Many people digg an article because they want to mark it for reading latter - not because they read the article and liked it.  I have done this many times. But if there is &lt;strong class="highlight"&gt;an option to 'bookmark' an article without digging it&lt;/strong&gt;, the users will use that feature - giving more each digg more weight.&lt;/p&gt;

&lt;h3&gt;Link to original story in the feed&lt;/h3&gt;

&lt;p&gt;The &lt;strong class="highlight"&gt;Digg RSS feed&lt;/strong&gt; is next to useless as it &lt;strong class="highlight"&gt;don't contain the link to the original story&lt;/strong&gt;. The links is for the comment page for that story in Digg. I understand that diggs will lose some traffic if there is no need for the user to visit the front page, but is this a good long term strategy? Guys, you are a Web 2.0 site - you really have to provide a good feed. You if want, you can include the link to the comment page in the 'description' section, but please, include the link to the original articles.&lt;/p&gt;

&lt;h3&gt;New Stories&lt;/h3&gt;

&lt;p&gt;Despite what my friends think, I don't check Digg once every 10 seconds. The actual time is more like once every 10 hours or so. The problem is a lot of feeds get promoted to the frontpage in that time. So there is a good chance that I will miss out some of the digged articles. I would like a page that would &lt;strong class="highlight"&gt;show all the stories that have been promoted since the last time I visited&lt;/strong&gt; that page.&lt;/p&gt; 

&lt;p&gt;For example, say I visited this &lt;em&gt;non-existent&lt;/em&gt; page
http://www.digg.com/new/ at 2006-09-23 10:00:00. The interface will be similar to that of the frontpage. I browse through the list of stories, merrily digging away. After my 'digging run' is over(say at 2006-09-23 10:30:00), I visit some other site, do some coding etc. till I feel the craving to check Digg again. So I visit the 'New' page again. Now only the diggs that has been promoted &lt;strong class="highlight"&gt;after&lt;/strong&gt; 2006-09-23 10:30:00(time of the end of the last digg run) will be shown.&lt;/p&gt;

&lt;p&gt;You would have to be logged in for this feature to work, which would be a good thing for Digg. If you don't want to log in, this can also be implemented using a cookie.&lt;/p&gt;

&lt;p&gt;This feature is for the frontpage diggs - but can also be implemented for the 'Upcoming' Diggs too.&lt;/p&gt;

&lt;h3&gt;Link to external services&lt;/h3&gt;

&lt;p&gt;A link to external services like del.icio.us would be nice. Digg have provided a 'Blog This' options(which I have never yet used). But a much more helpful feature is a small &lt;strong class="highlight"&gt;link next to every post - "Bookmark this link in Del.icio.us"&lt;/strong&gt;. Or 'Seed this story in Newsvine'. Or whatever.&lt;/p&gt;

&lt;h3&gt;Bonus Feature : Pictures&lt;/h3&gt;

&lt;p&gt;Even though this feature is not essential, I thought it would be great if &lt;strong class="highlight"&gt;each story has an images associated with it to the right&lt;/strong&gt; - like in &lt;a href="http://del.icio.us/" class="external"&gt;del.icio.us&lt;/a&gt; or &lt;a href="http://tech.memeorandum.com/" class="external"&gt;tech.memeorandum&lt;/a&gt;. Right now, images are only available for video links.&lt;/p&gt;

&lt;p&gt;Your 'most wanted' feature for digg not here? If you have any feature that you would like to see in Digg, leave a comment.&lt;/p&gt;

&lt;p&gt;Happy Digging.&lt;/p&gt;

&lt;h3&gt;Related Links&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://labnol.blogspot.com/2006/06/diggcom-for-power-users-10-interesting.html" class="external"&gt;Digg.com for Power Users: 10 Interesting Digg Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://computer.howstuffworks.com/digg.htm" class="external"&gt;How Digg Works&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/digg" rel="tag"&gt;digg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/news" rel="tag"&gt;news&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sites" rel="tag"&gt;sites&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2747725898907528766?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2747725898907528766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2747725898907528766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2747725898907528766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2747725898907528766'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/top-5-features-missing-from-digg.html' title='Top 5 Features Missing from Digg'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-9131539293164022215</id><published>2006-09-22T23:37:00.000+05:30</published><updated>2006-11-10T17:50:06.637+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Semantic Pullquotes</title><content type='html'>&lt;blockquote class="pullquote"&gt;&lt;p&gt;"Pullquotes are basically some important text in the content that is repeated on a side with emphasis"&lt;/p&gt;&lt;/blockquote&gt;

&lt;p class="intro"&gt;Roger Johansson of the &lt;a href="http://www.456bereastreet.com/" class="external"&gt;456 Berea st.&lt;/a&gt; recently wrote an article on how to &lt;a href="http://www.456bereastreet.com/archive/200609/automatic_pullquotes_with_javascript_and_css/" class="external" title="Automatic pullquotes with JavaScript and CSS"&gt;make pullquotes using javascript&lt;/a&gt;. Pullquotes are basically some important text in the content that is repeated on a side with emphasis so that people will notice it sooner. This is often seen in magazines. Example to the right...&lt;/p&gt;

&lt;p&gt;The method he used is to give the needed text a class, pull out the text using javascript and show it in the side. See original article for more details and code.&lt;/p&gt;

&lt;h2&gt;Advantages of this method&lt;/h2&gt;

&lt;h3&gt;Avoids redundancy&lt;/h3&gt;

&lt;p&gt;This approach avoids having to enter the same content twice in the page. If you are using a pullquote, you will already have that text somewhere in the page.&lt;/p&gt;


&lt;h2&gt;A few problems with this approach&lt;/h2&gt;

&lt;h3&gt;JavaScript is used for structure&lt;/h3&gt;

&lt;p&gt;JavaScript is used to create the pullquote - basically doing the job that rightfully belongs to (X)HTML. However, this don't really bother me - I am not that much of a purist. This feature also avoids redundancy of the text - which brings me to my next point.&lt;/p&gt;

&lt;h3&gt;Misses out on &lt;abbr title="Search Engine Optimization"&gt;SEO&lt;/abbr&gt; advantage&lt;/h3&gt;

&lt;p&gt;The redundancy in the quote, propably containing some of our target keywords, is a good thing from an SEO point of view. Using this method will eliminate that advantage.&lt;/p&gt;

&lt;h3&gt;Not semantic&lt;/h3&gt;

&lt;p&gt;The 'span' tag is free of any semantic meaning - and frowned on in many purist circles. But, as I said earlier, it don't bother me much(I use spans liberally). But in this case, there is an opportunity do this right - using semantic markup is very easy...&lt;/p&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;blockquote class="pullquote"&amp;gt;&amp;lt;p&amp;gt; ... pullquote ... &amp;lt;/p&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;...if you don't have issues about quoting yourself.&lt;/p&gt;

&lt;h3&gt;Text can't be changed&lt;/h3&gt;

&lt;p&gt;You will have to use the text exactly as it appears in the body - you will not be able to make any changes to it. Often you want to make cosmetic changes to the text before you make it a pullquote.&lt;/p&gt;

&lt;h3&gt;Don't need javascript&lt;/h3&gt;

&lt;p&gt;If someone who has &lt;a href="http://www.openjs.com/articles/javascript_detection_using_css.php" class="mypages"&gt;a good browser(supports CSS) is surfing with Javascript turned off&lt;/a&gt;, he will not be able to see the effect.&lt;/p&gt;

&lt;h2&gt;Purely Semantic Method&lt;/h2&gt;

&lt;p&gt;A much simpler method of doing this is to just the proper markup to insert the quote and using CSS to position the text wherever you want. You don't really need JavaScript for doing this.&lt;/p&gt;

&lt;h3&gt;(X)HTML&lt;/h3&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;blockquote class="pullquote"&amp;gt;&amp;lt;p&amp;gt; ... pull quote ... &amp;lt;/p&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;CSS&lt;/h3&gt;

&lt;p&gt;This code is taken from the original article. Change it to fit your design.&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;
.pullquote {
 float:right;
 width:10em;
 display:block;
 margin:0.25em 0.75em 0.25em 1em;
 padding:0.5em;
 border:3px double #ccc;
 border-width:3px 0;
 color:#333;
 background-color:#f0f0f0;
 font:italic 1.3em/1.3 Georgia;
}
.pullquote p {
 margin:0;
 text-align:center;
}&lt;/code&gt;&lt;/pre&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/css" rel="tag"&gt;css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/pullquote" rel="tag"&gt;pullquote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/sementic" rel="tag"&gt;sementic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-9131539293164022215?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.456bereastreet.com/archive/200609/automatic_pullquotes_with_javascript_and_css/' title='Semantic Pullquotes'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/9131539293164022215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=9131539293164022215' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/9131539293164022215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/9131539293164022215'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/sementic-pullquotes.html' title='Semantic Pullquotes'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-573054769720836214</id><published>2006-09-19T23:50:00.000+05:30</published><updated>2006-09-19T23:52:04.258+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>32bit Linux installed(Fedora Core 5)</title><content type='html'>&lt;p class="intro"&gt;As said in the &lt;A href="http://binnyva.blogspot.com/2006/09/fedora-core-5-64bit-vs-32bit.html" class="internal" title="Fedora Core 5 - 64bit Vs 32bit"&gt;previous post&lt;/A&gt;, I have installed Fedora Core 5(32 bit) version on my system. A pity, I was starting to like the 64 bit version. The speed became bearable after you get used to it. Anyway I have just installed the 32 bit version - I have to configure it now. I will let you know what I think of the OS once the whole thing is set up.&lt;/p&gt;

&lt;p&gt;I have stumbled upon a practical way to partition the &lt;abbr title="Hard Disk"&gt;HDD&lt;/abbr&gt; if you want to reinstall the OS every 6 months(the release cycle of many Linux Distros like Fedora Core and Ubuntu is 6 months). Of course, I will reinstalling you system every 6 months, but it is an option.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows Partitions(if any)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/boot&lt;/code&gt; - 200 MB for me&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt; - The root partition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/home&lt;/code&gt; - Where all the user's information is kept&lt;/li&gt;
&lt;li&gt;swap - The size of this drive must be twice RAM's size. If you have 1 GB RAM, you must have 2 GB Swap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure you have a separate &lt;code&gt;/home&lt;/code&gt; partition - that way you can reinstall the OS without losing(or having to move) any of the files you are working on. Just make sure you choose 'Custom Partitioning' when installing the OS. Then format all the partition EXCEPT the &lt;code&gt;/home&lt;/code&gt; partition.&lt;/p&gt;

&lt;p&gt;Of course, if you choose to put your site in /var/www/htdocs(or some folder outside your home) you will have to backup those folders. Some folders that I have to backup outside home are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/var/www/&lt;/code&gt; - All my web development folder - htdocs, cgi-bin etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/lib/mysql/&lt;/code&gt; - Database is stored here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/&lt;/code&gt; - Configurations.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/cvs/&lt;/code&gt; - CVS repository is in this folder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also if you are the root user, your files will be kept in &lt;code&gt;/root&lt;/code&gt; - not in &lt;code&gt;/home&lt;/code&gt;. So back those up too.&lt;/p&gt;

&lt;p&gt;The rest of the files are in my home folder(&lt;code&gt;/home/binnyva&lt;/code&gt;) - these files will stay intact as I did not format the &lt;code&gt;/home&lt;/code&gt; partition.&lt;/p&gt;

&lt;p&gt;A problem with this method is that creating the same user is a problem. For example, if I create a new user with the same username(binnyva), the new users files will overwrite the existing files. Also &lt;abbr title="K Desktop Environment"&gt;KDE&lt;/abbr&gt; does not play nice when I tried to use the old configurations - I can login - but KDE will not start up. I had to login as root and delete the '.kde' directory from my folder before I got it to work again. This is a huge problem - I spend days trying to configure the OS to my liking - now I have to do it again. I would appreciate it if there was some system to copy the system configuration when upgrading the system. This is especially improtant in the case of 6 month release cycles I spoke about earlier.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/fedora" rel="tag"&gt;fedora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/core" rel="tag"&gt;core&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-573054769720836214?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/573054769720836214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=573054769720836214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/573054769720836214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/573054769720836214'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/32bit-linux-installedfedora-core-5.html' title='32bit Linux installed(Fedora Core 5)'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2591766938765279155</id><published>2006-09-15T00:01:00.000+05:30</published><updated>2006-09-15T00:02:13.991+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Fedora Core 5 - 64bit Vs 32bit</title><content type='html'>&lt;p class="intro"&gt;I have just &lt;a href="http://binnyva.blogspot.com/2006/09/fedora-core-5.html" class="internal" title="Fedora Core 5"&gt;installed Fedora Core 5&lt;/a&gt; 64bit linux in my system. I like it, but there is some problems associated with its being 64 bit.&lt;/p&gt;
&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/fc5.png" border="0" alt="" /&gt;

&lt;h2&gt;No Flash&lt;/h2&gt;

&lt;p&gt;Macromedia(now Adobe) have not released a Flash plugin for 64 bit Firefox. This is in most cases a good thing - as I won't have to watch annoying flash ads. But it is a problem when I am trying to view videos in YouTube or Google Video. Also, Google Analytics is impossible to use without Flash. There are some solutions like &lt;a href="http://www.ilfilosofo.com/blog/2006/03/21/flash-for-64-bit-fedora-core-4/" class="external"&gt;using a 32 bit firefox on a 64 bit linux&lt;/a&gt; - but I like it better if there is native support. For automated installation see &lt;a href="http://www.ubuntuforums.org/showthread.php?p=1174435" class="external"&gt;Howto Install 32 bit Firefox with Flash w/sound and Java for AMD64&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Not much of an performance boost in Desktop systems&lt;/h2&gt;

&lt;blockquote cite="http://enterprise.linux.com/article.pl?sid=06/09/07/1632253"&gt;64-bit binaries are not twice as fast, either. You are unlikely to notice any discernible speed difference, particularly with desktop apps.&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://enterprise.linux.com/article.pl?sid=06/09/07/1632253" class="external"&gt;What you should (and shouldn't) expect from 64-bit Linux&lt;/a&gt; - A must read if you are torn between choosing a 64bit and 32bit OS for your system.&lt;/p&gt;

&lt;h2&gt;Can't get IE to work&lt;/h2&gt;

&lt;p&gt;As I have promised in the '&lt;a href="http://binnyva.blogspot.com/2006/06/installing-internet-explorer-in-linux.html" class="external"&gt;Installing Internet Explorer in Linux&lt;/a&gt;' post, I have installed IE using Wine in the system. I did this in a &lt;abbr title="Fedora Core 3"&gt;FC3&lt;/abbr&gt; system(at work) and a &lt;abbr title="Fedora Core 5"&gt;FC5&lt;/abbr&gt; system(at Home). IE works perfectly(or close enough) on the FC3 system - but fails miserably on the FC5 system. I think this is an issue with Wine. I had to &lt;a href="http://wiki.winehq.org/WineOn64bit" class="external" title="How to build 32-bit Wine on a 64-bit (x86-64) system"&gt;hack it a bit to work with my 64 bit system&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Speed&lt;/h2&gt;

&lt;p&gt;Another problem I have noticed is that the system, on the whole, seems a bit slower than FC3. I have seen &lt;a href="http://forums.fedoraforum.org/showthread.php?p=605983#post605983" class="external"&gt;other complaints like this&lt;/a&gt; on the net - but very few valid solutions.&lt;/p&gt;
 
&lt;p&gt;I am trying to speed thing up a bit by &lt;a href="http://www.mjmwired.net/resources/mjm-services-fc5.html" class="external"&gt;disabling unwanted services&lt;/a&gt;. But still I think that the FC3 was faster. I am going to upgrade my RAM to 1GB from the current 512 MB - maybe that will solve the problem.&lt;/p&gt;

&lt;p&gt;If nothing works, I will install a 32 bit version of FC5. I will have to re-configure everything - but &lt;strong&gt;I need speed.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/fedora" rel="tag"&gt;fedora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/core" rel="tag"&gt;core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/64bit" rel="tag"&gt;64bit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/32bit" rel="tag"&gt;32bit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wine" rel="tag"&gt;wine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2591766938765279155?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2591766938765279155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2591766938765279155' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2591766938765279155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2591766938765279155'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/fedora-core-5-64bit-vs-32bit.html' title='Fedora Core 5 - 64bit Vs 32bit'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-8761503415736750631</id><published>2006-09-12T18:37:00.000+05:30</published><updated>2006-09-12T18:38:59.192+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><title type='text'>Object Oriented Programing(OOP) in JavaScript</title><content type='html'>&lt;p class="intro"&gt;A quick link dump on JavaScript inheritance and other &lt;abbr title="Object Oriented Programing"&gt;OOP&lt;/abbr&gt; techniques that are almost never used when coding in JavaScript.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a class="external" href=""&gt;Classical Inheritance in JavaScript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;JavaScript is a class-free, object-oriented language, and as such, it uses prototypal inheritance instead of classical inheritance. This can be puzzling to programmers trained in conventional object-oriented languages like C++ and Java. JavaScript's prototypal inheritance has more expressive power than classical inheritance. By Douglas Crockford&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.crockford.com/javascript/private.html"&gt;Private Members in JavaScript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Some believe that javascript lacks the property of information hiding because objects cannot have private instance variables and methods. But this is a misunderstanding. JavaScript objects can have private members. Here's how. Again, by Douglas Crockford&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.dustindiaz.com/javascript-private-public-privileged/"&gt;How to achieve private, public, and privileged members in JavaScript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;One core thing about JavaScript that tends to confuse people is how to get private, public, and privileged members. First off one might even question the fact of whether or not they’re useful or needed - and to one degree, they’re not. But like any OOP language that allows for declaration of private and public members, there’s not even a need for them there as well. By Dustin Diaz&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.dustindiaz.com/namespace-your-javascript/"&gt;Namespacing your JavaScript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Perhaps a very uncommon approach to developing web applications that require JavaScript (but should be more common) is namespacing your scripts. This can be done very simple-like in a manner that is painless and nice-looking. By Dustin Diaz&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.litotes.demon.co.uk/js_info/private_static.html"&gt;Private Static Members in Javascript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;It was a widely held belief that javascript objects could not have private instance members, that all javascript object properties where public and could be accessed and changed with external code.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://phrogz.net/JS/Classes/OOPinJS.html"&gt;OOP in JS, Part 1 - Public/Private Variables and Methods&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;This page shows how to create private variables and methods in classes in Javascript through the rather simple example of a person.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://phrogz.net/JS/Classes/OOPinJS2.html"&gt;OOP in JS, Part 2 : Inheritance&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;This section discusses inheritance in Javascript.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.cs.rit.edu/~atk/JavaScript/manuals/jsobj/"&gt;Object Hierarchy and Inheritance in JavaScript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;JavaScript is an object-oriented language based on prototypes, rather than, as is common, being class-based. Because of this different basis, it can be less apparent how JavaScript allows you to create hierarchies of objects and to have inheritance of properties and their values. This paper attempts to clarify the situation.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.xml.com/pub/a/2006/06/07/object-oriented-javascript.html"&gt;Object-oriented JavaScript&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;JavaScript is not generally considered a robust programming language, especially when compared to languages such as Java or C#: it is interpreted, rather than compiled; it is dynamically, rather than statically, typed; and it is commonly considered a procedural, rather than an object-oriented, language.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.sitepoint.com/article/oriented-programming-1"&gt;JavaScript Object-Oriented Programming&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;It may be shocking news, but JavaScript is a very powerful object-based (or prototype-based, whatever you wish to call it) language. Yes, JavaScript is a powerful language, not just something that's handy for image rollovers and other corny, flashy effects. However, very few people who have used JavaScript realize its capabilities. If you're one of these people, this tutorial is aimed at you.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.javascriptkit.com/javatutors/oopjs.shtml"&gt;JavaScript and Object Oriented Programming (OOP)&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;JavaScript is an excellent language to write object oriented web applications. It can support OOP because it supports inheritance through prototyping as well as properties and methods. Many developers cast off JS as a suitable OOP language because they are so used to the class style of C# and Java. Many people don't realize that JavaScript supports inheritance.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external" href="http://www.ajaxpath.com/javascript-inheritance"&gt;Introducing the best Javascript Inheritance Technique&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Every programmer who's tried to apply classical Object Oriented techniques when developing with JavaScript, has at one time or another asked themselves the question: How do you call or invoke a super class method?&lt;/dd&gt;
&lt;/dl&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/object" rel="tag"&gt;object&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/inheritance" rel="tag"&gt;inheritance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/oops" rel="tag"&gt;oops&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-8761503415736750631?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/8761503415736750631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=8761503415736750631' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8761503415736750631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/8761503415736750631'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/object-oriented-programingoop-in.html' title='Object Oriented Programing(OOP) in JavaScript'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-2649519409220433565</id><published>2006-09-06T10:04:00.000+05:30</published><updated>2007-01-13T23:01:45.176+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Blogger Beta</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/6782/1621/1600/blogger_wysiwyg_templating.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/200/blogger_wysiwyg_templating.png" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p class="intro"&gt;I have &lt;strong&gt;upgraded to Blogger Beta&lt;/strong&gt; - now I can access many more features - like &lt;a href="http://help.blogger.com/bin/answer.py?answer=44498" class="external"&gt;labels&lt;/a&gt;, &lt;a href="http://help.blogger.com/bin/answer.py?answer=43708" class="external"&gt;WYSIWYG template modification&lt;/a&gt; etc. Since I use a customized blog design, it has not been easy. In fact, it was quite hard. But was it worth it? I don't know yet.&lt;/p&gt;

&lt;h2&gt;New templating Language&lt;/h2&gt;

&lt;p&gt;The templating language has been changed entirely. Many new features have been added - and the complexity have gone up greatly. I understood the language - but I don't think anyone without a programming background would spend enough time to study it.&lt;/p&gt;

&lt;h3&gt;Loops&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;&amp;lt;b:loop ... &amp;gt;&lt;/code&gt; tag lets you repeat a section of content multiple times with little or no changes. Example...&lt;/p&gt;

&lt;pre&gt;&lt;code class="xml"&gt;&amp;lt;b:loop var='post' values='data:posts'&amp;gt;
   &amp;lt;h2&amp;gt;&amp;lt;data:post.title/&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;/b:loop&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Conditional Statement - If/Else&lt;/h3&gt;

&lt;p&gt;Shows the content only if the given statement is true(or false). Example...&lt;/p&gt;

&lt;pre&gt;&lt;code class="xml"&gt;&amp;lt;b:if cond='data:blog.url == data:blog.homepageUrl'&amp;gt;
 &amp;lt;data:title/&amp;gt;
&amp;lt;b:else/&amp;gt;
 &amp;lt;a expr:href='data:blog.homepageUrl'&amp;gt;&amp;lt;data:title/&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/b:if&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Section - Widget - Include&lt;/h3&gt;

&lt;p&gt;The Section/Widget/Include system make the Drag and Drop template editing system possible. The section is a top level container which can contain multiple widgets. A widget can have many 'includable's. The includable with the id 'main' will be shown by default. You can display the other includable using the code '&amp;lt;b:include name='ID_OF_INCLUDABLE'/&amp;gt; Some sample code - this code shows the header of this blog...&lt;/p&gt;

&lt;pre&gt;&lt;code class="xml"&gt;&amp;lt;b:section class='header' id='header' maxwidgets='1' showaddelement='no'&amp;gt;
&amp;lt;b:widget id='Header1' locked='true' title='Bin-Blog (Header)' type='Header'&amp;gt;
&amp;lt;b:includable id='main'&amp;gt;
&amp;lt;h1 id="blog-title"&amp;gt;
&amp;lt;b:if cond='data:blog.url == data:blog.homepageUrl'&amp;gt;
&amp;lt;data:title/&amp;gt;
&amp;lt;b:else/&amp;gt;
&amp;lt;a expr:href='data:blog.homepageUrl'&amp;gt;&amp;lt;data:title/&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;/h1&amp;gt;
&amp;lt;p id="description"&amp;gt;&amp;lt;data:description/&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/b:includable&amp;gt;
&amp;lt;/b:widget&amp;gt;
&amp;lt;/b:section&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Very powerful - but complicated.&lt;/p&gt;

&lt;h2&gt;In Conclusion&lt;/h2&gt;

&lt;p&gt;I like the new templating system - it is complicated, but very powerful. If you are willing to spend the time to study it, you can make magic. Kudos to the Blogger team for bringing it out.&lt;/p&gt;

&lt;p&gt;If you notice any problem this blog, let me know. I not have tested this in IE yet - &lt;a href="http://binnyva.blogspot.com/2006/09/fedora-core-5.html" class="internal" title="Fedora Core 5"&gt;I have linux&lt;/a&gt; remember?&lt;/p&gt;

&lt;p&gt;Did you move your blog to blogger beta? Why not? If you did, how did it go? Leave some comments.&lt;/p&gt;

&lt;h2&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.wilkinsons.com/Bananna/2006/08/deconstructing-blogger-beta-html.html" class="external"&gt;Deconstructing Blogger Beta&lt;/a&gt; - A comprehensive explanation of the blogger beta templating system.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.blogger.com/bin/topic.py?topic=9084" class="external"&gt;New Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.blogger.com/bin/answer.py?answer=46870" class="external"&gt;Can I edit the HTML of my blog's layout?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.blogger.com/bin/answer.py?answer=46888" class="external"&gt;Page Elements Tags for Layouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.blogger.com/bin/answer.py?answer=46871" class="external"&gt;Fonts and Colors Tags for Layouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.blogger.com/bin/answer.py?answer=46995" class="external"&gt;Widget Tags for Layouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.blogger.com/bin/answer.py?answer=47270" class="external"&gt;Layouts Data Tags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blogger" rel="tag"&gt;blogger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-2649519409220433565?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://beta.blogger.com/' title='Blogger Beta'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/2649519409220433565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=2649519409220433565' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2649519409220433565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/2649519409220433565'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/blogger-beta.html' title='Blogger Beta'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-5560242117555328291</id><published>2006-09-03T22:52:00.000+05:30</published><updated>2006-09-03T22:54:10.655+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Fedora Core 5</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/fedora.png" border="0" alt="Fedora Core 5" /&gt;
&lt;p class="intro"&gt;I have upgraded from &lt;A href="http://binnyva.blogspot.com/2006/02/kde-gnome-and-nautilus.html" class="internal"&gt;Linux Fedora Core 3&lt;/A&gt; to Fedora Core 5. I still have to not configured it fully, so a complete review will have to wait.&lt;/p&gt;

&lt;p&gt;I had a few troubles getting Firefox to work as I need it - and I have great difficulty in believing that they did not include XMMS in the distro. Other than that, I am mostly satisfied with the OS.&lt;/p&gt;

&lt;p&gt;More details and a decent review will be posted when I have finished configuring the system.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/fedora" rel="tag"&gt;fedora&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5560242117555328291?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5560242117555328291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5560242117555328291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5560242117555328291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5560242117555328291'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/09/fedora-core-5.html' title='Fedora Core 5'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-1596893728550450278</id><published>2006-08-28T23:23:00.000+05:30</published><updated>2006-08-28T23:31:09.374+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>MySQL Storage Engines - MyISAM, InnoDB and others</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/400/mysql_logo.gif" border="0" alt="" /&gt;
&lt;p class="intro"&gt;&lt;a href="http://www.mysql.com/" class="external"&gt;MySQL&lt;/a&gt; has a feature called Storage Engines - it supports multiple independent storage engines that can be used as handlers for different table types. Each table can be stored in a way that is most optimized for that particular table.&lt;/p&gt;

&lt;p&gt;With this system, the &lt;strong class="highlight"&gt;developer can choose how a table must be stored&lt;/strong&gt; - he can chose which storage engine is best for that particular situation. For example in a content management system, the table containing the contents will be read more often - so we will chose a storage engine better optimized for reading data(eg. MyISAM). But in the case of the table storing the logs, it must be written more often - so we chose a storage engine that is better at writing for that table. Having multiple storage engine makes sure that you can get the best optimization for any given situation.&lt;/p&gt;


&lt;p&gt;There are &lt;a href="http://blog.develix.com/frog/user/cliff/article/2006-06-04/9" class="external"&gt;many who believe this is a Bad Thing&lt;/a&gt;. In most other &lt;abbr title="DataBase Management System"&gt;DBMS&lt;/abbr&gt;, the Administrator don't have to worry about such details - the DBMS will take care of this. I don't want to take sides in this debate - as for many people, this has become a religious issue. Anyway, as I am writing a &lt;a href="http://binnyva.blogspot.com/2006/08/mysql-database-management-system.htmlMySQL - Database Management System" class="internal" title="MySQL - Database Management System"&gt;series on MySQL&lt;/a&gt;, I cannot ignore this very important feature of MySQL.&lt;/p&gt;

&lt;p&gt;I have only used two of MySQL many Storage Engines - MyISAM and InnoDB. The rest, I have not uses yet. Someday.&lt;/p&gt;

&lt;h2&gt;MyISAM&lt;/h2&gt;

&lt;p&gt;MyISAM is the default storage engine for MySQL. If you create a table in MySQL, without paying any attention to select a specific engine, then that table will be created in MyISAM(by default). This storage engine is the best for &lt;strong class="highlight"&gt;high-speed storage and retrieval&lt;/strong&gt;. It also supports &lt;strong class="highlight"&gt;fulltext searching capabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MyISAM is supported in all MySQL configurations. This engine is used for Data warehousing, read-only archives optimized for bulk operations, etc. as it is the best solution when you want flexible index formats, big scans and has a small disk footprint for data and index. This is not suitable for a typical &lt;a href="http://en.wikipedia.org/wiki/OLTP" class="external"&gt;OLTP&lt;/a&gt; application because of table-level locking, bad crash durability and lack of &lt;a href="http://en.wikipedia.org/wiki/ACID" class="external"&gt;ACID&lt;/a&gt; compliance.&lt;/p&gt;

&lt;h2&gt;InnoDB&lt;/h2&gt;

&lt;p&gt;The &lt;a href="http://en.wikipedia.org/wiki/InnoDB" class="external"&gt;InnoDB storage engine&lt;/a&gt; provide transaction-safe tables(BDB also does this). InnoDB is also included by default in all MySQL 5.0 binary distributions. This engine supports...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Row level locking&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Mvcc" class="external" title="Multiversion Concurrency Control"&gt;MVCC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Savepoints within transactions&lt;/li&gt;
&lt;li&gt;More features for typical OLTP applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the main advantage of this engine is that you can rollback to a previous version of the database using its &lt;strong class="highlight"&gt;COMMIT/ROLLBACK support&lt;/strong&gt;. InnoDB engine is more reliable than MyISAM.&lt;/p&gt;

&lt;h2&gt;Memory&lt;/h2&gt;

&lt;p&gt;The MEMORY storage engine provides &lt;strong class="highlight"&gt;in-memory tables&lt;/strong&gt;. The MERGE storage engine will let you handle many identical MyISAM tables as a single table. Like MyISAM, the MEMORY and MERGE storage engines handle non-transactional tables, and both are also included in MySQL by default.&lt;/p&gt;

&lt;p&gt;The main advantages of the MEMORY Storage engine are...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No disk footprint&lt;/li&gt;
&lt;li&gt;Extremely fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is most useful for...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Summary tables&lt;/li&gt;
&lt;li&gt;Simulations&lt;/li&gt;
&lt;li&gt;Temporary operations(sessions etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;CSV&lt;/h2&gt;

&lt;p&gt;The &lt;abbr title="Comma Seperated Values"&gt;CSV&lt;/abbr&gt; storage engine &lt;strong class="highlight"&gt;stores data in text files using comma-separated values format&lt;/strong&gt;. The main advantages of this approach are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Very simple - data stored in plain text files&lt;/li&gt;
&lt;li&gt;The database can be modified without the server&lt;/li&gt;
&lt;li&gt;Export/Import couldn't be easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Other Storage Engines&lt;/h2&gt;

&lt;p&gt;There are many other storage engines supported by MySQL. Some of them are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NDB Cluster&lt;/li&gt;
&lt;li&gt;ARCHIVE&lt;/li&gt;
&lt;li&gt;BLACKHOLE&lt;/li&gt;
&lt;li&gt;FEDERATED&lt;/li&gt;
&lt;li&gt;Falcon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are not satisfied with any of these engines, you can write your own engine.&lt;/p&gt;


&lt;h2&gt;Reference&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.linuxplanet.com/linuxplanet/tutorials/6034/2/" class="external"&gt;MySQL Storage Engines&lt;/a&gt; - 8 part series on MySQL Storage Engines&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.devshed.com/c/a/MySQL/Storage-Engine-Table-Types/" class="external"&gt;Storage Engine (Table Types)&lt;/a&gt; - 15 part series&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.mysql.com/tech-resources/articles/storage-engine/part_1.html" class="external"&gt;MySQL AB :: MySQL Storage Engine Architecture, Part 1: An Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mysql.com/doc/refman/5.0/en/storage-engines.html" class="external"&gt;Storage Engines and Table Types&lt;/a&gt; - MySQL Reference Manual&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/dbms" rel="tag"&gt;dbms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/storage" rel="tag"&gt;storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/engines" rel="tag"&gt;engines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-1596893728550450278?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/1596893728550450278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=1596893728550450278' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1596893728550450278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/1596893728550450278'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/mysql-storage-engines-myisam-innodb-and.html' title='MySQL Storage Engines - MyISAM, InnoDB and others'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-5359271652368128370</id><published>2006-08-24T23:17:00.000+05:30</published><updated>2006-08-25T00:24:13.069+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><title type='text'>Live Validator - JavaScript Field Validation Script</title><content type='html'>&lt;p class="intro"&gt;Live Validator is a JavaScript program that will validate any form field as the user types the data using the regular expressions that you have specified.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/forms/live_validation/" class="mypages"&gt;Live Validator 1.00.A Beta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/forms/live_validation/documentation.php" class="mypages"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openjs.com/scripts/forms/live_validation/live_validation.js" class="mypages download"&gt;Live Validator Code (4.2 KB)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Features&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;Key Validation&lt;/dt&gt;
&lt;dd&gt;Valides the key as you type it. For example, if you just want numbers in a field, the user will not be allowed to enter alphabets.&lt;/dd&gt;
&lt;dt&gt;Live Validation feedback&lt;/dt&gt;
&lt;dd&gt;If the field validates, the color of the element will change&lt;/dd&gt;
&lt;dt&gt;Attach a form to the validation.&lt;/dt&gt;
&lt;dd&gt;This will show error when the form is submitted&lt;/dd&gt;
&lt;dt&gt;Reasonable size&lt;/dt&gt;
&lt;dd&gt;4.2 KB uncompressed&lt;/dd&gt;
&lt;dt&gt;Works in most major browsers.&lt;/dt&gt;
&lt;dd&gt;At least the ones I tested in - Firefox 1.5/Linux, Firefox 1.5/Windows, IE 6, Opera 9/Linux, Opera/Windows&lt;/dd&gt;
&lt;dt&gt;And more...&lt;/dt&gt;
&lt;dd&gt;Many more features...&lt;/dd&gt;
&lt;/dl&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/6782/1621/1600/validation.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/6782/1621/320/validation.png" border="0" alt="" /&gt;&lt;/a&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/form" rel="tag"&gt;form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/validation" rel="tag"&gt;validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/library" rel="tag"&gt;library&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-5359271652368128370?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.openjs.com/scripts/forms/live_validation/' title='Live Validator - JavaScript Field Validation Script'/><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/5359271652368128370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=5359271652368128370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5359271652368128370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/5359271652368128370'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/live-validator-javascript-field.html' title='Live Validator - JavaScript Field Validation Script'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115609734487874959</id><published>2006-08-20T23:25:00.000+05:30</published><updated>2006-08-20T23:45:30.100+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>phpMyAdmin Tips and Tricks - Database Backup and Restore</title><content type='html'>&lt;p class="intro"&gt;&lt;a href="http://www.phpmyadmin.net/" class="external"&gt;phpMyAdmin&lt;/a&gt; is a big software - there are features that I have not used yet. But there are some features that are not very obvious - but could save you a lot of time.&lt;/p&gt;

&lt;h2&gt;Quick Table Browse&lt;/h2&gt;

&lt;p&gt;The normal way to seeing the contents of a table is to click on the table name in the left pane and then click on the 'Browse' tab in the top. But there is a one click way to do this - &lt;strong class="highlight"&gt;click on the small icon next to the table name in the left pane&lt;/strong&gt;.&lt;/p&gt;

&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/674/1162/400/quick_browse.png" border="0" alt="Click icon to browse table" /&gt;

&lt;h2&gt;Default Table Selection&lt;/h2&gt;

&lt;p&gt;When you access phpMyAdmin, you get the main page - after that you have to chose from the drop down which database should be used. Wouldn't it be useful if the database you use most would be automatically selected on loading? You can do this by accessing phpMyAdmin using the following URL.&lt;/p&gt;

&lt;pre&gt;http://localhost/phpMyAdmin/?db=my_fav_db&lt;/pre&gt;

&lt;p&gt;You will have to change the database name and the location to the one in your system - but you got the idea right?&lt;/p&gt;

&lt;h2&gt;Database Backup&lt;/h2&gt;

There are many ways to take a database backup using phpMyAdmin - but my favorite way is to take an &lt;abbr title="Structured Query Language"&gt;SQL&lt;/abbr&gt; Dump. 

&lt;p&gt;Select the database you want to backup and &lt;strong class="highlight"&gt;click 'Export' tab&lt;/strong&gt; in the main frame. Now &lt;strong class="highlight"&gt;select all the tables&lt;/strong&gt; in the select box. You can select the format of the backup - like SQL, CSV, XML etc. We will select the SQL option. It is recommended that you &lt;strong class="highlight"&gt;check the 'Add DROP TABLE' and 'Add IF NOT EXISTS' checkboxs&lt;/strong&gt;. This will make sure that the existing tables will be removed when restoring the backup. Now check the 'Save as file' checkbox. Then click the 'Go' button. Now you should see a download option for the database backup. You can save this file to you harddisk and run it later if you want to restore the backup. If you did not check the 'Save as file' option, the SQL dump will be shown in a textarea.&lt;/p&gt;

&lt;p&gt;This can also be done using the 'mysqldump' command in linux using the following command.&lt;/p&gt;

&lt;pre&gt;mysqldump --add-drop-table --user=root DATABASE&gt; backup_file.sql&lt;/pre&gt;

&lt;h2&gt;Table Backup&lt;/h2&gt;

&lt;p&gt;If you just need the backup of a single table, select that table from the table list in the left pane and click the 'Export' tab. Now do the steps described in the database backup section. Here only the selected table will be backuped.&lt;/p&gt;

&lt;p&gt;This can be done using the following command.&lt;/p&gt;

&lt;pre&gt;mysqldump --add-drop-table --user=root DATABASE TABLE&gt; backup_file.sql&lt;/pre&gt;

&lt;h2&gt;Restoring a backup&lt;/h2&gt;

&lt;p&gt;Click the 'SQL' icon(&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/674/1162/400/sql_icon.png" border="0" alt="SQL Icon" /&gt;) in the left pane - this will open a popup. Paste the SQL code you when you backuped the database in the textarea in this popup. Alternatively, you can chose the 'Import Files' tab in this popup and chose the location of the file you saved when backing up the data.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;not a recommended method to restore large backup&lt;/strong&gt; - if the backup file is more than 1 MB, don't try this. A better method is to upload the backup file to you host and restore the backup using the shell.&lt;/p&gt;

&lt;!--&lt;p&gt;Use this command to import the table from a file&lt;/p&gt;

&lt;pre&gt;mysqlimport --user=root DATABASE backup_file.sql&lt;/pre&gt;--&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/phpmyadmin" rel="tag"&gt;phpmyadmin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115609734487874959?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115609734487874959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115609734487874959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115609734487874959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115609734487874959'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/phpmyadmin-tips-and-tricks-database.html' title='phpMyAdmin Tips and Tricks - Database Backup and Restore'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115566416883777145</id><published>2006-08-15T23:11:00.000+05:30</published><updated>2006-08-15T23:19:29.136+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Installing phpMyAdmin 2.8</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/674/1162/400/phpmyadmin.png" border="0" alt="phpMyAdmin Logo" /&gt;
&lt;p class="intro"&gt;The &lt;a href="http://binnyva.blogspot.com/2006/08/installing-and-configuring-phpmyadmin.html" class="internal" title="Installing and Configuring phpMyAdmin"&gt;install instructions I provided earlier&lt;/a&gt; will only work in the earlier versions of &lt;a href="http://binnyva.blogspot.com/2006/08/managing-databases-with-mysql-clients.html" class="internal" title="Managing Databases with MySQL Clients - phpMyAdmin"&gt;phpMyAdmin&lt;/a&gt;. The latest version(2.8.2.1 - as of Aug 15, 2006) has a much easier way of doing this.&lt;/p&gt;

&lt;p&gt;Get the latest version of phpMyAdmin from &lt;a href="http://www.phpmyadmin.net/" class="external"&gt;phpMyAdmin.net&lt;/a&gt;. The files will compressed - so you will have to extract it. Create a &lt;strong&gt;folder called 'phpMyAdmin'&lt;/strong&gt; in the &lt;strong&gt;document root&lt;/strong&gt; of your server and &lt;strong&gt;extract&lt;/strong&gt; the PHP scripts into it. That's it - the installing part is over. The latest version will automatically configure itself to run with these settings...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database Host : localhost&lt;/li&gt;
&lt;li&gt;Username : root&lt;/li&gt;
&lt;li&gt;Password : (Empty)&lt;/li&gt;
&lt;/ul&gt;

For the example we provided the last time, this is all that is needed. But if you wish to configure your phpMyAdmin using more advanced options, &lt;strong&gt;open the folder you installed phpMyAdmin&lt;/strong&gt; to(&amp;lt;Document Root/phpMyAdmin/&amp;gt;) and &lt;strong&gt;create a folder called 'config'&lt;/strong&gt;. Make sure it has write permission. You can &lt;strong&gt;give it write permission&lt;/strong&gt; with the following command(assuming that your are on a linux system)...

&lt;pre&gt;chmod 666 config&lt;/pre&gt;

&lt;p&gt;Now &lt;strong&gt;open the URL &lt;a href="http://localhost/phpMyAdmin/scripts/setup.php" class="local" title="Link may not work"&gt;http://localhost/phpMyAdmin/scripts/setup.php&lt;/a&gt;.&lt;/strong&gt; This will help you configure your phpMyAdmin.&lt;/p&gt;

&lt;p&gt;The configuration is very straight forward - so I am not providing much details about it. If you have any doubt, reffer the &lt;a href="http://localhost/phpMyAdmin/Documentation.html" class="local" title="Links to your machine"&gt;documentation&lt;/a&gt; that comes with the installation.&lt;/p&gt;

&lt;p&gt;After you have finished configuration, &lt;strong&gt;click on the 'Save' Button&lt;/strong&gt; in the 'Configuration' section. This will create a 'config.inc.php' file inside the 'config' folder that we created earlier. You will have to manually copy this config file to you phpMyAdmin folder. After this is done, delete the config folder. You can do this with the command...&lt;/p&gt;

&lt;pre&gt;mv config/config.inc.php .
rmdir config&lt;/pre&gt;

&lt;p&gt;On a personal note, I still prefer the 2.6 Version of phpMyAdmin. Some pages in the latest version have a tendency to create horizontal scroll bars even on 1024x768 resolution.&lt;/p&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/phpmyadmin" rel="tag"&gt;phpmyadmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115566416883777145?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115566416883777145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115566416883777145' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115566416883777145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115566416883777145'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/installing-phpmyadmin-28.html' title='Installing phpMyAdmin 2.8'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115531653488849489</id><published>2006-08-11T22:42:00.000+05:30</published><updated>2006-08-15T23:31:29.853+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Installing and Configuring phpMyAdmin</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/674/1162/400/phpmyadmin.png" border="0" alt="phpMyAdmin Logo" /&gt;

&lt;p class="intro"&gt;In the last post, I &lt;a href="http://binnyva.blogspot.com/2006/08/managing-databases-with-mysql-clients.html" title="Managing Databases with MySQL Clients - phpMyAdmin" class="internal"&gt;introduced phpMyAdmin&lt;/a&gt;. In this, we will deal with installation and configuration of &lt;a href="http://www.phpmyadmin.net/" class="external"&gt;phpMyAdmin&lt;/a&gt;.&lt;/p&gt;

&lt;p class="update"&gt;UPDATE: This installation manual is for the older versions on phpMyAdmin. To see how to install the latest version, see the post &lt;a href="http://binnyva.blogspot.com/2006/08/installing-phpmyadmin-28.html" class="internal" title="Installing phpMyAdmin 2.8"&gt;Installing phpMyAdmin 2.8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My aim is to &lt;strong&gt;create a tool that could be used to administer your database in a development server&lt;/strong&gt;. These directions are &lt;strong&gt;NOT for a production server&lt;/strong&gt;. You will need much more security when installing phpMyAdmin on a production server. A good source for information on how to install phpMyAdmin securely is the series '&lt;a href="http://www.devshed.com/c/a/PHP/Doing-More-With-phpMyAdmin-Part-1/" class="external"&gt;Doing more with phpMyAdmin&lt;/a&gt;'.&lt;/p&gt;

&lt;h2&gt;Installation phpMyAdmin&lt;/h2&gt;

&lt;p&gt;Get the latest version of phpMyAdmin from &lt;a href="http://www.phpmyadmin.net/" class="external"&gt;phpMyAdmin.net&lt;/a&gt;. The files will compressed - so you will have to extract it.&lt;/p&gt;

&lt;p&gt;Create a &lt;strong&gt;folder called 'phpMyAdmin'&lt;/strong&gt; in the &lt;strong&gt;document root&lt;/strong&gt; of your server and &lt;strong&gt;extract&lt;/strong&gt; the PHP scripts into it. That's it - the installing part is over.&lt;/p&gt;

&lt;h3&gt;Configuring phpMyAdmin&lt;/h3&gt;
&lt;h4&gt;Necessary Information&lt;/h4&gt;
&lt;p&gt;Now we have to configure it - before starting this, make sure you have the following details...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Database Server address&lt;/li&gt;
&lt;li&gt;Database Username&lt;/li&gt;
&lt;li&gt;Database Password&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the sake of example I am going to assume that the following values...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server : 'localhost'&lt;/li&gt;
&lt;li&gt;Username : 'root'&lt;/li&gt;
&lt;li&gt;Password : ''&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using the 'root' user with an empty password is one of the worst security blunders you can make - but what the hell, we are on a development server, right?&lt;/p&gt;

&lt;h4&gt;Editing 'config.inc.php'&lt;/h4&gt;

&lt;p&gt;Open up the file 'config.inc.php' in your &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;favorite editor&lt;/a&gt; and edit the following values...&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin/';&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is the &lt;strong&gt;absolute path for your phpMyAdmin directory&lt;/strong&gt;. If you enter this location into a browser, phpMyAdmin should show up. I will not recommend that you use 'localhost' as the domain if you are on a network and expect others to connect to this phpMyAdmin setup. You should use 'http://&amp;lt;YOUR IP&amp;lt;/phpMyAdmin/' in such a case. However if you are using phpMyAdmin for just your system, localhost will do fine.&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;$cfg['Servers'][$i]['host'] = 'localhost';&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is the &lt;strong&gt;database server address&lt;/strong&gt;. If you look at the following lines in the file, you will notice that there is more than one instance of this line. This is for managing more that one database server using just one phpMyAdmin. Make sure that all the other hosts are set to empty - phpMyAdmin will ignore it if it is empty.&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;$cfg['Servers'][$i]['user'] = 'root';&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;strong&gt;database user&lt;/strong&gt; - in our case 'root'. Only the first instance of the line should be set - the other will be ignored if the 'host' option is not set.&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;$cfg['Servers'][$i]['password'] = '';&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;strong&gt;password for the above given user&lt;/strong&gt; - in this example we are using an empty password.&lt;/p&gt;

&lt;p&gt;There are many other options - but you will not have to worry about them - they will do fine with their default values. However, if you are adventurous, feel free to experiment with the configuration options. The file well commented in detail - so you will have no trouble finding your way around - if you know a bit of &lt;abbr title="PHP : Hypertext Preprocessor"&gt;PHP&lt;/abbr&gt;.&lt;/p&gt;

&lt;p&gt;After all this is done, open up a &lt;a href="http://binnyva.blogspot.com/2006/05/browsers-for-web-development-in-linux.html" class="internal" title="Browsers for Web Development in Linux"&gt;browser&lt;/a&gt; and point it to &lt;a href="http://localhost/phpMyAdmin/" class="local" title="Link may fail"&gt;http://localhost/phpMyAdmin/&lt;/a&gt;. If all went well, you will get the front page of phpMyAdmin.&lt;/p&gt;

&lt;h3&gt;References&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.phpmyadmin.net/" class="external"&gt;phpMyAdmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.phpmyadmin.net/home_page/docs.php#quick_install" class="external"&gt;Installing phpMyAdmin - Official Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.devshed.com/c/a/PHP/Doing-More-With-phpMyAdmin-Part-1/" class="external"&gt;Doing More With phpMyAdmin&lt;/a&gt; - A 7 part tutorial for configuring and using phpMyAdmin&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/phpmyadmin" rel="tag"&gt;phpmyadmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115531653488849489?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115531653488849489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115531653488849489' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115531653488849489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115531653488849489'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/installing-and-configuring-phpmyadmin.html' title='Installing and Configuring phpMyAdmin'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115497229306917281</id><published>2006-08-07T23:01:00.000+05:30</published><updated>2006-08-07T23:08:13.086+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Managing Databases with MySQL Clients - phpMyAdmin</title><content type='html'>&lt;p class="intro"&gt;There are many MySQL Clients(or database administration tools) out there - &lt;a href="http://www.mysqlfront.de/" class="external"&gt;MySQL Front End&lt;/a&gt;, &lt;a href="http://tora.sourceforge.net/" class="external"&gt;Tora&lt;/a&gt;, mysql etc. But in the web environment, one client rules - &lt;a href="http://www.phpmyadmin.net/" class="external"&gt;phpMyAdmin&lt;/a&gt;. phpMyAdmin is a &lt;strong&gt;&lt;abbr title="PHP: Hypertext Preprocessor"&gt;PHP&lt;/abbr&gt; based(obviously) &lt;abbr title="Graphical User Interface"&gt;GUI&lt;/abbr&gt; administration tool for MySQL.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I began programming in Linux, I could not use the DB Administration tool my co-workers were using. They were using MySQL Front End - and only the windows version was available for it. Since no one in my office used Linux, none knew another &lt;abbr title="DataBase Administration"&gt;DBA&lt;/abbr&gt; for Linux. One suggested Tora, but I could not get it to run - some dependencies were missing. Anyway, I was forced to use &lt;code&gt;mysql&lt;/code&gt; - yes, the command line client that came with MySQL Server. You can start it by bringing up a terminal and entering 'mysql' into it. Then you type every &lt;abbr title="Stuctured Query Language"&gt;SQL&lt;/abbr&gt; command you want to execute into it. Trust me, it was not fun. The biggest problems was that I want to copy something and press 'Ctrl+C' - in the terminal 'Ctrl+C' is not Copy - its Close. So the client goes down. It was very irritating. Anyway I found phpMyAdmin before long and have been using it ever since(even after I got Tora running).&lt;/p&gt;

&lt;p&gt;The biggest advantages of phpMyAdmin is that it is &lt;strong&gt;web based&lt;/strong&gt; - it runs on any server capable of handling PHP. Because of this all the online Database Administration is done using phpMyAdmin. If you have a site of your own, and you have the control panel access to it, you will know what I mean. They database management part will be handled by phpMyAdmin. The phpMyAdmin site cites the following as the &lt;strong&gt;&lt;a href="http://www.phpmyadmin.net/home_page/docs.php#intro" class="external" title="The phpMyAdmin Project Documentation"&gt;features of phpMyAdmin&lt;/a&gt;&lt;/strong&gt;...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse, view and drop databases, tables, views, fields and indexes.&lt;/li&gt;
&lt;li&gt;Create, copy, drop, rename and alter databases, tables, fields and indexes.&lt;/li&gt;
&lt;li&gt;Maintenance server, databases and tables, with proposals on server configuration.&lt;/li&gt;
&lt;li&gt;Execute, edit and bookmark any SQL-statement, even batch-queries.&lt;/li&gt;
&lt;li&gt;Create and read dumps of tables - in various formats like CSV, SQL, etc.&lt;/li&gt;
&lt;li&gt;Export data to various formats: CSV, SQL, XML, Excel and more.&lt;/li&gt;
&lt;li&gt;Administer multiple servers.&lt;/li&gt;
&lt;li&gt;Manage MySQL users and privileges.&lt;/li&gt;
&lt;li&gt;Check referential integrity in MyISAM tables.&lt;/li&gt;
&lt;li&gt;Using Query-by-example (QBE), create complex queries automatically connecting required tables.&lt;/li&gt;
&lt;li&gt;Search globally in a database or a subset of it.&lt;/li&gt;
&lt;li&gt;Support InnoDB tables and &lt;a href="http://www.phpmyadmin.net/home_page/docs.php#faq1_17"&gt;foreign keys&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.phpmyadmin.net/home_page/docs.php#faq1_17"&gt;Support mysqli&lt;/a&gt;, the improved MySQL extension.&lt;/li&gt;
&lt;li&gt;And more...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;phpMyAdmin is so commonly used that there is a book - &lt;a href="http://www.packtpub.com/view_book/isbn/1904811035"&gt;Mastering phpMyAdmin for effective MySQL Management&lt;/a&gt; - that aims to teach it.&lt;/p&gt;

&lt;h3&gt;Reference&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.phpmyadmin.net/home_page/docs.php"&gt;phpMyAdmin Project Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php-editors.com/articles/sql_phpmyadmin.php"&gt;Learning SQL Using phpMyAdmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.devshed.com/c/a/PHP/Doing-More-With-phpMyAdmin-Part-1/"&gt;Doing More With phpMyAdmin&lt;/a&gt; - A 7 part tutorial for configuring and using phpMyAdmin.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/phpmyadmin" rel="tag"&gt;phpmyadmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115497229306917281?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115497229306917281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115497229306917281' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115497229306917281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115497229306917281'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/managing-databases-with-mysql-clients.html' title='Managing Databases with MySQL Clients - phpMyAdmin'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115464561996443237</id><published>2006-08-03T04:19:00.000+05:30</published><updated>2006-08-04T04:23:39.990+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>MySQL - Database Management System</title><content type='html'>&lt;p class="intro"&gt;In this &lt;abbr title="Linux Apache MySQL PHP/Perl/Python/Ruby"&gt;LAMP&lt;/abbr&gt; series, we have looked at &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;Linux&lt;/a&gt; and &lt;a href="http://binnyva.blogspot.com/2006/06/apache.html" class="internal" title="Apache"&gt;Apache&lt;/a&gt; - now we are going to have a look at MySQL.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.mysql.com/" class="external"&gt;MySQL&lt;/a&gt; is a &lt;strong class="strong"&gt;multithreaded, multi-user, &lt;abbr title="Stuctured Query Language"&gt;SQL&lt;/abbr&gt; based Database Management System(DBMS)&lt;/strong&gt; under &lt;abbr title="GNU General Public License"&gt;GPL&lt;/abbr&gt; license. It have become the &lt;strong class="strong"&gt;most popular open source database&lt;/strong&gt; because of its performance, reliability and ease of use. It is &lt;a href="http://www.mysql.com/why-mysql/" class="external"&gt;said&lt;/a&gt; to have more than 10 million installations.&lt;/p&gt;

&lt;p&gt;The popularity of MySQL as a web application platform is closely tied to the popularity of &lt;abbr title="PHP : Hypertext Preprocessor"&gt;PHP&lt;/abbr&gt;, which is often used with MySQL and nicknamed the &lt;em&gt;Dynamic Duo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;MySQL have long been my favorite &lt;abbr title="Database Management System"&gt;DBMS&lt;/abbr&gt; because its ease of use and great support in PHP. I have used MySQL in almost all the Web applications I have created over the years. This includes PHP as well as Perl apps. Ruby on Rails, the hottest framework right now, uses MySQL.&lt;/p&gt;

&lt;h2&gt;Features&lt;/h2&gt;

&lt;p&gt;Please note that some of the following features are only present MySQL 5.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-platform support&lt;/li&gt;
&lt;li&gt;Stored procedures&lt;/li&gt;
&lt;li&gt;Triggers&lt;/li&gt;
&lt;li&gt;Cursors&lt;/li&gt;
&lt;li&gt;True VARCHAR support&lt;/li&gt;
&lt;li&gt;INFORMATION_SCHEMA&lt;/li&gt;
&lt;li&gt;Multiple independent storage engines(more about this later)&lt;/li&gt;
&lt;li&gt;Transactions with the InnoDB, BDB and Cluster storage engines; savepoints with InnoDB&lt;/li&gt;
&lt;li&gt;SSL support&lt;/li&gt;
&lt;li&gt;Query caching&lt;/li&gt;
&lt;li&gt;Sub-SELECTs (or nested SELECTs)&lt;/li&gt;
&lt;li&gt;Full-text indexing and searching using MyISAM engine&lt;/li&gt;
&lt;li&gt;Embedded database library&lt;/li&gt;
&lt;li&gt;Full Unicode support&lt;/li&gt;
&lt;li&gt;ACID compliance using the InnoDB, BDB and Cluster engines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Used In&lt;/h2&gt;
&lt;p&gt;Some of the most popular sites using MySQL are given below...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.google.com/" title="Google"&gt;Google&lt;/a&gt; - for Google AdWords&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yahoo.com/" title="Yahoo!"&gt;Yahoo!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.slashdot.org/" title="Slashdot"&gt;Slashdot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.digg.com/" title="Digg"&gt;Digg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/" title="Wikipedia"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.craigslist.com" title="Craigslist"&gt;Craigslist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nasa.gov/" title="NASA"&gt;NASA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.flickr.com/" title="Flickr"&gt;flickr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.livejournal.com/" title="LiveJournal"&gt;LiveJournal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.friendster.com/" title="Friendster"&gt;Friendster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mysql" rel="tag"&gt;mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/dbms" rel="tag"&gt;dbms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/database" rel="tag"&gt;database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/lamp" rel="tag"&gt;lamp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115464561996443237?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115464561996443237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115464561996443237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115464561996443237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115464561996443237'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/08/mysql-database-management-system.html' title='MySQL - Database Management System'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115426143346559990</id><published>2006-07-30T17:33:00.000+05:30</published><updated>2006-07-30T17:54:18.730+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Multiple Versions of Apache on a Single System</title><content type='html'>&lt;p class="intro"&gt;Some times it is necessary to have &lt;strong&gt;multiple versions on Apache&lt;/strong&gt; in your system. The system I am currently working on has two versions of Apache - the first is Apache 1.3 with PHP 4 and MySQL 3. The second apache is Apache 2.0 with PHP 5 and MySQL 5. It is very easy to install multiple versions of Apache in your system - the only limitation is that you can't have all the versions run at once - &lt;strong&gt;only one instance of apache must be running&lt;/strong&gt; at any one point.&lt;/p&gt;

&lt;p&gt;I installed multiple versions of apache by using the '&lt;code&gt;prefix&lt;/code&gt;' keyword while compiling the software. To do this, you must have the source tarball of the apache program. Install it using the commands...&lt;/p&gt;

&lt;pre&gt;./configure --prefix=/usr/local/apache2
make &amp;amp;&amp;amp; make install&lt;/pre&gt;

&lt;p&gt;The &lt;strong&gt;&lt;code&gt;prefix&lt;/code&gt; keyword is the location where apache will be installed&lt;/strong&gt; to. When create multiple installation of apache, keep changing this location - so that the previous installation will not be overwritten. You can start apache using the command...&lt;/p&gt;

&lt;pre&gt;/usr/local/apache2/bin/apachectl start&lt;/pre&gt;

&lt;p&gt;This command will start the apache server at &lt;code&gt;/usr/local/apache2/&lt;/code&gt; folder. The configuration files for this installation will be at &lt;code&gt;/usr/local/apache2/conf/&lt;/code&gt;. Open the folder '/usr/local/apache2/' and you will see the other folders in this directory - like document root, logs etc. You can change the default locations of these folders using the &lt;code&gt;httpd.conf&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Apache can be stopped using any one of the following commands...&lt;/p&gt;

&lt;pre&gt;service httpd stop&lt;/pre&gt;

&lt;p&gt;OR&lt;/p&gt;

&lt;pre&gt;/usr/local/apache2/bin/apachectl stop&lt;/pre&gt;

&lt;p&gt;Make sure that the running instance of Apache is stopped before starting a new instance - else a failure message will be shown. You can do this by using the command line...&lt;/p&gt;

&lt;pre&gt;$ service httpd stop
Stopping httpd:                        [  OK  ]
$ /usr/local/apache2/bin/apachectl start&lt;/pre&gt;

&lt;p&gt;Or you can use a neat script I created in &lt;a href="http://www.bin-co.com/tcl/tutorial/" class="mypages" title="Tcl/Tk Tutorial"&gt;Tcl/Tk&lt;/a&gt;. Save the following code into a file, say, 'ApacheRemote.tcl' and execute it using the command '&lt;code&gt;wish ApacheRemote.tcl&lt;/code&gt;'. NOTE: You must have Tcl/Tk on your system for this to work.&lt;/p&gt;

&lt;pre&gt;&lt;code class="tcl"&gt;
#!/usr/bin/wish
# ApacheRemote V 2.00.A
# http://www.bin-co.com/tcl/

proc showMsg { result } {
 .txt insert end "$result\n"
}

############################### GUI Code ####################################
label .lab_top -text "Apache Remote"
pack .lab_top

frame .frm_common
button .frm_common.but_stop -text "Stop Apache" -command {
 catch { exec "service" "httpd" "stop" } result
 showMsg $result
}
button .frm_common.but_status -text "Status" -command {
 catch { exec "service" "httpd" "status" } result
 showMsg $result
}
pack .frm_common.but_stop .frm_common.but_status -side left
pack .frm_common

frame .frm
button .frm.but_start -text "Start /usr/local" -command {
 catch { exec "/usr/local/apache/bin/apachectl" "start" } result
 showMsg $result
 #exit
}
button .frm.but_start_default -text "Start Default" -command {
 catch { exec "service" "httpd" "start" } result
 showMsg $result
 #exit
}

pack .frm.but_start .frm.but_start_default -side left
pack .frm

#Result Display Area
text .txt 
pack .txt -fill both -expand 1 -side top

bind . &amp;lt;Key-Escape&amp;gt; { exit }
&lt;/code&gt;&lt;/pre&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/lamp" rel="tag"&gt;lamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115426143346559990?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115426143346559990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115426143346559990' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115426143346559990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115426143346559990'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/multiple-versions-of-apache-on-single.html' title='Multiple Versions of Apache on a Single System'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115393460638252860</id><published>2006-07-26T22:47:00.000+05:30</published><updated>2006-07-26T22:53:26.400+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Practical Uses for mod_rewrite</title><content type='html'>&lt;p class="intro"&gt;I have explained how to &lt;a href="http://binnyva.blogspot.com/2006/07/modrewrite-module-for-apache.html" class="internal" title="mod_rewrite module for Apache"&gt;use mod_rewrite to create structured &lt;abbr title="Universal Resource Locator"&gt;URL&lt;/abbr&gt;s&lt;/a&gt; and about the &lt;a href="http://binnyva.blogspot.com/2006/07/modrewrite-directives-rewritecond-and.html" class="internal" title="mod_rewrite Directives - RewriteCond and RewriteRule"&gt;most used mod_rewrite directives&lt;/a&gt;. Now to see some practical use of mod_rewrite in various situations.&lt;/p&gt;

&lt;h2&gt;URL Change&lt;/h2&gt;

&lt;p&gt;Good URLs don't change - but sometimes you have to do it. Move one file from its previous location to a new one. Even I have done it - I moved my site from &lt;a href="http://www.geocities.com/binnyva/" class="mypages"&gt;http://www.geocities.com/binnyva/&lt;/a&gt; to &lt;a href="http://www.bin-co.com/" class="mypages"&gt;Bin-Co&lt;/a&gt;, &lt;a href="http://www.openjs.com/" class="mypages" title="JavaScript - Opened"&gt;OpenJS&lt;/a&gt; and &lt;a href="http://www.binnyva.com/" class="mypages"&gt;BinnyVA&lt;/a&gt;. When you make such a move, you want to make sure that your visitors move with you. This can be done using mod_rewrite.&lt;/p&gt;

&lt;p&gt;Lets say you are moving the a page from &lt;code&gt;http://www.domain.com/oldfile.html&lt;/code&gt; to &lt;code&gt;http://www.domain.com/stuff/newfile.html&lt;/code&gt;. Now when ever someone visits the oldfile.html file, they get a 404 error. You can use the following script to make sure that &lt;strong class="highlight"&gt;all visitors to the old page is redirected to the new one&lt;/strong&gt;...&lt;/p&gt;

&lt;pre&gt;&lt;code class="mod_rewrite"&gt;
RewriteRule ^oldfile\.html$ http://www.domain.com/stuff/newfile.html [R]

&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Escape the Slashdot Effect&lt;/h2&gt;

&lt;p&gt;Slashdot Effect is a situation when a link to a smaller site appear in a heavy traffic site like &lt;a href="http://www.slashdot.org/" class="external" title="Stuff that matters"&gt;Slashdot&lt;/a&gt; or &lt;a href="http://www.digg.com/" class="external"&gt;Digg&lt;/a&gt;. Due to the huge traffic this brings, many site with low bandwidth will crumble. One method to prevent this is to &lt;strong class="highlight"&gt;deny access to all visitors who have come from the high traffic site&lt;/strong&gt;(let us assume it is slashdot.org). There are other methods also(eg. mirroring). So you have two requirements...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deny access to all from slashdot.org&lt;/li&gt;
&lt;li&gt;Allow access to all others.&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class="mod_rewrite"&gt;
RewriteCond %{HTTP_REFERER} ^http://slashdot\.org [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://www\.slashdot\.org [NC]
RewriteRule ^.*$ /denied.html [F]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The logic behind the above code goes somewhat like this...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RewriteCond %{HTTP_REFERER} ^http://slashdot\.org [NC,OR]&lt;/code&gt; - If the visitor have come from http://slashdot.org OR,&lt;br /&gt;
&lt;code&gt;RewriteCond %{HTTP_REFERER} ^http://www\.slashdot\.org [NC]&lt;/code&gt; - if he have come from http://www.slashdot.org&lt;br /&gt;
&lt;code&gt;RewriteRule ^.*$ /denied.html [F]&lt;/code&gt; - Show a 'Forbidden' message.&lt;/p&gt;

&lt;h2&gt;Prevent Image Hot Linking&lt;/h2&gt;

&lt;p&gt;Hot Linking is when someone links to a file from our server directly in a way that our bandwidth will be used when anyone visits the other person's site. For example, let say we have a cool picture called, say, 'cool_picture.jpg'. We have kept it in 'http://www.our-domain.com/pictures/cool_picture.jpg'. Now some guy from another site, likes this picture and decided to show the image in his site - so he uses the HTML code...&lt;/p&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;img src="http://www.our-domain.com/pictures/cool_picture.jpg" /&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So whenever someone visits this guys site, the image is fetched from our server - thus increasing our bandwidth costs. For this reason, this method is also known as bandwidth theft.&lt;/p&gt;

&lt;p&gt;So how do we prevent it? The same method used in the last situations - &lt;strong class="highlight"&gt;look at the referrer, and if it is not ours, show a forbidden message.&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="mod_rewrite"&gt;
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www\.our-domaincom/\.org [NC]
RewriteCond %{HTTP_REFERER} !^http://our-domain\.com/\.org [NC]
RewriteRule ^.*$ /denied.html [F]
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Using Different Files for Different Browsers&lt;/h2&gt;

&lt;p&gt;As all good web designers know, different browsers have different ways of parsing the same &lt;abbr title="Cascadding Style Sheets"&gt;CSS&lt;/abbr&gt; file. So your masterpiece in IE will look like something the cat brought in Firefox. One simple way of solving this problem is to use mod_rewrite and provide a different css file based on the visitor's browsers. Lets say we have a CSS file called 'style.css'. But for IE, we have created a special CSS file called 'style_ie.css'. For firefox, we have yet another CSS file called 'style_ff.css'. Our pages uses the HTML code...&lt;/p&gt;

&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;link href="style.css" type="text/css" rel="stylesheet" /&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now to &lt;strong class="highlight"&gt;provide different files based on the user agent of the visitor&lt;/strong&gt;...&lt;/p&gt;

&lt;pre&gt;&lt;code class="mod_rewrite"&gt;
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/(.*)MSIE
RewriteRule (.*)style.css$ $1style_ie.css [L]

RewriteCond %{HTTP_USER_AGENT} ^Mozilla/(.*)Firefox
RewriteRule (.*)style.css$ $1style_ff.css [L]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For more solutions to situations like this, see the &lt;a href="http://httpd.apache.org/docs/2.0/misc/rewriteguide.html" class="external"&gt;URL Rewriting Guide&lt;/a&gt; from Apache Docs.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mod_rewrite" rel="tag"&gt;mod_rewrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/url" rel="tag"&gt;url&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115393460638252860?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115393460638252860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115393460638252860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115393460638252860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115393460638252860'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/practical-uses-for-modrewrite.html' title='Practical Uses for mod_rewrite'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115359356038251548</id><published>2006-07-22T23:01:00.000+05:30</published><updated>2006-07-23T00:09:20.406+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>mod_rewrite Directives - RewriteCond and RewriteRule</title><content type='html'>&lt;p class="intro"&gt;In the last post on &lt;a href="http://binnyva.blogspot.com/2006/07/modrewrite-module-for-apache.html" title="mod_rewrite module for Apache" class="internal"&gt;mod_rewrite&lt;/a&gt;, I used a basic example from &lt;a href="http://del.icio.us/" class="external"&gt;http://del.icio.us&lt;/a&gt; to explain the working of the mod_rewrite module. Now I will try to explain the various options available in mod_rewrite.&lt;/p&gt;

&lt;h2&gt;RewriteEngine&lt;/h2&gt;

&lt;p&gt;This directive turns the rewrite engine on or off.&lt;br /&gt;
&lt;em&gt;Syntax : &lt;/em&gt; RewriteEngine (on|off)&lt;br /&gt;
&lt;em&gt;Example: &lt;/em&gt; &lt;code&gt;RewriteEngine on&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you wish to &lt;strong class="highlight"&gt;disable rewriting, use RewriteEngine off instead of commenting out all the other lines.&lt;/strong&gt; Since the rewrite engine is off by default, you have to turn it on every time you wish to use the mod_rewrite module. So the first line will be always...&lt;/p&gt;

&lt;pre&gt;RewriteEngine on&lt;/pre&gt;

&lt;h2&gt;RewriteCond&lt;/h2&gt;

&lt;p&gt;The &lt;strong class="highlight"&gt;'if' statement of mod_rewrite&lt;/strong&gt;. The commands given below a RewriteCond line will be evaluated only if this returns a true value.&lt;br /&gt;
&lt;em&gt;Syntax : &lt;/em&gt;RewriteCond &lt;em&gt;TestString&lt;/em&gt; &lt;em&gt;ConditionPattern&lt;/em&gt; [&lt;em&gt;Flags&lt;/em&gt;]&lt;br /&gt;
&lt;em&gt;Example: &lt;/em&gt; &lt;code&gt;RewriteCond %{HTTP_REFERER} ^http://www.google.com&lt;/code&gt; [NC]&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;RewriteCond&lt;/code&gt; has &lt;strong class="highlight"&gt;two arguments plus an optional third&lt;/strong&gt; one.&lt;/p&gt;

&lt;h3 id="test_string"&gt;TestString&lt;/h3&gt;

&lt;p&gt;There are three main types of strings that can be used in TestString part of the directive.&lt;/p&gt;

&lt;h4&gt;RewriteRule Regular Expression Captures - $N&lt;/h4&gt;

&lt;p&gt;Here N is a number between 0 and 9. If you use the string $1 in the TestString part of the &lt;code&gt;RewriteCond&lt;/code&gt; directive, it will be replaced by the first capture from the regular expression for the corresponding &lt;code&gt;RewriteRule&lt;/code&gt; - ie. the RewriteRule that will follow this condition.&lt;/p&gt;

&lt;h4&gt;RewriteCond Regular Expression Captures - %N&lt;/h4&gt;

&lt;p&gt;For this string, N is a number between 1 and 9. If you use the $1 in the TestString part of the &lt;code&gt;RewriteCond&lt;/code&gt; directive, it will be replaced by the first capture from the regular expression for the corresponding &lt;code&gt;RewriteCond&lt;/code&gt; - ie. the RewriteCond above this condition.&lt;/p&gt;

&lt;h4&gt;Server Variables&lt;/h4&gt;

&lt;p&gt;This are given in the format...&lt;/p&gt;

&lt;pre&gt;%{VARIABLE_NAME}&lt;/pre&gt;

&lt;p&gt;The most commonly used Server variables are given below. To see the full list of available server variables, see the &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" class="external"&gt;apache manual page on &lt;code&gt;mod_rewrite&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;HTTP_USER_AGENT&lt;/dt&gt;&lt;dd&gt;A string containing the name of the browser the visitor is using. Eg 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8) Gecko/20051111 Firefox/1.5'&lt;/dd&gt;
&lt;dt&gt;HTTP_REFERER&lt;/dt&gt;&lt;dd&gt;The URL of the page from where the current visitor came form.&lt;/dd&gt;
&lt;dt&gt;REMOTE_ADDR&lt;/dt&gt;&lt;dd&gt;The IP of the visitor.&lt;/dd&gt;
&lt;dt&gt;REMOTE_HOST&lt;/dt&gt;&lt;dd&gt;The visitor's host name.&lt;/dd&gt;
&lt;dt&gt;SCRIPT_FILENAME&lt;/dt&gt;&lt;dd&gt;The filename of the page that was requested.&lt;/dd&gt;
&lt;dt&gt;QUERY_STRING&lt;/dt&gt;&lt;dd&gt;The queries that was passed to the page.&lt;/dd&gt;
&lt;dt&gt;REQUEST_URI&lt;/dt&gt;&lt;dd&gt;The called URI&lt;/dd&gt;
&lt;dt&gt;REQUEST_FILENAME&lt;/dt&gt;&lt;dd&gt;The path of the file - ie. the URL of the page without the domain.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3 id="condpattern"&gt;CondPattern&lt;/h3&gt;

&lt;p&gt;CondPattern is a regular expression - with some extra features...&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;!&lt;/dt&gt;&lt;dd&gt;You can prefix the '!' operator to any condition pattern to make RewriteCond &lt;strong class="highlight"&gt;return true if the pattern does NOT match.&lt;/strong&gt;&lt;/dd&gt;
&lt;dt&gt;&amp;lt;CondPattern&lt;/dt&gt;&lt;dd&gt;Compares the two string and &lt;strong class="highlight"&gt;return true if the TestString is lexically lower&lt;/strong&gt; than the given pattern&lt;/dd&gt;
&lt;dt&gt;&amp;gt;CondPattern&lt;/dt&gt;&lt;dd&gt;&lt;strong class="highlight"&gt;Return true if the TestString is lexically greater&lt;/strong&gt; than the given pattern.&lt;/dd&gt;
&lt;dt&gt;=CondPattern&lt;/dt&gt;&lt;dd&gt;&lt;strong class="highlight"&gt;Return true if the TestString and pattern are equal&lt;/strong&gt;.&lt;/dd&gt;
&lt;dt&gt;-d&lt;/dt&gt;&lt;dd&gt;Return true if TestString is a directory(folder)&lt;/dd&gt;
&lt;dt&gt;-f&lt;/dt&gt;&lt;dd&gt;Return true if TestString is a file&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Flags&lt;/h3&gt;

Flags are given inside squire brackets([FLAGS]). Two flags are available for RewriteCond...

&lt;dl&gt;
&lt;dt&gt;NC&lt;/dt&gt;&lt;dd&gt;&lt;strong class="highlight"&gt;No Case&lt;/strong&gt; - the case is ignored in matching.&lt;/dd&gt;
&lt;dt&gt;OR&lt;/dt&gt;&lt;dd&gt;Use this to combine two consecutive RewriteCond with a logical OR - if this is not given, an AND condition is implied&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;RewriteRule&lt;/h2&gt;

&lt;p&gt;Provides the rules for rewriting URLs.&lt;br /&gt;
&lt;em&gt;Syntax : &lt;/em&gt;RewriteRule &lt;em&gt;Pattern&lt;/em&gt; &lt;em&gt;Substitution&lt;/em&gt; [&lt;em&gt;Flags&lt;/em&gt;]&lt;br /&gt;
&lt;em&gt;Example: &lt;/em&gt; &lt;code&gt;RewriteRule ^/user/(.*) get_data.php?user=$1&lt;/code&gt; [NC]&lt;/p&gt;

&lt;p&gt;This is were the URL rewriting actually happens. This directive has &lt;strong class="highlight"&gt;two arguments plus an optional third&lt;/strong&gt; one.&lt;/p&gt;

&lt;h3&gt;Pattern&lt;/h3&gt;

&lt;p&gt;The &lt;strong class="highlight"&gt;pattern is a perl compactable regular expression used to match the current URL&lt;/strong&gt;. You can capture this by using the parenthesis ie. '(' and ')'. All text between these will be captured and could be used in the Substitution part of RewriteRule.&lt;/p&gt;

&lt;h3&gt;Substitution&lt;/h3&gt;

&lt;p&gt;The actual URL that is to be called is given here. This involves the &lt;strong class="highlight"&gt;path of the script and the parameters&lt;/strong&gt; that should be given to it. This supports all the special features of &lt;a href="#test_string"&gt;TestString&lt;/a&gt;(like $N, %N and Server variables) besides plain text. It also supports the '!','&amp;lt;','&amp;gt;' and '=' prefix operators as we saw in the &lt;a href="#condpattern"&gt;CondPattern&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Flags&lt;/h3&gt;

&lt;p&gt;Flats are the third argument to the RewriteRule directive. This should be given inside square brackets([FLAGS]). Flags is a &lt;strong class="highlight"&gt;comma-separated list&lt;/strong&gt; of these flags...&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;R - Redirect&lt;/dt&gt;
&lt;dd&gt;The URL in the address bar will change if this flag is used - as the server will use the HTTP response of 302 (MOVED TEMPORARILY) when redirecting the page.&lt;/dd&gt;
&lt;dt&gt;F - Forbidden&lt;/dt&gt;
&lt;dd&gt;Using this flag immediately sends a HTTP response of 403 (FORBIDDEN). Use this flag with appropriate RewriteConds to conditionally block some URLs - for example &lt;a href="http://httpd.apache.org/docs/2.0/misc/rewriteguide.html#access"&gt;image hot linking from external sites&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;G - Gone&lt;/dt&gt;
&lt;dd&gt;Sends a HTTP response header of 410 (GONE). This flag is used to mark pages which no longer exist as gone.&lt;/dd&gt;
&lt;dt&gt;L - Last&lt;/dt&gt;
&lt;dd&gt;Stop the rewriting process in this rule and don't apply any more rules. Think Perl's &lt;code&gt;last&lt;/code&gt; command or the &lt;code&gt;break&lt;/code&gt; command of C.&lt;/dd&gt; 
&lt;dt&gt;NC - No Case&lt;/dt&gt;
&lt;dd&gt;Makes the Pattern case-insensitive.&lt;/dd&gt;
&lt;dt&gt;QSA - Query String Append&lt;/dt&gt;
&lt;dd&gt;This flag will append the query string from the current URL to the substitution string.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Eg. &lt;/p&gt;

&lt;pre&gt;
RewriteRule ^/user/(.*?)/ get_data.php?user=$1 [NC,QSA]
&lt;/pre&gt;

&lt;p&gt;Please keep in mind that this is just the most commonly used Flags - for the full list, go to the &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" class="external"&gt;apache manual page on &lt;code&gt;mod_rewrite&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy rewriting...&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mod_rewrite" rel="tag"&gt;mod_rewrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115359356038251548?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115359356038251548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115359356038251548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115359356038251548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115359356038251548'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/modrewrite-directives-rewritecond-and.html' title='mod_rewrite Directives - RewriteCond and RewriteRule'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115315734445499540</id><published>2006-07-17T22:54:00.000+05:30</published><updated>2006-07-23T00:15:19.586+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>mod_rewrite module for Apache</title><content type='html'>&lt;p class="intro"&gt;Along with the ability to password protect folders on the web server, another major use of the .htaccess file is the ability to 'rewrite' the &lt;abbr title="Uniform Resource Locator"&gt;URL&lt;/abbr&gt;. This will let you &lt;strong class="highlight"&gt;create more structured and easy to remember URLs&lt;/strong&gt;. This module will &lt;strong class="highlight"&gt;redirect the user to one page while showing another URL&lt;/strong&gt; in the address bar.&lt;/p&gt;

&lt;h2&gt;Application of &lt;code&gt;mod_rewrite&lt;/code&gt;&lt;/h2&gt;

&lt;h3&gt;Used in del.icio.us&lt;/h3&gt;

&lt;p&gt;This method is used to great effect in sites like &lt;a href="http://en.wikipedia.com/" class="external"&gt;Wikipedia&lt;/a&gt; and &lt;a href="http://del.icio.us/" class="external"&gt;Del.icio.us&lt;/a&gt;. For example let us take a del.icio.us URL...&lt;/p&gt;

&lt;pre&gt;http://del.icio.us/binblog/javascript+ajax&lt;/pre&gt;

&lt;p&gt;This does not mean that there is a folder called &lt;code&gt;binblog&lt;/code&gt; in the root of del.icio.us site. Nor does this mean that there is a file with the name '&lt;code&gt;javascript+ajax&lt;/code&gt;'. This trick is done using &lt;strong class="highlight"&gt;URL manipulation&lt;/strong&gt;. In this example, the URL can be split into three parts....&lt;/p&gt;

&lt;pre&gt;
http://del.icio.us/binblog/javascript+ajax
         ^^^         ^^^          ^^^           
      Site URL     User ID        Tags
    &lt;em&gt;del.icio.us&lt;/em&gt;    &lt;em&gt;binblog&lt;/em&gt;    &lt;em&gt;javascript&lt;/em&gt; and &lt;em&gt;ajax&lt;/em&gt;
&lt;/pre&gt;

&lt;p&gt;The actual URL being called &lt;em&gt;may&lt;/em&gt; be something like...&lt;/p&gt;

&lt;pre&gt;http://del.icio.us/show_bookmarks.php?format=html&amp;amp;user=binblog&amp;amp;tags=javascript+ajax&lt;/pre&gt;

&lt;p&gt;So how do the user see one URL and the server use another? That is the subtle art of URL manipulation. Before we see the details of this method, a small warning. You may not be able to get the concept at the first glance - it may be sometime before you understand mod_rewrite completely. So - don't give up, grasshopper. As one person puts it...&lt;/p&gt;

&lt;blockquote cite="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html"&gt;Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo.&lt;br /&gt;
&lt;cite&gt;Brian Moore&lt;/cite&gt;&lt;/blockquote&gt;

&lt;p&gt;Before going any further, let me also warn you that &lt;strong class="highlight"&gt;you must know regular expression&lt;/strong&gt; to understand how this works. OK, now we can go further.&lt;/p&gt;


&lt;h2&gt;Using mod_rewrite&lt;/h2&gt;

&lt;p&gt;First we need a regular expression to &lt;strong class="highlight"&gt;extract the necessary elements from the URL&lt;/strong&gt;. We will ignore the site URL(http://del.icio.us/) part. The URL is &lt;/p&gt;

&lt;pre&gt;http://del.icio.us/binblog/javascript+ajax&lt;/pre&gt;

&lt;p&gt;The Regualar Expression is...&lt;/p&gt;

&lt;pre&gt;^([^\/]+)\/([^\/]+)$&lt;/pre&gt;

&lt;p&gt;The extracted strings will be...&lt;/p&gt;

&lt;p&gt;$1 = binblog (First Match)&lt;br /&gt;
$2 = javascript+ajax (Second Match)&lt;/p&gt;

&lt;p&gt;To make this effect using the &lt;code&gt;mod_rewrite&lt;/code&gt; module, open the &lt;strong class="highlight"&gt;.htaccess file&lt;/strong&gt; your &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;favorite editor&lt;/a&gt; and type in the following lines...&lt;/p&gt;

&lt;pre&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
RewriteRule ^([^\/]+)\/([^\/]*)$ show_bookmarks.php?format=html&amp;amp;user=$1&amp;amp;tags=$2
&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;

&lt;p&gt;Now to test this, &lt;strong class="highlight"&gt;create a file called 'show_bookmarks.php' in the document root&lt;/strong&gt; of your web server. I hope that I don't have to tell you that you need a &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;LAMP&lt;/a&gt; setup to do this. You will &lt;strong&gt;need atleast Apache and PHP&lt;/strong&gt; to do this.&lt;/p&gt;

&lt;p&gt;After creating the 'show_bookmarks.php' file, enter the following code into it...&lt;/p&gt;

&lt;pre&gt;&amp;lt;pre&amp;gt;&amp;lt;?php print_r($_GET); ?&amp;gt;&amp;lt;/pre&amp;gt;&lt;/pre&gt;

&lt;p&gt;Since this is just a test, I did not bother with all the HTML tags like &amp;lt;html&amp;gt;,&amp;lt;body&amp;gt; etc. But if you are a sticker for the rules, go ahead and make the full document.&lt;/p&gt;

&lt;p&gt;Next, open this URL in the browser...&lt;/p&gt;

&lt;pre&gt;http://localhost/show_bookmarks.php?format=html&amp;amp;user=binblog&amp;amp;tags=javascript+ajax&lt;/pre&gt;

&lt;p&gt;You should get this result - the contests of the GET request...&lt;/p&gt;

&lt;pre&gt;Array
(
    [format] =&gt; html
    [user] =&gt; binblog
    [tags] =&gt; javascript ajax
)&lt;/pre&gt;

&lt;p&gt;Now try it with the URL...&lt;/p&gt;

&lt;pre&gt;http://localhost/binblog/javascript+ajax&lt;/pre&gt;

&lt;p&gt;If everything went well, this also should have the same output - that is...&lt;/p&gt;

&lt;pre&gt;Array
(
    [format] =&gt; html
    [user] =&gt; binblog
    [tags] =&gt; javascript ajax
)&lt;/pre&gt;

&lt;h2&gt;Explanation&lt;/h2&gt;

&lt;h3&gt;IfModule&lt;/h3&gt;

&lt;pre&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;/pre&gt;

&lt;p&gt;This is an &lt;code&gt;if&lt;/code&gt; condition - the code inside these tags will only be executed if the &lt;code&gt;mod_rewrite&lt;/code&gt; module is loaded with apache.&lt;/p&gt;

&lt;h3&gt;RewriteEngine&lt;/h3&gt;

&lt;pre&gt;RewriteEngine On&lt;/pre&gt;

&lt;p&gt;The 'RewriteEngine' directive enables or disables runtime rewriting engine. Here we are &lt;strong class="highlight"&gt;turning on the re-write Engine&lt;/strong&gt;. Use the value 'off' if you want to turn of all rewriting. &lt;/p&gt;

&lt;h3&gt;RewriteRule&lt;/h3&gt;
&lt;pre&gt;RewriteRule ^([^\/]+)\/([^\/]*)$ show_bookmarks.php?format=html&amp;amp;user=$1&amp;amp;tags=$2&lt;/pre&gt;

&lt;p&gt;This is the important statement. The proper syntax for RewriteRule directive is given below...&lt;/p&gt;

&lt;pre&gt;RewriteRule &lt;em&gt;Pattern&lt;/em&gt; &lt;em&gt;Substitution&lt;/em&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;strong class="highlight"&gt;&lt;em&gt;Pattern&lt;/em&gt; is a &lt;a href="http://www.perldoc.com/perl5.6.1/pod/perlre.html" class="external"&gt;perl compactable regular expression&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Substitution&lt;/em&gt; part of the rewriting rule is the string which &lt;strong class="highlight"&gt;replaces the original URL&lt;/strong&gt; for which &lt;em&gt;Pattern&lt;/em&gt; has matched. You can use &lt;code&gt;$n&lt;/code&gt; to insert regular expression captured strings - $1 is the first capture, $2 will be the second and so on.&lt;/p&gt;

&lt;p&gt;One than one line of &lt;code&gt;RewriteRule&lt;/code&gt; can be used. The &lt;strong class="highlight"&gt;order of useage is important&lt;/strong&gt; as the second line will use the result of the first substitution as its input&lt;/p&gt;

&lt;pre&gt;&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;

&lt;p&gt;End of the &lt;code&gt;if&lt;/code&gt; condition we started earlier.&lt;/p&gt;

&lt;h2&gt;Conditions&lt;/h2&gt;

&lt;p&gt;Some of you must have already seen a big problem in this approach. To see this problem, create a folder called, say, 'data' in your document root. Now create a file called 'something.txt' in this folder. Then try to access this folder from a browser using the URL.&lt;/p&gt;

&lt;pre&gt;http://localhost/data/&lt;/pre&gt;

&lt;p&gt;Now you see the problem, don't you? The above URL will result in the output...&lt;/p&gt;

&lt;pre&gt;Array
(
    [format] =&gt; html
    [user] =&gt; data
    [tags] =&gt; 
)
&lt;/pre&gt;

&lt;p&gt;Our &lt;code&gt;mod_rewrite&lt;/code&gt; rules have &lt;strong class="highlight"&gt;captured the URL of a valid file&lt;/strong&gt; along with the other URLs. To solve this problem, we will use a &lt;strong class="highlight"&gt;feature of mod_rewrite called Conditions&lt;/strong&gt;. Insert these lines in the &lt;code&gt;.htaccess&lt;/code&gt; file.&lt;/p&gt;

&lt;pre&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
&lt;span class="special"&gt;RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f&lt;/span&gt;
RewriteRule ^([^\/]+)\/([^\/]*)$ show_bookmarks.php?format=html&amp;amp;user=$1&amp;amp;tags=$2
&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;

&lt;p&gt;See the line &lt;code&gt;RewriteCond %{REQUEST_FILENAME} !-d&lt;/code&gt;? This will make sure that the &lt;strong class="highlight"&gt;requested file is not a directory&lt;/strong&gt;. The line &lt;code&gt;RewriteCond %{REQUEST_FILENAME} !-f&lt;/code&gt; will &lt;strong class="highlight"&gt;prevent files from being caught&lt;/strong&gt; by the rewrite rule. The algorithm of these statements will look something like this...&lt;/p&gt;

&lt;pre&gt;if( 'Requested Filename' IS NOT Directory ) {
 if( 'Requested Filename' IS NOT File ) {
  Rewrite the URL.
 }
}&lt;/pre&gt;

&lt;p&gt;I hope you got the logic behind this - it took me a while to understand. Anyway, as I said earlier, don't be dissappointed if you don't get it at the first try - there is a lot of black magic involved.&lt;/p&gt;

&lt;p&gt;Now try to access the file we created a little while back...&lt;/p&gt;

&lt;pre&gt;http://localhost/data/something.txt&lt;/pre&gt;

&lt;p&gt;You will see that it works perfectly(hopefully). Now try...&lt;/p&gt;

&lt;pre&gt;http://localhost/data/&lt;/pre&gt;

&lt;p&gt;Again the folder is being accessed. Now try a URL that must be re-written...&lt;/p&gt;

&lt;pre&gt;http://localhost/binblog/javascript+ajax&lt;/pre&gt;

&lt;p&gt;If all goes well, this URL will be caught by our system and will be redirected to the &lt;code&gt;show_bookmarks.php&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;More about &lt;code&gt;mod_rewrite&lt;/code&gt; in the &lt;a href="http://binnyva.blogspot.com/2006/07/modrewrite-directives-rewritecond-and.html" class="internal" title="mod_rewrite Directives - RewriteCond and RewriteRule"&gt;next post(mod_rewrite Directives - RewriteCond and RewriteRule).&lt;/a&gt;&lt;/p&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/mod_rewrite" rel="tag"&gt;mod_rewrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/url" rel="tag"&gt;url&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115315734445499540?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115315734445499540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115315734445499540' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115315734445499540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115315734445499540'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/modrewrite-module-for-apache.html' title='mod_rewrite module for Apache'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115272831224366466</id><published>2006-07-13T23:44:00.000+05:30</published><updated>2006-07-12T23:48:32.256+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>New Blog - BinnyVA</title><content type='html'>&lt;p class="intro"&gt;After &lt;a title="Moving the Blog from Blogspot" href="http://binnyva.blogspot.com/2006/03/moving-blog-from-blogspot.html" class="internal"&gt;much waiting&lt;/a&gt; I finally have a blog in &lt;a title="WordPress - PHP Blogging tool." href="http://wordpress.org/" class="external"&gt;WordPress&lt;/a&gt;. So currently I have two blogs - &lt;a title="Bin-Blog" href="http://binnyva.blogspot.com/" class="internal"&gt;Bin-Blog&lt;/a&gt; and &lt;a href="http://blog.binnyva.com/" class="mypages"&gt;BinnyVA&lt;/a&gt;. I plan to use this blog(Blogger) as a professional blog and the other one(WordPress) as a more personal one. That blog will have a lower post frequency - around one per week. So from now on, all post that would have been tagged with 'Personal' will be kept in the opther blog - this blog will be used exclusively for professional content.&lt;/p&gt;

&lt;p&gt;Another plus side of using that blog is that I can get an opertunity to sudy Wordpress - one of the most succesful PHP project of these times. Knowing what makes it tick will do me much good - I will be able to port my many programs as WordPress plugins. I actually plan to do this with Online Sudoku.&lt;/p&gt;

&lt;p&gt;So this post will be the last post in this blog to be &lt;a href="http://del.icio.us/binblog/personal/"&gt;tagged with 'personal'&lt;/a&gt;. If you want more posts of that genre, go over to my &lt;a href="http://blog.binnyva.com/" class="mypages blog"&gt;new blog&lt;/a&gt;.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wordpress" rel="tag"&gt;wordpress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115272831224366466?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115272831224366466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115272831224366466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115272831224366466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115272831224366466'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/new-blog-binnyva.html' title='New Blog - BinnyVA'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115246400874165519</id><published>2006-07-09T22:01:00.000+05:30</published><updated>2006-07-09T22:23:28.756+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Football Vs JavaScript</title><content type='html'>&lt;h2&gt;The Stars&lt;/h2&gt;

&lt;h3&gt;Football&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Zinedine Zidane&lt;/li&gt;
&lt;li&gt;Ronaldo&lt;/li&gt;
&lt;li&gt;Wayne Rooney&lt;/li&gt;
&lt;li&gt;Christano Ronaldo&lt;/li&gt;
&lt;li&gt;Thierry Henry&lt;/li&gt;
&lt;li&gt;And more...&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;JavaScript&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.quirksmode.org/" class="external"&gt;Peter Paul Kosh(PPK)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simon.incutio.com/" class="external"&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.domscripting.com/" class="external"&gt;Jeremy Keith&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crockford.com/" class="external"&gt;Douglas Crockford&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dustindiaz.com/" class="external"&gt;Dustin Diaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;And more...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Teams&lt;/h2&gt;

&lt;h3&gt;Football&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Real Madrid&lt;/li&gt;
&lt;li&gt;Manchester United&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;JavaScript&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Yahoo&lt;/li&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Why Football is better than JavaScript&lt;/h2&gt;

&lt;p&gt;Football has a &lt;strong&gt;fixed number&lt;/strong&gt; of Referees and Lines men.&lt;br /&gt;
In JavaScript, we get a new referee every time a new browser is made and a new lines man every time a new version is released.&lt;/p&gt;

&lt;p&gt;In football, if the referee calls a goal, it is a goal and if he calls it a foul it is a foul.&lt;br /&gt;
In JavaScript, one referee will call an event a goal while another will call the &lt;strong&gt;same event&lt;/strong&gt; a foul.&lt;/p&gt;

&lt;p&gt;In football, if you made a foul, the referee will send you out.&lt;br /&gt;
In JavaScript, if that was the case, &lt;code&gt;document.write&lt;/code&gt; and &lt;code&gt;eval&lt;/code&gt; would be a thing of the past.&lt;/p&gt;

&lt;p&gt;In football, if some players are playing a standard game, no referee will go around trying to make their lives a living hell.&lt;br /&gt;
In JavaScript, IE.&lt;/p&gt;

&lt;p&gt;Ronaldo makes more money and more fans than &lt;a href="http://www.quirksmode.org/" class="external"&gt;PPK&lt;/a&gt; can ever hope for.&lt;/p&gt;


&lt;h2&gt;Why JavaScript is better than Football&lt;/h2&gt;

&lt;p&gt;Anyone who knows JavaScript can compete in the World Wide Web cup.&lt;br /&gt;
Anyone who knows Football can dream of compeating in the World cup.&lt;/p&gt;

&lt;p&gt;In football, the referees will only check how you play - they don't help you.&lt;br /&gt;
In JavaScript, Firefox with &lt;a href="http://chrispederick.com/work/webdeveloper/" class="external" title="Web Developer Extension for Firefox"&gt;some&lt;/a&gt; &lt;a href="http://www.joehewitt.com/software/firebug/" class="external" title="Firebug - JavaScript Debugging"&gt;extensions&lt;/a&gt; to help you to 'play' better.&lt;/p&gt;

&lt;p&gt;Using libraries in JavaScript is like having Robotic legs in football. Using these you can run faster, shoot straighter and more accurately than you could hope for using your natural limbs. And most of the referee will stay happy as long as you use these robotic legs.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/football" rel="tag"&gt;football&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/humor" rel="tag"&gt;humor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115246400874165519?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115246400874165519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115246400874165519' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115246400874165519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115246400874165519'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/football-vs-javascript.html' title='Football Vs JavaScript'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115221001621131804</id><published>2006-07-06T23:45:00.000+05:30</published><updated>2006-07-06T23:51:17.183+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Password protecting a folder using .htaccess</title><content type='html'>&lt;p class="intro"&gt;The password protection feature of '.htaccess' can be used to &lt;strong class="highlight"&gt;secure entire folders or files on your web server&lt;/strong&gt;. This is much easier than having to code the entire authentication system by hand.&lt;/p&gt;

&lt;p&gt;This feature had been a life saver for me on several occasions. One time a project I was working on was overdue and I still had to do the admin side of the system. I did not have the time to create an authentication system at that stage. So I made a .htaccess file and used it to password protect the whole admin folder. What would have take me hours was over in a few seconds. .htaccess saves the day. Afterwards, I had to code the authentication system myself in PHP because the project needed some features like multiple admins, password retrieval etc. Anyway, it saved me from work the first day.&lt;/p&gt;

&lt;h2&gt;Try it out...&lt;/h2&gt;
&lt;p&gt;Let's say that we are trying to protect the '/var/www/htdocs/top_secret' folder. We will make this folder inaccessible to all but our user 'james_bond'. He will access it using the highly secure and unguessable password 'secret'.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Username : james_bond&lt;/li&gt;
&lt;li&gt;Password : secret&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;First we go to the folder we are protecting(ie '/var/www/htdocs/top_secret') and &lt;strong class="highlight"&gt;create the .htaccess file in this directory&lt;/strong&gt;. Put these lines in the .htaccess file...&lt;/p&gt;

&lt;pre&gt;
AuthUserFile /var/www/safe/.htpasswd
AuthGroupFile /dev/null
AuthName TopSecret
AuthType Basic

require user james_bond
&lt;/pre&gt;

&lt;p&gt;Open the location /var/www/safe/(create this folder if it doesn't exist) and &lt;strong class="highlight"&gt;create a file called '.htpasswd'&lt;/strong&gt; with this line...&lt;/p&gt;

&lt;pre&gt;james_bond:tbuUG6kXINUbo&lt;/pre&gt;

&lt;p&gt;Fire up your favorite &lt;strong class="highlight"&gt;browser&lt;/strong&gt;(it should be Firefox - anything less is sacrilege) and point it to the &lt;strong class="highlight"&gt;location &lt;a href="http://127.0.0.1/top_secret" class="external" title="This link will work only if you are running a web server."&gt;http://127.0.0.1/top_secret&lt;/a&gt;&lt;/strong&gt;. If all went well, &lt;strong class="highlight"&gt;you should see a Username/Password prompt&lt;/strong&gt;. You will only be allowed in if you provide the valid username and password(james_bond/secret).&lt;/p&gt;

&lt;h2&gt;Explanation&lt;/h2&gt;

&lt;h3&gt;.htaccess&lt;/h3&gt;

&lt;pre&gt;AuthUserFile /var/www/safe/.htpasswd
AuthGroupFile /dev/null
AuthName TopSecret
AuthType Basic

require user james_bond&lt;/pre&gt;

&lt;p&gt;The first line says the &lt;strong class="highlight"&gt;location of the file with the username and password&lt;/strong&gt;. For security reasons, this file is kept outside the document root. We don't want any yahoos with a web browser accessing our .htpasswd file. You will have to change this to the location where you kept your .htpasswd file.&lt;/p&gt;

&lt;p&gt;The second line is the full path of a text file containing the list of user groups that should be allowed in. This line is not relevent in our context as we don't have any groups - we are just pointing it to a null file.&lt;/p&gt;

&lt;p&gt;The third line 'AuthName TopSecret' is the &lt;strong class="highlight"&gt;name of the area you are protecting&lt;/strong&gt;. You can change this as you see fit. This text will appear in the prompt for the username and password - like this...&lt;/p&gt;

&lt;pre&gt;Enter username and password for "&lt;strong&gt;TopSecret&lt;/strong&gt;" at ...&lt;/pre&gt;

&lt;p&gt;The fourth line 'AuthType Basic' is used because we are using the &lt;strong class="highlight"&gt;&lt;a href="http://en.wikipedia.org/wiki/Basic_authentication_scheme"&gt;basic authentication scheme&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The last line 'require user james_bond' says that &lt;strong class="highlight"&gt;only user 'james_bond' can enter&lt;/strong&gt;. If you have multiple users in the .htpasswd file, you can use the line...&lt;/p&gt;

&lt;pre&gt;require valid-user&lt;/pre&gt;

&lt;p&gt;Now any user in the .htpasswd file can enter.&lt;/p&gt;

&lt;h3&gt;.htpasswd&lt;/h3&gt;

This file is a list of all users in the format...
&amp;lt;USERNAME&amp;gt;:&amp;lt;PASSWORD&amp;gt;

&lt;p&gt;The &lt;strong class="highlight"&gt;username is given in plain text while the password is encrypted using the 'crypt' function&lt;/strong&gt;. You can generate this password using the 'htpasswd' command in linux. For example running the command...&lt;/p&gt;

&lt;pre&gt;htpasswd -c .htpasswd james_bond&lt;/pre&gt;

&lt;p&gt;will ask for a password. Once the password is provided, the program will create the file '.htpasswd' in the current folder with the user 'james_bond' and the given password.&lt;/p&gt;

&lt;p&gt;If you are not on linux or if you are afraid of typing commands in the console, you can create the password using one of the many &lt;strong class="highlight"&gt;online password generators&lt;/strong&gt; out there...&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tools.dynamicdrive.com/password/"&gt;.htaccess Password Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kxs.net/support/htaccess_pw.html"&gt;Generate your encrypted htaccess password&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.webmaster-toolkit.com/htaccess-generator.shtml"&gt;.htaccess Generator&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Or if you want to &lt;strong class="highlight"&gt;create the password yourself&lt;/strong&gt;, the &lt;abbr title="PHP : Hypertext Preprocessor"&gt;PHP&lt;/abbr&gt; code is given below...&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;$username = 'binny';
$password = '';

//Create a random salt
$chars = str_shuffle( "012456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&amp;amp;*()_+=-`[];',./\{}:\"&amp;lt;&amp;gt;?|" );
$salt  = $chars[rand(0,strlen($chars))] . $chars[rand(0,strlen($chars))];

//Print the username:password pair
print $username . ':' . crypt($password,$salt);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you don't understand the above code, just use this...&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;crypt('password');&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will return the encrypted password. For more information, see the PHP manual entry on &lt;a href="http://php.net/crypt"&gt;crypt&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Problems&lt;/h2&gt;

&lt;p&gt;No matter what you do, you can't get the username/password prompt. You just go to the page directly.
This is because your apache server is not reading the .htaccess file. Open the server configuration file(usually /etc/httpd/conf/httpd.conf). Search for the text '&lt;code&gt;AllowOverride&lt;/code&gt;'. Find the AllowOverride setting for the document root folder(something like /var/www/htdocs). Change this line to...&lt;/p&gt;

&lt;pre&gt;AllowOverride All&lt;/pre&gt;

&lt;p&gt;This setting will make sure that the apache server reads and uses the .htaccess file. After making this change, restart the server with the command '&lt;code&gt;service httpd restart&lt;/code&gt;'.&lt;/p&gt;

&lt;p&gt;For more information, see the &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_auth.html#authgroupfile"&gt;apache documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/htaccess" rel="tag"&gt;htaccess&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115221001621131804?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115221001621131804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115221001621131804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115221001621131804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115221001621131804'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/password-protecting-folder-using.html' title='Password protecting a folder using .htaccess'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115195124944580233</id><published>2006-07-03T23:51:00.000+05:30</published><updated>2006-07-04T00:03:03.830+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Status Update</title><content type='html'>&lt;p class="intro"&gt;Since it has been some time since the &lt;a href="http://binnyva.blogspot.com/2005/07/update-sudoku-jasfer-and-more.html" class="internal" title="Update - Jasfer, Sudoku and More."&gt;last update&lt;/a&gt;, I am thinking that I would post another status update. I plan to do this once every six months. This is basically the current status of my various sites and projects.&lt;/p&gt;

&lt;p&gt;Before I start, I want to congratulate Jansan on his new blog - &lt;a href="http://codlib.blogspot.com" class="external" title="blogging about tech, the tech, and everything tech, for techno addicts!"&gt;Techno WeBlog&lt;/a&gt;. I am hoping that this will encourage &lt;a href="http://www.panikulangara.com/kerala/" class="external"&gt;Gladwin&lt;/a&gt; to update his site. His site has been around for some time now - but the meaning of the word 'content' is still foreign to him.&lt;/p&gt;

&lt;h2&gt;Sites&lt;/h2&gt;

&lt;h3&gt;&lt;a href="http://www.bin-co.com/" class="mypages" title="Codes and Tutorials for Scripting Languages languages like Perl, Tcl/Tk, PHP etc."&gt;Bin-Co.com&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This is my site about Web Development and Scripting Languages. The primary languages of intrest are...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/perl/" class="mypages" title="Perl Page in Bin-Co"&gt;Perl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/tcl/" class="mypages" title="Tcl/Tk - Tool Command Language/ToolKit"&gt;Tcl/Tk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/php/" class="mypages" title="PHP Scripting language for Web Development"&gt;PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/javascript/" class="mypages" title="JavaScript - the hottest language today."&gt;JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/html/" class="mypages" title="HTML - HyperText Markup Language"&gt;HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bin-co.com/css/coding_style.php"&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I plan to add other languages like &lt;a href="http://binnyva.blogspot.com/2005/09/learning-ruby.html" class="internal" title="Learning Ruby"&gt;Ruby&lt;/a&gt; and Python soon.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://www.openjs.com/" class="mypages" title="JavaScript - Opened"&gt;OpenJS&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This site has not picked up yet. I still have a lot of time to fill it up with content. I recently posted a published a &lt;a href="http://www.openjs.com/scripts/jx/" class="mypages" title="jx - Ajax Library"&gt;new version of jx Ajax library&lt;/a&gt; there. Be sure to check out the &lt;a href="http://www.openjs.com/scripts/jx/jx.php" class="mypages"&gt;explanation page&lt;/a&gt; - I put a lot of work into it.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://binnyva.blogspot.com/" class="internal" title="This blog"&gt;Bin-Blog&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Going steady at around 50 unique visits per day. Not much improvement over the &lt;a href="http://binnyva.blogspot.com/2006/05/100th-post.html" class="internal" title="100th Post"&gt;last&lt;/a&gt; two months. May be because the &lt;a href="http://binnyva.blogspot.com/2006/05/rest-from-blogging.html" class="internal" title="Rest from Blogging"&gt;posting frequency went down&lt;/a&gt;. I try to post once every three days.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://www.binnyva.com/" class="mypages"&gt;BinnyVA.com&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;My new site - I plan to use this as a personal site. I will be porting the &lt;a href="http://www.geocities.com/binnyva/" class="mypages"&gt;BinnyVA&lt;/a&gt; site to it. I will be able to make some subdomains for all the &lt;a href="http://www.geocities.com/binnyva/bible/" class="mypages"&gt;sub sites&lt;/a&gt;. Also, I plan to implement my &lt;a href="http://binnyva.blogspot.com/2006/03/moving-blog-from-blogspot.html" class="internal" title="Moving the Blog from Blogspot"&gt;old idea of moving to WordPress&lt;/a&gt; here - I am thinking about using a WordPress blog at, say, &lt;a href="http://blog.binnyva.com/" class="mypages" title="BinnyVA - Me thinks..."&gt;http://blog.binnyva.com/&lt;/a&gt;(don't exist right now). My plan is to use it for more personal blogging - about my life, &lt;a href="http://www.panikulangara.com/kerala/" class="external" title="Gladwin's Page on Kerala"&gt;Kerala&lt;/a&gt;, etc.&lt;/p&gt;

&lt;h3&gt;The Oldies&lt;/h3&gt;

&lt;p&gt;The old sites like &lt;a href="http://www.geocities.com/binnyva/" class="mypages"&gt;my geocities&lt;/a&gt; and &lt;a href="http://binnyva.tripod.com/" class="mypages"&gt;tripod&lt;/a&gt; sites still exists. The geocities site still gets a lot of traffic - most of the google &lt;acronym title="Search Engine Result Pages"&gt;SERP&lt;/acronym&gt;s are still pointing to these old pages.&lt;/p&gt;


&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115195124944580233?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115195124944580233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115195124944580233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115195124944580233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115195124944580233'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/07/status-update.html' title='Status Update'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115151828936990608</id><published>2006-06-28T23:33:00.000+05:30</published><updated>2006-06-28T23:41:29.413+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Configuring Apache with .htaccess</title><content type='html'>&lt;p class="intro"&gt;.htaccess files are used by apache to enable the web developer to specify the server configure for the folder that the .htaccess file recides in.&lt;/p&gt;

&lt;blockquote cite="http://httpd.apache.org/docs/1.3/howto/htaccess.html"&gt;.htaccess files (or "distributed configuration files") provide a way to make configuration changes on a per-directory basis. A file, containing one or more configuration directives, is placed in a particular document directory, and the directives apply to that directory, and all subdirectories thereof.&lt;br /&gt;
&lt;cite&gt;&lt;a href="http://httpd.apache.org/docs/1.3/howto/htaccess.html" class="external"&gt;Apache Manual&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;

&lt;p&gt;.htaccess is a very powerful way to control the server on a &lt;strong&gt;folder-to-folder basis&lt;/strong&gt;. But if possible, it is advised to &lt;strong&gt;use the main server configuration file&lt;/strong&gt;(httpd.conf). The apache server can be configured in a folder by folder fashion in the &lt;strong&gt;&amp;lt;directory&amp;gt; section&lt;/strong&gt; of the main configuration file. There are two disadvantages of using .htaccess file rather than the main configuration file(httpd.conf) are...&lt;/p&gt;

&lt;h2&gt;Disadvantages of .htaccess&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;Performance&lt;/dt&gt;
&lt;dd&gt;Apache will &lt;strong&gt;look for .htaccess file in every parent folder&lt;/strong&gt; of the file whenever a request is made for the file. So if you turn on the .htaccess file support, there will be a performance hit - even if you don't use them - as apache will search for the files anyway.&lt;/dd&gt;

&lt;dt&gt;Security&lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Anyone&lt;/strong&gt; with access to the document root(through &lt;abbr title="File Transfer Protocol"&gt;FTP&lt;/abbr&gt; or Shell Access) will be able to &lt;strong&gt;modify the server configuration&lt;/strong&gt;. You don't want to do that.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Advantages of .htaccess&lt;/h2&gt;

&lt;p&gt;If we have a &lt;strong&gt;large site&lt;/strong&gt; with a lot of directory based options, the &lt;strong&gt;&lt;code&gt;httpd.conf&lt;/code&gt; file&lt;/strong&gt; will soon become a big and &lt;strong&gt;unmaintainable&lt;/strong&gt; file. Putting the configuration of each directory in that directory(as in the case of .htaccess) is a more maintenance friendly solution.&lt;/p&gt;

&lt;p&gt;You may &lt;strong&gt;not have access to the main server configuration file&lt;/strong&gt;. If your site is hosted on a shared server(like &lt;a href="http://www.openjs.com/" class="mypages" title="OpenJS.com"&gt;mine&lt;/a&gt; is), this is often the case. In such cases .htaccess is a life saver.&lt;/p&gt;

&lt;p&gt;If you make a change to the &lt;code&gt;httpd.conf&lt;/code&gt;, you must &lt;strong&gt;restart Apache&lt;/strong&gt; for it to take effect. On the other hand, &lt;code&gt;.htaccess&lt;/code&gt; file have no such problems.&lt;/p&gt;

&lt;p&gt;More on .htaccess in the next post.&lt;/p&gt;

&lt;h2&gt;Reference&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://httpd.apache.org/docs/1.3/howto/htaccess.html" class="external"&gt;Apache Documentation for .htaccess&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://brainstormsandraves.com/archives/2005/10/09/htaccess/" class="external"&gt;Behind the Scenes with Apache’s .htaccess&lt;/a&gt; - Lots of .htaccess reference links.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cooletips.de/htaccess/" class="external"&gt;.htaccess file generator&lt;/a&gt; - Make a .htaccess file based on your specifications.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tomrafteryit.net/category/htaccess/" class="external"&gt;Many articles about .htaccess by Tom Raftery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.evolt.org/article/A_Cheesy_htaccess_Tutorial/18/226/" class="external"&gt;A Cheesy .htaccess Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.javascriptkit.com/howto/htaccess.shtml" class="external"&gt;Comprehensive guide to .htaccess&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/htaccess" rel="tag"&gt;htaccess&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115151828936990608?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115151828936990608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115151828936990608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115151828936990608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115151828936990608'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/configuring-apache-with-htaccess.html' title='Configuring Apache with .htaccess'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115117030201703084</id><published>2006-06-24T22:49:00.000+05:30</published><updated>2006-06-24T23:07:55.606+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='sites'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google AdSense showing Error</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/674/1162/1600/Adsense%20Dead.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/674/1162/320/Adsense%20Dead.png" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p class="intro"&gt;I just tried to access my AdSense account - but had a rude shock when I found an error message instead of the usual login page. And a very cool error message at that - the message...&lt;/p&gt;

&lt;blockquote&gt;The Google AdSense website is temporarily unavailable. Please try back later.&lt;br /&gt;
We apologize for any inconvenience.&lt;/blockquote&gt;

&lt;p&gt; ... in 25 different languages.&lt;/p&gt;

&lt;p&gt;I tired to access &lt;a href="https://www.google.com/adsense/?hl=en_US&amp;sourceid=aso&amp;subid=us-et-ads" class="external"&gt;https://www.google.com/adsense/?hl=en_US&amp;sourceid=aso&amp;subid=us-et-ads&lt;/a&gt; when I got the error. The URL of the page is given as &lt;a href="http://www.google.com/errors/asfe/system_down.html" class="external"&gt;http://www.google.com/errors/asfe/system_down.html&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Google having trouble? Hope they fix it soon - there is a limit to the time I can endure being away from my AdSense stats. I am having withdrawal symptoms already!&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/google" rel="tag"&gt;google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/adsense" rel="tag"&gt;adsense&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115117030201703084?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115117030201703084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115117030201703084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115117030201703084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115117030201703084'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/google-adsense-showing-error.html' title='Google AdSense showing Error'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115082815570167941</id><published>2006-06-20T23:54:00.000+05:30</published><updated>2006-06-20T23:59:15.726+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Multiple Site in Apache with Virtual Hosts</title><content type='html'>&lt;p class="intro"&gt;As &lt;a href="http://binnyva.blogspot.com/2006/03/bin-cocom-domain-to-call-my-own.html" class="internal" title="Bin-Co.com - A domain to call my own"&gt;you&lt;/a&gt; may &lt;a href="http://binnyva.blogspot.com/2006/04/my-new-site-openjscom.html" class="internal" title="My New Site - OpenJS.com"&gt;know&lt;/a&gt; already, I have more than one site. When I use my &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;linux system as the development server&lt;/a&gt;, I cannot use two different servers to run the two sites - I use one &lt;strong&gt;&lt;a href="http://binnyva.blogspot.com/2006/06/apache.html" class="internal" title="Apache"&gt;apache server&lt;/a&gt; with virtual hosting&lt;/strong&gt;. This is a very useful site - it enables you to run &lt;strong&gt;multiple sites using just one server&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote cite="http://httpd.apache.org/docs-project/"&gt;
&lt;p&gt;The term Virtual Host refers to the practice of running more than one web site (such as www.company1.com and www.company2.com) on a single machine. Virtual hosts can be "IP-based", meaning that you have a different IP address for every web site, or "name-based", meaning that you have multiple names running on each IP address. The fact that they are running on the same physical server is not apparent to the end user.&lt;/p&gt;
&lt;cite&gt;&lt;a href="http://httpd.apache.org/docs-project/" class="external"&gt;Apache manual&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;

&lt;p&gt;In this post I will show how to create multiple virtual hosts on your server. To keep matters as simple as possible, I will create two virtual hosts - &lt;code&gt;127.0.0.5&lt;/code&gt; and &lt;code&gt;127.0.0.10&lt;/code&gt;. The first will point to the location &lt;code&gt;/var/www/htdocs/binco/&lt;/code&gt;(&lt;a href="http://www.bin-co.com/" class="mypages"&gt;Bin-Co Site&lt;/a&gt;) and the second to &lt;code&gt;/var/www/htdocs/openjs/&lt;/code&gt;(&lt;a href="http://www.openjs.com/" class="mypages"&gt;OpenJS.Com&lt;/a&gt;). The IPs 127.0.0.5 and 127.0.0.10 should be safe to use as they are in the loopback address range(127.*.*.*).&lt;/p&gt;

&lt;p&gt;First &lt;strong&gt;open the apache configuration file&lt;/strong&gt; (usually at /etc/httpd/conf/httpd.conf). Next find the line that says '&lt;code&gt;# Virtual hosts&lt;/code&gt;'. Look at the lines below this line. In my system they are...&lt;/p&gt;

&lt;pre&gt;&amp;lt;VirtualHost *&amp;gt;
  DocumentRoot /var/www/html/
  ServerSignature email
 DirectoryIndex index.php index.html index.htm index.shtml 
  LogLevel debug
  HostNameLookups off
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;

&lt;p&gt;This is the default virtual host. To &lt;strong&gt;add two new virtual hosts, add these lines&lt;/strong&gt; below it...&lt;/p&gt;

&lt;pre&gt;&amp;lt;VirtualHost 127.0.0.5&amp;gt;
 ServerAdmin binny@example.com
 DocumentRoot "/var/www/html/binco"
 DirectoryIndex index.php index.html index.htm index.shtml
 HostNameLookups off
&amp;lt;/VirtualHost&gt;

&amp;lt;VirtualHost 127.0.0.10&amp;gt;
 ServerAdmin binny@example.com
 DocumentRoot "/var/www/html/openjs"
 DirectoryIndex index.php index.html index.htm index.shtml
 HostNameLookups off
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;

&lt;p&gt;This will create the virtual hosts - but as the IPs we have given (127.0.0.5 and 127.0.0.10) will be not recognized by apache and it will try to &lt;strong&gt;do a host name look up everytime apache is started&lt;/strong&gt;. This will take a lot of time(and fail). To disable this 'feature' open the file &lt;code&gt;/etc/hosts&lt;/code&gt; file and add the following lines to the end.&lt;/p&gt;

&lt;pre&gt;127.0.0.5  binco.localdomain binco
127.0.0.10  openjs.localdomain openjs&lt;/pre&gt;

&lt;p&gt;After doing all these steps, you should &lt;strong&gt;restart the server&lt;/strong&gt; with the command &lt;code&gt;service restart httpd&lt;/code&gt;. If everything went as planned, you can open Firefox(or your &lt;a href="http://binnyva.blogspot.com/2006/05/browsers-for-web-development-in-linux.html" class="internal" title="Browsers for Web Development in Linux"&gt;favorite browser&lt;/a&gt;), point it to http://127.0.0.5/ and see your site appear there. Of course, I don't have to say that you will have to use your own directory paths and names on your system.&lt;/p&gt;

&lt;p&gt;The instructions I have given are for &lt;strong&gt;Linux OS running Apache 2&lt;/strong&gt; - if you using a different setup, you may have to do a few thing differently. I have done this in a Windows XP system also - only very small differnce between the two.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115082815570167941?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115082815570167941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115082815570167941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115082815570167941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115082815570167941'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/multiple-site-in-apache-with-virtual.html' title='Multiple Site in Apache with Virtual Hosts'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115048385505809862</id><published>2006-06-17T00:14:00.000+05:30</published><updated>2006-06-17T00:20:55.083+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Apache</title><content type='html'>&lt;p class="intro"&gt;So far, we have covered &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;editors&lt;/a&gt; and &lt;a href="http://binnyva.blogspot.com/2006/05/browsers-for-web-development-in-linux.html" class="internal" title="Browsers for Web Development in Linux"&gt;browsers&lt;/a&gt; in linux. Next we will be looking at one of the flagship products for Open Source Software - &lt;a href="http://httpd.apache.org/" class="external"&gt;Apache&lt;/a&gt;. The web server of choice for most web developers. The 'A' in &lt;acronym title="Linux Apache MySQL Perl/PHP/Python"&gt;LAMP&lt;/acronym&gt;.&lt;/p&gt;

&lt;p&gt;Apache or HTTPD server is most used web server - beating all other servers - even &lt;abbr&gt;IIS&lt;/abbr&gt; from Microsoft. Other web servers available in Linux are...&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://www.lighttpd.net/" class="external"&gt;lightTPD&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;lightTPD is an Open Source web server designed and optimized for high performance environments. With a small memory footprint compared to other bigger servers, effective management of the cpu-load, and advanced feature set (FastCGI, &lt;abbr title="Common Gateway Interface"&gt;CGI&lt;/abbr&gt;, Auth, Output-Compression(deflate, gzip, bzip2), &lt;abbr title="Universal Resource Locator"&gt;URL&lt;/abbr&gt;-Rewriting and many more) LightTPD is the perfect solution for every server that is suffering load problems..&lt;/dd&gt;

&lt;dt&gt;&lt;a href="http://www.aprelium.com/abyssws/" class="external"&gt;Abyss&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Abyss Web Server is a compact web server available for Windows, MacOS X, Linux, and FreeBSD operating systems. Despite its small footprint, it supports HTTP/1.1, dynamic content generation through CGI/FastCGI scripts, ISAPI extensions, native &lt;abbr title="Active Server Pages"&gt;ASP&lt;/abbr&gt;.NET support, Server Side Includes (SSI), custom error pages, password protection, IP address control, anti-leeching, and bandwidth throttling.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Installing Apache is not very hard - just reffer to the &lt;a href="http://httpd.apache.org/docs-project/" class="external" title="Apache Manual"&gt;official apache documentation&lt;/a&gt;. Make sure that you have enabled all the necessary modules while installing apache. There are some very useful modules in apache like &lt;code&gt;mod_rewrite&lt;/code&gt; and &lt;code&gt;mod_deflate&lt;/code&gt;. In most distributions, apache is already available.&lt;/p&gt;

&lt;p&gt;Some useful tricks for Apache in the next post.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/apache" rel="tag"&gt;apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115048385505809862?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115048385505809862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115048385505809862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115048385505809862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115048385505809862'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/apache.html' title='Apache'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-115013526186746699</id><published>2006-06-12T23:19:00.000+05:30</published><updated>2006-06-12T23:42:13.276+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><title type='text'>print() - A Debugging alternative to alert()</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/674/1162/400/alert_print.png" border="0" alt="Screenshot of print() and alert()" /&gt;
&lt;p class="intro"&gt;Debugging JavaScript is a difficult task - made even difficult by the fact the we have to depend on the extremely annoying &lt;code&gt;alert()&lt;/code&gt; function. Don't get me wrong - alert is a god send when debugging small script. The problem with the function is that you have to click the 'OK' button when you output anything - which will become a major problem when you insert an alert function in a loop with, say, a 100 iterations. Before long, you will get &lt;abbr title="Repitive Stress Injury"&gt;RSI&lt;/abbr&gt; by pressing the space bar. See a &lt;a href="http://www.bin-co.com/javascript/examples/print.php" class="mypages" title="Demo of my 'print' function."&gt;Demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Other Tools&lt;/h2&gt;
&lt;p&gt;There are many other tools to debug your scripts including the basic JavaScript Console provided by any good browser(read Firefox), the powerful &lt;a href="http://www.mozilla.org/projects/venkman/" class="external" title="Venkman is a powerful debugger for JavaScript - available with Mozilla"&gt;Venkman&lt;/a&gt; debugger or other other javascript based loggers like &lt;a href="http://www.alistapart.com/articles/jslogging" class="external" title="A javascript logging tool"&gt;fvlogger&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;print()&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;print()&lt;/code&gt; function will just create a window similar to the default alert function &lt;strong&gt;within&lt;/strong&gt; the page. You don't have to press the OK key to continue - unlike &lt;code&gt;alert()&lt;/code&gt; it just displays the debug info - and lets the script continue.&lt;/p&gt;

&lt;p&gt;See it in &lt;a href="http://www.bin-co.com/javascript/examples/print.php" class="mypages" title="Demo of my 'print' function."&gt;action...&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Code&lt;/h2&gt;
&lt;pre&gt;&lt;code class="javascript"&gt;//print() function will just create a window similar to the default alert function within the page.
//Arguments
// txt  - The message that appears in the box.
// title - The title of the box(OPTIONAL)
function print(txt,title) {
 txt = txt.replace(/\n/g,"&amp;lt;br /&amp;gt;");
 if(!title) var title = "Message";
 var template = "&amp;lt;center&amp;gt;&amp;lt;div id='print-msg-box' style='width:60%;border:2px outset #fff;background-color:#C0C0C0;'&amp;gt;"+
  "&amp;lt;div style='background-color:#00f;color:#fff;font-weight:bold;padding-left:5px;'&amp;gt;%TITLE%&amp;lt;/div&amp;gt;"+
  "&amp;lt;div style='padding-left:5px;'&amp;gt;%TEXT%&amp;lt;/div&amp;gt;"+
  "&amp;lt;center&amp;gt;&amp;lt;input type='button' value='    OK    ' onclick='document.getElementById(\"print-msg-box\").style.display=\"none\"' /&amp;gt;&amp;lt;/center&amp;gt;"+
  "&amp;lt;/div&amp;gt;&amp;lt;/center&amp;gt;";

 var to_write = template.replace("%TEXT%",txt);
 var to_write = to_write.replace("%TITLE%",title);

 if(document.getElementById("print-area")) { //If the 'print-area' exists, just write our data into it.
  document.getElementById("print-area").innerHTML = to_write;
 } else { //Else create the element before writing the data.
  var div = document.createElement("div");
  div.setAttribute("id","print-area");
  div.innerHTML = to_write;

  var body = document.getElementsByTagName("body")[0];
     body.insertBefore(div,body.firstChild);
  //OR body.appendChild(div); //This will insert the message box at the end of the page.
 }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Call the function like this...&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;print("Message here");
print("Another Message is here","Title");&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As simple as that. You don't have to add anything to the body area. The script will create a DIV element dynamically. If you want the print function to show up in a specific location, just add a &amp;lt;div id="print-area"&amp;gt;&amp;lt;/div&amp;gt; - the script will detect that and automatically insert the message box there.&lt;/p&gt;

&lt;h2&gt;To Do...&lt;/h2&gt;

&lt;p&gt;To keep the amount of code minimal, I have put all the code together. That is I have mixed appearance, behavior and structure together. I know this is a taboo in Web Development. But this is a debug function - it will not be in the finished product. So I am guessing it to be OK. If any one of you like this script so much so as to use it in your site to display non-debug message, please clean up the code. Separate the style elements from the script and put it in a stylesheet. Let that be a homework for you...&lt;/p&gt;

&lt;p&gt;Also I have not said anything about what this function could do if used with absolute positioning - so with a little imagination you can go a long way with this function.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/javascript" rel="tag"&gt;javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/functions" rel="tag"&gt;functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/debug" rel="tag"&gt;debugging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-115013526186746699?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/115013526186746699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=115013526186746699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115013526186746699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/115013526186746699'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/print-debugging-alternative-to-alert.html' title='print() - A Debugging alternative to alert()'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-114961499792253658</id><published>2006-06-06T22:55:00.000+05:30</published><updated>2006-06-06T22:59:57.946+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><title type='text'>Installing Internet Explorer in Linux</title><content type='html'>&lt;p class="intro"&gt;Although there are many good &lt;a href="http://binnyva.blogspot.com/2006/05/browsers-for-web-development-in-linux.html" class="internal" title="Browsers for Web Development in Linux"&gt;browsers in Linux(like firefox)&lt;/a&gt;, one is forced to use &lt;a href="http://binnyva.blogspot.com/2006/06/problems-in-web-developing-using-linux.html" class="internal" title="Problems in Web Developing using Linux"&gt;&lt;abbr title="Internet Explorer"&gt;IE&lt;/abbr&gt; for testing purposes&lt;/a&gt;. In the last post we talked about various options we have for testing the site in IE. I left one out for this post - installing IE in Linux using &lt;acronym title="WINdows Emulator"&gt;Wine&lt;/acronym&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;advantages&lt;/strong&gt; of this approach is that a lot of &lt;strong&gt;time is saved&lt;/strong&gt; as you don't have to reboot everytime you want to check something in IE. The main &lt;strong&gt;problem&lt;/strong&gt; associated with this solution is that it is &lt;strong&gt;not easy&lt;/strong&gt; to configure and run a non-trivial Windows application using Wine.&lt;/p&gt;

&lt;h2&gt;Manual Installation&lt;/h2&gt;

&lt;p&gt;The first method of doing this is manually. You can do this by...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Wine&lt;/li&gt;
&lt;li&gt;Install the necessary drivers needed for IE(eg. CAB support)&lt;/li&gt;
&lt;li&gt;Install IE using Wine&lt;/li&gt;
&lt;li&gt;Configure IE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the article &lt;a href="http://blog.drinsama.de/erich/en/linux/2006040302-msie-on-linux" class="external"&gt;MSIE 6 on Linux&lt;/a&gt; for more information about using this method.&lt;/p&gt;

&lt;h2&gt;IEs4Linux&lt;/h2&gt;

&lt;p&gt;The whole process is made much more easier by a software called &lt;a href="http://www.tatanka.com.br/ies4linux/index-en.html" class="external"&gt;IEs4Linux&lt;/a&gt;. IEs4Linux is the simpler way to have Microsoft Internet Explorer running on Linux. This software installs everything necessary for running IE on Linux.&lt;/p&gt;

&lt;p&gt;Unfortunately, &lt;strong&gt;I have not yet tried&lt;/strong&gt; any of these methods. I plan to do so - but it will take some time. So don't consider me an authority on this subject. Do your research before deciding whether or not you should install IE on your linux box.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ie" rel="tag"&gt;ie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/wine" rel="tag"&gt;wine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-114961499792253658?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/114961499792253658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=114961499792253658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/114961499792253658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/114961499792253658'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/installing-internet-explorer-in-linux.html' title='Installing Internet Explorer in Linux'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-114935829022823087</id><published>2006-06-03T23:29:00.000+05:30</published><updated>2006-06-03T23:41:30.283+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Problems in Web Developing using Linux</title><content type='html'>&lt;p class="intro"&gt;In the last post of &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal" title="Web Development in Linux"&gt;this series&lt;/a&gt;, I talked about the main &lt;a href="http://binnyva.blogspot.com/2006/05/browsers-for-web-development-in-linux.html" title="Browsers for Web Development in Linux" class="internal"&gt;browsers that can be used in Linux&lt;/a&gt;. This brings us to one of the biggest problems associated with web development in Linux - IE. Internet Explorer. If you want to make it sound really evil, use the full name - Microsoft Internet Explorer. *Shudder*&lt;/p&gt;

&lt;p&gt;&lt;abbr title="Internet Explorer"&gt;IE&lt;/abbr&gt; is the curse that comes with web developing. You cannot ignore it - after all, it is the browser used by 102.7% of your visitors. Most non-trivial CSS or JavaScript will be rendered differently in IE. &lt;strong class="highlight"&gt;Testing in IE is unavoidable.&lt;/strong&gt; This brings us to our problem - you cannot have IE in Linux. This gives us three options to test our site in IE...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;another computer&lt;/strong&gt; with Windows in it to test the site in IE.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;Duel booting&lt;/strong&gt; configuration with some version of Windows along with your Linux OS.&lt;/li&gt;
&lt;li&gt;Install &lt;strong&gt;IE in Linux using &lt;abbr title="WINdows Emulator"&gt;Wine&lt;/abbr&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first option needs no explaining - just another computer. This is the most expensive option - but useable.&lt;/p&gt;

&lt;p&gt;The second option - creating a duel booting setup - is the one I use. I have Windows XP and Fedora Core 3 on my system. I have XP just for the purpose of test my pages in IE(and playing games). Setting up a duel boot configuration in your computer will not be hard - most Linux distributions have a boot manager capable of multiple OSes(&lt;abbr title="GRand Unified Bootloader"&gt;GRUB&lt;/abbr&gt;, &lt;abbr title="LInux LOader"&gt;LILO&lt;/abbr&gt;). I use a &lt;abbr title="eXtended Operating System Loader"&gt;&lt;a href="http://www.xosl.org/" class="external"&gt;XOSL&lt;/a&gt;&lt;/abbr&gt; as my boot loader. I will not be getting into explaining about duel booting - it is a big topic and there are many good Howtos about this topic on the web.&lt;/p&gt;

&lt;p&gt;Let us assume that we have a system with Windows and Linux. To test your site in IE we have two options...&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Make your site and &lt;strong class="highlight"&gt;upload the pages to your online site&lt;/strong&gt;. Then just look at the pages in IE after booting into Windows.&lt;/li&gt;
&lt;li&gt;Configure the Web Server and MySQL server in Windows to &lt;strong class="highlight"&gt;use the same files used by the Linux Servers&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Now, I consider myself as a fairly brave person. But I don't have the kind of courage required to browse the web using a Windows system. So I am abandoning the first option. The second is much more fun.&lt;/p&gt;

&lt;p&gt;I am going to assume that you have keeping all your web documents in the Linux filesystem. The Web site will be stored at, say, '/var/www/html/' and the MySQL database will be stored at '/var/lib/mysql'. The first thing we need is a &lt;strong class="highlight"&gt;program to access the linux filesystem from Windows&lt;/strong&gt;. I use and recommend &lt;a href="http://www.fs-driver.org/" class="external"&gt;IFS Drives&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.fs-driver.org/" class="external"&gt;IFS Drives&lt;/a&gt; will enable you to &lt;strong class="highlight"&gt;map various linux partitions to Windows Drive Letters&lt;/strong&gt;. For example the '/var/home/' could be 'G:' drive. This drive will appear in 'My Computer'. The software is fairly stable(although I have seen some bugs.)&lt;/p&gt;

&lt;p&gt;In my system I have mapped the root directory of Linux - '/' - to the letter 'H:'. So, if I access 'H:/var/www/html/', I get the apache's document root.&lt;/p&gt;

&lt;p&gt;Now we must install all the servers we will need. I do must of my web development using PHP/MySQL on Apache. If you need other languages like Perl, Python or Ruby, you have to install them too. For the sake of convenience I am going to assume that you are using Apache, PHP and MySQL. First we will configure Apache to use the linux document root. Open the '&lt;strong&gt;httpd.conf&lt;/strong&gt;' file in notepad. This file contains all the configuration for the Apache server. It is usually found in the 'conf' folder in the folder where Apache was installed(eg. 'C:/Apache/conf/httpd.conf').&lt;/p&gt;

&lt;p&gt;Once you have opened the file, search and replace the following lines...&lt;/p&gt;

&lt;code&gt;DocumentRoot "C:/some/location"&lt;/code&gt;

&lt;p&gt;Replace it to the location of your document root. For example&lt;/p&gt;

&lt;code&gt;DocumentRoot "H:/var/www/html"&lt;/code&gt; 

&lt;p&gt;Now find this line and do the same for these lines too.&lt;/p&gt;

&lt;code&gt;&amp;lt;Directory "C:/some/location"&amp;gt;&lt;/code&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;code&gt;&amp;lt;Directory "H:/var/www/html"&amp;gt;&lt;/code&gt;

&lt;p&gt;There could be two instance of these line - make sure you change them both.&lt;/p&gt;

&lt;p&gt;Now we need to change the location where the MySQL server stores the database. Open the configuration file for MySQL(usually 'C:/Windows/my.ini'). Find the line...&lt;/p&gt;

&lt;code&gt;datadir=C:/some/location&lt;/code&gt;

&lt;p&gt;and replace it too...&lt;/p&gt;

&lt;code&gt;datadir=H:/var/lib/mysql&lt;/code&gt;

&lt;p&gt;I don't have to tell you that you will have to change the folders to whatever it is in your system. If you have done all things correctly and if Murphy is not up to his old tricks, you can open up the location '&lt;a href="http://localhost/" title="Link may or may not work."&gt;http://localhost/&lt;/a&gt;' in IE and see your site - in Windows.&lt;/p&gt;

&lt;p&gt;Good luck. More on the same topic in the next post.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/linux" rel="tag"&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/ie" rel="tag"&gt;ie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-114935829022823087?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/114935829022823087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=114935829022823087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/114935829022823087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/114935829022823087'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/06/problems-in-web-developing-using-linux.html' title='Problems in Web Developing using Linux'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-114892728533760053</id><published>2006-05-30T01:54:00.000+05:30</published><updated>2006-05-30T00:00:40.376+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Rest from Blogging</title><content type='html'>&lt;p class="intro"&gt;I was not able to blog for the last week - I even had to break my sacred 'at least one post every three days' rule. This was because &lt;strong&gt;I was sick&lt;/strong&gt; - very sick as a matter of fact. I was bedridden for the last one week. Now I am alright - although a bit weak.&lt;/p&gt;

&lt;p&gt;I will be continuing the &lt;a href="http://binnyva.blogspot.com/2006/05/web-development-in-linux.html" class="internal"&gt;Web Development in Linux&lt;/a&gt; series from the next post. I am not creating a serious post now. Although my body is alright, my brain is still unsettled.&lt;/p&gt;

&lt;div class="tag-list"&gt;
&lt;h3&gt;Filed Under...&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/web" rel="tag"&gt;web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/development" rel="tag"&gt;development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/binblog/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13286014-114892728533760053?l=binnyva.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://binnyva.blogspot.com/feeds/114892728533760053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13286014&amp;postID=114892728533760053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/114892728533760053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13286014/posts/default/114892728533760053'/><link rel='alternate' type='text/html' href='http://binnyva.blogspot.com/2006/05/rest-from-blogging.html' title='Rest from Blogging'/><author><name>Binny V A</name><uri>http://www.blogger.com/profile/17219747953793699351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_sOe-_HH8vVU/S6pXjrPmXRI/AAAAAAAAA1s/XssOwqSiukM/S220/binny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13286014.post-114806180468514038</id><published>2006-05-20T02:10:00.000+05:30</published><updated>2006-05-19T23:33:24.703+05:30</updated><category sc
